First thing’s first: I didn’t hit the deadline. I didn’t honestly expect to, but it was worth a shot, and I think just considering the project in terms of a deadline helped guide my efforts in the right direction – even if at times I ignored that guide completely. Though the deadline itself wasn’t reached, I think this was probably one of the most productive months I’ve had on the project since I started it.
First on the task list, I needed to make sure every room in the game had a decent background layer. I don’t know if I’ve talked much about background layers, but these are the static elements such as the moon and sea which don’t move with the camera, giving an impression of significant distance. These backgrounds use the same tile system as the tiles within the levels, but each room has the same size and shape background – which, combined with the background naturally being behind all the other layers, made it very difficult to get a sense for how the background would fit into each area and where each background started and ended. I solved this problem by creating a dynamic tilemap which detects which room I’m looking at in the editor, copies its background, frames it with a solid border so I can see its edges, then reflects any changes I make back to that background. Using this lets me very rapidly fly around the map, look at each room, compare backgrounds, copy elements from one to another, and see how they look in place. It took me a day or two to figure all this out and a day or two more to finish building all of the level backgrounds – most assuredly faster than painstakingly placing and testing them would have been, and certain to save more time in the future as well.

Another pressing issue was that I hadn’t actually made any sounds for most of the menu interactions yet. A problem that’s come up a number of times is sounds being cut off when a creature dies, a menu gets deactivated, etc, because the sound player is no longer active. The solution I used for creatures in the game is to simply reattach the sound player to the creature’s corpse when it dies, but obviously this doesn’t apply to menus. For these, I created a single shared sound player, so menus can actually sound good transitioning between one another and I can have big nice dramatic booming sounds for the start of the game without them getting immediately cut off by the menu disabling itself so the game can start.
There are a number of remaining issues with the sound system that I’m going to be addressing in the near future, but were definitely beyond the scope of this deadline. While I am proud of the concept and style of synthesizing all of the sounds in-engine, and I think the ability to subtly change sounds is really interesting, the current implementation of this idea is pretty slapdash, roughly repurposed from an out of date open-source project. The system is inefficient enough that these sounds have to be cached, which means that for the first 30 seconds or so of game-time a lot of the sounds don’t work at all. Furthermore, some of the dynamic sound mutations can accidentally cross a threshold where they become way too loud or last way too long (or just sound weird), and I need more tools to control these outcomes. For these reasons, my next major sub-project is going to be completely rewriting the sound system with a new compute-shader-based synthesis engine and an interface allowing finer control of how sounds can dynamically mutate. This will probably take a while, perhaps a month or two, but I hope to be able to sell the result on the Unity asset store – as well as potentially elsewhere in the future, since a flexible real-time SFX synth built for games might be interesting to a number of developers. Because this is such a major undertaking I’ll probably continue working on other parts of the project as I build it out.
One of the biggest uncertainties hanging over my head was that of the intro sequence. Because this relies on a few illustrations, the composition and quality of these illustrations was a major source of stress in trying to envision what completion would look like. I resolved this problem by realizing this simply wasn’t a very important thing to have done by the deadline! This was especially the case once I added the game’s prologue. Now, “intro” and “prologue” are kind of interchangeable terms, but in this case the intro is a 2 minute scripted sequence that plays in the title screen and the prologue is a 30-second unskippable sequence that plays at the start of the game. The prologue is very vague and surreal and is just as much about setting tone as it is about telling the story directly, but it does set the player up with some (vague, confusing) direction and understanding. With this in place, the absence of the intro is a bit less jarring. Still, I may decide to withhold calling this vertical slice “done” until I can complete the intro as well.
There are some issues present in this version of the prologue that I’d like to address. Unfortunately neither the post-processing effects I’m using or Unity’s tilemap system are set up to work properly when time is frozen, as it is in this scene’s case to keep in-game elements from prematurely activating. It may be that I can simply modify this scene to work with a normal time scale by changing a few things around, but until then the background tiles and glitch effects won’t animate. These post-processing effects being frozen I think really negatively impacts the text legibility, so I’d definitely prefer to get this fixed before calling the prologue done.
A significant amount of time was also spent on writing dialogue for all of the many NPC encounters. I have a very difficult time telling how much time and effort I’m actually expending on this sort of work sometimes: Writing often feels effortless while I’m doing it, but agonizing before and exhausting afterwards. I have a hard time tackling this work because it feels very intimate compared to the relatively mechanical endeavors of a lot of the rest of game development – I feel like I can mess up the character writing in a way that is subtler and more difficult to fix than any of the other mistakes I could make. I have now written dialogue for all of the characters (so far), but before I’m willing to put this project out into the world in any capacity, even as a preview with a limited audience, I’m going to need to read, reread, rereread, and edit all of this talking to make sure that it’s fit for purpose… and that I don’t find it embarrassing.
A big problem that came up in the initial drafts is that I have the characters all basically complaining about how much things suck, reminiscing about how things always kind of sucked, waxing philosophical about the meaning of things sucking, and so forth. This is all fine, but it can’t be all every character talks about! Thus, a lot of the work I’m doing now, going back through what I’ve written, is adding more questions for the player to ask, more insights about what’s immediately important to know to make progress in the game, more concrete and immediate desires and concerns than just vague grousing about the surreal apocalypse of Bound City.

That was the important stuff, the stuff that the deadline really pushed me to confront. I also spent a lot of time doing work that was either lower-priority or completely secondary to the deadline. One of the big ones was a mini-boss encounter I’ve been planning for a while. I won’t go into any of the specifics yet because it’s kind of a surprise boss, but these specifics are less relevant than the changes I made to the basic enemy systems to streamline the process. As I make more enemies and more bosses, I get more opportunities to see the same patterns repeat and to create solutions for recreating common patterns quickly.

One pattern which emerged frequently was that of movement during actions: Most actions either made a creature stand still, move forward at its movement speed, or leap in a particular direction. I abstracted these out into a set of instructions that could be applied to any enemy action, so rather than creating a custom action for turning around and running away I can just use a standard enemy action with a backwards movement instruction. The other pattern which emerged frequently was needing to turn on attack animation/collisions during specific enemy actions – that is, when an enemy attacks they need to create or activate a corresponding attack object to actually deal damage. To achieve this I completely refactored the way enemy actions work to make it so each action actually activates and deactivates as it’s used by an enemy. This is important because it means that I can then set attacks and other secondary effects as children of that action, and then have them perform whatever behaviors are needed on activation. These changes will, I suspect, pay big dividends when it comes to rapidly developing and iterating later enemies – though, of course, I’m going to probably continue to need to create custom actions into the future, since there will always be some specific enemy behaviors that stubbornly refuse to fit into these molds.

