Worklog for Oddball
Hack, Slash, Loot
Return to Worklogs
| ||
The biggest addition, and also the most requested feature in testing,
is that the game now saves on exit. Testers would press escape thinking
it had a function other than instant quit and would as a result lose
their game. Now the game is saved exactly as you left it and no matter
how you exited the game. The code for this is a little unrefined at the
moment as I just dump the whole game memory to file and restore it when
the app is restarted, but I'll clean it all up after I'm satisfied it's
working properly in all situations. I've managed to rope the talented Jack Menhorn in to do the music. Surprisingly there was a lot of interest from composers wanting to add their talents to the game, but as soon as Jack showed an interest I signed him up. With Jack on board I thought it was time to finalise the music player. It was pretty much complete, but it needed better transitions when one track interrupts another and other minor changes. It's all around a more solid piece of code now. One issue flagged up in testing was that players were still sometimes accidentally clicking the wrong tile when trying to attack monsters. This popped up last time as well, and I thought I'd solved it by making spaces with monsters in 'attract' the cursor. This obviously wasn't enough so I decided to finally put this problem to bed with a couple of major additions. The first is a floor grid. You can now, if you wish, have a grid overlaid on to the floor to show you beyond all doubt where each tile is. The second is a magnifier. You can now zoom the gameplay area in or out so everything is much easier to click and see. You can also use it to zoom out and see the whole level on the screen all at once. And finally I made it easier to find and use the full screen option. Some of the testers didn't understand that increasing the window size would eventually make the game go into full screen so now you can also use the shortcuts [cmd+F] or [F11]. There have also been plenty of more minor additions. Dungeon shapes are now implemented. These are the overall shape of the dungeon, its outline if you will. This means dungeon levels can be massive and sprawling or small and compact, as well as different shapes such as a round wizard's tower or skull shaped castle. The item preview now shows if the item is raising or lowering stats by colouring them green or red. I've nerfed swift items. originally items with swiftness just wouldn't have any other bonuses and so the thinking was that taking up a slot was their downside. It seems like that wasn't enough so now all items with swiftness will also contain some form of curse/penalty. Hopefully that will balance it. And finally I've added level feelings when something special or unusual is present on the level. I may also add a level difficulty indicator to this as well, but I just need a reliable way to calculate a level's difficulty. Website HackSlashLoot.com Twitter @OddballDave DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
Added the enchantment name generator. Before all enchanted items were
simply labeled enchanted, but this addition gives enchanted items a
richer set of names. This is only superficial and has no real game
effect. It's also a little sparse at the moment, but there'll be plenty
of time to flesh it out later. I only wanted to get the code in and
working for now. I finally succumbed and added keyboard controls. Standard roguelike keys(yuck!) are supported as well as numpad and cursor keys. The only things that don't have keybindings yet are the game options and title screen. If I was making this game just for myself I wouldn't have bothered with keyboard controls as HSL is designed to be played with the mouse, but I understand that others prefer keys. Also some of the testers wanted to use a mix of keys for movement, and mouse for targeting. Website HackSlashLoot.com Twitter @OddballDave DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
I've actually been doing a lot of bug fixing and optimisation this
week. Not really had a lot of bugs to fix during development so far, but
as it is becoming a much larger, and complex, beast they have started
to creep in. I have had time for a few new features though. The most requested feature from testing was to be able to select your character. This is now in, as is selecting the quest you wish to embark on. When finished there will be three characters available from the start with the others becoming available depending upon the number of times you have died. These 'unlockable' characters are more powerful than the original three so having their availability dependant upon the amount of times you die seems the sensible way to do things. As I mentioned in my last log tile spaces can now contain more than one item. This presented a problem as it was difficult to tell when a space had more than one item in it. I have solved this by having the items expand into a stack when you hover the cursor over the tile. I am also contemplating having monsters drop there entire inventory instead of just the one item as it now. This may become annoying for the player though as there'll be a lot more item shuffling involved. I'll probably try it and see how it feels. Artifacts are now retainable from game to game. Each quest will contain one or more artifacts. These items are more powerful or unusual than enchanted items, and after being found once they will be included(randomly) in your inventory for other quests. Artifacts won't be dropped by ordinary monsters they will be reserved for bosses and the like. Finally I finished adding the secondary effects for the special damage types. I may add some more, but I'll wait to see if inspiration hits. Either way I'm more than happy with the current ones. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
Been working on HSL a lot this week so I've split this post into two
sections. If your not interested in what testing taught me skip to the
second part. It was a testing time... So the response to my call for testers was phenomenal. Got tons of useful feedback, and I've been working through the points raised all week. I'd like to share some observations from the testing process if nobody minds. It's a scary world I was extremely nervous about showing the game off to complete strangers as I had no idea what the reaction would be. I needn't have worried the general mood from the testers was a positive one. I'm stupid, but I already knew that One thing I was certain would happen was that I would have missed some really obvious issue, and sure enough there were a few slap my forehead moments when the responses came in. As I work on the game almost every day I'm extremely familiar with the game and therefore have no perspective as a new comer to the game. This was one of the most useful aspects of the testing, and I appreciated that a few of the testers tried the game without reading the 'How to' guide first. Carrot before stick Feedback that started with the positives felt more constructive than feedback that had the negatives first. I know that both styles are just as useful as each other but the beginning set the tone for the rest of the feedback. This is something that I will certainly be more mindful of in future when I give feedback to others. You can't please everyone This is important to remember. A lot of the feedback I got was contradictory, one person thought some part was good, another would think it was bad. An important aspect of sorting through the feedback was assessing what was due to personal taste and what was due to a design issue. Getting noticed Twitter was great for recruiting testers, and I was helped by the 2 Girls 1 Game preview. Next time I may consider using other social networking or tech solutions that allow for better two-way dialog with testers. The new 'distressed' GUI and the 'tool tip' styled hint at the bottom And the result I did actually work on the game a little too. The biggest change is that each tile can now contain more than one item. My original intention was to keep the game simplified, and one item per tile seemed like a good way to keep it that way. Enough people found this frustrating to warrant a rethink. The most compelling argument was having a potion dropped but then killing a monster over it and having the potion obliterated by the newly dropped item. This unfairly punishes the player for killing two monsters. I added some of the damage secondary effects. Each damage type(fire,lightning,etc) has a secondary effect if you deal that damage and/or are resistant to it. I'm keeping these effects undocumented so the player can discover them as they play. Although when a secondary effect is triggered it is noted in the turn log so as not to confuse the player as to why it happened. For those who don't mind spoilers here's a taster *SPOILER*Life Steal(Necrotic) killing a monster with necrotic damage will steal some of the life force giving the player a health boost.*SPOILER* The other additions are all to do with usability. This was a key focus of testing and helped tremendously. I now have 'tool tip' style hints when hovering the mouse over stats and icons. As the name suggests hints give the player a sense of what each thing means without going into detail. They are aimed at the player who doesn't like to read help files, or needs their memory jogging. The tile cursor got a revamp meaning it is now more obvious when a feature is usable. Also you can now hover the cursor over an item to see how it would affect you stats. Creatures on the minimap now flash to distinguish them from other elements. Finally there have been other minor graphical and layout changes. Most notable of which is the new icons for swift and shadeform. Well shadeform still uses the same icon, but now it pulses in time with the player. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
Been working exclusively on sound this week. The sound effects are
procedurally generated at runtime using Brucey's wrapping of DrPetter's
sfxr code. That means no two sword hits(or footfalls, or bow twangs,
etc) sound the same. The sound generation code is all in, but not all
the sound effect profiles are done yet. The music code is in too, but
I'm just using placeholder tracks now. Music isn't going to be a major
feature of the game, but I do want to use it as a cue for various game
states and situations. And finally volume control is all done. Also Overlord Ror from 2 Girls 1 Game has been giving the game a try and has posted a preview of what she thinks of it so far. Website HackSlashLoot.com Twitter @OddballDave DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
Gameplay video: http://www.youtube.com/watch?v=yAHtHOewJJY Website HackSlashLoot.com Twitter @OddballDave DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
I decided it was time to rework the enemy AI to make the enemies
tactics a little less predictable. I ripped out the old code and rewrote
it from scratch, and it's turned out great. The enemy's behaviour is
formulated based upon three elements, the creature's intelligence, the
creature's combat prowess, and the current situation. There are four levels of creature intelligence, none/animal, dumb/bloodlust, normal, and smart. - None/animal is for animals, like giant rats, or creature with no intelligence at all, like zombies and golems. Creatures with this intelligence will usual charge when attacked or threatened. - Dumb/bloodlust is for unintelligent monsters, like Trolls, or bloodthirsty creatures, like barbarians. Dumb isn't much of a step up from none, but dumb monsters will alert comrades and formulate tactics with them, like cutting of the players retreat. - Normal is the most common intellect level which most enemies will have. Normal has a far greater range of tactics, and can even decide to pickup objects from fallen comrades if it will improve their situation. Other tactics are hanging back and using ranged weapons, or retreating to gather more help. - Smart is reserved for the most intelligent characters you'll encounter, mainly bosses and their kind. It isn't much different to normal, but those small variances make all the difference. Smart monsters are more interested in self preservation than the others and will order comrades to wear down the player before endangering themselves. The creature's combat prowess is based upon its skill when compared to the player. Enemies weaker than the player are more likely to hesitate, hang back or even retreat. Whereas monsters stronger than the player will be braver and more likely to engage the player quickly, even if that means the player will get the first strike. The final aspect, situation, is based solely on the situation the player and enemies find themselves in at that moment in time. For example a cornered enemy isn't going to hang back when faced with a player armed with a bow, he'd just be pelted with arrows. He's more likely to charge the player. Using these three factors the enemy have a rich arsenal of behaviours that throw up some interesting combats. Here's a few examples from my testing, two goblins with normal intelligence aided by two giant rats with animal intellect. One goblin sports a bow so he hung back and laid down covering fire, the other equipped with a longsword hung back just long enough to let the two giant rats take the first few hits before joining the fray. Another example, I opened a door to reveal a goblin rager, with bloodlust, who immediately charged at me. I wasn't too worried as I easily outmatched him, but unbeknownst to me he had alerted an unarmed hobgoblin, normal intellect, who wasn't in my view. The fight with the rager only lasted a couple of turns but in that time the hobgoblin had managed to alert more enemies to my presence. Before I realised what had happened there where now about ten enemies bearing down on me and my situation needless to say had become hopeless. Wow! That turned into a wall of text. As you can probably gather I'm quite pleased with how the enemy AI worked out. In other news I've also been working on the visual queues for the various actions characters can perform. Attack animations have been in for a while, but other things like, item pick ups, drinking potions, etc. had no visual queue to show they had happened. They're not all in yet but I've got most of it done. I've been trying to avoid using particle effects for any of it, but some of my visual effects aren't up to standard so I my have to relent and have a bespoke few particle effects. Next I might have a go at sound, although I haven't even considered what I'm going to do for music yet. Website HackSlashLoot.com Twitter @OddballDave DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
The big addition since my last log is a dynamic asset loader, which can
handle realtime alterations to the games resources. The realtime aspect
won't really come into play outside of my testing, but does mean the
game is more than capable of handling post release asset updates,
additions and changes. This also nails down the games file
structure/handling ready for creating releasable versions for testing.
The other changes to the game are mainly internal optimisations and
general code tidying. On the subject of releasing a test build, the first round of testing will probably be organised through my Twitter account(@OddballDave), so keep an eye out there if you're interested in getting in on the the first public build. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
I actually finished magic/special item gen the other day but personal
stuff stopped me posting a devlog entry. I'm very happy with the
results, getting a pair of winged boots that speeded up my character was
one highlight. Another was when I found a magical pork chop in a
barrel, I don't remember what it did when I ate it but who cares what it
did it was a magical pork chop!!! The gameplay is almost feature
complete now. I just have one more feature to add then I'll be moving
onto content and add all those lovely bells and whistle. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
I feel like I've finally got a system I like for the procedural item
generator. The old version felt too random and was easily identifiable
as a random algorithm. The new version is much more discrete, and makes
much better choices when allocating magic/special items. I've achieved
this by using a tagging system. Anything that request an item from the
generator will pass a set of 'tags' with the request. Some of the tags
are auto-generated and some are specified by the dungeon theme. These
tags tell the generator preferable item properties. When the generator
needs to make a choice during the creation process it first checks the
tags for any preferred properties and then favours those choices over
the others. An example might be when a weapon is needed for the wizard
to wield the 'magicuser' tag will be used, the generator now knows to
remove any options that a wizard cannot use. The tags are extremely
versatile and can be used for a wide variety of filtering, not just for
character class. There are ~100 recognised tags at the moment and I'm
far from finished, I'd say the item generator is about 50% done. I did get a little sidetracked whilst figuring out the item generator, and added some extra gameplay features that I hadn't originally planned for. Hopefully this isn't the start of feature creep and I can stay focused now that I have a better idea of the direction I'm going. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
I was supposed to be working on the magic/special item generation, but I
didn't like how it was turning out so I've put that on the back burner
whilst I think how best to implement it. I did however work on queueing
the players actions so that the player can get things done with the
fewest amount of clicks possible. Now you can click on anywhere you've
been and if it's still accessible then your man will make his own way
there. This means if you find yourself having to backtrack it's much
less of a chore. As the game works with a limited/small viewport I've
also allowed for the player to click on the minimap to achieve the same
effect. The queued events are interrupted if a new monster appears or if
the player is attacked. DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
This has been in development for a little while, and the few people who follow me on Twitter may have already seen some teasing screenshots already. But now I thought it was time to start a DevLog as I really start to ramp up development on this. The story so far The basic engine is in. Player and enemy movement is all working. Combat runs smoothly, if a little uneven at the moment. Level generation is working better than I'd hoped. Dungeons are created and populated with monsters features and items. I wanted level gen. to look like it could have been done by a human level designer, and for the most part things look so. There are only the occasional 'why is it like that?!' moment, but plenty of 'that looks fitting' moments. Most of the interface elements are in, the only missing ones are the sound related stuff. My aim is to have masses of content, so much in fact that most will never see all of it. I want players to mention something cool they saw in the game to other players and have the other players response be 'I've never seen one of those whenever I've played'. This may be too much of an undertaking so it's more of a 'shoot for the moon' goal. The content currently stands at 125 dungeon features, 85 monsters, and 46 items in the first dungeon theme, although that should increase dramatical before I'm finished. And that brings me to another aspect of the game, dungeon themes. Each dungeon will have a coherent theme which should mean that you will not get out of place monsters, items or features on any play through. I'm not sure how many dungeon themes I'm going for but I already have a lot of ideas so again this will be as many as I can. Still to do There is loads still to do, hence the 20% icon at the top. The game is still missing the whole front end, currently it goes straight into the game. There is no sound at all, I'll probably do that last, and look to getting someone in to do the music. There is very little in the way of effects in there, so there's still lots more visual punch is to come. Additional Info Website HackSlashLoot.com Twitter @OddballDave or #hackslashloot DevLog: TIGSource DaveW PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod] "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |