policesquadquest/DESIGN.md
type-two 0e2523a8a9 Police Squad Quest: research, design bible, and Case One playable
A Sierra-style adventure in the Police Squad!/Naked Gun universe, on MRPGI —
which reimplements AGI, the engine Sierra shipped Police Quest on.

The premise: Police Quest's pedantic procedure x Police Squad!'s farce. The
game grades you on correct procedure with a straight face, and the reward for
perfect procedure is catastrophe anyway. Per John, the famous Police Quest II
bugs are shipped deliberately as canon gags.

- RESEARCH.md — all six Police Squad! episodes, all four films (incl. Neeson's
  Frank Drebin Jr, 2025), the recurring cast, and the ZAZ comedy grammar.
- DESIGN.md — the joke engine, the two Drebins across three eras (Drebin Sr's
  1982 cases render in a monochrome EGA subset for the 1950s M Squad look),
  an eleven-case campaign, and the PQ2 glitch-to-feature table.
- cases/case-01-substantial-gift — playable. Five rooms, 100 points, full win
  path verified headlessly at 95/100 plus four authored Sierra deaths.
  Procedure gates, dusting for latents, and Miranda rights in the correct
  order are all pure JSON; no engine features were invented for it.
- tools/sprites.py — all 24 sprites generated locally on MODELBEAST
  (flux_local -> bg_remove_local -> trim/downscale), reproducible by seed.

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

14 KiB
Raw Blame History

Police Squad Quest — design bible

A Sierra-style adventure game in the Police Squad! / Naked Gun universe, built on MRPGI. Source research: RESEARCH.md.


1. The joke engine

The premise isn't "a funny adventure game". It's a specific collision:

Sierra's Police Quest (1987) × ZAZ's Police Squad! (1982).

Police Quest was designed by Jim Walls, a real ex-cop, and was famously pedantic: you had to walk around your car and check the tyres, radio in correctly, draw your weapon before firing (or you shot yourself in the leg), and read the Miranda rights in the right order. Get the procedure wrong → you die. It is the single most self-serious game Sierra ever shipped.

Police Squad! is the same subject matter played as total farce.

So the game grades you on procedure with a completely straight face, and the reward for perfect procedure is catastrophe anyway. That's the machine. It's mechanical, not just written — the player performs the joke rather than watching it.

Three rules fall out of that:

  1. The game never winks. All system text is flat police-procedural prose. Score readouts, death cards, refusals — deadpan. The comedy is what the flat text is describing. (See RESEARCH.md §4.)
  2. Correct procedure is mandatory and useless. You must do it. It never helps.
  3. The parser is Frank's brain. A text parser is a literal-minded machine, and literalism is ZAZ's core joke. look answers take things at face value.

Worked example — the opening of Case One

> take badge
Taken. (+2)
> east
You have not signed for a sidearm. Regulations are regulations.
> take revolver
Taken. (+2)
> east

Two points for procedure. Then you get to the crime scene and the body is gone because Nordberg filed it.


2. The two Drebins, and the three eras

John's instinct that Frank Drebin Sr should be "a 1950s style cop" is exactly right, and it's supported by the source: Police Squad! was a straight parody of M Squad (195760) and Felony Squad. The 2025 film then makes Neeson's Frank Drebin Jr. canon — and gives Sr. a supernatural cameo as an owl. A two-Drebin game is the franchise's own structure, not a liberty.

Act Who Look Palette
I Frank Drebin Sr — the TV series 1950s hardboiled cop show, shot on videotape EGA 0 / 7 / 8 / 15 + brown ego. Monochrome.
II Frank Drebin Sr — the films 198894 blockbuster Full 16-colour EGA
III Frank Drebin Jr (Neeson) — 2025 modern LA, tech-money Full EGA, cold blues/cyans

The palette restriction is free and does all the work. MRPGI is EGA anyway; Act I simply doesn't use the other twelve colours, so the era switch is visible the instant a case loads. Act III's owl is the transition device: Sr. shows up to help Jr., which is canon and also lets both Drebins share a screen.

Drebin Jr's homage (John's specific ask): Neeson's register is sincerity where Nielsen's was obliviousness. Jr. isn't stupid — he's earnest, gravel-voiced, and completely committed to a plan that makes no sense. Write Jr's look text as genuinely moving. Then have it be about a vending machine.


3. Structure — one folder per case

MRPGI loads any directory with --game DIR, so each mission is a standalone game folder under cases/. No global room numbering, no hub-state plumbing, cases can be built in any order and in parallel.