The biggest takeaway from this last month though, the real power of the deadline, turned out to be the power of procrastination. Having tasks bearing down on you that you have to get done, tasks that seem intimidating and/or tedious, provides tremendous motivating power to avoid those tasks and work on other parts of the project that are less pressing and more rewarding. Often my go-to task for such situations is music composition – and, surprise, this last month has been a great one for composing music for the game.
The first track came together out of experiments towards trying to make something that sounded similar to a saxophone using NES waveforms. I got something that felt kind of close eventually, and started playing around with it and a piece started to come together – however, over the course of actually composing the piece I ended up stripping away most of that instrument’s unique qualities because I didn’t feel like they were adding much. Luckily, the standard square wave of the NES-chip is pretty easy to get trumpet-like sounds out of, so it still ended up with some of the same brassy quality. From here, I built out the music for the main city center area – an area which I’ve been really struggling to find a sound for, with a lot of abandoned experiments along the way. The long slow sustained backing bass notes are a pretty unusual sound in the NES style since they don’t play so nicely with the other miscellaneous sound effects the sound chip often has to play, but that isn’t a concern with this project so it was fun to dig into that type of sound more.
One of the really fun parts of music composition, particularly as it relates to this project, is that the more tracks I add the more I can add little references to other tracks in each track, making the whole thing feel unified and hinting at connections between areas and story elements (an aspect of the UNDERTALE soundtrack I enjoyed and admired). This track has sections which reference the residential area theme Around the Block and the death theme Standing on the Threshold: Once I added these changes, they also just started implying other tweaks and additions I could integrate to make the whole piece feel more coherent. I’m really happy with how it turned out, though I’m not yet completely sure if the vibe is correct for the area it’s going to be used in.
Not long afterwards, I started expanding a sketch I’d thrown together some time ago that I thought had promise for a more overtly threatening and horrific area/encounter. The horror nature of this project is still important to me, but this sort of constantly-playing retro music doesn’t fit easily into that theme, so I spent an afternoon a while back developing ideas on how one could create discomfort with 8-bit chiptunes. Of course, the tricky part isn’t just discomfort: It’s not difficult to simply put together sounds that are unpleasant to listen to. The tricky part is making it simultaneously uncomfortable/threatening and still musical, still overall aesthetically enjoyable. With all that in mind, I’m quite happy with where this track ended up.
The sliding bass notes create tension, and each segment feels a little off balance, starting and ending just a bit earlier or later than the ear expects. Nothing is strictly discordant, but everything feels just a bit off – though it also bears some resemblance Final Fantasy boss battle music with the chromatic shifting arpeggiated chord, particularly in later sections. I think it works well. This is also the only one of these new tracks that’s actually going to be in the vertical slice, so I had a great excuse to work on it.
Finally, on the last week when I was completely burned out on trying to finish this deadline, I wrote another completely unnecessary piece for a later section of the game. Originally this was intended to be for the cathedral zone, and you can still hear bits of that in the chamber-music-style arpeggiation, but the way it was coming together made me decide it would actually work better for the hospital area – particularly the high droning triangle-wave beep, implying something like a heart monitor. This also shows an expansion of the long slow bass approach used in Bound Together, where I built entire chords and sustained them – something extremely atypical of retro game music since they couldn’t generally sustain that many sound channels. Technically I think this track would still be possible with the expanded sound-chips that later NES games used, but it creates a much more modern electronic music sound, and starts to chip away at that chiptune aesthetic facade.
As with Bound Together, this has references to the death theme Standing on the Threshold. Though this track is no longer intended for the cathedral area, I’ll probably pull a lot of its themes back into that area’s music to tie them more closely conceptually together. One of the reasons I turn back to music composition when I get burned out on working on other parts of the project is because I find establishing the tone and style of later areas really exciting. I can’t wait, now, to start building the city and hospital sections to actually work with these themes, try to expand on the mood to create a cohesive experience. Crafting the music gives me a little insight into what the future shape of the project will be, gives me a bit more concrete of a dream to strive for – and, incidentally, gives me something to listen to while I work on it, which is also nice.
So that was August. Where, then, does the project stand in terms of reaching the deadline I set last month? Of the supposedly required tasks mentioned in the last update, all except for the intro are now done – sort of. Many of the polish and scripting fixes are in place but are untested: It will probably take several days of play-testing before I can call them done. Similarly, while all characters have lines written now, I’m going to need a few days of rewrites and edits and of testing them in place to make sure they fit properly in the dialogue boxes before I’m comfortable calling the dialogue final.
Of the nice-to-haves mentioned afterwards, the big success stories are the mini-boss and additional music. The death illustrations are probably something I’ll push later to experiment with in the future, the giant flea is probably not much work but isn’t immediately necessary to make the project feel robust, and the polish/improvement stuff is ongoing and will probably happen alongside the aforementioned dialogue and scripting play-tests. I would like to add something in terms of in-game documents (newspapers, signs, books, and so forth) and something for the special scripted sequence I keep hinting at, but neither of these need to be robust yet.
So, what’s left?
- Dialogue edits/improvements
- Extensive playtesting for quality and fixes
- Special scripted sequence
- In-game texts
- Maybe the intro sequence
With the possible exception of playtesting/fixes and the intro sequence which can wait, I don’t think any of these will take more than a few days to do, so completion of part 1 may be achievable within a week or two. At the same time, this is dependent on both my ability to maintain focus and not finding anything new that feels urgent to immediately complete, neither of which are necessarily reliable. Rather than moving the deadline to two-weeks from now or something, I’m going to shift my focus from getting it done to getting comfortable with the idea of done-ness – that is, I need to accept that whatever version of this chapter 1 ends up being, it’s inevitably not going to live up to my highest aspirations for what the project can be. In some cases, that’s stuff that I can tweak and polish as the project as a whole gets developed – and in some cases it’s simply that the finished work can never complete with the dream of what the work could have been, the impossibly expressive imagined form of a completely unified idea.
If you’d like to help support this project or my writing, please consider supporting me on Patreon.