policesquadquest/cases/case-02-ring-of-fear/rooms/room1.json
type-two e429351ab3 Case Two: Ring of Fear — the paperwork is what keeps you alive
Act I, monochrome. Five rooms, 100 points, verified end-to-end at 100/100 on
the first pass, plus three verified Sierra deaths.

Frank goes under as fight manager "Frank Deacon" to break a fight-fixing racket.
The procedure gag from the bible finally has teeth: Form 22-B, the four-page
application for an authorised cover identity, is filed in Act 1 by a clerk in
Sacramento who never learns anything about it — and that form is the only thing
standing between Frank and a very short career. At the promoter's licence check
the "I'm licensed" reply is gated on having filed it; skip the form and the
single visible option is the fatal one. Bureaucracy as the thing that saves you
is the exact inversion the campaign is built on.

Act I cases now share a sprite set: 18 PNGs copied from case-01, 14 new ones
generated. tools/sprites.py skips keys beginning with "_" so sprites.json can
carry a note about which sprites are shared.

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

99 lines
5.7 KiB
JSON

{
"name": "Sullivan's Gym — Third Floor",
"enter_text": "Sweat, resin, and a radiator that has been on since 1948. Somewhere behind you a speed bag is going and it does not stop for the entire scene.",
"music": 4,
"strokes": [
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 7, "meaning": "Floor" } },
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 60, "color": 8, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 58, "w": 160, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 0, "y": 61, "w": 160, "h": 107, "color": 7, "meaning": "Floor" } },
{ "Rect": { "x": 8, "y": 8, "w": 34, "h": 44, "color": 15, "meaning": "None" } },
{ "Rect": { "x": 12, "y": 12, "w": 26, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 12, "y": 20, "w": 26, "h": 12, "color": 8, "meaning": "None" } },
{ "Rect": { "x": 12, "y": 36, "w": 20, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 12, "y": 44, "w": 24, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 116, "y": 10, "w": 36, "h": 40, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 120, "y": 14, "w": 28, "h": 32, "color": 15, "meaning": "None" } },
{ "Rect": { "x": 124, "y": 20, "w": 20, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 124, "y": 28, "w": 20, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 124, "y": 36, "w": 12, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 0, "y": 100, "w": 160, "h": 2, "color": 8, "meaning": "None" } },
{ "Rect": { "x": 0, "y": 164, "w": 160, "h": 4, "color": 0, "meaning": "Wall" } }
],
"spawn": [16, 140],
"exits": [null, 2, null, 0],
"exit_flags": ["", "knows_fighter", "", ""],
"exit_blocked": ["", "You have not been introduced to anybody. A manager who walks into a fighter's locker room uninvited is a manager nobody has heard of.", "", ""],
"objects": [
{
"name": "poster",
"sprite": "poster",
"x": 82,
"y": 96,
"look": "FRIDAY NIGHT AT THE OLYMPIC — KESSLER vs. MARCHETTI, TEN ROUNDS. Kessler is twenty-two and two. Marchetti is nine and fourteen and has not won a fight since the war.",
"synonyms": "bill card fight sign board",
"points": 5,
"use_text": "You read the card properly. Kessler is a four-to-one favourite everywhere in this city except one place, and in that one place — a room above a tailor's on Alvarado — you can get even money on Marchetti, and you can only get it until Thursday. Somebody is not gambling. Gambling has odds. Somebody is shopping."
},
{
"name": "punchbag",
"sprite": "punchbag",
"x": 42,
"y": 122,
"look": "A heavy bag, patched with tape, hanging dead still. Everything else in this gym is moving.",
"synonyms": "bag heavy leather",
"use_text": "You hit the bag twice, in the manner of a man who manages fighters rather than one who is one. Nobody looks up, which means you did it correctly, which is the only compliment this room gives."
},
{
"name": "trainer",
"sprite": "trainer",
"x": 106,
"y": 130,
"look": "An old cornerman with a towel on his shoulder. He has worked this gym for thirty years and he has the face of a man who has watched a great many people make a great many decisions.",
"synonyms": "cornerman old man sullivan coach",
"points": 10,
"sets_flag": "knows_fighter",
"use_text": "You buy the old man a coffee and let him talk, which is all he has wanted for about nine years.",
"dialogue": [
{
"says": "Trainer: Don't know you.",
"choices": [
{ "text": "Frank Deacon. I manage fighters.", "goto": 1 },
{ "text": "Detective Frank Drebin, Police Squad.", "goto": 5, "kills": true },
{ "text": "Nobody does.", "goto": 2 }
]
},
{
"says": "Trainer: Deacon. He looks at you for a while. Trainer: Deacon. Yeah. Heard of you. He has not heard of you. Nobody has heard of you. But there is a licence in Sacramento with your name on it and this is a business where a man is what the paperwork says he is.",
"choices": [
{ "text": "Who's the kid?", "goto": 3 },
{ "text": "Who runs this gym?", "goto": 4 }
]
},
{
"says": "Trainer: That's the truth.",
"choices": [{ "text": "Frank Deacon. I manage fighters.", "goto": 1 }]
},
{
"says": "Trainer: Buddy Kessler. Best hands I've had in this gym in thirty years and he's been throwing up before training all week. Trainer: A kid that good don't get sick before training. A kid that good gets sick before something else.",
"choices": [
{ "text": "Where is he now?", "goto": 6, "sets_flag": "knows_fighter", "points": 10 },
{ "text": "Sick how?", "goto": 6, "sets_flag": "knows_fighter", "points": 10 }
]
},
{
"says": "Trainer: Sid Tannenbaum owns the building. Sullivan's been dead nine years. Trainer: We kept the name. Nobody wants to train at Tannenbaum's.",
"choices": [{ "text": "I can see why.", "goto": 0 }]
},
{
"says": "Trainer: ...Police. He does not shout. He does not run. He simply puts down the towel and walks to the office at the far end of the gym and closes the door, and it is the calmest, most unhurried betrayal you have ever watched, and it takes eleven seconds, and it is enough."
},
{
"says": "Trainer: Locker room. Been in there an hour with the door shut and his gloves still tied. Trainer: Mister. If you really do manage fighters — go talk to him. Somebody ought to.",
"choices": [{ "text": "I'll go talk to him.", "goto": -1 }]
}
]
}
]
}