policesquadquest/cases/case-06-testimony-of-evil/rooms/room2.json
type-two 72815f8c55 Case Six: Testimony of Evil — the whiskey exploit is the puzzle
Act I, monochrome. Five rooms, 100 points, verified at 100/100 with four
verified deaths.

Built out of John's Police Quest material. PQ1's famous 8-bit integer underflow
is not an easter egg here, it is the central puzzle: Frank signs for a $40
operational float clipped to a note reading DO NOT EXCEED YOUR FLOAT, the back
room costs $2,500, and exceeding the float by one dollar wraps the department
ledger's eight-bit field to 255 — the terminal appends the cents column and
authorises $2,550.00. He keeps drinking to 132 because it will not do to stop
suddenly. Accounts raise it in March; it goes to a hearing.

PQ1's Gremlin runs through the whole case and is never resolved: chickens on the
Captain's desk, on Al's shoulder, on the murdered guest star, and one in the
winning freeze-frame. Nobody has said the word "chicken" out loud in eleven
years. No file was ever opened.

Then the stage: six memorised jokes, in order, and every "improvise" option is
fatal — plus a full glass on a stool three feet from the microphone, which is
how Danny Cavanaugh died and which you must not touch.

Linter gained the rule that actually caused this session's bug: MRPGI's
obj_matches is a BIDIRECTIONAL substring test over name AND synonyms, and
match_obj takes the first hit in array order, so an earlier object can make a
later one unreachable by its own name. `talk barman` was addressing `clubbar`.
It found two more: `sideboard` swallowing `cardtable`, and `bouncer` swallowing
`bunkerdoor` — the last of which shipped broken in Case Ten. All six cases lint
clean and all six still win.

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

292 lines
8.2 KiB
JSON

