Skip to content
All posts

3 min read

Why the AI doesn’t write the mystery in Interrogated!

Every suspect in Interrogated! is voiced by a language model running on your own computer. Here is why we never let it decide who did it.

  • Interrogated!
  • AI
  • Game design

Interrogated! is a murder mystery you play with your voice. You walk into a room, sit a suspect down and ask them whatever you like, out loud. They answer in character. No dialogue trees, no list of questions to pick from.

The obvious way to build that is to hand a language model the whole story and let it improvise. We tried variations of it. It is a great way to make a mystery that does not add up.

Models are bad at keeping secrets

Ask a model to play a killer and it will, eventually, tell you it did it. Ask it to keep an alibi straight across forty questions and the alibi drifts. Ask it to invent clues and it invents clues that point nowhere. None of that is the model being broken; it is just not what a model is for. A detective game, though, lives or dies on every fact holding still.

So we split the job in two. Plain, deterministic code decides what happened. The model only decides how a person would say it.

The case comes from a seed

Before anyone says a word, a case generator builds the whole night from a single number. Same seed, same case, every time, which also means we can replay and test any case a player reports.

  • One victim and one killer.
  • Two innocent liars, each with a false alibi and a secret they would rather keep.
  • A witness who was in the room the killer claims to have been in.
  • A framed suspect, and the companion who can clear them.
  • Sometimes a bystander, who simply saw things.

The generator also places the evidence. Every trace you find reads only as what it is, “a pale, powdery smudge”, never whose it is. To learn that, you have to find the one innocent who knows. A contradiction only exists once you have both halves.

killer's alibi    vs  their trace at the scene     (strong, proof)
killer's alibi    vs  witness in the claimed room  (medium)
killer's sighting vs  the framed suspect's companion (breaks the frame)
liar's alibi      vs  their trace elsewhere         (unlocks a secret)
The contradictions a case can hold, from the generator’s own notes

The model never holds the solution

Each suspect gets a character sheet: who they are, how they are feeling, what they want, what they know about tonight and what they keep to themselves. What it does not get is the answer. A liar is not told where they really were. The killer is not told what they did. You cannot talk a model into revealing something it was never given.

Facts a suspect can share are locked behind two keys: pressure, which rises as you push and catch them out, and rapport, which rises when you treat them like a person. When a question touches an unlocked fact, and only then, the prompt carries one short note with it. Everything else stays out, so an ordinary question gets an ordinary answer.

Every extra rule made the model stiffer. Rules the code already enforces are left out of the prompt.

Small tricks that keep it honest

  • Every reply starts with a mood tag, like [suspicious], which picks the portrait you see. If the model forgets the tag, the game reads the mood from the suspect’s state instead.
  • Details a suspect invents about their own life (a sister in Bath, a fondness for orchids) are written down, so they stay consistent after the conversation scrolls out of the model’s memory.
  • A cornered liar must not fall back on the alibi you just broke. Sentences naming the room they claimed are dropped from the history the model sees.
  • All 32 Steam achievements are triggered by game state, never by what the model happens to say, so every one is deterministic and unit-tested.

All of it on your machine

Moonshine turns your voice into text, Gemma 4 thinks for the suspect, and Kokoro speaks the reply, all running locally through LiteRT and sherpa-onnx. The models download once (the language model is about 3.7 GB), and after that the game never needs the internet. Nobody is listening in, and there is no server bill waiting for us if the game does well.

This post is aboutInterrogated!
Read nextA daily Sudoku with no server