policesquadquest/cases/case-01-substantial-gift/rooms/room0.json
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

392 lines
11 KiB
JSON

{
"name": "Police Squad HQ \u2014 Squad Room",
"enter_text": "The squad room. It smells of carbon paper and old coffee.",
"music": 3,
"strokes": [
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 168,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 58,
"color": 8,
"meaning": "Wall"
}
},
{
"Rect": {
"x": 0,
"y": 58,
"w": 160,
"h": 110,
"color": 7,
"meaning": "Floor"
}
},
{
"Rect": {
"x": 0,
"y": 55,
"w": 160,
"h": 3,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 100,
"y": 12,
"w": 46,
"h": 32,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 122,
"y": 12,
"w": 2,
"h": 32,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 100,
"y": 26,
"w": 46,
"h": 2,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 14,
"y": 14,
"w": 42,
"h": 30,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 18,
"w": 16,
"h": 3,
"color": 8,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 24,
"w": 24,
"h": 3,
"color": 8,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 30,
"w": 20,
"h": 3,
"color": 8,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 36,
"w": 28,
"h": 3,
"color": 8,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 0,
"w": 5,
"h": 168,
"color": 0,
"meaning": "Wall"
}
},
{
"Rect": {
"x": 0,
"y": 163,
"w": 160,
"h": 5,
"color": 0,
"meaning": "Wall"
}
}
],
"spawn": [
86,
148
],
"exits": [
null,
1,
null,
null
],
"exit_flags": [
"",
"briefed",
"",
""
],
"exit_blocked": [
"",
"You have not been briefed. Captain Hocken is standing four feet away, waiting to brief you.",
"",
""
],
"objects": [
{
"name": "locker",
"sprite": "filecabinet",
"x": 18,
"y": 106,
"look": "The arms locker. A steel cabinet with a sign-out book chained to it. The chain is longer than the book.",
"synonyms": "cabinet armory arms sheet book signout",
"needs": "badge",
"use_text": "You sign for a sidearm. The book is countersigned by Officer Nordberg, in crayon.",
"sets_flag": "armed",
"points": 5
},
{
"name": "revolver",
"sprite": "revolver",
"x": 22,
"y": 120,
"look": "A .38 service revolver. Standard issue. Six rounds, of which regulations permit you to fire zero.",
"synonyms": "gun sidearm weapon pistol",
"takeable": true,
"visible_flag": "armed",
"points": 5
},
{
"name": "desk",
"sprite": "desk",
"x": 50,
"y": 142,
"look": "Your desk. Eleven years at this desk. The drawer still sticks.",
"synonyms": "table",
"use_text": "The drawer sticks. You have filed a requisition about the drawer. The requisition is in the drawer."
},
{
"name": "badge",
"sprite": "badge",
"x": 43,
"y": 128,
"look": "Detective's shield. Police Squad. The number has worn off, which has never once been a problem.",
"synonyms": "shield tin",
"takeable": true,
"points": 5
},
{
"name": "casefile",
"sprite": "casefile",
"x": 57,
"y": 128,
"look": "SIXTH STREET CREDIT UNION \u2014 HOMICIDE. Manager shot twice. $12,000 missing. One customer held: SKALANY, D. One teller interviewed: DECKER, S. The teller's statement is four pages. Nobody asked her four pages' worth of questions.",
"synonyms": "file folder report papers case",
"takeable": true,
"points": 5
},
{
"name": "phone",
"sprite": "phone",
"x": 30,
"y": 140,
"look": "A black rotary telephone. It has been ringing since you came in. Nobody has mentioned it.",
"synonyms": "telephone",
"use_text": "You answer it. A man asks whether you are satisfied with your current carpeting. You say you are. He hangs up. The phone keeps ringing."
},
{
"name": "coffeepot",
"sprite": "coffeepot",
"x": 146,
"y": 110,
"look": "The squad room coffee. It has been on the hotplate since Tuesday. It is now technically a solid.",
"synonyms": "coffee pot percolator",
"use_text": "You pour a cup. It comes out in one piece. You put it back."
},
{
"name": "al",
"sprite": "al",
"x": 80,
"y": 66,
"look": "Officer Al. You can see his shoes, his trousers to about the knee, and no more of him than that. He is describing something with his hands, somewhere above the ceiling. Everyone is nodding.",
"synonyms": "tall officer legs",
"use_text": "You shake his hand. You have to jump. He does not appear to notice, and continues walking in a tight, rapid circle around the water cooler, as he has all morning."
},
{
"name": "hocken",
"sprite": "hocken",
"x": 106,
"y": 126,
"look": "Captain Ed Hocken. Twenty-two years on the job. He has the look of a man about to say something about racquetball.",
"synonyms": "captain ed boss",
"dialogue": [
{
"says": "Hocken: Frank. Credit union on Sixth Street. Manager took two in the chest at eight this morning. We've got a customer in a cell for it and I don't like him for it.",
"choices": [
{
"text": "What have we got, Captain?",
"goto": 1
},
{
"text": "Who's the customer?",
"goto": 2
},
{
"text": "Captain, can I go?",
"goto": 4
},
{
"text": "Permission to test-fire my sidearm indoors, Captain.",
"goto": 5,
"kills": true
},
{
"text": "I'm signed out and ready, Captain.",
"goto": 3,
"requires_flag": "armed",
"sets_flag": "briefed",
"points": 10
}
]
},
{
"says": "Hocken: Twelve thousand dollars gone out of the drawer. The teller says the customer did it. The customer says he was at the dentist. The dentist says he was at the dentist. Everybody was at the dentist, Frank.",
"choices": [
{
"text": "Somebody wasn't.",
"goto": 0
}
]
},
{
"says": "Hocken: Name of Skalany. Clean record, pays his parking tickets, cried through the whole interview. I've seen guilty men cry, Frank. They cry differently. They cry like they're getting away with it.",
"choices": [
{
"text": "And Skalany?",
"goto": 6
}
]
},
{
"says": "Hocken: Good. Stop and see Johnny on the way \u2014 he's been out on that corner since six. And Frank: the manager was a personal friend of mine. We played racquetball every Thursday for eleven years. I never beat him once. Not once in eleven years. Get me something.",
"choices": []
},
{
"says": "Hocken: Not without a badge and a sidearm, you can't. Sign for them. The locker's right there. It has been right there for eleven years, Frank.",
"choices": [
{
"text": "Right.",
"goto": 0
}
]
},
{
"says": "Hocken: Granted. You draw and fire in a single motion, without first raising the weapon. Regulations, page 14, covers this exact circumstance in considerable detail. Officer Nordberg does not look up.",
"choices": []
},
{
"says": "Hocken: Skalany cried like a man who'd been arrested. That's the wrong crying, Frank.",
"choices": [
{
"text": "Understood.",
"goto": 0
}
]
}
]
},
{
"name": "nordberg",
"sprite": "nordberg",
"x": 140,
"y": 154,
"look": "Officer Nordberg. Both arms in casts, one leg in traction, and a cigarette going. He is assigned to this case as your partner. He has not stood up yet.",
"synonyms": "norberg partner officer",
"use_text": "You ask Nordberg to come with you. He explains that he has paperwork. The paperwork is a magazine.",
"dialogue": [
{
"says": "Nordberg: Frank! You want me to come along? Because I could come along. I'd have to finish this first.",
"choices": [
{
"text": "What happened to you, Nordberg?",
"goto": 1
},
{
"text": "Finish what?",
"goto": 2
},
{
"text": "Stay here, Nordberg.",
"goto": 3
}
]
},
{
"says": "Nordberg: This? Filing. I was filing and the drawer was open. Then I was filing and the window was open.",
"choices": [
{
"text": "Both arms?",
"goto": 2
}
]
},
{
"says": "Nordberg: Paperwork. Real backlog. I'll catch you up.",
"choices": [
{
"text": "Sure, Nordberg.",
"goto": -1
}
]
},
{
"says": "Nordberg: You got it, Frank. I'll hold the fort. He lights a second cigarette off the first.",
"choices": []
}
]
},
{
"name": "guest",
"sprite": "guest",
"x": 118,
"y": 150,
"look": "A distinguished silver-haired television actor in a tuxedo, arms spread in greeting, smiling broadly. He has been dead since the opening titles. Nobody has moved him and nobody is going to.",
"synonyms": "star actor tuxedo body man",
"use_text": "You check him for a pulse, as procedure requires. There isn't one, as the opening titles established. You note the time."
}
]
}