policesquadquest/cases/case-07-from-the-files/rooms/room3.json
type-two 34c1f18335 Case Seven: From the Files (1988) — the umpire problem
Act II, full colour EGA. Six rooms, 100 points, verified end-to-end headlessly
at 100/100 with the win firing, plus two authored Sierra deaths.

The mechanic: Drebin is fired, so he has no power to search anyone — but a home
plate umpire can crouch beside a professional athlete, take his bat off him and
inspect his equipment, and nobody in a stadium of sixty thousand thinks twice.
So every frisk needs an umpire-legitimate pretext, in order: brush the plate,
inspect the mitt, check the bat for pine tar, then Number 44. Announcing
yourself as police is right there, and correct, and fatal.

Matching inversion at the reception: tackling a head of state is correct
procedure, it ends your career, and being fired is the only way to progress.

Two authoring traps found and documented for future cases:
- Object names must not be prefixes of each other — 'ludwigdesk' shadowed
  'ludwig' in the loose parser match, so 'talk ludwig' addressed the furniture.
- Flag-gated edge exits need walkable floor into the trigger zone (y<=21 for
  north); the upper deck sat behind a painted Wall band and was unreachable on
  foot. Walk every exit to verify — goto_room hides this.

tools/sprites.py now retries farm 429/401 with backoff (that status is the
guest concurrency cap, not auth) and honours MB_POOL.

LoRA finding recorded in DESIGN.md §9: the farm's style LoRAs are FLUX.1-dev
architecture and are a silent no-op on the only ungated model, and the pixel
look comes from the nearest-neighbour downscale anyway, not the model.

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

74 lines
4.2 KiB
JSON

{
"name": "Anaheim Stadium — Officials' Room",
"enter_text": "Sunday. Sixty thousand people upstairs, and the only door onto that field with no metal detector on it is the one the umpires use.",
"music": 4,
"strokes": [
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 8, "meaning": "Floor" } },
{ "Rect": { "x": 0, "y": 0, "w": 160, "h": 62, "color": 2, "meaning": "Wall" } },
{ "Rect": { "x": 0, "y": 60, "w": 160, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 0, "y": 63, "w": 160, "h": 105, "color": 8, "meaning": "Floor" } },
{ "Rect": { "x": 8, "y": 8, "w": 26, "h": 50, "color": 10, "meaning": "None" } },
{ "Rect": { "x": 36, "y": 8, "w": 26, "h": 50, "color": 10, "meaning": "None" } },
{ "Rect": { "x": 64, "y": 8, "w": 26, "h": 50, "color": 10, "meaning": "None" } },
{ "Rect": { "x": 8, "y": 8, "w": 82, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 34, "y": 8, "w": 2, "h": 50, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 62, "y": 8, "w": 2, "h": 50, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 18, "y": 26, "w": 6, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 46, "y": 26, "w": 6, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 74, "y": 26, "w": 6, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 108, "y": 14, "w": 44, "h": 32, "color": 7, "meaning": "None" } },
{ "Rect": { "x": 112, "y": 18, "w": 36, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 112, "y": 26, "w": 24, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 112, "y": 34, "w": 30, "h": 3, "color": 0, "meaning": "None" } },
{ "Rect": { "x": 0, "y": 164, "w": 160, "h": 4, "color": 0, "meaning": "Wall" } }
],
"spawn": [20, 140],
"exits": [null, 4, null, 2],
"exit_flags": ["", "disguised", "", ""],
"exit_blocked": ["", "A private citizen cannot walk onto that field. An umpire can walk anywhere he likes.", "", ""],
"objects": [
{
"name": "lockerbench",
"sprite": "lockerbench",
"x": 44,
"y": 122,
"look": "A bench, a folded uniform, and a wire mask. Beside them, a lyric sheet for the national anthem, which somebody has annotated heavily.",
"synonyms": "bench uniform gear lyrics sheet anthem",
"use_text": "You look over the anthem lyrics. You know the first line. You know the last line. Between them is a stretch of approximately two minutes that you have decided to treat as improvisation, and sixty thousand people have decided to treat as an emergency."
},
{
"name": "umpire",
"sprite": "umpire",
"x": 108,
"y": 128,
"look": "The home plate umpire, dressed and ready, going through his indicator. He is roughly your build, which is the sort of coincidence a man in your position stops calling a coincidence.",
"synonyms": "official ump referee man",
"points": 5,
"sets_flag": "disguised",
"use_text": "You explain that there is a problem with his vehicle in the players' lot. He goes to look at his vehicle. There is no problem with his vehicle, and by the time he establishes this you are wearing his mask, his chest protector, and his authority. Nothing about this is legal. All of it is, for the next two hours, completely unquestionable.",
"dialogue": [
{
"says": "Umpire: Help you, pal? This room's officials only.",
"choices": [
{ "text": "I'm with the league.", "goto": 1 },
{ "text": "Is that your car in the players' lot?", "goto": 2 },
{ "text": "Nice mask.", "goto": 3 }
]
},
{
"says": "Umpire: The league. Uh huh. What's the infield fly rule? You tell him. You tell him for some time. He stops you at ninety seconds and asks you to leave.",
"choices": [{ "text": "Fair enough.", "goto": 0 }]
},
{
"says": "Umpire: The brown one? Why, what's happened to it? He is already reaching for his jacket. Some men love a car.",
"choices": [{ "text": "You should probably take a look.", "goto": -1 }]
},
{
"says": "Umpire: Thanks. It's a mask.",
"choices": [{ "text": "It certainly is.", "goto": 0 }]
}
]
}
]
}