Posted March 12, 2023 by Aviv
We made it to the end! I managed to finish sort-of early (about 7 hours before the deadline, which was 11pm my time), but when I woke the day after (6am) I saw that there was some kind of problem with Windows users playing my game, so I was working on a fix for that all the way up to the end of my allotted time (and slightly after). Anyway, let’s see what we managed:
Derived Stats - The combat system wasn’t fully utilizing entity combat stats (ATK and DEF are derived from the STR and DEF values currently). I had to fix this twice: first time, we just weren’t using DEX at all. And then we were actually using the aggressor’s DEX instead (oops!). All done now.
I took a while (arguably too long) with setting up the title screen and cover image to look good (I was expecting to have an errand to run so I was doing a light task before that). There was also a lot of itch-page set up in this time, so it would be ready, without me rushing at the end. I think it looks quite good. This game has more inputs than any I’ve made before, so the control listing is inelegant, but that’s fine. I like the little block of flavor text and game description, I think it does the game justice.
More oaths: I tried to come up with a few extra oaths to keep things interesting, as well as the boons mattering, at least a bit. There’s a lot of untapped potential here, I just didn’t get time to express all my ideas. Possibly an extension piece, if I feel inclined.
I added a starter room which generates the same every time: I wanted the player a little grace period where they could get used to the controls. In my mind, it represents the basement of the temple you’re delving under. It doesn’t spawn any enemies, but it makes sure you can move, descend, and it introduces the “altar” to you so you can pray if you want.
At this point, I received a soundtrack from the musician friend I mentioned in my previous post, and it sounds incredible. Very happy with how that turned out. It really adds to the experience.
I did some tactical planning to decide what would come next and I decided that to make the game playable, I needed more items to cover a progression into the dungeon, so now there are “tiers” of equipment. I had to rebalance things too, because I decided that you should start with some equipment as well, and that changed the base assumptions of the system.
Next, things are set up so you’re assigned some oaths at the beginning of the game (sadly these are only seen in the log and the character viewer). There wasn’t time to explain each oath, although I like the idea of letting folks figure out what they mean on their own.
Since I added audio, it seemed prudent to add a mute and volume control, just in case.
I really wanted this game to be a complete experience for once, so in my tactical planning, I needed a boss fight and some sort of story. It was at this point that I stopped caring about code quality and went for code efficiency!
With the details of the boss polished up, I had one last thing I really needed to do: Weighted item distribution. For most of the development, items were placed randomly, but that meant you could receive end-game equipment at the start of the game, and also get a lot of duplicates. I wanted to prevent that. So when a generator is making a floor and it wants to place an item, it accesses a weighted probability table for that floors “gear tier”, and then rolls on it to decide what to place. This gives a ton of control over the game experience.
I basically downed tools at this point because the game was done. I did squeeze in a small controls “help hint” display, but it’s not very comprehensive.
Finally, I had to contend with that engine bug. It turns out, when DOME tries to resize a window to be larger than the display can handle, Windows just makes it go fullscreen (but it doesn’t resize the renderer viewport) so you lose a bunch of the view, and you can’t quit. I managed to hack in a small fix so that if you try exceeding the display, it’ll max out at your display size, but it’s not up to my usual mergable quality right now.
After the jam time ended, I exposed a couple options via a config.json file so that someone could also adjust window settings themselves if needed.
These are my pretty immediately “post-event” thoughts. I don’t know that I’ll be able to reflect fully until I’ve decompressed for a few days. We’ll see how it goes.
I patterned my approach on previous attempts. A big design document got written upfront to dump my ideas into, and then a day-by-day plan.
Because of the engine rewrite, I decided to follow the Roguelike Tutorial series and apply it as a roadmap to my code. I under-estimated how long following it would take, but it did leave me with a robust base to work from for my own design, so it was worth it. And it’s in a state that I could probably pick up and use in future 7DRLs (if I remember to polish it slightly before then)
No plan escapes contact with the enemy however, so I was re-prioritising pretty often, especially as I didn’t have a lot of time during the week to make stuff happen due to personal obligations. It’s hard to plan for that, but I am happy I could carve out the time to do this.
I wish I’d dumped a few more of my ideas into the documentation: At the end I was scrambling a bit creatively because I hadn’t written down some of my more idle design thoughts. This event also posed a new challenge, as mentioned above: Boss fights.
I’ve never made a boss before, so I had to do some research and get some advice on how to approach that. Big thanks to Matt Hackett, Joe Daywalt and James A for their opinions on boss design over on the Valadria discord.
The last technique I used, and I need to use more, is harsh-timeboxing. Because I had a lot of bitty tasks to do on Day 6, I set myself short time-limits for each one, between 20 and 40 minutes depending on the task. This was good for preventing some creep in scope and time wastage. It doesn’t work for everything, but it really helped me focus.
Re-writing the bulk of my game framework Parcel immediately before the jam was both a good and a bad idea:
That said, I really like the way this framework has performed. There’s a few rough edges on the UI side, but overall it felt extensible and the system didn’t fight me very much for enhancement. Nice!
I’m really proud of the output from this event. It’s a complete game. Playable from start to finish, with some sense of progression, a mild story supported within the game and at least some tactical depth. The “experience” you’d expect of a game is complete, if limited, and that’s huge.
Some rest, and getting back to life at large. It would be nice to come back in a few days to add to this game, but finding the motivation to do that after 7DRL has always been hard. We’ll see.
I would’ve thought that would be obvious. It’s time to take your pledge, and descend.