policesquadquest/README.md
type-two 104cedbc2f Case Eleven: What He Wrote — the grandfather arc closes the loop
Nine cases playable, all lint clean, all verified end-to-end.

A records-modernisation project puts sixty-seven years of paper through a
scanner, and Frank Drebin Jr becomes the first person ever to read one of his
grandfather's reports. Page nine of the Meridian Street file sets out the
survey, the recommendation, the transfer and both signatures, in the same flat
careful voice as everything else. He put it all in. He put all of it in. Page
ten is the property schedule, because there was never going to be an
explanation — to the man who typed it there was nothing there to explain.

The palette drifts backwards through the case: room 0 is Act III cold blue, the
basement is nearly all grey, the last rooms are 1958 monochrome, and every 1958
prop is generated mono so it reads as lit by a different decade — the owl trick
from Case Ten extended across a whole case. Ninety-one-year-old Stanley
Kowalczyk, the rookie from Act Zero, is the only warm-coloured thing in it,
because he is the last living link and he has had his commendation on a wall for
sixty-seven years, next to a note telling a night clerk to be at his sister's.

Under the third floorboard at 1114 Delaware: nineteen tins, 1939 to 1958, every
one full, not one ever opened, with an inventory on top in a flat careful hand
headed PROPERTY — NOT YET SUBMITTED. He never spent any of it. It was never for
anything.

Jr does the only thing a Drebin can do with a true fact. Eleven pages, every
sentence true, submitted at 3:14 in the morning — and the portal thanks him and
asks him to rate his experience with the records modernisation portal today. He
rates it honestly, because he is constitutionally incapable of anything else,
and leaves a four-hundred-word comment, and nobody reads it. The cycle is the
punchline and the punchline is the tragedy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:54:11 +10:00

5.1 KiB

Police Squad Quest

A Sierra-style adventure game set in the Police Squad! / Naked Gun universe, built on the MRPGI engine (~/Documents/MRPGI) — which is itself a reimplementation of AGI, the engine Sierra shipped Police Quest on.

The game grades you on correct police procedure with a completely straight face. The reward for perfect procedure is catastrophe anyway.

  • RESEARCH.md — the source material: all six Police Squad! episodes, all four films, the recurring cast, and the ZAZ comedy grammar.
  • DESIGN.md — the game bible: the joke engine, the two Drebins, the eleven-case campaign, and how it all maps onto MRPGI data.

Play

./play.sh

That lists the cases and asks which one. ./play.sh 07 jumps straight to one.

Or directly:

cargo run -p mrpgi --manifest-path ~/Documents/MRPGI/Cargo.toml -- --game cases/case-01-substantial-gift

Tab switches between play and the room editor. Type help in play.

What's here

cases/case-00-1958/ Act Zero — playable, 100 points. Frank Drebin Sr, 1958, hard noir mono. Five rooms. Played completely straight; the score is the cover-up.
cases/case-00b-the-quartet/ Act Zero crossover — playable, 100 points. Drebin Sr vs. five Ealing-comedy incompetents. Five rooms.
cases/case-01-substantial-gift/ Case One — playable, 100 points. Drebin (Nielsen), 1982, monochrome. Five rooms.
cases/case-06-testimony-of-evil/ Case Six — playable, 100 points. Drebin (Nielsen), 1982, monochrome. Five rooms, the whiskey exploit, four deaths.
cases/case-07-from-the-files/ Case Seven — playable, 100 points. Drebin (Nielsen), 1988, full colour. Six rooms, the Anaheim Stadium finale.
cases/case-02-ring-of-fear/ Case Two — playable, 100 points. Drebin (Nielsen), 1982, monochrome. Five rooms, undercover, three deaths.
cases/case-10-plot-device/ Case Ten — playable, 100 points. Drebin Jr (Neeson), 2025, cold palette. Six rooms, the arena finale and the owl.
cases/case-08-smell-of-fear/ Case Eight — playable, 100 points. Drebin (Nielsen), 1991, full colour. Five rooms, the memory test.
cases/case-11-what-he-wrote/ Case Eleven — playable, 100 points. Drebin Jr reads his grandfather's files. Five rooms; the palette drifts from 2025 back to 1958.
tools/sprites.py Generates every sprite on the MODELBEAST farm (free, local).
tools/lint.py Checks every case for the authoring traps that have bitten us. Run it before playtesting.
RESEARCH.md / DESIGN.md Source research and the campaign bible.

Case One — A Substantial Gift

Police Squad! episode 1. A credit union manager is dead, the wrong man is in a cell, and the teller has new braces.

Sign out your badge and sidearm (the door will not let you leave without them), get briefed, tip Johnny, dust the counter, match the print, find the bill, and Mirandize the suspect in the correct order. Get the order wrong and the statement is suppressed, which is a Sierra death card, which is the joke.

Case Seven — From the Files

The Naked Gun (1988). Nordberg is shot on Ludwig's freighter, you tackle a head of state at a state reception, and you get fired — which is the only way forward, because a private citizen can't walk onto a baseball field but an umpire can walk anywhere.

The climax: you are the home plate umpire at Anaheim Stadium with no power to search anyone, so every frisk needs an umpire-legitimate pretext — brush the plate, inspect the mitt, check the bat for pine tar — until you reach Number 44. Announce yourself as police instead and sixty thousand people come over the railings.

Case Ten — The P.L.O.T. Device

The Naked Gun (2025). Liam Neeson's Frank Drebin Jr. — played sincere where his father was oblivious. He means everything he says, all the time, and that is both the joke and, eventually, the thing that saves the city.

Bank cold open (you are the distraction and don't know it) → a suicide that isn't → Richard Cane → a New Year's ball drop, a pair of lost trousers, and a barn owl in a 1950s hat who is lit by a different decade than everything around him.

Regenerating art

Sprites are generated locally on MODELBEAST (flux_localbg_remove_local → downscale). Prompts live in each case's sprites.json.

python3 tools/sprites.py cases/case-01-substantial-gift            # fill gaps
python3 tools/sprites.py cases/case-01-substantial-gift --force     # redo all
MB_POOL=1 python3 tools/sprites.py cases/...                        # if the farm 401s

Seeds derive from the sprite name, so reruns reproduce the same art.

Engine changes

Two small, general-purpose additions were made upstream in MRPGI for this project — both benefit any game:

  • sprites/ego.png in a game folder replaces the default party robot as the player avatar (ego1.png optional second walk cel).
  • death_text in game.json overrides the death banner, which was previously hardcoded to another game's flavour text.