I created Compute Thought, a short cyberpunk graphic adventure game for #Nar8, a game jam about telling a story. I’m by no means a writer, even after years of working on games, I’ve always focused on gameplay or level design first. This was a good opportunity to try something new. You can play the game on itch.io or check out the source code (C# / Unity) on GitHub.
The opening scene went through many iterations.
Compute Thought is a story about a detective, who investigates the murder of a scientist. Set in a world where humans and androids live together, but prejudice remains. Cyberpunk is an intriguing theme, with movies such as “Blade Runner” or “Ghost in the Shell” to reference for ideas.
The first scene would set the tone of the game, a detective standing over a body. The player would interact with the environment to investigate the death. I wasn’t happy with the style at this point, the result looking different in my mind than rendered on screen. Outdoor cyberpunk environments are often dark and gritty with wet reflective surfaces.
After a few failed attempts, I focused the game on indoor environments only. The player would wake up and familiarize with the point-and-click interface. Then leave the apartment and move to the crime scene. This would have been an action scene, where the detective moves in, gun drawn, and barges in to confront the android. This was all simplified and cut in the last few days to finish the game.
Technical & Code
The fun part was implementing the point-and-click interface, as I enjoy programming in C# the most. When hovering the mouse cursor over the bounds of an object, a copy of the object’s 3D model gets shown. This copy gets generated when the game starts and given an additive shader. The object is then pushed around a bit to create a neat highlight effect.
When clicking on an object, the character will find a path to, and use it. This brings up a dialogue screen. Every dialogue I wrote uses Twine, a great tool for creating nonlinear stories. These get stored in files, assigned to each object in the editor and parsed when the game loads. Choosing a dialogue option loads the next node and options from the Twine dialogue tree. They can include tags too, which I use to trigger events, such as receiving an item or drawing your weapon.
Building a scene in the Unity editor.
Creating a usable computer was something I’ve wanted to do for a long time. It takes keyboard input and plays clicky noises for each keystroke. The input gets checked against an array of available commands. The text gets generated off-screen, then rendered-to-texture on the computer display. It’s a shame I didn’t add more commands, there was support to browse the entire hard drive contents on there. Since it was a last minute feature I added to establish what the victim was working on.
Environment & Characters
I use Blender for creating characters and environments; shaded with Unity’s real-time lighting. A strong directional light acts as the sun, rendered with HDR & bloom effects on the camera. For the skybox, an additive texture outside the windows helps the glow effect. I keep everything simple and flat shaded (except for characters, computer panels and blood to make them stand out).
The computer terminal sits close to the camera in the final scene, to signify its importance.
Modeling and animating the main character were the hardest tasks, since I usually make “cute” things. I’ve never done much character art before; animating a “realistic” human felt like I bit off more than I could chew. A proper walk cycle is one of the most fundamental animations to create, so I went through a few different iterations on there. I wouldn’t say the end result is anywhere near perfect, but it does the job well enough. The character sliding around when moving from idle to walk bothered me more.
On the last day of the game jam, I started testing the game on different computers. Two laptops would render the game too bright on certain resolutions, refusing to render shadows. The visual style of the game was a bit of a “hack”, relying on real-time lighting. Without it, the sun would make the scene over-bright and unappealing. I’ve yet to receive any bug reports of this, though. I’m hopeful my last minute tweaks resolved it on most hardware.
After releasing the game, I received some bug reports of players who couldn’t get past the computer. There was a message above the computer which read “Use Keyboard”, which I’m guessing players were trying to click on. I changed the message to “type using your physical keyboard”. I’ve not received any bug reports since.
I’m satisfied that I was able to create this game in about 2 weeks during my free time. I’ve already written more for this postmortem than dialogue in the game, reminding me that I’ve still much to learn. This was something different than I usually make, in either design, programming or art style. With more time, I would have liked to flesh out the existing features and add more interaction. For a narrative game, it’s weak in this aspect.
This was a nice test run of itch.io, which has been super great. Compute Thought gets played about 8 times a day on average, which is not mind-blowing, but okay for a game jam title. Most likely a lot more than my Ludum Dare #29 game ever did.