{
"name": "The Blue Grotto — Front of House",
"enter_text": "Low ceiling, low light, and a room that makes its money somewhere other than the room.",
"music": 2,
"strokes": [
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 168,
"color": 8,
"meaning": "Floor"
}
},
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 62,
"color": 0,
"meaning": "Wall"
}
},
{
"Rect": {
"x": 0,
"y": 60,
"w": 160,
"h": 3,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 63,
"w": 160,
"h": 105,
"color": 8,
"meaning": "Floor"
}
},
{
"Rect": {
"x": 10,
"y": 10,
"w": 44,
"h": 40,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 14,
"y": 14,
"w": 36,
"h": 32,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 20,
"w": 28,
"h": 4,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 28,
"w": 20,
"h": 4,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 18,
"y": 36,
"w": 24,
"h": 4,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 108,
"y": 12,
"w": 44,
"h": 38,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 112,
"y": 16,
"w": 36,
"h": 30,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 118,
"y": 22,
"w": 24,
"h": 3,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 118,
"y": 30,
"w": 16,
"h": 3,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 100,
"w": 160,
"h": 1,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 164,
"w": 160,
"h": 4,
"color": 0,
"meaning": "Wall"
}
}
],
"spawn": [
18,
146
],
"exits": [
null,
3,
null,
1
],
"exit_flags": [
"",
"wallet_wrapped",
"",
""
],
"exit_blocked": [
"",
"The back room is through that door and the back room costs two thousand five hundred dollars. You have forty.",
"",
""
],
"objects": [
{
"name": "clubtable",
"sprite": "clubtable",
"x": 46,
"y": 130,
"look": "Cocktail tables, most of them empty on a Wednesday. On the one nearest the stage somebody has left a stool with a ring on it where a glass used to stand.",
"synonyms": "table tables candle chairs stool",
"use_text": "You sit where Danny Cavanaugh's audience sat. From here you can see the stage, the bar, and the door at the back that three men have gone through in twenty minutes and none have come out of."
},
{
"name": "clubbar",
"sprite": "clubbar",
"x": 100,
"y": 116,
"look": "The bar. Whiskey is a dollar a shot, which in 1982 in a room like this is robbery conducted in the open.",
"synonyms": "counter bottles rail",
"use_text": "You put your elbows on it like a man with nowhere to be, which is the only correct way to stand at a bar you are working."
},
{
"name": "barman",
"sprite": "barman",
"x": 118,
"y": 128,
"look": "The bartender. Sleeve garters, bow tie, and the thousand-yard stare of a man who has poured for this room for nine years and intends to remember none of it.",
"synonyms": "bartender man tender",
"points": 5,
"sets_flag": "knows_buyin",
"use_text": "You buy him one and he drinks it, which is how you learn the back room takes cash at the door and the door takes twenty-five hundred, and that the last man who tried to talk his way in without it is currently in Ted Olson's lab being explained to schoolchildren.",
"dialogue": [
{
"says": "Barman: What'll it be.",
"choices": [
{
"text": "Whiskey. And one for yourself.",
"goto": 1
},
{
"text": "What's through the back door?",
"goto": 2
},
{
"text": "You served Danny Cavanaugh on Tuesday.",
"goto": 3
}
]
},
{
"says": "Barman: Dollar. He pours two and drinks his, and something in the shoulders comes down about an inch.",
"choices": [
{
"text": "What's through the back door?",
"goto": 2
},
{
"text": "You served Danny Cavanaugh on Tuesday.",
"goto": 3
}
]
},
{
"says": "Barman: Cards. Barman: Twenty-five hundred at the door, cash, counted in front of you. Mr. Grasso don't do credit and he don't do nearly. Barman: Fella tried it with nineteen hundred in April. He's a very good listener now.",
"choices": [
{
"text": "Twenty-five hundred.",
"goto": 4,
"sets_flag": "knows_buyin",
"points": 5
}
]
},
{
"says": "Barman: I never served Danny. Nobody served Danny. Barman: Danny had his own glass. Sat on the stool by the mike, filled before the show, and the only people back there before a show are Mr. Grasso and whoever's got the open spot.",
"choices": [
{
"text": "Whoever's got the open spot.",
"goto": 0
}
]
},
{
"says": "Barman: Twenty-five hundred. And mister — he counts it. He counts it in front of you and he writes it in a book. He goes back to the glass he is polishing, which was clean when you came in.",
"choices": [
{
"text": "In a book.",
"goto": -1
}
]
}
]
},
{
"name": "shotglass",
"sprite": "shotglass",
"x": 74,
"y": 120,
"look": "A shot of whiskey. One dollar. Your operational float is forty dollars, signed for in triplicate, tracked to the cent on the department ledger system, and clipped to a note from Accounts reading DO NOT EXCEED YOUR FLOAT.",
"synonyms": "whiskey shot drink glass booze liquor",
"requires_flag": "knows_buyin",
"points": 20,
"sets_flag": "wallet_wrapped",
"use_text": "You order a whiskey. Then another. Accounts is very clear that field expenditure is tracked against the float, and the float is forty dollars, and at forty dollars you stop. You do not stop. You order the forty-first, and the barman pours it, and somewhere in the basement of the Hall of Records a ledger machine attempts to hold the figure minus one in a field eight bits wide, and does what such a field does, and comes out the other side at two hundred and fifty-five. The terminal appends the cents column. Your authorised operational balance now reads $2,550.00. You keep drinking, because it will not do to stop suddenly, and by the hundred and thirty-second shot the barman has stopped counting and started watching. At the back door a man counts twenty-five hundred dollars of Police Squad's money into a book, in front of you, and writes your name beside it. Accounts will raise this in March. It will take four years. It will go to a hearing."
},
{
"name": "curtain",
"sprite": "curtain",
"x": 30,
"y": 112,
"look": "The stage curtain, drawn. Behind it: a microphone, a stool, and a ring on the stool where a glass used to stand.",
"synonyms": "stage drapes curtains",
"use_text": "You look behind the curtain. The stool is still there. Nobody has moved it since Tuesday, because nobody in this building wants to be the person who moved it."
}
]
}