cases/case-01-substantial-gift/
  game.json          manifest: name, start_room, intro, extra verbs, flags, max_score
  sprites.json       MODELBEAST prompts (input to tools/sprites.py — not read by the engine)
  sprites/*.png      generated art; ego.png is the player
  rooms/room*.json   the case

./play.sh lists cases and runs one. Skipped: a hub world and cross-case save — add when there are enough cases to want them.


4. Mechanics — all of it is pure JSON

MRPGI already has every field this design needs. No engine work.

Want Field Use
Procedure gate on a doorway exit_flags + exit_blocked "You have not signed for a sidearm."
Sierra death kills on object or dialogue choice The use_text is the death card
Police Quest scoring points + manifest max_score Points for procedure, not progress
Evidence that appears once found visible_flag Dusting reveals the print
Things that vanish hidden_by_flag The body Nordberg files
Item locks needs, consumes Warrant, evidence bag
Interrogation dialogue + requires_flag / sets_flag Miranda rights in order

The one engine change made for this project is general-purpose and lives upstream in MRPGI: a game folder can now supply sprites/ego.png (plus optional ego1.png for the walk bob) to replace the default party robot. Ten lines in world.rs + state.rs. Any MRPGI game benefits.

Custom verbs

game.json merges extra synonyms into the verb table, and the AI-parser whitelist is generated from the same table so they can't drift:

"verbs": [
  { "name": "use",  "words": ["dust", "cuff", "book", "frisk", "radio", "mirandize", "arrest"] },
  { "name": "look", "words": ["investigate", "detect"] },
  { "name": "talk", "words": ["interrogate", "question"] }
]

5. The campaign

Act I — Frank Drebin Sr, Police Squad! (monochrome)

Six cases, one per episode. Each opens with a special guest star being murdered in the title card — a real object in the room whose only purpose is to die.

# Case From Hook Procedure gag
01 A Substantial Gift Ep 1 Credit union manager shot; teller Sally Decker did it for orthodontist money and framed a customer Sign out badge + sidearm; dust for prints; Mirandize in order — built, see §6
02 Ring of Fear Ep 2 Undercover as a boxing manager; a fighter's wife kidnapped to force a dive You must maintain your cover identity and file correct overtime paperwork
03 Rendezvous at Big Gulch Ep 3 Protection racket; Frank and Norberg run a locksmith shop as a front The front business is graded on customer service. Real locks. Real customers.
04 Revenge and Remorse Ep 4 Courthouse bombing, Eddie Casales framed Bomb disposal by the manual, in order. The manual is wrong.
05 The Butler Did It Ep 5 Kidnapping at a rich man's birthday party Chain of custody on a birthday cake
06 Testimony of Evil Ep 6 Comedian dies; nightclub drug ring Undercover as a stand-up. You must actually pick punchlines. Dying on stage = a Sierra death card.

Act II — Frank Drebin Sr, the films (full colour)

# Case From Hook
07 From the Files Naked Gun (1988) Nordberg shot on Ludwig's heroin boat; 24 hours to clear him before the Queen's visit. Ends at Anaheim Stadium where you umpire a baseball game in order to legally frisk the players, while Reggie Jackson is hypnotically activated. The umpire's strike-zone rules are the puzzle.
08 The Smell of Fear Naked Gun 2½ (1991) Spot the fake Dr. Meinheimer by testing a photographic memory the double doesn't have. Includes the zoo, the SWAT tank, and disarming a nuclear device — solution: unplug it.
09 The Final Insult 33⅓ (1994) Retired Frank goes undercover in prison as "Nick the Slasher McGurk". Bomb in the Best Picture envelope. Marriage counselling is a live stat you must not tank.

Act III — Frank Drebin Jr, 2025 (full colour, cold palette)

# Case From Hook
10 The P.L.O.T. Device Naked Gun (2025) Open in the schoolgirl disguise during the bank robbery — you're the distraction and don't know it. Investigate Simon Davenport's "suicide" with Beth. Richard Cane's bunker plan. Police Squad is decommissioned mid-game and your badge stops opening doors.
11 Ponzi-scheme.com Arena Naked Gun (2025) finale New Year's ball drop. You lose your trousers retrieving the device — and the game keeps scoring you on uniform regulations. Frank Drebin Sr arrives as an owl: Act I's monochrome palette flies into Act III's colour one.

The prologue — "1958"

A short unlockable Act 0: Drebin Sr as a rookie, played completely straight as M Squad. Same monochrome palette, no jokes in the system text at all — until the last screen. It's the origin of the owl.


6. Case One — as built

cases/case-01-substantial-gift/ — the vertical slice, playable now.

Five rooms, 100 points.

Room Place Contains
0 Police Squad HQ, squad room Hocken (briefing), Nordberg (injured), Al (74px — his head leaves the top of the screen and no one comments), your desk, badge, sidearm, case file
1 The street Johnny the Snitch's shoeshine stand, the squad car
2 The credit union The body, the vault, the teller counter, Sally Decker
3 The crime lab Ted Olson and the microscope
4 The orthodontist's The dental chair, the braces cast, the arrest

The chain: sign out badge + revolver (procedure gate on the HQ exit) → read the case file → crime scene → dust the counter for prints → take the evidence bag → lab: Olson matches the print → the orthodontist's bill names Sally → return and Mirandize her in the correct order (wrong order = she walks and you get a Sierra death card from Hocken, which is not a real death, which is the joke) → arrest.

Running gags wired in as mechanics:

  • Al — a 74px sprite in a 168px room. Placed so his head is above the frame. His look text describes only his shoes.
  • Johnnytalk johnny costs a dollar and will answer anything. His dialogue tree has more nodes about orthodontics and macroeconomics than the case.
  • Nordberg — appears in every room in worse condition. Never mentioned.
  • The guest star — dies in the title card. look guest in room 0 before he dies, and he's already dead.
  • The freeze-frame ending — the win text describes the cast holding still while things audibly keep going wrong.

7. The glitches are canon

Police Quest II shipped with bugs that are, without alteration, Naked Gun jokes. A player who has never heard of Sierra reads them as Drebin being Drebin; a player who has reads them as a love letter. So we ship them deliberately.

Real PQ2 bug In Police Squad Quest
Keys locked in the car, station doors lock behind you → softlocked in the parking lot on screen one The squad car in Case One: "The keys are locked inside, on the seat, in plain view, behind your own reflection." Non-fatal. Nobody mentions it.
Keith, your partner, slacks off and smokes; driving back to the station makes him go do "paperwork" Nordberg. Casts, traction, cigarette, assigned as your partner, has not stood up. His paperwork is a magazine.
Firing without raising the weapon → you shoot yourself in the foot Hocken dialogue: "Permission to test-fire my sidearm indoors, Captain.""Granted." → Sierra death. An optional trap, exactly as Sierra used it.
Holding a direction while drawing → hands and gun detach and float above your head Act II gag: a raise verb that reports the weapon is now above the ceiling, and stays there for the rest of the case.
"Headless chicken" pathfinding — NPCs spiral endlessly around obstacles Al, in Case One, "continues walking in a tight, rapid circle around the water cooler, as he has all morning."
Metal detector only checks if you're facing up — walk diagonally past it Act III airport screen. The detector is correct and the regulation is correct and you go through diagonally.
Waving a drawn gun at airport security with no reaction until you cross a specific vector Same screen. The guard reacts to geometry, not to guns.
Air-walking — keep the swimming animation on dry land Act II, after the zoo. Frank swims across the car park.
Levitating into the sky off a transition Act III finale — but it's the owl.
Typing halt resets the enemy's shot counter → infinite standoff halt is already a verb in Case One's manifest. In the Act II standoff it works, forever, and the game never acknowledges why.
Infinite score by re-dusting the ashtray / re-questioning the amnesiac witness Case One, dusting the counter: "The department pays out on a lifted print once. You may dust this counter as many times as you like. It has been looked into."

The rule: play the bug straight. Never nudge the player. The comedy is that the game is behaving exactly as documented.


8. Art pipeline

tools/sprites.py <case> reads that case's sprites.json and generates every missing sprite on the MODELBEAST farm (free, local, m3ultra):

flux_local (text→image, 512²) → bg_remove_local (RMBG-2.0 cutout) → Pillow
nearest-neighbour trim+downscale to the sprite's target height

Trimming to the alpha bounding box before scaling is what puts the subject's feet on the bottom edge, which is how MRPGI positions and depth-sorts sprites. The engine quantizes to EGA itself on load, so the script only owes it a small transparent PNG.

A shared STYLE constant in the script enforces the Sierra look; per-sprite prompts stay short. Act I prompts end in "black and white monochrome grayscale only" — that one phrase is the whole 1950s era treatment.

python3 tools/sprites.py cases/case-01-substantial-gift            # fill gaps
python3 tools/sprites.py cases/case-01-substantial-gift --force    # redo all
python3 tools/sprites.py cases/case-01-substantial-gift --only ego,al

Seeds are derived from the sprite name, so a rerun reproduces the same art.