policesquadquest/cases/case-05-butler-did-it/rooms/room2.json
type-two 9bfd6ddb44 Cases Three, Four, Five and Nine — the campaign is complete
Thirteen cases, all playable, all lint clean, all verified end-to-end at
100/100 (Case One is 95 + 5 optional by design).

Case Three — Rendezvous at Big Gulch. The racket only shakes down businesses
that are doing well, so to get extorted you must run a genuinely excellent
locksmith shop. Frank reads MODERN LOCKSMITHING cover to cover and retains all
of it while understanding none of it, which for locksmithing is the correct
ratio. The street won't talk because paper doesn't stand in your doorway on a
Friday; Halloran opens up only after you offer to fix his door, and his
extortion ledger has been lying open on a public counter for two and a half
years because nobody ever asked to see his book.

Case Four — Revenge and Remorse. Section 14 paragraph 9 was written in 1949 for
a 1949 timer, and this bomber files his timing stub twice because he cannot
leave a thing not-quite-square, which shortens the contact throw and energises
the trigger first. Follow the manual and it completes. So Frank disarms it
backwards — the one time in nineteen years he departs from a written
instruction, because he can prove the instruction is wrong in four sentences.
Carries PQ1's Captain loop and an explicit refusal of PQ3's centre-pixel bug.

Case Five — The Butler Did It. Chain of custody on a birthday cake: photograph,
weigh with a witness, seal all forty forks. Eleven pounds light in the tier
nobody cuts, because she was inside it for four minutes while forty people
looked at it. And Frank will not suspect the butler because the literature says
it is always the butler, so suspecting him would be quoting rather than
investigating. It is the butler.

Case Nine — The Final Insult. The marriage is a gate, not a subplot: the finale
is locked behind actually answering the counsellor's question, and Jane's terms
are "before you go, not after". He doesn't disarm the envelope, he swaps it and
writes in a winner by hand. He picks the one he liked.

Two point budgets came in over (110, 115) and are trimmed to exactly 100.
Sprite generation needed a kill-and-restart: two overlapping runs were competing
for the farm and producing "Resource temporarily unavailable" — one clean pass
at pool 2 completed all four sets with zero failures.

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

161 lines
4.5 KiB
JSON

{
"name": "4 Cranbourne Drive — The Service Kitchen",
"enter_text": "Below stairs. A range, a scale, and a hatch in the wall that goes up.",
"music": 2,
"strokes": [
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 168,
"color": 8,
"meaning": "Floor"
}
},
{
"Rect": {
"x": 0,
"y": 0,
"w": 160,
"h": 64,
"color": 7,
"meaning": "Wall"
}
},
{
"Rect": {
"x": 0,
"y": 62,
"w": 160,
"h": 3,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 65,
"w": 160,
"h": 103,
"color": 8,
"meaning": "Floor"
}
},
{
"Rect": {
"x": 8,
"y": 10,
"w": 50,
"h": 22,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 8,
"y": 38,
"w": 50,
"h": 20,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 108,
"y": 10,
"w": 44,
"h": 48,
"color": 0,
"meaning": "None"
}
},
{
"Rect": {
"x": 112,
"y": 14,
"w": 36,
"h": 40,
"color": 15,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 104,
"w": 160,
"h": 1,
"color": 7,
"meaning": "None"
}
},
{
"Rect": {
"x": 0,
"y": 164,
"w": 160,
"h": 4,
"color": 0,
"meaning": "Wall"
}
}
],
"spawn": [
18,
148
],
"exits": [
null,
3,
null,
1
],
"exit_flags": [
"",
"route_found",
"",
""
],
"exit_blocked": [
"",
"Nobody came out of that house. Work out how she left the room.",
"",
""
],
"objects": [
{
"name": "kitchenrange",
"sprite": "kitchenrange",
"x": 40,
"y": 122,
"look": "The range, and beside it the scales you weighed the cake on, and beside those a marble slab with a shape in the flour where something four-tier and heavy stood for most of the afternoon.",
"synonyms": "range stove scales slab flour oven",
"use_text": "You measure the shape in the flour. The cake that stood on this slab this afternoon was four inches deeper than the cake standing in the ballroom, and eleven pounds heavier, and it left at 7:38."
},
{
"name": "dumbwaiter",
"sprite": "dumbwaiter",
"x": 122,
"y": 118,
"look": "The dumbwaiter. Hand-hauled, 1911, and it runs from this kitchen to the ballroom serving passage and nowhere else. The platform is twenty-two inches square. A grown man could not use it. A twelve-year-old could, if somebody she trusted asked her to get in.",
"synonyms": "hatch lift platform ropes shaft",
"points": 25,
"sets_flag": "route_found",
"use_text": "You get down and look properly. There is a ribbon caught in the runner. There is chalk from a party shoe on the platform. And there are eleven pounds of cake, in a linen sack, wedged behind the counterweight, where it has been since 7:38, because the bottom tier of that trolley had to be light enough for one man to wheel and hollow enough for a girl to sit in. She was in the cake. She was in the cake for four minutes while forty people looked at it, and then the trolley went back out through the serving passage at 7:44 and down here, and she got out and went up the dumbwaiter to the linen room, laughing, because somebody she has known her whole life told her it was the best birthday trick anybody had ever done. Nobody came out of that house. Nobody had to. (+30)"
},
{
"name": "ransomnote",
"sprite": "ransomnote",
"x": 76,
"y": 134,
"look": "The note, delivered to the front step at nine o'clock, cut from a newspaper. Two hundred thousand dollars, unmarked, Thursday.",
"synonyms": "note ransom letter demand paper",
"requires_flag": "route_found",
"use_text": "You look at it under the kitchen light. The letters are cut from the Tribune. The paste is kitchen paste. The cuts are square, and every one of them is square, forty-one letters and not one of them out by a degree, done at a table with a straight edge by somebody who could not bear to do it badly. Nobody who has taken a child for money cuts forty-one letters square."
}
]
}