Posted March 31, 2023 by Dallas J. Haugh
(Warning: minor spoilers for the game.)
This game happened as a bit of a perfect storm; I wasn't really checking Twitter post-Musk until a friend of mine got some angry comments bordering on harassment for an unrelated topic, and I was checking on him. I had followed Dogpit years ago, but kept it in the back of my head. The theme intrigued me, and there were two thoughts that came to mind:
Combine this with a setting that had popped up in my head to answer the problem of my interior designer mom having a very vague idea about participating in #dungeon23 through some magical realist notion of a megadungeon condominium (long story), and Florida Man was the obvious result.
I am disabled, and do not currently have the mental capacity to deal with a full-time job (there's your bog-standard depression and anxiety, but I also have PTSD from probably multiple sources and I am autistic). At least I think. Doing this project seemed like a long-shot, but I had a solid idea in my head of what had to happen. More on that later.
I am also nonbinary. Discovering this fact about two years ago kept me going after an extremely bad traumatic episode, but the unfortunate moral panic that began in earnest soon after has haunted me.
I've lived in Florida all my life, and have literally experienced the effects of a changing climate on the state viscerally. The summers are hotter, it's 90° F in October, the red tide is worse, etc. This isn't a sustainable state to live in, even before the political climate also worsened; in forty years, it might be just... gone. And I am not sure how to deal with that. I knew I'd have to leave at some point, to just survive, but the recent escalation in hate has turned this medium-term problem into a fairly urgent one.
Don't worry too much, though, I think I have people who are willing to help if the situation becomes extremely dangerous. It will just be inevitably hard.
The first choice was how I was going to implement the game engine. There were three options I was seriously considering:
All had advantages and disadvantages, but I went with Pygame, out of simple familiarity and seeing that Godot's paradigm was a little bit of overkill for what I wanted to do. I think this was the correct choice, at least with the time allotted.
A design document was drafted. There were originally six weapons and six consumables, then eight consumables, then I reduced both down to five. There were originally going to be ten (!) floors, but this seemed obviously too much after navigating a single level. Enemies were going to originally throw fireballs occasionally, but I figured that something more deterministic and with fewer states would be more manageable from both a player and developer perspective. A major change was not implementing the ability to auto-defend with certain melee weapons and the pistol instead of the current system of attacks, which is honestly clearer. Otherwise, the game largely followed the design document.
The game's code is all in One Big File, which was a mistake, but my naïve thought process figured that the game wouldn't get too unwieldy (it did). The code is spaghetti nonsense.
I started by working on the gameplay state, which seems logical, until the very end, where it becomes a liability. There is theoretically a distinction between the persistent "Game" and the "Gameplay State", but these were not as well defined as I liked, and some code that should belong to the other class is in the wrong place. This affected my ability to polish towards the end, as well as my ability to implement a save function (sorry about that).
The maze algorithm is a depth-first search one. Connectivity was a problem I noticed, and my "solution" to this was doors, but these were very naively placed. A better algorithm would've analyzed connectivity between cells and placed things based off of that.
The consequence of iterating on a character drawn to the screen moving to a full turn system was that the whole process was a mess, and had unintended consequences for some things.
Line of sight was surprisingly easy due to my chosen restrictions (purely orthogonal looking in the cardinal directions), but enemies appearing without moving in is a known result of a lack of better implementation.
It was late into the process of development that I found out that Pygame's text rendering does not support newlines or word wrap by default! This led to some awkward line break shenanigans.
Assets were surprisingly not a very hard problem. Many thanks to Game Icons for provided the perfect things for a roguelike. (The baseball bat was originally intended to be a more on-brand "golf club", but I couldn't find that asset.) The title screen is a purple-colored version of a public domain image of Tampa.
When I actually developed the game was interesting. While I try to be (somewhat) diurnal, I get up early and fall asleep at like 8:00 PM most days. I really only functioned very well in that early morning period. The Daylight Savings Time switch did not help. This slowed down development, and left me with precious little time to polish.
My emotional state was also a difficult barrier with the development. One day, I went in thinking "I'm going to implement the mobs!", and then I read about Uganda's horrendous anti-LGBTQIA+ bill and had a minor existential crisis over portraying queerphobic-coded enemies as demons due to feeling outrage followed by guilt because these laws are being passed under a context of a colonial legacy and external forces (especially US missionaries) pushing this agenda. I ultimately decided that I needed to focus on my own emotional gut reaction and not be patronizing to something obviously evil, rather than worry too much about things largely outside the context of my experience, but that like messed me up for a good 12 hours.
The messages on the way up are semi-autobiographical (but hopefully not the May 2023 one). There were going to be more, and books were originally going to give game hints and maybe some lore (which is why it is a book, and not, say, a toolbox), but I dropped those to save time.
Overall, I got perhaps the minimum viable product for what I wanted to express with this game out on time, and that's an achievement.
The most obvious thing that I would change if I could go back is to encapsulate things and work top-down. This seems counterintuitive for a game jam, but the result would have been much easier to work with, rather than dealing with a pile of hacks on top of hacks.
The Interact / Pick Up button was redundant, and I could have mapped it to just the Use button when not selecting an item.
The whole process of selecting items and then using or tossing them (as well as the danger of not doing that) could have been communicated better, both on a UI and instructional level.
Average connectivity could have been more of priority, though this will need an extensive rework to balance and playtest.
Making this game theoretically a score attack may have undermined its point as an artistic statement a little bit. The intent was to add some level of strategy by increasing the difficulty by limiting item slots vs. reward, but the game would be a little more elegant if you just collected the One Trinket At The Top rather than lugging around a generic force-placed gem.
Sound effects would have made the game feel much better.
And of course, theming was not as good as it could be. This is supposed to be very Floridian, but only a few things suggest that. A chainsaw and a shuriken almost make sense in that sort of absurd "yes, this is Florida" way, but the holy water, the scroll, and the ankh seem a bit out of place. The game is necessarily abstracted, but I feel like there could have been touches that made it just a tad more on point.
So, where do we go from here? With this as personal as it is, I want to refine and improve it, even though this might take significant effort. A hypothetical strategy is listed below, with the earlier steps listed as perhaps something more important than later ones.
Overall, I am quite glad I participated in the jam, and hope that I will be able to do more in the future with both this, and hypothetical future works. I learned a lot about both creating a game, and my own capabilities.