Author’s note: I have been re-publishing some of the things I un-published. I don’t know if it does, but if it gives you notifications like it appears to do, please accept my apologies.
I am writing a quick retrospective of our game Villains but won’t be going too deep, as it has yet to be released or publicly shown.
I was introduced to Mark from FELT ZINE last year through my studio partner Conor, and we had a great many conversations on design, NFTs, dystopian films like Brazil and games we like, like Papers, Please. In the course of these discussions we started a collaboration on a game, named Villains, that was about conveying a certain feeling - locked in your cramped office, working for some unknown three letter agency, you tap away at a computer screen for a task you don’t understand. And, of course, aliens are invading earth.
We envisioned that the entire game could take place in front of a computer terminal, ie the game would be UI heavy. We conceived of your task being to ‘interrogate suspects’, coerce information from them, and then make a decision without really understanding what it means - are they a villain or not?
To begin, Conor mocked up a UI design:
Here you can see we imagine a number of different ‘tabs’ open, overloading the player with information. The design is somewhat retro and futuristic at the same time.
I imagined that an interrogation could work like a ‘battle’, where you make a choice, your opponent responds, and someone ends up a winner. Except, due to the asymmetry of the situation, the only way for your suspect to win would be if they unsettled you, or emotionally affected you in some way.
In order to ‘battle’ with your suspect, you need to make choices, and those choices need to have some level of consequence. As a result, I conceived of a stats system, somewhat similar to something you’d find in a Pokemon game, where the player has up to 4 actions and each suspect has ‘sensitivities’ to these actions. The suspect’s reaction to these actions would be informative to the player, allowing them to make their final decision.
We created a design document mapping the flow of the interrogation:
And I began working on a system that I was very excited about - the procedural generation of suspects, their stats, and their appearances, so that not even we would know if they were ‘villains’ or not.
Here is my first iteration of this interrogation system playing out:
Eventually, with some further work, we ended up with a more solid mockup of the UI and character generation:
It was at this point that we came up with the (in my opinion) cool idea of inserting ‘punch cards’ into the terminal, rather than selecting an option button. This emphasized, I felt, the disconnect you should feel from the suspects you are interviewing them. It also helped codify the weirdness of your task, and helped emphasize that you don’t really understand what you are doing.
I was also able to create a facial generation algorithm from pre-made assets that Conor drew.
From here, we continued to make mostly aesthetic improvements, with me focusing on making the character generator robust. Eventually we ended up with something that looks like this:
And here’s a short side quest where I considered the idea of having a 3D space you actually walk around in so you can truly be ‘in front’ of the computer.
After this we took a break for a while, as life and obligations got in the way. Upon returning, we realized that the systems we had in place for random generation of endless suspects were probably not going to be enough to sustain interest in the player, given the limited scope we had to finish this first iteration of Villains.
As a result, we pivoted to focus on procedural generation of suspect aesthetics, but handwritten material for their actual personalities, stories, and interactions. This meant that we could focus on creating tooling for our client to actually write a story with a dramatic arc, for a 10-15 minute experience with an emotional payoff.
As a result, I moved to shift my scripting away from generating say, 100 suspects on launch, to allowing the client to generate each suspect, one at a time, and sculpt them into story objects - more like pages in a book. To do so, I refactored the code base to maximize the modularity of my Suspect class and transformed them into what Unity calls ‘scriptable objects’ - which are essentially objects that inherit from an abstract class. This meant that the client could create a Suspect within the Unity editor by simply right-clicking in the file system and generating their appearance, while having fine control over their story elements.
It also meant that I could turn this:
Into this:
Ultimately, this proved fruitful to the overall feel of the game. Each suspect feels like a chapter in a larger story, and with having intention behind each of them, I was able to focus on completing more features that allowed for them to tell those stories.
How does it all fit together? You’ll just have to wait and see to find out : )
Here are some lessons learned from this project:
Making a UI based game is very difficult:
It is hard to make a game that takes place on a static screen interesting. Extra effort had to be spent scripting motion and particles to make what you were looking at keep your attention
Due to this, the game probably has more lines of code and complexity than the average game of this scope, meaning an over-extension of technical debt.
That being said, it was a great learning experience, and the knowledge was very useful for other projects I am working on.
Making tooling is a fantastic use of time and resources:
Interestingly, in condensing the scope of this game, we decided to make the simplest possible tool for our client to use and create the greatest depth. By doing so, we actually created the most useful abstraction, cleaned up the code, and introduced a modularity in the design that makes it scalable.
In the future, whether for a client or for myself, I hope to invest more time into creating tooling. I can see now why this is itself a multi-billion dollar industry.
Creating tooling reifies your abstractions - it makes ‘real’ what was previously abstract within code.
Thanks for reading! I hope to make a part 2 if and when Villains sees some publicity. I also hope that I will be able to keep updating it, and taking it further.
I have multiple more game contracts ongoing. Will be writing on the next one soon.
@worldbuilder_us