Dungeon Crawler Challenge - Post Mortem

posted in kseh's blog for project One Day
Published February 19, 2019
Advertisement

When I had submitted my project for the Dungeon Crawl challenge, it was very late at night. I was able to get everything sufficiently together to complete what was needed but I did want to write up more in the ways of a post mortum.

Last Thursday I found out that we had another day to work on our Dungeon Crawler projects and I was quite releived to hear the news. I was able to get a bit of work done in Friday afternoon which basically amounted to positoning all the critters an items throughout the dungeon and doing a final check that the concluding dialogues came up and the menus looked ok and that sort of thing. The one little thing that I wanted to address in the evening was to ensure that the player would die when he landed in the water, For some reason, when a critter pushed the player into the water he would be fine and had ample oportunity to jump back out and continue on. I was feeling pretty confident I could handle that one little thing in less than an hour or so and then get everything uploaded.

So having settled in to work on another machine, I ran the release build, tried a few quick tests and found assertion after assertion being thrown that I hadn't seen before. What was to be an hour or so of touch ups became four hours of franticly trying to find memory leaks and otherwise trying to stabilize things. The main culprit was from bringing over the class for the snails from an old project. A lot of things had changed with how I handle actors since I used it last and it needed more updating than I realised. Another problem was eventually tracked down to be an out of bounds array issue. A few more tests and I found that things had generally stabilized although I was still getting occasional crashes. I couldn't figure out how to reproduce them though so I just left it.

Quite late at night, I checked through the list of required things and I wasn't entirely sure if I had enough Items in the game. In theory each weapon could count as an item. It might be evident that combat is easier with better weapons but I didn't think the difference between these items doesn't get expressed clearly anytwhere. I realised that I could quickly add an effect to improve the lighting when the player equips the glasses. It made sense as a power up item and seeing it work was quite gratifying.

The dialogue system was something that I've been wanting to show off since WOA IV. I finally had a chance to do so with this project and for the most part it went well. I could add to conversations pretty easily and apply some logic to flow from one bit of text to another depending attributes set either in game or through the dialogue script. There were two problems I found though. The first was that I was unable to allow more than one section of dialogue that presented a choice to the player. The other was that I had never actually worked on being able to have conversations with multiple NPCs. Otherwise, I might've added a character in the lounge that you would have to retreive a flower for or otherwise setup a few other fetch quests. This is probably going to be something that gets some additional work done in the near future.

The combat system... well it's not ideal by any means but I rather liked how it turned out. I haven't done a melee system before so I'm considering this one as one of the thigns that went well. Each weapon has a collision rect associated with it when you attempt to strike and it moves with the hand as a sort of swing. Anything within that rect is considered hit. Some additional work was needed to ensure that a collision with a critter was only registered once but concerned about not having time to sort that out, I just made the weapons collision rects smaller for the lower grade weapons. the result is that it's very difficult to hit anything with a dagger. It was supposed to be that daggers would require 3 hits on an enemy, short swords only 2, and long swords just 1. The ban hammer was going to take out all enemies within a much larger range but I didn't have time to make the necessary changes for that.

The entire project seemed to be a continual exercise in adapting for time available. It surprised me the number of things that I just left as it was so that I could move onto the next. The invisble obstacals that were mentioned for example, some of them have explinations for being there and others don't. I just didn't have time to look into it and generally it seemed a jump would get you out of most situations. Gerneally, leaving things seemes as though it was the right way to proceed as in the end everything had come together sufficiently. But I'll need to be careful about using this project as any kind of base for future work.

As for the future, there's a few things that I'd still like to finish on this project before moving on. But I don't think I'll be working on another challenge for awhile. I have a lot to sort out with my code base before I try something like this again and I'm behind on my project "One Day". It'll be good to get back to that project and when I'm able to wrap that one up I'll be taking everything I learned from it and the past two challenges and applying it to my perpetual, never going to finish it, open world sim. Or some new version of it anyways.

 

4 likes 0 comments

Comments

Rutin

I'm glad you were able to make the deadline. I enjoyed your entry. :) Was the hardest one out of all of them, and I finished it by speed-running tactics. :D  I replied to your forum post showing the completion.

Quote

Anything within that rect is considered hit. Some additional work was needed to ensure that a collision with a critter was only registered once but concerned about not having time to sort that out,

Assuming you're using animation frames or a timer per hit cycle, you can just do this:

#1 -> Weapon Collision Checks against IDs not stored in the Hit Tracker -> If Weapon collides with a Snail then Register one attack -> Store ID for the hit Snail in a hit tracker

When checking for collisions you should only check objects that do not have an ID stored in the Hit Tracker.

Once Timer ends or Animation is on (x) frame to allow another hit cycle then you just purge the IDs in your hit tracker. This will allow you to maintain single hit registrations throughout.

If you have two snails close enough to get hit at the same time but you only want to allow single target per cycle, then you just need to make sure once you cycle through a combat action you don't allow addition hits to be registered until you've ended your hit timer or you're on animation frame (x). Otherwise the above will work for multi-strike.

If you need more help let me know. :) 

Quote

But I don't think I'll be working on another challenge for awhile. 

I hope to see more of your games either way. I'll be closely considering future challenges myself based on what is required and the deadline as I do all the visuals and programming myself. Even though I enjoy the overall experience and making art and coding, it just sucks not meeting the deadlines. I've failed two already, and barely completed the others on time. :D I don't recycle my assets after use for these, or even intend on releasing or working on these projects past the deadline so there isn't much motivation to push forward after as I have bigger projects I'm working on.

Either way, keep us updated on anything you're working on. Great job! :) 

February 19, 2019 11:15 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement