How I made Who Killed the Narrator?
Who Killed the Narrator? is out. It's a short noir comedy point-and-click: Rainport, 1947, and the voice that describes everything has been murdered in the middle of a word. You can play it in the browser or download it for Linux and Windows, name your own price. The trailer is on YouTube.
This post is about how it was made. No spoilers about who did it. The short version is on the project page.
The idea
Adventure games are narrated. You click a lamp and somebody tells you it's a lamp, usually with a joke. I wanted a game where that voice is a character, and then take it away.
So the game has three narrators, one per act. First the original: smug, and mostly right. Then nobody. Then an impostor who sounds just like him, thinks you're wonderful, and lies.
The silent act became the main mechanic. With nobody describing the world, every object is a "?". You look at it and pick the description yourself, and the true one becomes a clue. Clues go in a notebook, where you connect two of them to see what they add up to. The finale is a narration battle, live on air, in the spirit of Monkey Island's insult sword-fighting: the impostor narrates you into a corner, and you correct him with proof.
Why Godot
I compared Godot, a web stack with Phaser, Unity with Adventure Creator, Adventure Game Studio and Visionaire. The genre tools make the usual parts easy, but this game bends the interface itself: descriptions vanish, the narrator changes voice, the player writes the text. Godot gave me full control, runs natively on Fedora, and exports to Linux, Windows and the web. Godot 4.7 it was.
There's no point-and-click framework, so walking, hotspots, inventory, dialogue, the notebook, saves and hints are all hand-built. All the writing lives in JSON files: rooms, items, conversations, the notebook, the story scenes and the hints. Every look line exists three times, once per narrator.
The look
The art is generated locally with Z-Image Turbo (through SwarmUI), on a laptop with an RTX 3070 and later a desktop with an RTX 5070, and then cut up and placed by hand. A few things I learned:
- Rooms are built from parts. A whole room in one render never had the furniture where the player needs to walk. So each room is an empty diorama, plus props rendered one at a time and placed in the editor.
- Props need a low camera. Standard isometric props look tipped up against the rooms. Asking for a camera about 15° above the floor made them sit on it.
- Green screen, matte only. Props render on a chroma-key green and get keyed out. Shiny metal reflects the green and disappears with it, so everything is asked for in matte.
- Fixed seeds keep the cast the same person. Dash, Gus, Lola and the rest were locked to a seed and an outfit, and their blinks and talking mouths are re-renders of that locked image.
- The model won't draw a stride. Not even at high creativity. So Dash's walk is his standing pose with one foot lifted and moved forward under the coat.
On top of that: warm lamplight, venetian-blind shadows, a tilt-shift blur and a grade that makes the rooms look like little toy boxes.
The sound
Every line is voiced, over 600 recordings in all, with Kokoro running locally. Each character was cast by ear from a sheet of candidate voices. Lines are stored by a hash of the voice and the text, so editing a line only re-records that line. The narrators are on the radio, so their voices are band-limited and a little crunchy.
The effects and the music are Stable Audio Open, three takes of each, picked by ear. The rain is muffled when you're indoors. Music and effects dip while somebody talks. Lola's record is run through a filter that makes it sound like a worn 78 on a gramophone, scratch included. And in Rainport, pay attention to the rain.
Testing
A smoke test runs headless and checks the game's logic: over 600 checks, including playing every act through to "The End". A second driver plays the game in a window from the intro to the end and takes a screenshot at every beat. Those screenshots became the store page shots, and the trailer is cut from them with the game's own voices and music.
Built with Claude Code
I wrote and built the game with Claude Code: the GDScript, the tools for the art and sound, the tests, and drafts of the writing that I then rewrote. Every line has had at least a second draft.
What's next
- A check on real Windows and in Firefox. If something breaks for you, please say so in the comments on itch.io.
- An Android version with touch controls: tap to walk and look, hold to back out.
- Dash's second case is in design. It's called The Day It Stopped Raining.
Thanks for playing. If you finish it, I'd love to know which narrator you liked best.