Today I have published A Night Walk, the product of the last half a year of independent work. This is a brief reflection on the development process, analysis of mistakes and occasional smart solutions, and an evaluation of the results against the initial goals of the project. The concept was brainstormed over December 2022, and I started active development in early January. Over the five months of irregular work, it took about 180 pure work hours, alongside the already existing academic and personal obligations.
1. The goals
The intention behind the project was to force myself to learn Unity. Until then, I had only ever managed game jam entries and worked with design and narrative, so it felt critical to also get the experience of implementing the features. The goal, then, was to make a publishable project written with Unity Visual Scripting (learning to code from scratch seemed like too big a time commitment). In that, I deem the work a success: obviously, I do not know if it is any good (or if it will even be played by anyone), but it is a functional demo, and it served as an invaluable lesson in all aspects of production.
At the same time, such approach focused much more on delivering some product rather than setting out a specific goal. I had a general outline: a queer protagonist faces off with grotesque depictions of the experiences they face every day, a strange creature gives hints about the bigger picture, and the moon looms above. The whole thing juggled the concept of a monster as a label for what we deem morally ugly: for neither the player nor their hateful adversaries is ‘monster’ essential (although my sympathies are clear), but the real monster is hatefulness itself. As you shall see, this spirit remained at the core of the project. However, on the whole this approach left the game without sufficient direction and without the flexibility to make up for it.
2. Systems and architecture
I decided to emulate the genre and core mechanics of the Mario & Luigi series by AlphaDream: a top-down overworld with interlocutors, interactable objects, and enemies, and a JRPG-style combat where the player counteracts the opponents’ actions and empowers their own with correct and timely inputs.
This creature was drawn in two days, then implemented overnight in an airport hotel.
The primary principle in implementing these features was replicability. The scripts of the dialogue system, the player abilities, and the monsters were all written as generic and modular. Out of four combat actions available to the player and nine to the enemies, there really were about five unique scripts, and the thirteen total options were stitched out of them. Half a dozen unfinished designs would have required little to no new code, only minor adjustments. This I take to be the greatest success of the project, and it allowed me to implement and bug test the second and third unique enemies in half the time of the first one – despite having more sprites and abilities.
The state machine governing the above enemy. Clear Kabbalistic undertones, very tasteful.
The trouble came from the occasional need to alter the older systems for the new purposes. When scripting, I began from what felt easier: the overworld systems were done in the first month, while combat was brewing from February until late May. Then, as I began to design the second overworld level, I wanted to create a special object. It was a speaker (so, using the dialogue script) that would disappear after interaction (the same script as the non-respawning enemies) while also unlocking a new ability (modified save point script). Weeks of work (and often not even game work!) lie between those scripts, and some of them were so bad that I had to overhaul several systems entirely, losing all the benefits of the modular solutions. The obvious takeaway is to from now on comment everything of note and, preferably, keep notes on how things work – alas, this epiphany cost me at least twenty hours across the board.
3. Design and content
The lack of pre-production except for the few weeks of sketching in December led to several difficulties. For one, I had no coherent story – only the themes and the major characters, but not much else. And while that eventually got resolved, the actual dialogue-writing was pushed to the very end. On the gameplay side, I realized that there is not much the player could do in their turn: they had an umbrella, clunky but flexible and complex, and a mini-game of insulting the monsters. Mario and Luigi could at the very least jump at the enemies, but it felt wrong to have my protagonist walk up slowly, cartoonishly wind up their umbrella attack, and then deliver it. The ideas considered were free movement with fighting game-style combos, having the attack happen without coming in contact with the enemy, or even outright cutting all melee. In the end, I caved in and spent a few days on a running animation.
It wasn’t even particularly good animation, but anything is better than sliding both ways.
The ’spells’, the third mode of attack, came very late as a stand-in for the AlphaDream’s ability design. Once again, it was hard to find a thematically appropriate realization, until I came upon the idea of having these represent emotions. This involved a conceptual transformation of the monsters: they no longer were the stand-ins for the hateful people, but now became the experiences. Naturally, certain emotions would make a good weapon against them! But with losing the theme of people-as-monsters I lost another element of coherence. By the time I had to start cutting content and pushing out whatever was left, the game still had no proper story, only this general metaphor for experiences and the Real Monster who now had no strong thematic ties to the rest of the game. To make it really work, I could not afford to cut anything. To make it in a reasonable time, I had to cut something. The decision, in the end, was to stop at what was already done and then package it up nicely.
4. Management and timing
This brings me to the final topic: how the project was managed. The initial plan was to complete it over the second semester, publishing it by June 16th, the last day of graduation. The project is heavily inspired by the atmosphere of my alma mater, University of St Andrews, and the multifaceted feelings of self-doubt and the expectation of conformity were a bit of a theme across the student experiences. After all, I did not give the protagonist’s hair the colours of the trans flag just by accident. The trouble is that I overestimated my own productivity over the semester: even though the four months have been some of my most prolific and efficient, the workload of the final year is not negligible. In May, I nearly switched to full-time development, but about two weeks were cluttered in the unavoidable life matters: moving my belongings, then myself into the other accommodation, making two important trips, four days each, and preparing for the next stage in the academic career.
About a week ago it finally dawned on me that I cannot make it in time. Perhaps there was a way to squeeze myself out and make some amount of content, perhaps even all of the code and art-related elements, but to tie it all together, let alone polish – no. If I wanted to make it in time, I would have had to crunch and end up with a subpar product even by the already low standards of baby’s first Unity game. The alternative was to keep going: delay it by a month and make the content at the same pace of a full-time project. But the graduation was still happening, and my plans for after it are uncertain at best for a number of reasons. A delay meant an even bigger time investment that would once again be disrupted by life, while the time to value proportion of this game was already looking unfavourable.
The creature on the tree has been a sketch since January. I hope to sometime reuse it eslewhere.
So I decided to cut my losses. The game is published with a big ‘DEMO’ in the title. The content is limited to two levels only, with the story unfinished, enemies (even for this level) underdone, and code as buggy as it ever was (not very on my end, but for the players — exceptionally). Once again, an important lesson: not so much about scope as about the value of pre-production. Had I made a complete design and not a draft concept, I would not have had to choose what to keep and what to cut. Had I written the story and dialogues early on, I would not have had to spend half of the final week coming up with the clumsy purple prose for the monster. All that would, of course, have taken its own time – it is about scope after all – but a properly planned project would have suffered less from losing content, and I would not have spent weeks idly thinking to which of the potential designs to devote my development time.
At the same time, as I have said above, I deem the work a success: I did learn quite a bit about Unity, I did learn much more about project management, prototyping, and plainly using tools. Now I am eager to put these lessons to some new use.
Last, but most certainly not least. I wish to thank all the people that have assisted me with their advice and opinion throughout the development process. They are:
Jennifer Harrison (
), , Ulyana Lupin (@metasstar on Twitter), Duncan Kremer and Eli Thayer, and the kind members of t.me/NoCrunch who heard me out whenever Unity refused to do what I needed it to do.Thank you all.