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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "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 ![]() ![]() "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
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 ![]() ![]() "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
DaveW ![]() ![]() "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |
| ||
The story so far Still to do Additional Info Website HackSlashLoot.com Twitter @OddballDave or #hackslashloot DevLog: TIGSource DaveW ![]() ![]() "When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose |