From 9bfd6ddb44b7c654638a53cb9dd6cde2d30e4770 Mon Sep 17 00:00:00 2001 From: type-two Date: Sun, 26 Jul 2026 00:15:47 +1000 Subject: [PATCH] =?UTF-8?q?Cases=20Three,=20Four,=20Five=20and=20Nine=20?= =?UTF-8?q?=E2=80=94=20the=20campaign=20is=20complete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- DESIGN.md | 8 +- README.md | 7 + cases/case-03-big-gulch/game.json | 13 + cases/case-03-big-gulch/rooms/room0.json | 58 ++++ cases/case-03-big-gulch/rooms/room1.json | 52 ++++ cases/case-03-big-gulch/rooms/room2.json | 268 ++++++++++++++++++ cases/case-03-big-gulch/rooms/room3.json | 187 ++++++++++++ cases/case-03-big-gulch/sprites.json | 12 + cases/case-03-big-gulch/sprites/al.png | Bin 0 -> 2685 bytes cases/case-03-big-gulch/sprites/badge.png | Bin 0 -> 245 bytes cases/case-03-big-gulch/sprites/body.png | Bin 0 -> 1087 bytes cases/case-03-big-gulch/sprites/casefile.png | Bin 0 -> 310 bytes cases/case-03-big-gulch/sprites/cashbox.png | Bin 0 -> 281 bytes cases/case-03-big-gulch/sprites/coffeepot.png | Bin 0 -> 500 bytes cases/case-03-big-gulch/sprites/collector.png | Bin 0 -> 789 bytes cases/case-03-big-gulch/sprites/counter.png | Bin 0 -> 741 bytes cases/case-03-big-gulch/sprites/customer.png | Bin 0 -> 681 bytes cases/case-03-big-gulch/sprites/desk.png | Bin 0 -> 686 bytes cases/case-03-big-gulch/sprites/ego.png | Bin 0 -> 713 bytes cases/case-03-big-gulch/sprites/evidence.png | Bin 0 -> 270 bytes .../case-03-big-gulch/sprites/filecabinet.png | Bin 0 -> 581 bytes cases/case-03-big-gulch/sprites/grocer.png | Bin 0 -> 738 bytes cases/case-03-big-gulch/sprites/guest.png | Bin 0 -> 748 bytes cases/case-03-big-gulch/sprites/hocken.png | Bin 0 -> 729 bytes cases/case-03-big-gulch/sprites/johnny.png | Bin 0 -> 1027 bytes cases/case-03-big-gulch/sprites/keycutter.png | Bin 0 -> 800 bytes cases/case-03-big-gulch/sprites/ledger03.png | Bin 0 -> 499 bytes .../case-03-big-gulch/sprites/microscope.png | Bin 0 -> 523 bytes cases/case-03-big-gulch/sprites/nordberg.png | Bin 0 -> 841 bytes cases/case-03-big-gulch/sprites/olson.png | Bin 0 -> 698 bytes cases/case-03-big-gulch/sprites/phone.png | Bin 0 -> 332 bytes cases/case-03-big-gulch/sprites/revolver.png | Bin 0 -> 281 bytes cases/case-03-big-gulch/sprites/safe03.png | Bin 0 -> 711 bytes .../case-03-big-gulch/sprites/shopcounter.png | Bin 0 -> 712 bytes cases/case-03-big-gulch/sprites/shopfront.png | Bin 0 -> 2006 bytes cases/case-03-big-gulch/sprites/squadcar.png | Bin 0 -> 2906 bytes cases/case-04-revenge-remorse/game.json | 13 + .../case-04-revenge-remorse/rooms/room0.json | 222 +++++++++++++++ .../case-04-revenge-remorse/rooms/room1.json | 53 ++++ .../case-04-revenge-remorse/rooms/room2.json | 37 +++ .../case-04-revenge-remorse/rooms/room3.json | 191 +++++++++++++ cases/case-04-revenge-remorse/sprites.json | 12 + cases/case-04-revenge-remorse/sprites/al.png | Bin 0 -> 2685 bytes .../case-04-revenge-remorse/sprites/badge.png | Bin 0 -> 245 bytes .../case-04-revenge-remorse/sprites/body.png | Bin 0 -> 1087 bytes .../case-04-revenge-remorse/sprites/bomb.png | Bin 0 -> 531 bytes .../sprites/casales.png | Bin 0 -> 670 bytes .../sprites/casefile.png | Bin 0 -> 310 bytes .../case-04-revenge-remorse/sprites/cell.png | Bin 0 -> 934 bytes .../sprites/citymap.png | Bin 0 -> 1687 bytes .../sprites/clockface.png | Bin 0 -> 270 bytes .../sprites/coffeepot.png | Bin 0 -> 500 bytes .../sprites/counter.png | Bin 0 -> 741 bytes .../sprites/courthouse.png | Bin 0 -> 2520 bytes .../case-04-revenge-remorse/sprites/desk.png | Bin 0 -> 686 bytes cases/case-04-revenge-remorse/sprites/ego.png | Bin 0 -> 713 bytes .../sprites/evidence.png | Bin 0 -> 270 bytes .../sprites/filecabinet.png | Bin 0 -> 581 bytes .../case-04-revenge-remorse/sprites/guest.png | Bin 0 -> 748 bytes .../sprites/hocken.png | Bin 0 -> 729 bytes .../sprites/johnny.png | Bin 0 -> 1027 bytes .../case-04-revenge-remorse/sprites/judge.png | Bin 0 -> 625 bytes .../sprites/manual.png | Bin 0 -> 448 bytes .../sprites/microscope.png | Bin 0 -> 523 bytes .../sprites/nordberg.png | Bin 0 -> 841 bytes .../case-04-revenge-remorse/sprites/olson.png | Bin 0 -> 698 bytes .../case-04-revenge-remorse/sprites/phone.png | Bin 0 -> 332 bytes .../sprites/revolver.png | Bin 0 -> 281 bytes .../sprites/rubble04.png | Bin 0 -> 706 bytes .../sprites/squadcar.png | Bin 0 -> 2906 bytes cases/case-05-butler-did-it/game.json | 13 + cases/case-05-butler-did-it/rooms/room0.json | 52 ++++ cases/case-05-butler-did-it/rooms/room1.json | 42 +++ cases/case-05-butler-did-it/rooms/room2.json | 161 +++++++++++ cases/case-05-butler-did-it/rooms/room3.json | 170 +++++++++++ cases/case-05-butler-did-it/sprites.json | 12 + cases/case-05-butler-did-it/sprites/al.png | Bin 0 -> 2685 bytes cases/case-05-butler-did-it/sprites/badge.png | Bin 0 -> 245 bytes cases/case-05-butler-did-it/sprites/body.png | Bin 0 -> 1087 bytes .../case-05-butler-did-it/sprites/butler.png | Bin 0 -> 540 bytes cases/case-05-butler-did-it/sprites/cake.png | Bin 0 -> 644 bytes .../sprites/casefile.png | Bin 0 -> 310 bytes .../sprites/coffeepot.png | Bin 0 -> 500 bytes .../case-05-butler-did-it/sprites/counter.png | Bin 0 -> 741 bytes .../sprites/daughter.png | Bin 0 -> 582 bytes cases/case-05-butler-did-it/sprites/desk.png | Bin 0 -> 686 bytes .../sprites/dumbwaiter.png | Bin 0 -> 511 bytes cases/case-05-butler-did-it/sprites/ego.png | Bin 0 -> 713 bytes .../sprites/evidence.png | Bin 0 -> 270 bytes .../sprites/filecabinet.png | Bin 0 -> 581 bytes .../sprites/governess.png | Bin 0 -> 531 bytes cases/case-05-butler-did-it/sprites/guest.png | Bin 0 -> 748 bytes .../case-05-butler-did-it/sprites/hocken.png | Bin 0 -> 729 bytes .../case-05-butler-did-it/sprites/johnny.png | Bin 0 -> 1027 bytes .../sprites/kitchenrange.png | Bin 0 -> 726 bytes .../case-05-butler-did-it/sprites/mansion.png | Bin 0 -> 1647 bytes .../sprites/microscope.png | Bin 0 -> 523 bytes .../sprites/nordberg.png | Bin 0 -> 841 bytes cases/case-05-butler-did-it/sprites/olson.png | Bin 0 -> 698 bytes cases/case-05-butler-did-it/sprites/phone.png | Bin 0 -> 332 bytes .../sprites/ransomnote.png | Bin 0 -> 201 bytes .../sprites/revolver.png | Bin 0 -> 281 bytes .../sprites/squadcar.png | Bin 0 -> 2906 bytes .../case-05-butler-did-it/sprites/tycoon.png | Bin 0 -> 837 bytes cases/case-09-final-insult/game.json | 13 + cases/case-09-final-insult/rooms/room0.json | 54 ++++ cases/case-09-final-insult/rooms/room1.json | 48 ++++ cases/case-09-final-insult/rooms/room2.json | 47 +++ cases/case-09-final-insult/rooms/room3.json | 44 +++ cases/case-09-final-insult/sprites.json | 13 + cases/case-09-final-insult/sprites/beeper.png | Bin 0 -> 127 bytes .../sprites/binoculars.png | Bin 0 -> 260 bytes .../case-09-final-insult/sprites/cellbunk.png | Bin 0 -> 1144 bytes .../sprites/champagne.png | Bin 0 -> 245 bytes .../sprites/counsellor.png | Bin 0 -> 670 bytes cases/case-09-final-insult/sprites/ego.png | Bin 0 -> 813 bytes .../case-09-final-insult/sprites/envelope.png | Bin 0 -> 243 bytes cases/case-09-final-insult/sprites/hocken.png | Bin 0 -> 659 bytes cases/case-09-final-insult/sprites/jane.png | Bin 0 -> 630 bytes .../sprites/ludwigdesk.png | Bin 0 -> 796 bytes cases/case-09-final-insult/sprites/muriel.png | Bin 0 -> 803 bytes .../case-09-final-insult/sprites/nordberg.png | Bin 0 -> 600 bytes cases/case-09-final-insult/sprites/oscar.png | Bin 0 -> 433 bytes cases/case-09-final-insult/sprites/podium.png | Bin 0 -> 540 bytes .../case-09-final-insult/sprites/podium09.png | Bin 0 -> 496 bytes .../sprites/prisonyard.png | Bin 0 -> 2150 bytes cases/case-09-final-insult/sprites/rocco.png | Bin 0 -> 806 bytes cases/case-09-final-insult/sprites/sofa.png | Bin 0 -> 1145 bytes cases/case-09-final-insult/sprites/tanya.png | Bin 0 -> 638 bytes tools/__pycache__/sprites.cpython-314.pyc | Bin 11023 -> 11108 bytes 130 files changed, 1798 insertions(+), 4 deletions(-) create mode 100644 cases/case-03-big-gulch/game.json create mode 100644 cases/case-03-big-gulch/rooms/room0.json create mode 100644 cases/case-03-big-gulch/rooms/room1.json create mode 100644 cases/case-03-big-gulch/rooms/room2.json create mode 100644 cases/case-03-big-gulch/rooms/room3.json create mode 100644 cases/case-03-big-gulch/sprites.json create mode 100644 cases/case-03-big-gulch/sprites/al.png create mode 100644 cases/case-03-big-gulch/sprites/badge.png create mode 100644 cases/case-03-big-gulch/sprites/body.png create mode 100644 cases/case-03-big-gulch/sprites/casefile.png create mode 100644 cases/case-03-big-gulch/sprites/cashbox.png create mode 100644 cases/case-03-big-gulch/sprites/coffeepot.png create mode 100644 cases/case-03-big-gulch/sprites/collector.png create mode 100644 cases/case-03-big-gulch/sprites/counter.png create mode 100644 cases/case-03-big-gulch/sprites/customer.png create mode 100644 cases/case-03-big-gulch/sprites/desk.png create mode 100644 cases/case-03-big-gulch/sprites/ego.png create mode 100644 cases/case-03-big-gulch/sprites/evidence.png create mode 100644 cases/case-03-big-gulch/sprites/filecabinet.png create mode 100644 cases/case-03-big-gulch/sprites/grocer.png create mode 100644 cases/case-03-big-gulch/sprites/guest.png create mode 100644 cases/case-03-big-gulch/sprites/hocken.png create mode 100644 cases/case-03-big-gulch/sprites/johnny.png create mode 100644 cases/case-03-big-gulch/sprites/keycutter.png create mode 100644 cases/case-03-big-gulch/sprites/ledger03.png create mode 100644 cases/case-03-big-gulch/sprites/microscope.png create mode 100644 cases/case-03-big-gulch/sprites/nordberg.png create mode 100644 cases/case-03-big-gulch/sprites/olson.png create mode 100644 cases/case-03-big-gulch/sprites/phone.png create mode 100644 cases/case-03-big-gulch/sprites/revolver.png create mode 100644 cases/case-03-big-gulch/sprites/safe03.png create mode 100644 cases/case-03-big-gulch/sprites/shopcounter.png create mode 100644 cases/case-03-big-gulch/sprites/shopfront.png create mode 100644 cases/case-03-big-gulch/sprites/squadcar.png create mode 100644 cases/case-04-revenge-remorse/game.json create mode 100644 cases/case-04-revenge-remorse/rooms/room0.json create mode 100644 cases/case-04-revenge-remorse/rooms/room1.json create mode 100644 cases/case-04-revenge-remorse/rooms/room2.json create mode 100644 cases/case-04-revenge-remorse/rooms/room3.json create mode 100644 cases/case-04-revenge-remorse/sprites.json create mode 100644 cases/case-04-revenge-remorse/sprites/al.png create mode 100644 cases/case-04-revenge-remorse/sprites/badge.png create mode 100644 cases/case-04-revenge-remorse/sprites/body.png create mode 100644 cases/case-04-revenge-remorse/sprites/bomb.png create mode 100644 cases/case-04-revenge-remorse/sprites/casales.png create mode 100644 cases/case-04-revenge-remorse/sprites/casefile.png create mode 100644 cases/case-04-revenge-remorse/sprites/cell.png create mode 100644 cases/case-04-revenge-remorse/sprites/citymap.png create mode 100644 cases/case-04-revenge-remorse/sprites/clockface.png create mode 100644 cases/case-04-revenge-remorse/sprites/coffeepot.png create mode 100644 cases/case-04-revenge-remorse/sprites/counter.png create mode 100644 cases/case-04-revenge-remorse/sprites/courthouse.png create mode 100644 cases/case-04-revenge-remorse/sprites/desk.png create mode 100644 cases/case-04-revenge-remorse/sprites/ego.png create mode 100644 cases/case-04-revenge-remorse/sprites/evidence.png create mode 100644 cases/case-04-revenge-remorse/sprites/filecabinet.png create mode 100644 cases/case-04-revenge-remorse/sprites/guest.png create mode 100644 cases/case-04-revenge-remorse/sprites/hocken.png create mode 100644 cases/case-04-revenge-remorse/sprites/johnny.png create mode 100644 cases/case-04-revenge-remorse/sprites/judge.png create mode 100644 cases/case-04-revenge-remorse/sprites/manual.png create mode 100644 cases/case-04-revenge-remorse/sprites/microscope.png create mode 100644 cases/case-04-revenge-remorse/sprites/nordberg.png create mode 100644 cases/case-04-revenge-remorse/sprites/olson.png create mode 100644 cases/case-04-revenge-remorse/sprites/phone.png create mode 100644 cases/case-04-revenge-remorse/sprites/revolver.png create mode 100644 cases/case-04-revenge-remorse/sprites/rubble04.png create mode 100644 cases/case-04-revenge-remorse/sprites/squadcar.png create mode 100644 cases/case-05-butler-did-it/game.json create mode 100644 cases/case-05-butler-did-it/rooms/room0.json create mode 100644 cases/case-05-butler-did-it/rooms/room1.json create mode 100644 cases/case-05-butler-did-it/rooms/room2.json create mode 100644 cases/case-05-butler-did-it/rooms/room3.json create mode 100644 cases/case-05-butler-did-it/sprites.json create mode 100644 cases/case-05-butler-did-it/sprites/al.png create mode 100644 cases/case-05-butler-did-it/sprites/badge.png create mode 100644 cases/case-05-butler-did-it/sprites/body.png create mode 100644 cases/case-05-butler-did-it/sprites/butler.png create mode 100644 cases/case-05-butler-did-it/sprites/cake.png create mode 100644 cases/case-05-butler-did-it/sprites/casefile.png create mode 100644 cases/case-05-butler-did-it/sprites/coffeepot.png create mode 100644 cases/case-05-butler-did-it/sprites/counter.png create mode 100644 cases/case-05-butler-did-it/sprites/daughter.png create mode 100644 cases/case-05-butler-did-it/sprites/desk.png create mode 100644 cases/case-05-butler-did-it/sprites/dumbwaiter.png create mode 100644 cases/case-05-butler-did-it/sprites/ego.png create mode 100644 cases/case-05-butler-did-it/sprites/evidence.png create mode 100644 cases/case-05-butler-did-it/sprites/filecabinet.png create mode 100644 cases/case-05-butler-did-it/sprites/governess.png create mode 100644 cases/case-05-butler-did-it/sprites/guest.png create mode 100644 cases/case-05-butler-did-it/sprites/hocken.png create mode 100644 cases/case-05-butler-did-it/sprites/johnny.png create mode 100644 cases/case-05-butler-did-it/sprites/kitchenrange.png create mode 100644 cases/case-05-butler-did-it/sprites/mansion.png create mode 100644 cases/case-05-butler-did-it/sprites/microscope.png create mode 100644 cases/case-05-butler-did-it/sprites/nordberg.png create mode 100644 cases/case-05-butler-did-it/sprites/olson.png create mode 100644 cases/case-05-butler-did-it/sprites/phone.png create mode 100644 cases/case-05-butler-did-it/sprites/ransomnote.png create mode 100644 cases/case-05-butler-did-it/sprites/revolver.png create mode 100644 cases/case-05-butler-did-it/sprites/squadcar.png create mode 100644 cases/case-05-butler-did-it/sprites/tycoon.png create mode 100644 cases/case-09-final-insult/game.json create mode 100644 cases/case-09-final-insult/rooms/room0.json create mode 100644 cases/case-09-final-insult/rooms/room1.json create mode 100644 cases/case-09-final-insult/rooms/room2.json create mode 100644 cases/case-09-final-insult/rooms/room3.json create mode 100644 cases/case-09-final-insult/sprites.json create mode 100644 cases/case-09-final-insult/sprites/beeper.png create mode 100644 cases/case-09-final-insult/sprites/binoculars.png create mode 100644 cases/case-09-final-insult/sprites/cellbunk.png create mode 100644 cases/case-09-final-insult/sprites/champagne.png create mode 100644 cases/case-09-final-insult/sprites/counsellor.png create mode 100644 cases/case-09-final-insult/sprites/ego.png create mode 100644 cases/case-09-final-insult/sprites/envelope.png create mode 100644 cases/case-09-final-insult/sprites/hocken.png create mode 100644 cases/case-09-final-insult/sprites/jane.png create mode 100644 cases/case-09-final-insult/sprites/ludwigdesk.png create mode 100644 cases/case-09-final-insult/sprites/muriel.png create mode 100644 cases/case-09-final-insult/sprites/nordberg.png create mode 100644 cases/case-09-final-insult/sprites/oscar.png create mode 100644 cases/case-09-final-insult/sprites/podium.png create mode 100644 cases/case-09-final-insult/sprites/podium09.png create mode 100644 cases/case-09-final-insult/sprites/prisonyard.png create mode 100644 cases/case-09-final-insult/sprites/rocco.png create mode 100644 cases/case-09-final-insult/sprites/sofa.png create mode 100644 cases/case-09-final-insult/sprites/tanya.png diff --git a/DESIGN.md b/DESIGN.md index feaff63..62057e0 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -256,9 +256,9 @@ in the title card** — a real object in the room whose only purpose is to die. |---|------|------|------|---------------| | 01 | **A Substantial Gift** | Ep 1 | Credit union manager shot; teller Sally Decker did it for orthodontist money and framed a customer | Sign out badge + sidearm; dust for prints; Mirandize in order — **built, see §6** | | 02 | **Ring of Fear** | Ep 2 | **BUILT.** Undercover as fight manager Frank Deacon; Buddy Kessler's wife taken to force a dive in the fourth | **The paperwork is what keeps you alive.** File Form 22-B in Act 1 and a clerk in Sacramento makes Frank Deacon real. Skip it and the promoter's licence check leaves you exactly one dialogue option, which is fatal. Three ways to blow the cover, all deaths. | -| 03 | **Rendezvous at Big Gulch** | Ep 3 | Protection racket; Frank and Norberg run a **locksmith shop** as a front | The front business is graded on customer service. Real locks. Real customers. | -| 04 | **Revenge and Remorse** | Ep 4 | Courthouse bombing, Eddie Casales framed | Bomb disposal by the manual, in order. The manual is wrong. | -| 05 | **The Butler Did It** | Ep 5 | Kidnapping at a rich man's birthday party | Chain of custody on a birthday cake | +| 03 | **Rendezvous at Big Gulch** | Ep 3 | **BUILT.** Protection racket on Gulch Street; Police Squad buys a locksmith's as a front | **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, retains all of it and understands none of it, which turns out to be the correct ratio. | +| 04 | **Revenge and Remorse** | Ep 4 | **BUILT.** Courthouse bombing; Eddie Casales in a cell for standing on the steps | **The manual is wrong and you can prove it in four sentences.** Section 14 ¶9 was written in 1949 for a 1949 timer; this maker files his timing stub twice, which shortens the contact throw and energises the trigger first. Disarm it backwards. Also carries PQ1's Captain-loop (go and see the coroner) and an explicit refusal of PQ3's centre-pixel map bug. | +| 05 | **The Butler Did It** | Ep 5 | **BUILT.** A twelve-year-old vanishes from her own party between the cake and the candles | **Chain of custody on a birthday cake** — weigh it, seal all forty forks, and it comes up eleven pounds light in the tier nobody cuts. And Frank refuses to 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. | | 06 | **Testimony of Evil** | Ep 6 | **BUILT.** Danny Cavanaugh dies mid-act at the Blue Grotto; poison on the rim of his own glass | **The PQ1 whiskey exploit is the intended solution** (see below). Then undercover as a stand-up: six memorised jokes, in order, and improvising is fatal. | ### Act II — Frank Drebin (Nielsen), the films (full colour) @@ -267,7 +267,7 @@ in the title card** — a real object in the room whose only purpose is to die. |---|------|------|------| | 07 | **From the Files** | *Naked Gun* (1988) | **BUILT — see §7.** Nordberg shot on Ludwig's freighter; the Queen's reception; then Anaheim Stadium, where you **umpire a baseball game in order to legally frisk the players**. | | 08 | **The Smell of Fear** | *Naked Gun 2½* (1991) | **BUILT.** The double gives himself away by being *approximately* right — a man with an eidetic memory never says "roughly". Blue Note, SWAT tank into the zoo, mariachi infiltration, and a nuclear device disarmed by tripping over its power cable. | -| 09 | **The Final Insult** | *33⅓* (1994) | Retired Frank goes undercover in prison as "Nick the Slasher McGurk". Bomb in the Best Picture envelope. Marriage counselling is a live stat you must not tank. | +| 09 | **The Final Insult** | *33⅓* (1994) | **BUILT.** Retired, bored, in couples counselling. Undercover in Statesville as Nick McGurk; a device in the Best Picture envelope. **The marriage is a gate, not a subplot** — the finale is locked behind actually answering the counsellor's question, and the winning move is to swap the envelope and write in a winner by hand. He picks the one he liked, which Jane calls the most honest thing he has ever done. | ### Act III — Frank Drebin Jr, 2025 (full colour, cold palette) diff --git a/README.md b/README.md index 10ea9de..cd0cd1b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ itself a reimplementation of AGI, the engine Sierra shipped *Police Quest* on. - **[DESIGN.md](DESIGN.md)** — the game bible: the joke engine, the two Drebins, the eleven-case campaign, and how it all maps onto MRPGI data. +**Thirteen cases, all playable, all verified end-to-end at 100/100** (Case One is +95 + 5 optional). `python3 tools/lint.py` checks all thirteen clean. + ## Play ```bash @@ -35,9 +38,13 @@ cargo run -p mrpgi --manifest-path ~/Documents/MRPGI/Cargo.toml -- --game cases/ | `cases/case-00-1958/` | **Act Zero — playable, 100 points.** Frank Drebin **Sr**, 1958, hard noir mono. Five rooms. Played completely straight; the score is the cover-up. | | `cases/case-00b-the-quartet/` | **Act Zero crossover — playable, 100 points.** Drebin **Sr** vs. five Ealing-comedy incompetents. Five rooms. | | `cases/case-01-substantial-gift/` | **Case One — playable, 100 points.** Drebin (Nielsen), 1982, monochrome. Five rooms. | +| `cases/case-03-big-gulch/` | **Case Three — playable, 100 points.** Four rooms, the locksmith front. | +| `cases/case-04-revenge-remorse/` | **Case Four — playable, 100 points.** Four rooms, the wrong manual. | +| `cases/case-05-butler-did-it/` | **Case Five — playable, 100 points.** Four rooms, chain of custody on a cake. | | `cases/case-06-testimony-of-evil/` | **Case Six — playable, 100 points.** Drebin (Nielsen), 1982, monochrome. Five rooms, the whiskey exploit, four deaths. | | `cases/case-07-from-the-files/` | **Case Seven — playable, 100 points.** Drebin (Nielsen), 1988, full colour. Six rooms, the Anaheim Stadium finale. | | `cases/case-02-ring-of-fear/` | **Case Two — playable, 100 points.** Drebin (Nielsen), 1982, monochrome. Five rooms, undercover, three deaths. | +| `cases/case-09-final-insult/` | **Case Nine — playable, 100 points.** Four rooms, prison undercover and the envelope. | | `cases/case-10-plot-device/` | **Case Ten — playable, 100 points.** Drebin Jr (Neeson), 2025, cold palette. Six rooms, the arena finale and the owl. | | `cases/case-08-smell-of-fear/` | **Case Eight — playable, 100 points.** Drebin (Nielsen), 1991, full colour. Five rooms, the memory test. | | `cases/case-11-what-he-wrote/` | **Case Eleven — playable, 100 points.** Drebin **Jr** reads his grandfather's files. Five rooms; the palette drifts from 2025 back to 1958. | diff --git a/cases/case-03-big-gulch/game.json b/cases/case-03-big-gulch/game.json new file mode 100644 index 0000000..c4302f0 --- /dev/null +++ b/cases/case-03-big-gulch/game.json @@ -0,0 +1,13 @@ +{ + "name": "Police Squad Quest — Case Three: Rendezvous at Big Gulch", + "start_room": 0, + "max_score": 100, + "intro_text": "POLICE SQUAD. Every business on Gulch Street pays a man forty dollars a week and not one of them will say so. You cannot investigate a crime nobody will report. So Police Squad has bought a shop. My name is Drebin. From Monday I am a locksmith, and Officer Nordberg is my apprentice, and neither of us has ever cut a key. Type 'help'.", + "death_text": "† OFFICER DOWN. The shop closes. The day restarts. †", + "verbs": [ + { "name": "use", "words": ["cut", "serve", "fit", "repair", "frisk", "cuff", "book", "arrest", "radio", "halt", "file", "trade"] }, + { "name": "look", "words": ["investigate", "observe", "detect"] }, + { "name": "talk", "words": ["interrogate", "question", "brief", "serve"] } + ], + "flags": { "briefed": false, "shop_trading": false, "street_trusts": false, "collector_called": false } +} diff --git a/cases/case-03-big-gulch/rooms/room0.json b/cases/case-03-big-gulch/rooms/room0.json new file mode 100644 index 0000000..b81bac4 --- /dev/null +++ b/cases/case-03-big-gulch/rooms/room0.json @@ -0,0 +1,58 @@ +{ + "name": "Police Squad HQ — Squad Room", + "enter_text": "The squad room. On your desk is a set of keys to a shop.", + "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": 24, "h": 3, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 18, "y": 25, "w": 30, "h": 3, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 18, "y": 32, "w": 20, "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 do not open a business without a briefing. That is how businesses go under.", "", ""], + "objects": [ + { "name": "casefile", "sprite": "casefile", "x": 62, "y": 130, + "look": "GULCH STREET — EXTORTION (SUSPECTED). Eleven businesses. Eleven refusals to make a statement. One handwriting expert's note observing that all eleven refusals are in the same eleven words.", + "synonyms": "file folder report papers case", "takeable": true, "points": 5 }, + { "name": "desk", "sprite": "desk", "x": 46, "y": 142, + "look": "Your desk, and on it a ring of keys and a lease and a book called MODERN LOCKSMITHING, THIRD EDITION, with a bus ticket in it at page forty.", + "synonyms": "table keys lease book locksmithing", + "use_text": "You read MODERN LOCKSMITHING, THIRD EDITION, cover to cover, in one evening, and you retain all of it, because you retain everything and understand very little, which for locksmithing turns out to be exactly the correct ratio." }, + { "name": "al", "sprite": "al", "x": 80, "y": 66, + "look": "Officer Al. You can see his shoes and about nine inches of trouser. He is holding something up and everybody is looking at it.", + "synonyms": "tall officer legs", "use_text": "You shake his hand. You have to jump." }, + { "name": "guest", "sprite": "guest", "x": 118, "y": 150, + "look": "This week's television actor, mid-wave, smiling, dead since the opening titles. Nobody has moved him.", + "synonyms": "star actor man body", "use_text": "You check him for a pulse, as procedure requires. There isn't one. You note the time." }, + { "name": "nordberg", "sprite": "nordberg", "x": 138, "y": 152, + "look": "Officer Nordberg, your apprentice locksmith, both arms in casts. He has been given the fine work.", + "synonyms": "norberg partner officer apprentice", + "use_text": "You confirm the arrangement. He cuts, you serve. Nobody has raised the casts." }, + { "name": "hocken", "sprite": "hocken", "x": 106, "y": 126, + "look": "Captain Ed Hocken, holding a shop lease and an expression of a man who has signed a shop lease.", + "synonyms": "captain ed boss", + "dialogue": [ + { "says": "Hocken: Eleven businesses on Gulch Street, Frank. Every one of them pays and not one of them will say a word. We've had two grand juries and eleven refusals. Hocken: So we've bought number nine. It's been a locksmith's since 1931. You're the locksmith.", + "choices": [ + { "text": "Why a locksmith, Captain?", "goto": 1 }, + { "text": "How do we get him to approach us?", "goto": 2 }, + { "text": "I'll open Monday, Captain.", "goto": 3, "sets_flag": "briefed", "points": 10 } ] }, + { "says": "Hocken: Because a locksmith gets into every business on the street and nobody thinks twice, and because number nine was for sale, and because those are the only two reasons anything ever happens in this department.", + "choices": [ { "text": "Fair enough.", "goto": 2 } ] }, + { "says": "Hocken: That's the part I don't like, Frank. Hocken: A man like this doesn't shake down a shop that's struggling. There's nothing in it. He waits until a place is doing well and then he comes in and takes the difference. Hocken: You want him to come to you, that shop has to actually make money.", + "choices": [ { "text": "Then it'll make money.", "goto": 3, "sets_flag": "briefed", "points": 10 } ] }, + { "says": "Hocken: Monday. Hocken: Frank — cut the keys right. If that shop gets a name for bad work, nobody comes in, and if nobody comes in then neither does he, and eleven businesses go on paying forty dollars a week for the rest of their lives. You tell him you have read MODERN LOCKSMITHING, THIRD EDITION. He says: all of it? You say: all of it.", + "choices": [] } ] } + ] +} diff --git a/cases/case-03-big-gulch/rooms/room1.json b/cases/case-03-big-gulch/rooms/room1.json new file mode 100644 index 0000000..8465a05 --- /dev/null +++ b/cases/case-03-big-gulch/rooms/room1.json @@ -0,0 +1,52 @@ +{ + "name": "Drebin & Son, Locksmiths — 9 Gulch Street", + "enter_text": "A bell over the door, a key rack, and a machine neither of you has switched on.", + "music": 1, + "strokes": [ + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 7, "meaning": "Floor" } }, + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 62, "color": 8, "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": 7, "meaning": "Floor" } }, + { "Rect": { "x": 8, "y": 10, "w": 60, "h": 44, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 12, "y": 14, "w": 52, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 12, "y": 22, "w": 52, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 12, "y": 30, "w": 52, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 12, "y": 38, "w": 52, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 12, "y": 46, "w": 34, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 104, "y": 12, "w": 46, "h": 38, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 108, "y": 16, "w": 38, "h": 30, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 164, "w": 160, "h": 4, "color": 0, "meaning": "Wall" } } + ], + "spawn": [18, 146], + "exits": [null, 2, null, 0], + "exit_flags": ["", "shop_trading", "", ""], + "exit_blocked": ["", "A shop with no customers is a shop nobody shakes down. Open up and do the work.", "", ""], + "objects": [ + { "name": "shopcounter", "sprite": "shopcounter", "x": 46, "y": 118, + "look": "The counter, the till, and a board of blanks going back to 1931. The previous owner left the board alphabetised and you have not changed it.", + "synonyms": "counter till board blanks shop", + "use_text": "You stand behind it the way a man stands behind a counter he intends to keep." }, + { "name": "keycutter", "sprite": "keycutter", "x": 116, "y": 116, + "look": "The cutting machine. Belt-driven, 1931, and in perfect order because somebody looked after it for twenty-seven years.", + "synonyms": "machine cutter blade wheel vice", + "points": 25, "sets_flag": "shop_trading", + "use_text": "You open at eight and you do the work. You cut two hundred and eleven keys in nine days. Every one of them turns. You do not cut a single one twice, because you read MODERN LOCKSMITHING, THIRD EDITION, and retained all of it. You re-pin a lock for the woman at forty-one and do not charge her because it took four minutes. You go out on a Sunday to a man locked out of his own bakery. You fit a mortice for the barber at cost and stay to make sure it closes true. By the second Friday there is a queue on the pavement at eight in the morning and Officer Nordberg is in the window with a cast on each arm, waving at people, and the shop is taking sixty dollars a week clear. You have, in nine days, entirely by accident, built the best small business on Gulch Street. (+25)" }, + { "name": "customer", "sprite": "customer", "x": 78, "y": 132, + "look": "Mrs. Ostrowski from forty-one, who has locked herself out three times this month and has stopped apologising for it, which you consider progress.", + "synonyms": "woman lady mrs ostrowski", + "use_text": "You cut her a spare and then a second spare, and you tell her to leave one with her sister, which is the only advice in MODERN LOCKSMITHING, THIRD EDITION that you fully understood.", + "dialogue": [ + { "says": "Mrs. Ostrowski: You're the new man. Number nine's been shut since old Bergman went.", + "choices": [ + { "text": "Drebin. What can I do for you?", "goto": 1 }, + { "text": "Do people on this street have trouble?", "goto": 2 } ] }, + { "says": "Mrs. Ostrowski: Locked out. Again. She puts a key on the counter and does not apologise, and you decide you like this street.", + "choices": [ { "text": "Do people on this street have trouble?", "goto": 2 } ] }, + { "says": "Mrs. Ostrowski: ...You want to talk to Mr. Halloran at the grocer's. Mrs. Ostrowski: No. You don't. Forget I said it. It's a nice street. She takes her keys and goes, and at the door she stops and does not turn round and says: 'He's had it worst. That's all.'", + "choices": [ { "text": "Thank you, Mrs. Ostrowski.", "goto": -1 } ] } ] }, + { "name": "nordberg", "sprite": "nordberg", "x": 124, "y": 144, + "look": "Officer Nordberg in the shop window with a cast on each arm, waving at passers-by. He has been doing this for nine days and takings are up.", + "synonyms": "norberg partner officer apprentice", + "use_text": "You ask him to stop waving. Takings drop eleven per cent. You ask him to start waving again." } + ] +} diff --git a/cases/case-03-big-gulch/rooms/room2.json b/cases/case-03-big-gulch/rooms/room2.json new file mode 100644 index 0000000..77a3352 --- /dev/null +++ b/cases/case-03-big-gulch/rooms/room2.json @@ -0,0 +1,268 @@ +{ + "name": "Gulch Street", + "enter_text": "Eleven businesses, one street, and a Friday that everybody on it is quietly dreading.", + "music": 2, + "strokes": [ + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 168, + "color": 7, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 34, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 6, + "y": 6, + "w": 44, + "h": 46, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 12, + "y": 12, + "w": 12, + "h": 10, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 30, + "y": 12, + "w": 12, + "h": 10, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 110, + "y": 4, + "w": 46, + "h": 48, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 116, + "y": 10, + "w": 14, + "h": 10, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 136, + "y": 10, + "w": 14, + "h": 10, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 52, + "w": 160, + "h": 2, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 128, + "w": 160, + "h": 2, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 130, + "w": 160, + "h": 38, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 16, + "y": 147, + "w": 18, + "h": 3, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 52, + "y": 147, + "w": 18, + "h": 3, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 88, + "y": 147, + "w": 18, + "h": 3, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 124, + "y": 147, + "w": 18, + "h": 3, + "color": 15, + "meaning": "None" + } + } + ], + "spawn": [ + 22, + 110 + ], + "exits": [ + null, + 3, + null, + 1 + ], + "exit_flags": [ + "", + "street_trusts", + "", + "" + ], + "exit_blocked": [ + "", + "Eleven people have refused to make a statement. You are not going anywhere until one of them changes their mind.", + "", + "" + ], + "objects": [ + { + "name": "shopfront", + "sprite": "shopfront", + "x": 62, + "y": 100, + "look": "Halloran's grocery, four doors down from you. Awning patched, window clean, and a hand-painted sign that somebody repaints every spring.", + "synonyms": "storefront awning window display", + "use_text": "You look at the window display. It is done properly. Everything about this shop is done properly by a man who has done it properly for thirty years and is going under anyway." + }, + { + "name": "ledger03", + "sprite": "ledger03", + "x": 116, + "y": 118, + "look": "Halloran's book, open on his counter where anybody could read it, because it has stopped mattering to him whether anybody reads it.", + "synonyms": "book accounts figures takings", + "requires_flag": "spoke_grocer", + "points": 10, + "sets_flag": "street_trusts", + "use_text": "Thirty years of a grocery in one book. Every Friday since March 1956 there is a line in the outgoings column reading SUNDRIES — 40.00. Every Friday. Never a week missed, never a different figure, in a shop that in a bad week clears fifty-one. It is the most complete extortion record you have ever seen and it has been sitting on a counter on a public street for two and a half years. (+10)" + }, + { + "name": "grocer", + "sprite": "grocer", + "x": 92, + "y": 126, + "look": "Mr. Halloran. Thirty years behind that counter, apron on, sleeves rolled, wringing a cloth he is not using.", + "synonyms": "halloran shopkeeper man mister", + "points": 20, + "sets_flag": "spoke_grocer", + "use_text": "You do not ask him anything. You tell him what you cut this week and what you charged for it, and that the machine at number nine is belt-driven and 1931 and in perfect order because Bergman looked after it, and that you have not had to cut a key twice. He listens to all of it. Then he says, to the cloth: 'You'll be shut by Christmas, son. They come when you're doing well.' And then, because you did not ask, he tells you the rest. (+20)", + "dialogue": [ + { + "says": "Halloran: You're number nine. I heard. Queue on the pavement, they say. Halloran: I'm not making a statement, if that's what this is. I've told two grand juries I've nothing to say and I've nothing to say.", + "choices": [ + { + "text": "I'm not here about a statement.", + "goto": 1 + }, + { + "text": "Why won't anybody on this street talk?", + "goto": 2 + }, + { + "text": "Mr. Halloran, I'm a police officer.", + "goto": 3 + } + ] + }, + { + "says": "Halloran: Then what are you here about? You tell him you re-pinned a lock for Mrs. Ostrowski and didn't charge her, and ask whether his back door still drops on the hinge, because you noticed it dropping when you walked past on Tuesday. He looks up from the cloth.", + "choices": [ + { + "text": "It drops. I can fix it Thursday.", + "goto": 4 + } + ] + }, + { + "says": "Halloran: Because a statement's a piece of paper and a piece of paper doesn't stand in your doorway on a Friday. Halloran: Bergman made a statement. Number nine. That's why it's been shut two years and that's why you got it cheap.", + "choices": [ + { + "text": "Bergman made a statement.", + "goto": 4 + } + ] + }, + { + "says": "Halloran: ...I know what you are. Halloran: Son, everybody on this street knew what you were on the second morning. You cut two hundred keys in nine days and you never once asked anybody a question. Police don't do that. Halloran: We've been waiting to see if you'd fix my door before you asked me anything.", + "choices": [ + { + "text": "I'll fix it Thursday.", + "goto": 4 + } + ] + }, + { + "says": "Halloran: Thursday. He puts the cloth down. Halloran: Friday afternoons. Four o'clock, regular as church. Forty dollars, and he takes it in the shop, in front of whoever's in, because that's the point of it. Halloran: My book's on the counter. It always has been. Nobody ever asked to see my book.", + "choices": [ + { + "text": "May I see your book?", + "goto": -1 + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/cases/case-03-big-gulch/rooms/room3.json b/cases/case-03-big-gulch/rooms/room3.json new file mode 100644 index 0000000..e485952 --- /dev/null +++ b/cases/case-03-big-gulch/rooms/room3.json @@ -0,0 +1,187 @@ +{ + "name": "Drebin & Son, Locksmiths — Friday, 4:00 PM", + "enter_text": "The bell over the door goes at four o'clock exactly, regular as church.", + "music": 4, + "strokes": [ + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 168, + "color": 7, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 62, + "color": 8, + "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": 7, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 8, + "y": 10, + "w": 60, + "h": 44, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 12, + "y": 14, + "w": 52, + "h": 3, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 12, + "y": 22, + "w": 52, + "h": 3, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 12, + "y": 30, + "w": 52, + "h": 3, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 12, + "y": 38, + "w": 52, + "h": 3, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 104, + "y": 12, + "w": 46, + "h": 38, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 108, + "y": 16, + "w": 38, + "h": 30, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 164, + "w": 160, + "h": 4, + "color": 0, + "meaning": "Wall" + } + } + ], + "spawn": [ + 18, + 148 + ], + "exits": [ + null, + null, + null, + 2 + ], + "objects": [ + { + "name": "cashbox", + "sprite": "cashbox", + "x": 40, + "y": 118, + "look": "The week's takings on the counter, counted, in a tin. Sixty-one dollars clear. You have left it out where it can be seen. Everything about this shop, for nine days, has been done for exactly this minute.", + "synonyms": "tin money takings cash box", + "use_text": "You leave it where it is. A man who moves the money when the bell goes is a man who was expecting the bell." + }, + { + "name": "safe03", + "sprite": "safe03", + "x": 122, + "y": 116, + "look": "The shop safe, standing open and empty, because Bergman took the door off in 1956 and never put it back, and because you have left it exactly as he left it.", + "synonyms": "safe wall strongbox bergman", + "use_text": "Bergman's safe. He made a statement, and the shop was shut for two years, and nobody in this street has said his name out loud since. You have kept his key board alphabetised and you have not moved his safe, and this afternoon eleven people are going to find out why." + }, + { + "name": "nordberg", + "sprite": "nordberg", + "x": 138, + "y": 146, + "look": "Officer Nordberg, in the back, out of sight, with two plaster casts and a radio he cannot hold.", + "synonyms": "norberg partner officer apprentice", + "use_text": "You put the radio on the bench and press the transmit key down with a two-pound weight, which is not in any manual, and which works." + }, + { + "name": "collector", + "sprite": "collector", + "x": 96, + "y": 132, + "look": "Camelhair overcoat, hat back, toothpick. He has come in at four o'clock on a Friday because the queue on your pavement has been noticed, and he is going to say it in front of the two customers still in the shop, because that is the entire point of it.", + "synonyms": "man racketeer overcoat hat toothpick", + "requires_flag": "street_trusts", + "wins": true, + "points": 30, + "use_text": "He does it exactly the way Halloran said he would: in the shop, out loud, in front of witnesses, because the witnesses are what he is actually selling. Forty dollars. Fridays. Regular as church. You ask him to say it again. He says it again, louder, because he thinks he is being asked by a frightened locksmith and because he has said it in eleven shops on this street every Friday since March 1956 and nobody has ever once written it down. Officer Nordberg is in the back with a transmit key held down by a two-pound weight, and Captain Hocken is in a van at the end of Gulch Street with the whole thing on a wire, and Mr. Halloran's book has been on his own counter, in public, for two and a half years, and every Friday of it says SUNDRIES — 40.00. You arrest him at ten past four and advise him of his rights in the correct order and in full. Eleven statements are made in the next nine days. The ninth is Bergman's, who comes back from his sister's in Fresno to make it. The shop stays open. Police Squad cannot lawfully trade, so the department sells number nine to Mr. Halloran's nephew for a dollar, and the boy keeps the key board alphabetised, and Officer Nordberg still comes on Saturdays to wave at people from the window. Somewhere behind you Officer Al says something and everybody laughs and everybody freezes, smiling, holding it — except the bell over the door, which is still going. (+40)" + }, + { + "name": "customer", + "sprite": "customer", + "x": 60, + "y": 140, + "look": "Mrs. Ostrowski, in for another spare, who has picked exactly the wrong four o'clock to be standing in this shop and exactly the right one.", + "synonyms": "woman lady mrs ostrowski witness", + "use_text": "You catch her eye and you do not move your head, and she does not move hers, and she stays exactly where she is, which is in earshot." + } + ] +} \ No newline at end of file diff --git a/cases/case-03-big-gulch/sprites.json b/cases/case-03-big-gulch/sprites.json new file mode 100644 index 0000000..ebcd555 --- /dev/null +++ b/cases/case-03-big-gulch/sprites.json @@ -0,0 +1,12 @@ +{ + "_comment": "Act I, monochrome. Shared sprites copied from case-01.", + "keycutter": { "h": 18, "prompt": "A 1950s key cutting machine on a workbench with a rack of blank keys behind it, seen from the front, black and white monochrome grayscale only" }, + "shopcounter": { "h": 20, "prompt": "A small locksmith shop counter with a till and a board of hanging keys behind it, seen from the front, black and white monochrome grayscale only" }, + "customer": { "h": 24, "prompt": "An ordinary flustered 1950s housewife facing the viewer, headscarf and coat, holding a handbag open, apologetic expression, black and white monochrome grayscale only" }, + "collector": { "h": 26, "prompt": "A slick 1950s protection racketeer facing the viewer, camelhair overcoat, hat tilted back, toothpick, one hand in pocket, black and white monochrome grayscale only" }, + "grocer": { "h": 24, "prompt": "A worried 1950s shopkeeper in an apron facing the viewer, sleeves rolled, hands wringing a cloth, black and white monochrome grayscale only" }, + "safe03": { "h": 22, "prompt": "A small 1950s wall safe with the door open and empty, set in a shop wall, seen from the front, black and white monochrome grayscale only" }, + "shopfront": { "h": 30, "prompt": "A small 1950s corner shopfront with a striped awning and a hand painted sign, seen from the street, black and white monochrome grayscale only" }, + "ledger03": { "h": 11, "prompt": "A shop accounts book lying open flat with columns of weekly figures, single object, black and white monochrome grayscale only" }, + "cashbox": { "h": 11, "prompt": "A small metal shop cash box with the lid open, single object, black and white monochrome grayscale only" } +} diff --git a/cases/case-03-big-gulch/sprites/al.png b/cases/case-03-big-gulch/sprites/al.png new file mode 100644 index 0000000000000000000000000000000000000000..c039f87fb6e4f80edcd4c1cf9d64eab8671ada53 GIT binary patch literal 2685 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 literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/body.png b/cases/case-03-big-gulch/sprites/body.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7ca5aa1b73f84a8afa2ccc19ba6ef079edfb61 GIT binary patch literal 1087 zcmV-F1i<@=P)ChO*hqoVl6^Ui6u?O z#)d%C#vf33ZZu>eq9szAT9Gb9lwy^pW0N%Yy?5U^N6vlon*>YW@NwVVbKg1N`Odlb zf`vgu8HA7uVb9agejy_FIH5r2nHVGtu0xQDV08TW5&&+3knj|V46K@Gg^1iqB#n6L zTm4b9?+nxg7Hatqt`lbbUAc1K+F*vurzZ~8k~3LwW)E(G&Sy4WWtaMx5_`XCl_;qo z>yWPD+RBYL%H!o@hu;~V?%uxRf^zU#R0)}8vW|q~IQGFvgdg74CB3iovjtX>X-4y0 zYeKv#k-52VHBOScG@mI;Yt<&gci+#waQgGl%JcK{_ol*#A`0sZ0HjJb%;lIg^(uLN z&%hkTiBDjCLbnR>V-h_6I*uwf)HTAU>{JPqD(GP0&){$?5H{UwQjvTkDt?Cn=czox%TAzyu){w5N zE6mOjpa1D>og7nZAf1|-o#oA&?(p^l2M)H_zy49!BK^Ou;}zD8IXwIU zQX>3v;pa!P1O$6u-@n`FpUKI|OA8B?j>3i_F8%o{1`iMUUh&6?5X2vJ24V%de25qO zUc!m-j{s}@nrvm`vBp$euGK33XK?D|N#l})N~MzB`Q)yaZ$JIyW4my*g8o~` z-1#579_sFyS5DU0i{aqlP&zQM&yJ0K2qD5&#a z$OVDVT)f-HqiN(}AlfisSZk|1B%($*~qOn@*9d?{1su(-H{VzG$!_5#8%1T*1A6d_3x|DC_2 zjDf#rM5~uaK9}=zapJIYeHnLeDPgg44N)BF_RH!O)U3>&E7E38LEs01$;)}SN=o3)FJ`28qp~Tn`I(rOu#J^BTF!9cqSwb;) zZqA&XIde#E9BVkddWjBLN`|>10c4`K*=+dP?GS{;VnMUnVle2xi@SGMtJkH7AgTiH z0+i(qr)Mp+s;cGP{cXr1IP>|Fe0^`}U-s#ocTjVu*Slc)FeRB&meHslEXw*UYD07*qo IM6N<$f*MkZO8@`> literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/cashbox.png b/cases/case-03-big-gulch/sprites/cashbox.png new file mode 100644 index 0000000000000000000000000000000000000000..c0df4f59bbacc8628799d62e031a31261fe49fcd GIT binary patch literal 281 zcmV+!0p|XRP)W~8jj$&=+3-|#1C~Yi}CI}8-M{+VV(JUaQ z*>B!k&6^=nK~WS^mY;ws6u?hiW3hNaG#n0OG#W#N370Y-%xyW#3<-y?!|j^8N#ROG(=;F=s3;gL=|9*_Qe9qP}h{l>k{IObRFn z706J9=*o=R=(V;$#EPgrSNXyEvnuL=3nOU`S=(sE6cXC+yotHZqPIPjhNc=JajrfwAS5u qv7gJ$qt*I{Mx%jkcMFBWNBJLqAs-NCuikM00000P$faPEiRy--1$VpJ6>@F%M>W^B$C4l|_qw&T;<12a~ zhD0F*d_|*1QBkL>OjXY=%%rD#x*q*~^=Pm#ba?SLi%4^E8pF*7y8ON)!V zecM(Zy?TY~>+6}-zBq;XIsVWIN}#)YfJ8?`tz)3vU*X$?S!Q2a!V@$C#LyP{+<` z{13Jr$UJ`d2xDU<2s379XNe$mduBRdC!km?8U`1UWA)OyZx2R_MZ}(wFXRzzuEE*C zbMXISXdXbMeAe9PwW}ZpyqRABi(qPU(&pbke*qGRPL|6S(n2v`Lp7UIb3=neZA1j; zB7FJ!4ULTrXX3t&BBqq3lI~&W@~BsqJY+D1z|g$O*M)XbB!99-rgMNayj1E zV6K9H9TxD<$A3g*kBT%9sVLH0Ak@-2#RNZq_Vz=61+r9ez$}SZ!KSKnd#k5}2GLw3 z923f+fkey$cXf4fXJJxd*6KTXWonNdVSA7zPwuoVor1DU*c|$o#Z?nlf3IF{l0VzI$n!m^lzRv%j7{Mk$jJAcP;~ zJ;NxDnNx?GBpv{ajO|xeCWf&FF{@f5whqo%{rC;W|6mP1zhCz@;8(q25dqd(wI@g< zMzw_wVsQNEA&_PW*vJ_jwey6I$WA{pIFxCTr;wzq1rrdZ#zP$}leIinoNGqC1jbry ze&3uZ50qQF%7cqzd%He3w0DR={~@rZgo*L-4gHX4Y!+nqePC?tk46&orNt+4lC&6z zh-`V|-8szF?!5#`!)K?;(huVV-ZU33o~JlYe3OW410u;mw$$&2wz2z$F-Vg{!zx83 zglk{d5Cj%|ef@}{NM!*DB27J!v6{G$S!2My2ni9wt$O3jmCILWj2s?a$i7JO?p8oe zJ=I`Tt5suLtu_mgnR4cbiw{5~eaV`R%xbl&n2gvF0+!^g`Nc}Wj8=0;<=R|Lft0$& z$uW79dOloE`P8;f)Z3BisTZ}{{ch_je|NDbu;d*3T^9hkxw7)=n$%rnUzJ@Q0ffZV z?sk}i$V`baI=Zjp1MY20xvB~(iSM6Txly5ZyEPz7DwPUJDRyJzV1~Ev+(NtA(Jge% z0?aQgps`iQELWB=qK! zmEc1XDQ2b9+|Jo+$69A*m^!fbKIg34_pJ+w7kGFO2uv*EJ)8(aW>!t-!>!Ns@ngTD z*n^4C6$EHR4QX46PsDi#=LOC=0YR=@yDD2>w$xC(_o3-sB4Nwf1BhaWpL_c_+1H1$ zsR{jk1cErRAdM_0-g|N0iFmQQC!G?Dm}E8KB&MF8*Ec`GH<4Bj%iqBCFTvIefo{Bg zwTd8MkT6CkADl5#osSYAVks1hM(X;lJ92OIzAzy9*^(&lL<|NYlg&W$GcyJU&e782 zB~ni^Od37O5Q=?!WHLGA^Lc;>)43UI!1nf6obK;i|Gu*~Xqcy`AIkFb3MMC}S_Q(# zwKcn)IE;)>Tx>Dp`MEh69v(t>cNenRtR<}18>U=&{t{6=f??8ea9+YvsUYFeF6f+$ zkBlLTBZHGG9mNMjUad5xj_IZPJ6URjcjRagZPeC>^f8c|Fu&2t8}HTDx_R78kL* zyMut}H{ZT__k|8Vk&0TA;cTWtty(dNTB-2K(`Wdxzt=X@t5Qw~Y5;v%n4d=!IVSD9 zl_d!N9~(r@v65C!>J_%SqlO2E2k1?uxca9m-e$$f^e*%UCvr}|Imrr2*HbZkm8q7d)QA(cw0)n=l!Etj6&9$m3yshz`LC(?2h>&j@p P00000NkvXXu0mjfZL~Z} literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/desk.png b/cases/case-03-big-gulch/sprites/desk.png new file mode 100644 index 0000000000000000000000000000000000000000..ba471739758c84da9a5ae754106907b47dc5daa5 GIT binary patch literal 686 zcmV;f0#W^mP)aqjyylZF@0+;h+SoM+D0y>MN|z9RJ^xO)8>hjt$W*LD99 zj&uw3b`}Nzo_IXP1aJdZ_9F_&d>MN*$(@HgnO(7@5yl0nviBkYQnv#zdLnyr$Y^>d z_-1zb8`^^`T8*b*kx!(~su?xVIb+P(|GP<~T5t6g#MF6a<|%J&Z6W`#fJE{%z>JB> zDL9UU*RNjU#K|P?+`fhOjt=Zpckr=T#IxrwkUD>XdwYBF;oW;fgO@X(2KxK1B$KDm zKRAH4)=s3;X$;>S!tl@yw6?WleQgbZi_Ohn7|Gtp^z;*uR)+-;!RJz`ObE z?5y3FzAlC2F)*-Gt=hV1{@;JB<9PQmR4S{+=ECqgh&m#IJLz}R@+{;|{zr?FJxT?MU;ZE^5DBxs!Q+MlYAue0mTO{G%m63Td? z5IqyYo8!L#^|(M3Yj1xhljh)7>ntsl%Ubxx3vKHqAY;&fsgI3u?4W8?rG+o%FR72E U9y{P^z5oCK07*qoM6N<$f+rtOlmGw# literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/ego.png b/cases/case-03-big-gulch/sprites/ego.png new file mode 100644 index 0000000000000000000000000000000000000000..512ab3123c8b48c666e6916fa098506efae6fb95 GIT binary patch literal 713 zcmV;)0yh1LP)o(>E%%$%8X?!D)NMIh1CJpe8%tKcAD zurNe)6?lk-Lf*Z7eKMC@#6LfPwdOYqm$;_@3>9F4@rlXDZSC#&@HvYseSJk(H%PyC z8-!23WEa_s6Dm_xCeP(=6c|py&U7WGQq`PJH}KS*ZeF`%m^|_6)?GYwsTJAmSIp1P zz`%zg!@?nx1D2I1xa-Isz%%fyMk?@qplNq4ic90H!W?j7uoIrOAObxc%a9I1Km%u5 z@a)E^{Eq|?(gmfdZFu?OuDdwa`v??|!C0jh1xhF&=Aq-_2s#?;v7;`9YdxJH(u^3W zP9vby!3$$91)2UfBsOfo?5A(oSD%129`)RugtfF}VxE_qzI_%%1Y-oN>^o{U0w%%m z<)f&mOl&r<#=4!vm6bmT7_hJo=#hu3qf;U*csg(b-tzaK@X4UKD6UBmvR;@t0~>Ii00000NkvXXu0mjf8MsG- literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/evidence.png b/cases/case-03-big-gulch/sprites/evidence.png new file mode 100644 index 0000000000000000000000000000000000000000..6e90e14f1c70913724b8e5fc7233c60947ae4bba GIT binary patch literal 270 zcmV+p0rCEcP)=()(nXPGQMBL|Ts+oT>pKjr%M zt%AogGeG$D0BXh%+V?$T+@P*&s4mEPK~+^aoj$Q)ssk}b9NU(^ zqDEG2nx+>Z1Zb&nid%$E5Z0tePhz!Q6e#TS(D)S7Pm@&4*^|77Ab69&7bRJ-ecR>V+s~d<({;{#jYx}F011U1;CXG6gGk>f%9=~UsI51v!yG$Yw03!NdEsAFX9zA^QsMmYL<#cLJg^>d6 z3m_uf^~@rm!C=65@7=+{kDpjv-sf0vw>2$q%nHa0CXgF&bNPPy0Jf(UD9oE0P5+4+bdf|cbJTl2Ga$_<&G%A8!oULL zxd)L;z-aSb=bYvo;8_BQGHVuP6ZdHGV(LBtygHcm0vX0<4*mWwYsp6Aw!KJ{2%w1~xjqDW4u T?P$ao00000NkvXXu0mjfY2OPf literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/grocer.png b/cases/case-03-big-gulch/sprites/grocer.png new file mode 100644 index 0000000000000000000000000000000000000000..374ed058f813988721608f6694bd75d32f604dfe GIT binary patch literal 738 zcmV<80v-K{P)r3nUvKH$q5h!J>Mj%12;9p2K%)a))luds?NMTvvH>oeBWH7ZV7}%b#{wIIcc` z00@lB1i+!7tNRoiBDXQ!-4*l6Y)6Tam6HYJ6E=bk^bcGCi10a=M<^UWh&!{^MoSzV zE|yBX_j{k0a!af}x2!IEP&sO~Z>{@Z`?iL3XFBpa%>ThqtMWYY{c6OjYcW1?9}V$_ zX!?JXEi>ky&GXrF7p1Yjj#}GVDUoQz%Focfd#~od5ZAp4MH;316 zULlcaBI6mY)@%B^+)^LfrUnuNz1#V`y*?4<;v}gJWoPgp0*Z z{#q#T&tJQeY-yGtC`wPy8CefDBnSdtSa_+d>^Q=?d>|gc`PEhVQYeT@<@(^DYol=% zfv+tEgm>>hptJKNtPK(F?jjzqM}Hj%G9lTiZWCMDYEpij=e) zY$#+oL@u|Cm0V6b+S`#G8F7;B>${BoFm%bJ0`WYL7Z=}__dA{)frbpo5YAt?bfO_1 z%R3n3_a>s0za|Qc%Ka0K^(zq!1KhoHn@JTPHH#h-t(t0IojdCHRf1O7Po>(}h9Qc@ z4b`quXibS`m5x&Du2)6R!TR^g$!SI9-S<2g&#M5e=sB5cbvh_3!*z2T6}aPBB?>|+ znc^xVD3vxbJu{n*f`aYsEoj~0n>QZ0GD=;dsY%26=vWW#9Aj^9AMMAEvewrBKZa;m U!AX3FoB#j-07*qoM6N<$g5U&MC;$Ke literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/guest.png b/cases/case-03-big-gulch/sprites/guest.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd58c64ba932695013403534a65f8a082ae07a0 GIT binary patch literal 748 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 literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/microscope.png b/cases/case-03-big-gulch/sprites/microscope.png new file mode 100644 index 0000000000000000000000000000000000000000..eb82ab83992cff368e8996129142c37a263b51ba GIT binary patch literal 523 zcmV+m0`&cfP) z+inv<3_bR4Llg1>O4Rm+M&e^=$`3S%fK()U5h)M(86ZE#igBi z;g-u~X1KlEjKH;$VDUGAs&}vF`OW={#T)&19K2Z~v$?Ympm?-DaWEnoFIi`1$w6n|uO2rmb;AXW!jYsEEa1iEp3@%*J8 zAHM?SWv)r^5xJbbKGk<0-gBKaJ*0vmx{ja#3e-#)B|`iG#Ny?Qe*upbAHT6Qq3r+w N002ovPDHLkV1mD$@0|bu literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/nordberg.png b/cases/case-03-big-gulch/sprites/nordberg.png new file mode 100644 index 0000000000000000000000000000000000000000..40b44b6b4c42349a55af29aab1ac7d77126ed496 GIT binary patch literal 841 zcmV-P1GfB$P)&J3m)_Z4_-9& zA4F7bLnP9Oph|;MsgSmQ+MSub=g7UYGu4}%y|Z`DckXx2`OZKog)t*2CNwl|c(0hr zbsREhq4|FQ0TieN>d5DbnW?s>mSVGKb%X&+`#6wd0xsOWKR9Xf!i2BzudB^;o0QMN)$bUB?K(XA~ELWFQ1lzrxgB<7D7sq2@@%` zKSjDAN)fHBTX9$WX{tUwDYPpQ7=i)YwoE``hN2>h#UgBJLrQ6=N(~Ue1lM)Z|GD1) zQq2d2Virt<_4RSQdi@fS=p+sDlhf65JVmW-ZGNSgXzj+0tQ4^=!MgPRIn(h|r%6*Z zpmXQWl9U!*x_V`^2F;pYPOj^5P3=;SPMuN8Q_`otFQ)ub3d!y5kHMrc@a0?0gZu6H z{__{CGMn=qPk7*KA1cbDZ<-ILFmLW0SeER@maPpB4;?;0jZIA#0C;=%>@ktEnPX<( zxpR9^QK#UH>b(y|#gU-vJw4r3(dZP)<&GN1Og2a9blN-zN&)c09w~Su`k!Sw}t-Nu!34Vrl*ie{HdubI0>9<+W|cR+<@$ zy$&W=o;`miq}u!G1M>MN!Kj#dUA<~`SM`$R=<0g0IUL!Rix(-N7LUiNZq1r;U!dW^ z!Nu|Vbri2(Pv*m;1?zgA0k2$D2gh}B@BW==IQ|ldmRCHzee2d=r{F+ZIyc5YbN5Zr TCSlno00000NkvXXu0mjffUuBM literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/olson.png b/cases/case-03-big-gulch/sprites/olson.png new file mode 100644 index 0000000000000000000000000000000000000000..7a587ad729c7064b1bee6b25eeacdb8d795e4fb1 GIT binary patch literal 698 zcmV;r0!96aP)X1^@s61#ZvJ0007kNkl-pchsg;n>Im3DY$AC6p_-lAC5W% z4yBudh?JZl3`)wzH|INX&VBDW^>~MSIrDwr`Ockto?`*&<1AdmA4ohrGz4&s)>c=k z8t-~Xp7bRMc{02Nl5@M$ckcjT%P~N?CEaXu8x2}P)j1_ z(bRPfd)PX2?|xzlsU@~GC1|h+4manG6h#etJ*ax3Mi3z+&6eN2O{;P0KkFfmYvwT} zslf2rbC{c-!|d#%r)tGqsHG>5A3l%cUuwaCF$2x{Ci7nT`UT&%wnEcN(h9j;go_iG zk|qT;Wr(2RV53=M26n2y;k`GK{^MwDI)rOCuA}orml0#GVRU>#ZCcaJYN@XLf3L^@tan0Fr4i2Be`g#h`AK6sZ()7%OEWh#TV|p^-bjszG ze-zW8Oeh0~&<3qh0e=4YZh(P-LEOB3E9v1sf~qKCuS!rYl}g!laSE(^U}I#{5bnQd zMu&$Sd1s?k|F{eo_5tinf;qrKfS)?X$YIy8q$l7ylkfRwzrSR~jC1rNzbAdF}% ztmV<#dK~$DGZul2RnoOHR+1q~Bo^6hHt# zL=-LZ-1F0gZC&GVJc@{b1{;)R8A#$|vlfHeAj&*fkofxfh8UL?xQ zC>`qOb_-R->~`km2BW(piF7`H*1MwA#mhn;pB`4tX|L_*134J<2O7r_s%pu4v*v5H z#Le~i9;VfrK%1a))lbwU#*+zpy_iDr@gRditG9P|ak$J2H9?oNq?>06iTz;@`oBI~b!u?{0000`_m`rW^rK*(X)S8nxvV+@uN;G~ fOkGQ|p&9-Fc%;jG@fd*i00000NkvXXu0mjf<~@3X literal 0 HcmV?d00001 diff --git a/cases/case-03-big-gulch/sprites/safe03.png b/cases/case-03-big-gulch/sprites/safe03.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed0a54124722e5a7bb91128da6981ea41eeef33 GIT binary patch literal 711 zcmV;&0yzDNP)KxE?r6R2^a{SQVrYKXr;HpGt~;s!C8U`)zF z))GlHzy_j`@KGvY`^tNF%$<4fm07fR?z`vSbI#1DH*eqZ{mDrf0LI8KpcG&jFg6=4 zn*_SLI!V|48a99bLKp|#>Oz1Il>T{&z?bd_a)XLGsZ?oF)>lF0NYVoMzL&j zxjfq1+wkaN(KgUzi(tD7J%t!#vogbGGCCunEY^z1M%ViKV8Q@Uqzp5NNTwK}wZ6XQ zdN8B4^}-?vjZ&$EOj^V9JeBo4{m8JJDo2kZl(o5~2fkn;0Gkj)cfC1~;x>-P0U0=0DBj-uQR}64jsF z2(?0?fR!IV1O4~#00Nww`-mV2A}!7}p&4?Bq^H})2AO}mLNy;NlK&^UoUM9)}WwQoLOJ5O$p(}7ESoO&@+TGc1 zxifYbI-LS!xNCRNbGfH!zfw+eA~cz#)9HVrp}e=Bh$n!{du1$tTW;J)Iss}v*Sxi} zyMwLmKS@DgOiQIw!Q-b-5aZU~9IToUE(Ju_zJTv&*no4a#f-^};T%w1w(%*@PiXL~2e5uA%a09XXhxiDve zKFk8|J-wSNV`}OV#Q>qVw-=YM47kSD+UX=ovN%qh2s4or5G0Bm?fgk;d%Mwj^myNw zFP$7Whjo0I&u!8K&4%o zuds;V(!f=(>xFNNUTFu$!Fpj_xOl#<=WpJ=7F|0%A>{^OXy~R&#N)?L2@sTCzJl6; z!9m@|r;nfeY-0Wpz?uvl&Fw97)z;Q#c4Kqh>|A-y0sz>(_25j0-1Epm;JUooX z@5U2)Ha*R;i{PRNQKZQaQMK+w1R{XQ!4cV>J}Q$r18Mfg?vGiMSkZE+dda}X`=AU! zFfww_S;G1X1qd^`y1U>)>Gx{CKg+v=D4f|%pQ#qMMp&*^O{WbJGOEHx8F@lO$L3&d zczst^RuIP#e$;EGQ$XRSVRYI8>M+_GNonUFfl>WlUAA?9fB!CvRtw}(EV7kj&vT#{ zGz+TLDwdX(T8_<0m|Nt{UmIX+IWp^+EeFabO?QxH8CF;8NK=oq=gy$Lqr<`)_;B|T u2>bANlYbC_McyPS#MjGsz#e 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 Ef|6aT!vFvP literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/game.json b/cases/case-04-revenge-remorse/game.json new file mode 100644 index 0000000..0beac49 --- /dev/null +++ b/cases/case-04-revenge-remorse/game.json @@ -0,0 +1,13 @@ +{ + "name": "Police Squad Quest — Case Four: Revenge and Remorse", + "start_room": 0, + "max_score": 100, + "intro_text": "POLICE SQUAD. Somebody put a device under the west wing of the county courthouse at nine minutes past four and a man named Eddie Casales is in a cell for it because he was on the steps at four. My name is Drebin. Detective Lieutenant Frank Drebin, and I have read the departmental bomb procedure eleven times, and today I am going to have to use it. Type 'help'.", + "death_text": "† OFFICER DOWN. Paragraph nine was wrong. The day restarts. †", + "verbs": [ + { "name": "use", "words": ["dust", "cuff", "book", "frisk", "radio", "arrest", "disarm", "cut", "plot", "mark", "consult", "halt", "check" ] }, + { "name": "look", "words": ["investigate", "observe", "detect", "read"] }, + { "name": "talk", "words": ["interrogate", "question", "brief"] } + ], + "flags": { "briefed": false, "casales_cleared": false, "pattern_found": false, "device_found": false } +} diff --git a/cases/case-04-revenge-remorse/rooms/room0.json b/cases/case-04-revenge-remorse/rooms/room0.json new file mode 100644 index 0000000..31adf75 --- /dev/null +++ b/cases/case-04-revenge-remorse/rooms/room0.json @@ -0,0 +1,222 @@ +{ + "name": "Police Squad HQ — Squad Room", + "enter_text": "The squad room. Captain Hocken has asked you to go to the coroner's office.", + "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": 14, + "y": 14, + "w": 42, + "h": 30, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 18, + "y": 20, + "w": 30, + "h": 3, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 18, + "y": 28, + "w": 24, + "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": [ + "", + "The Captain would like you to visit the coroner's office. He has mentioned it.", + "", + "" + ], + "objects": [ + { + "name": "orders", + "sprite": "casefile", + "x": 62, + "y": 130, + "look": "POLICE SQUAD STANDING ORDERS — SECTION 14: SUSPECT DEVICES. Paragraph nine sets out the order in which leads are to be separated. It has been in this manual since 1949. It is four sentences long and you can say it from memory.", + "synonyms": "section procedure paragraph standing orders rulebook nine", + "takeable": true, + "points": 5 + }, + { + "name": "al", + "sprite": "al", + "x": 80, + "y": 66, + "look": "Officer Al. Shoes, nine inches of trouser, and whatever is happening above the ceiling.", + "synonyms": "tall officer legs", + "use_text": "You shake his hand. You have to jump." + }, + { + "name": "guest", + "sprite": "guest", + "x": 120, + "y": 150, + "look": "This week's television actor, mid-wave, dead since the opening titles.", + "synonyms": "star actor man body", + "use_text": "You check him for a pulse, as procedure requires. There isn't one. You note the time." + }, + { + "name": "hocken", + "sprite": "hocken", + "x": 106, + "y": 126, + "look": "Captain Ed Hocken. He would like you to go to the coroner's office. He would like it again in a moment.", + "synonyms": "captain ed boss", + "dialogue": [ + { + "says": "Hocken: Frank. Courthouse, west wing, 4:09. Two dead, one of them a bailiff with thirty years in. Hocken: Go and see the coroner.", + "choices": [ + { + "text": "I've been to the coroner, Captain.", + "goto": 1 + }, + { + "text": "Tell me about Casales.", + "goto": 2 + }, + { + "text": "I'm ready, Captain.", + "goto": 3, + "sets_flag": "briefed", + "points": 10 + } + ] + }, + { + "says": "Hocken: Then go and see the coroner. You explain, again, that you have been to the coroner, that you went at seven this morning, and that his report is on the Captain's desk under the Captain's elbow. Hocken: Good. Go and see the coroner. This has happened four times. Nobody in Police Squad has ever found a way out of it except to stop asking, and so nobody asks, and so it has been happening since 1951.", + "choices": [ + { + "text": "I'll go and see the coroner.", + "goto": 0 + } + ] + }, + { + "says": "Hocken: Eddie Casales. Thirty-four, unemployed, a brother inside for arson in '54, and he was photographed on the courthouse steps at four o'clock by a newspaper man who was there for something else. Hocken: Frank, he was on the steps. Everybody in this building thinks that puts him in it. Hocken: Four o'clock puts him on the steps nine minutes before it went off. It also puts him a hundred feet from a west wing he has never once been inside.", + "choices": [ + { + "text": "I'm ready, Captain.", + "goto": 3, + "sets_flag": "briefed", + "points": 10 + } + ] + }, + { + "says": "Hocken: Good. Hocken: And Frank — whoever did this has done it before. A man does not build a clean device the first time. Hocken: Go and see the coroner.", + "choices": [] + } + ] + } + ] +} \ No newline at end of file diff --git a/cases/case-04-revenge-remorse/rooms/room1.json b/cases/case-04-revenge-remorse/rooms/room1.json new file mode 100644 index 0000000..4122c5a --- /dev/null +++ b/cases/case-04-revenge-remorse/rooms/room1.json @@ -0,0 +1,53 @@ +{ + "name": "County Courthouse — West Wing", + "enter_text": "Two dead and a hole where a corridor was. The rain is getting into it.", + "music": 2, + "strokes": [ + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 8, "meaning": "Floor" } }, + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 30, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 26, "w": 160, "h": 36, "color": 15, "meaning": "Wall" } }, + { "Rect": { "x": 48, "y": 26, "w": 52, "h": 36, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 58, "y": 30, "w": 8, "h": 28, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 78, "y": 34, "w": 6, "h": 24, "color": 8, "meaning": "None" } }, + { "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": 32, "w": 30, "h": 26, "color": 7, "meaning": "None" } }, + { "Rect": { "x": 112, "y": 32, "w": 38, "h": 26, "color": 7, "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, 146], + "exits": [null, 2, null, 0], + "exit_flags": ["", "casales_cleared", "", ""], + "exit_blocked": ["", "There is a man in a cell for this and you have not yet established whether he could have done it.", "", ""], + "objects": [ + { "name": "rubble04", "sprite": "rubble04", "x": 74, "y": 132, + "look": "The seat of it, in a service corridor the public never sees, behind a door that is locked from the corridor side and has been since 1949.", + "synonyms": "debris seat wreckage masonry hole", + "use_text": "You work it by hand for two hours. The device sat against the inside face of a wall in a locked service corridor. Whoever placed it was on the wrong side of a door that only opens with a courthouse key, and Eddie Casales has never been inside this building, and the newspaper photograph that puts him on the steps at four o'clock also puts him a hundred feet from a corridor he could not have entered." }, + { "name": "clockface", "sprite": "clockface", "x": 118, "y": 122, + "look": "The clock, thrown clear, face down, the way they always are. Two bells, a dollar and a quarter at any hardware store in the state, and the minute hand snapped off short.", + "synonyms": "clock alarm timer bells hands", + "points": 20, "sets_flag": "casales_cleared", + "use_text": "You turn it over. The minute hand has been snapped off deliberately and filed flat, which is not how an amateur builds a timer and is exactly how somebody builds one who has done it before and been let down by a minute hand. The maker filed the stub. Then he filed it again, at a slightly different angle, because the first pass was not square. A man who files a timing stub twice is a man who cannot leave a thing not-quite-right. That is not a temperament. That is a signature, and it will be on every other one he has ever built. (+20)" }, + { "name": "judge", "sprite": "judge", "x": 40, "y": 126, + "look": "Judge Aldous Pemberton, who has sat in this building for thirty-one years and who came down to the hole in his robes and has not gone back up.", + "synonyms": "pemberton honour court man aldous", + "use_text": "You ask him what was listed in the west wing this afternoon. He tells you: nothing. The west wing is records. Nothing has been listed in the west wing since 1949. He says it, and then he stops, and then he says: 'Records.'", + "dialogue": [ + { "says": "Pemberton: Thirty-one years I have sat in this building and I have never once been afraid of it.", + "choices": [ + { "text": "What's in the west wing, your Honour?", "goto": 1 }, + { "text": "Did the bailiff have enemies?", "goto": 2 } ] }, + { "says": "Pemberton: Records. Only records. Transcripts, exhibit registers, jury lists — nothing anybody would cross the road for. Pemberton: ...Exhibit registers.", + "choices": [ { "text": "Going back how far?", "goto": 3 } ] }, + { "says": "Pemberton: Bailiff Kearney had no enemies. Bailiff Kearney had a garden and a wife and thirty years of standing at a door. Pemberton: If somebody wanted Kearney they would not need eleven pounds of explosive to get him. They would need a Tuesday.", + "choices": [ { "text": "Then they wanted the room.", "goto": 1 } ] }, + { "says": "Pemberton: 1946. Pemberton: Detective, if a man wanted a particular exhibit register to stop existing, and did not know precisely which shelf, and did not much mind about the rest of the corridor — He does not finish it. He does not need to.", + "choices": [ { "text": "Then we find out what burned.", "goto": -1 } ] } ] }, + { "name": "casales", "sprite": "casales", "x": 138, "y": 144, + "look": "Eddie Casales, brought over from the cells in shirtsleeves to be looked at by people, which is not a thing the standing orders permit and is a thing everybody does.", + "synonyms": "eddie suspect prisoner accused", + "use_text": "You take him to the service corridor door and you ask him to open it. He cannot. It takes a courthouse key and there are eleven of them and every one is accounted for, and he was photographed on the steps at four o'clock by a newspaper man who was there for something else entirely. You take him back and you write it down, and it is the first thing anybody has written down in his favour since Tuesday." } + ] +} diff --git a/cases/case-04-revenge-remorse/rooms/room2.json b/cases/case-04-revenge-remorse/rooms/room2.json new file mode 100644 index 0000000..2873af7 --- /dev/null +++ b/cases/case-04-revenge-remorse/rooms/room2.json @@ -0,0 +1,37 @@ +{ + "name": "Police Squad HQ — The Map Room", + "enter_text": "Eleven years of unsolved devices on one board, and a piece of string.", + "music": 4, + "strokes": [ + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 7, "meaning": "Floor" } }, + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 64, "color": 8, "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": 7, "meaning": "Floor" } }, + { "Rect": { "x": 10, "y": 8, "w": 62, "h": 50, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 14, "y": 12, "w": 54, "h": 42, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 104, "y": 10, "w": 48, "h": 46, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 108, "y": 14, "w": 40, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 108, "y": 22, "w": 30, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 108, "y": 30, "w": 36, "h": 3, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 164, "w": 160, "h": 4, "color": 0, "meaning": "Wall" } } + ], + "spawn": [20, 146], + "exits": [null, 3, null, 1], + "exit_flags": ["", "pattern_found", "", ""], + "exit_blocked": ["", "Four devices in eleven years and you have not yet worked out where the fifth one is.", "", ""], + "objects": [ + { "name": "citymap", "sprite": "citymap", "x": 40, "y": 108, + "look": "The city, pinned. Four devices in eleven years, all unsolved, all filed separately, because they were eleven years apart and nobody has ever put them on the same board. You have put them on the same board.", + "synonyms": "map board pins string city plot", + "points": 25, "sets_flag": "pattern_found", + "use_text": "You plot them by address and string them together. A bonded warehouse in 1947. A magistrates' annexe in 1951. A records store at the harbour board in 1955. The courthouse west wing on Tuesday. Every one of them held paper. Every one of them held paper about the same year — 1946 — and every one of them had a filed timing stub, filed twice, at slightly different angles, because the first pass was not square. There is a fifth building in this city that still holds 1946 paper, and it is on Alameda, and it opens at nine tomorrow. (There is no trick to this. The addresses are the addresses. You do not have to click the exact centre of the road.) (+25)" }, + { "name": "olson", "sprite": "olson", "x": 116, "y": 122, + "look": "Ted Olson, who has brought the four filed stubs from four separate property stores in four separate envelopes and laid them out in a row.", + "synonyms": "ted scientist lab technician", + "use_text": "Olson puts all four under the comparison scope at once, which requires him to build a rig out of two lab stands and a child. Olson: Same file. Same hand. Same second pass at four degrees off, every single time, for eleven years. Olson: Frank, whoever this is, he cannot leave a thing not-quite-right. That's not a habit. That's the whole man." }, + { "name": "cell", "sprite": "cell", "x": 138, "y": 138, + "look": "Down the corridor, Eddie Casales is still in a cell, because clearing a man takes longer than arresting him and always has.", + "synonyms": "cells bars door jail", + "use_text": "You go down and tell him what you have, which is not yet enough, and that it will be tomorrow. He says nobody has told him anything since Tuesday. You tell him that was wrong and that you are telling him now." } + ] +} diff --git a/cases/case-04-revenge-remorse/rooms/room3.json b/cases/case-04-revenge-remorse/rooms/room3.json new file mode 100644 index 0000000..f413854 --- /dev/null +++ b/cases/case-04-revenge-remorse/rooms/room3.json @@ -0,0 +1,191 @@ +{ + "name": "Alameda Street Records Annexe — 8:51 AM", + "enter_text": "Nine minutes to opening, and it is under the stairs where it was always going to be.", + "music": 5, + "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": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 63, + "w": 160, + "h": 105, + "color": 8, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 6, + "y": 8, + "w": 30, + "h": 50, + "color": 7, + "meaning": "None" + } + }, + { + "Rect": { + "x": 40, + "y": 8, + "w": 30, + "h": 50, + "color": 7, + "meaning": "None" + } + }, + { + "Rect": { + "x": 74, + "y": 8, + "w": 30, + "h": 50, + "color": 7, + "meaning": "None" + } + }, + { + "Rect": { + "x": 6, + "y": 8, + "w": 98, + "h": 3, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 36, + "y": 8, + "w": 4, + "h": 50, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 70, + "y": 8, + "w": 4, + "h": 50, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 118, + "y": 10, + "w": 36, + "h": 48, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 122, + "y": 14, + "w": 28, + "h": 40, + "color": 7, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 164, + "w": 160, + "h": 4, + "color": 0, + "meaning": "Wall" + } + } + ], + "spawn": [ + 18, + 148 + ], + "exits": [ + null, + null, + null, + 2 + ], + "objects": [ + { + "name": "orders", + "sprite": "casefile", + "x": 44, + "y": 122, + "look": "SECTION 14, PARAGRAPH NINE. Four sentences. In this manual since 1949. 'Where a device employs a mechanical timer, the officer shall separate the leads in the following order: earth, return, feed, trigger.'", + "synonyms": "section procedure paragraph standing orders rulebook nine", + "points": 15, + "sets_flag": "read_para", + "use_text": "You read paragraph nine aloud, twice, because that is what the paragraph is for. Earth, return, feed, trigger. Then you look at the device, and then you look at the paragraph again. Paragraph nine was written in 1949, for a mechanical timer built in 1949, in which the trigger lead was the last thing energised. On this device — on all four of his devices, and you have seen the photographs of all four — the trigger lead is energised *first*, because he files the stub twice and the second pass shortens the contact throw. Take earth first on this one and it completes. The manual is wrong. The manual has been wrong since 1949. It has never been wrong before because nobody has ever reached paragraph nine and lived to file a note about it. (+15)" + }, + { + "name": "bomb", + "sprite": "bomb", + "x": 88, + "y": 130, + "look": "Under the stairs, against the inside face of the wall, eleven pounds of it wired to a dollar-and-a-quarter alarm clock with two bells. The minute hand has been snapped off and filed flat, and then filed again, at about four degrees off square, because the first pass was not right. Eleven minutes.", + "synonyms": "device explosive charge timer wires", + "requires_flag": "read_para", + "wins": true, + "points": 25, + "use_text": "Standing orders require you to establish a cordon and wait for the bomb squad. The bomb squad is nineteen minutes out. The clock says eleven. So you kneel down under a staircase in an empty records annexe and you do the thing the manual tells you not to do, in the order the manual tells you not to do it, because you have read the manual eleven times and today you also read the device. Trigger. Feed. Return. Earth. Backwards. Every step of it backwards, deliberately, by a man who has never knowingly departed from a written instruction in nineteen years, and who is departing from this one because the instruction is wrong and he can prove it in four sentences. The bells do not ring. Eddie Casales is released at eleven o'clock and nobody apologises to him, because a department does not apologise, so you do it yourself, on the steps, in front of a newspaper man who is there for something else entirely. They find the man on Thursday. A court clerk, twenty-two years in, who in 1946 signed an exhibit register he should not have signed and has spent eleven years removing buildings that contained a copy of it, and who could not, at any point in those eleven years, leave a timing stub not-quite-square. Section 14, paragraph nine is amended in the spring. The amendment is four sentences long. It is signed by Captain Ed Hocken, who also asks you, that same afternoon, whether you have been to see the coroner. Somewhere behind you Officer Al says something and everybody laughs and everybody freezes, smiling, holding it — except the clock, which is still going, and which will now go on going for another forty years in a property store in a box. (+25)" + }, + { + "name": "casales", + "sprite": "casales", + "x": 130, + "y": 146, + "look": "Eddie Casales, brought along in the car because you were not leaving him in a cell for a fifth day, standing well back on the pavement where you put him.", + "synonyms": "eddie suspect prisoner accused", + "use_text": "You tell him to stand across the road and if the bells ring to run and keep running. He asks why you brought him. You tell him that a man who has been in a cell for four days for something he did not do is entitled to watch it come off him." + }, + { + "name": "clockface", + "sprite": "clockface", + "x": 62, + "y": 148, + "look": "The clock on the device. Two bells, a dollar and a quarter, minute hand filed twice. Nine minutes.", + "synonyms": "clock alarm timer bells", + "kills": true, + "use_text": "You reach for the clock, because the clock is the part that is counting and the clock is what a reasonable man reaches for. Paragraph nine does not mention the clock. Paragraph nine has not mentioned the clock since 1949." + } + ] +} \ No newline at end of file diff --git a/cases/case-04-revenge-remorse/sprites.json b/cases/case-04-revenge-remorse/sprites.json new file mode 100644 index 0000000..1ac37a1 --- /dev/null +++ b/cases/case-04-revenge-remorse/sprites.json @@ -0,0 +1,12 @@ +{ + "_comment": "Act I, monochrome. Shared sprites copied from case-01.", + "courthouse": { "h": 30, "prompt": "A 1950s civic courthouse building with columns, one wing blown open and smoking, seen from the street, black and white monochrome grayscale only" }, + "rubble04": { "h": 14, "prompt": "A heap of smoking broken masonry and splintered courtroom benches, seen from the side, black and white monochrome grayscale only" }, + "bomb": { "h": 16, "prompt": "A crude 1950s time bomb, sticks taped to an alarm clock with coloured wires, sitting on a floor, seen from the front, black and white monochrome grayscale only" }, + "manual": { "h": 12, "prompt": "A slim official procedure manual booklet lying open flat with numbered paragraphs, single object, black and white monochrome grayscale only" }, + "casales": { "h": 25, "prompt": "A gaunt frightened 1950s man in shirtsleeves facing the viewer, unshaven, hands at his sides, hollow eyed, black and white monochrome grayscale only" }, + "citymap": { "h": 26, "prompt": "A large city street map pinned to a board with coloured pins and string between them, seen straight on, black and white monochrome grayscale only" }, + "judge": { "h": 25, "prompt": "A stern elderly 1950s judge in robes facing the viewer, half moon spectacles, arms folded, black and white monochrome grayscale only" }, + "clockface": { "h": 13, "prompt": "A cheap 1950s wind up alarm clock with two bells on top, seen from the front, black and white monochrome grayscale only" }, + "cell": { "h": 28, "prompt": "A 1950s police cell door of heavy iron bars with a small hatch, seen straight on, closed, black and white monochrome grayscale only" } +} diff --git a/cases/case-04-revenge-remorse/sprites/al.png b/cases/case-04-revenge-remorse/sprites/al.png new file mode 100644 index 0000000000000000000000000000000000000000..c039f87fb6e4f80edcd4c1cf9d64eab8671ada53 GIT binary patch literal 2685 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 literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/body.png b/cases/case-04-revenge-remorse/sprites/body.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7ca5aa1b73f84a8afa2ccc19ba6ef079edfb61 GIT binary patch literal 1087 zcmV-F1i<@=P)ChO*hqoVl6^Ui6u?O z#)d%C#vf33ZZu>eq9szAT9Gb9lwy^pW0N%Yy?5U^N6vlon*>YW@NwVVbKg1N`Odlb zf`vgu8HA7uVb9agejy_FIH5r2nHVGtu0xQDV08TW5&&+3knj|V46K@Gg^1iqB#n6L zTm4b9?+nxg7Hatqt`lbbUAc1K+F*vurzZ~8k~3LwW)E(G&Sy4WWtaMx5_`XCl_;qo z>yWPD+RBYL%H!o@hu;~V?%uxRf^zU#R0)}8vW|q~IQGFvgdg74CB3iovjtX>X-4y0 zYeKv#k-52VHBOScG@mI;Yt<&gci+#waQgGl%JcK{_ol*#A`0sZ0HjJb%;lIg^(uLN z&%hkTiBDjCLbnR>V-h_6I*uwf)HTAU>{JPqD(GP0&){$?5H{UwQjvTkDt?Cn=czox%TAzyu){w5N zE6mOjpa1D>og7nZAf1|-o#oA&?(p^l2M)H_zy49!BK^Ou;}zD8IXwIU zQX>3v;pa!P1O$6u-@n`FpUKI|OA8B?j>3i_F8%o{1`iMUUh&6?5X2vJ24V%de25qO zUc!m-j{s}@nrvm`vBp$euGK33XK?D|N#l})N~MzB`Q)yaZ$JIyW4my*g8o~` z-1#579_sFyS5DU0i{aqlP&zQM&yJ0K2qD5&#a z$OVDVT)f-HqiN(}AlfisSZk|1B%($*~qOn@*9d?{1su(-H{VzG$!_5#8%1T*1A6d_3x|DC_2 zjDf#rM5~uaK9}=zapJIYeHnLeDPgg44N)BF_RH!OXP)>2N(l~JEzIpe&bMHBCAX*TGwi$rF4;H1B{Z@lI+lmR% z2xhBYtu=XtoUE_^Os;c5)IJ9d%_OLdxZ`S=cy#Zpvm;bB`UBL*1=yE)???naO6!E0wIcAP7u??@vpw zx6NeaA5W#Ew)hy#M2^FVh9_%9z5WKDzIpt;fn6N}lAFnn&^ zBqCxqjLI@HGh&Iju3W!C*6<*hja)ZyZ4PkM8X7Z|irr?Vgm2!OiE!HB>^()TiFGEE zg;M&zm`=NcmoHvHw6d7$?Wz_faM;1V+UMcLn^_C_yo?+f5!ZFa^Sq&t)@Sodr!UCq zQ)dPR^B39HGCnpg7t@!-5Yf|T%d)!C#NOXMG#VcfhM_g5{i}o4+8Sc9IHs?a@ejCg V2dtOpO=$oC002ovPDHLkV1jgR`rrTn literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/casales.png b/cases/case-04-revenge-remorse/sprites/casales.png new file mode 100644 index 0000000000000000000000000000000000000000..239bd6f344150ba67a7f172b24d8b61e40c78185 GIT binary patch literal 670 zcmV;P0%84$P)X1^@s62ynlM0007INklHX+J1g&xx1ko>uELv1bn--NTm({NN3kgv{%i?Yf zv9#1EKgcq3AryI|qP%%#V&=TpXyCjv@0mICJZEN(V+n}jK#qPV-ZyN701knK0I+(1 zMBvO2h(W)UfCMyKgtOiXY>K9VL61|xB#5IA!5Fuqm4liiE#Do*#| zNb9Kvu(-H@`y&qlc9CPPRztB^NO{6#GKpJXU&pi2F|=e`jAH^83=a=S+QwcGHk3DE z?D;sBmX|SdZv=_=o}WCe;M2zyFf%wfQQXGH41WCjiR(i{@Sd!ioa@}fTefAYv9te{ zh$N~#c~%1t9z8~}P}or_m5hRB77;k-YE#qGIC2qh# zvv$TBuEF&{)ecVT_U2I3XD+3L!GQ~BSa_daCW^$l3_AA0$QSb5oA2QeB>tz+>W>-W zY>+%DpfRvKM0JcPo6t6O|NByL25n*LZ{EH$ZMGtam8)Ei4Y2d|XOPXd8Yk8&1bf2V z*501}vpz;3*O}vL^((Giy>`kl$l*^21P)U3>&E7E38LEs01$;)}SN=o3)FJ`28qp~Tn`I(rOu#J^BTF!9cqSwb;) zZqA&XIde#E9BVkddWjBLN`|>10c4`K*=+dP?GS{;VnMUnVle2xi@SGMtJkH7AgTiH z0+i(qr)Mp+s;cGP{cXr1IP>|Fe0^`}U-s#ocTjVu*Slc)FeRB&meHslEXw*UYD07*qo IM6N<$f*MkZO8@`> literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/cell.png b/cases/case-04-revenge-remorse/sprites/cell.png new file mode 100644 index 0000000000000000000000000000000000000000..8613e1437aa32a0535034a10fa7591ee1abd7fcc GIT binary patch literal 934 zcmV;X16lluP)K`G32O$S9 zej=VkBn0sk)JaIPyY6&v_v`nnq~7c9?HRUUreD9R`Bl}gJ_bKnU*|M2z$_pl0Qvy{ z76ypN@Ib^~r#Gyo%mCLnKIFgtymRLJ@4j7m_4U`hh%9>X0c`W58?5Jd-+Slti*H=? zdJfnk=bv3(=1Z5}=cH+BIR5mBeQT}DMwuEEtsAH+3kV2VHu^hFQf#mFX^1d5p`U*I z0gfHZ&@p@OgNI(Ydl&X(%rK+$$?*~>NV2rFq?g_hS@kxQzzG24`DkxO0nj9dz>ooY z@uio++FFpP5s(%EX8@8ksYOXW6jKyaKn3ugp(sl;)Xv5c-}?fz>Y^w?gprszh604f zM4Ut0E)_MQ8G4w#eo1$$@rjZ$6r!lMjm?H3XcU?r0wAfvxyCU2kj_z3SM}mtVm>q$ zA`pv!wHB?dsViG&+5vj!k~vIv&WBtn8u+BPHtjf=Co|7;a*t!M*fq=X}-Ax`n zdYJa4u>cZ6<6JoJ?CzX8D5fx|BR2QM#s(=KLWyuaVe5%ITHDN&u^Vsd)|KWvKhD}@D#n<{o$FSbXo)~dj4l!#s<{A$ zJMg|@4-<^zEqw~cIR{>s5yyi;QzNhMh7f4^ z>^Z2bDyyryUm!ho?SYw3E71dZF3TyT*+{DZFu6Z5d;jeoZ*0^3EyXw~bUI9n=`&?n zwzom5Vt*PNZR5rU*9UbN-{`RoJFwhMX6!L+BUCYlfPDl11ESjEV(Bx$s{jB107*qo IM6N<$g6bx{PXGV_ literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/citymap.png b/cases/case-04-revenge-remorse/sprites/citymap.png new file mode 100644 index 0000000000000000000000000000000000000000..58442e1ccf565e5c45854d6c6035b152b385a310 GIT binary patch literal 1687 zcmV;I259+-P)*Ig?G0jAz7=SQs z+?b1(12M>jzmD-lX9Hb`bO@FqQX`+=ux5{P-BL1Zr&KA|=$pcDhDVLQ_G6(j2wH%k zvFE!(!R0GfrUb;@t6o~|N-1(8EML05!VB1wAqO<4DJxWC5+RwHj8tXLt-qfvMw^nD;q+BmmL{vEW&bz3z>Qid| zYX3b%G^DJeN-tf$!T`ChV{t@p=_gm!NOhrfZl0oF&_4H zodK$zF>Qusp=)j$t=Bg+7yzc#t5@lbn>Oj@UAwi+^-;&j5k{Yg1k1DWOl>Dmo$?;@ z1bg+ub1&-8_I`0XFE@vNIdnLY7bqASId>v8^17Rc{_^7w_RH(mlHc~hmzxg@3iBU- z9B;h&CLGtr#7X1k#m~piwRa{^SsonTxOMZYQCD5N_JLXVH@k^=a9FVHVo}+!(>52s zX7n{!@!u8Ire-M(%P&nsTwi-*7oZCAbMs8s6&B>+Qg__ccEhU;cx>KdsI3|QMtdY$ zF`+0B7E&O;<=qV*y}xJSiKEBnb$55=j~P3*b>*}Fn`yI>?YE5b#D7lu^oxC;-(6WT zJQWUy^}lYr)jxmzdP=2Iuq+#~&KQmz{~fP2ZUpxxH{Crm??W(H7}nbKAc}_+AO8B= z0}lW=89o=jy0pCXgxA>;a9xe2rp9pV{(X1-qxLq}H~3LO+Rb_Rp}D-T@#K;a>>QtQ zrmFgCQ-ehd>#?Z59v^=23AcH1r2YIvDMY-xD_I1fvZ-;+-m>zt9sx1f0|JmrIap9% zU-s*fBmep4&;kEnN1nF{gawO3R-P}HMG``h0TOB2wD~Qwes$d|XlUFpW$3VBt(qu5 zkS~P>_9sQbw+Daz>30B8mY4izNgIPV9?@fKYSu`t&1Ulwp-2kB5fmhy6oe3XA`~)D zCz-(g56;@g(JfiDWJfgC?PupYyW@O3Q{AkGx7}KM^9ZhtiHQB2{m3JTE*K-Zn7*96 z$n`he(p_3n`6uHsE&+7vUM!d)CIIUd}c}LLG|6U5mb<*dI zz}d5HEaY+kY=zP!Eg@80-CQ=xX(FG`qV!w?P)gft1x^pi;ddABJO%mv4_g_Ht90L8%~4hNnbi|GOkIC}49BWH68 zNM_g>u>QkqY=RKpb?&u;*|L|J%rc%mWO~E)f?VW+!9; zW@g#kG**A1Y>zVil725G?wCBqNHjFP4!p+7gzI z$Gy#(8L?;-fx_apfwlTLoB=bm`R-ES3o!Fl!|UF?;W$;x)7Q6Bj*(;H^|EEl(|nKT h*~k#vO50Wn{|Dm1_b0x$yA1#U002ovPDHLkV1f{@P{RNK literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/clockface.png b/cases/case-04-revenge-remorse/sprites/clockface.png new file mode 100644 index 0000000000000000000000000000000000000000..688399d10dc2b2f68cf6f1aed41e5ac29c6e5d63 GIT binary patch literal 270 zcmV+p0rCEcP)*F|s!ath63` zY|q*Y3LzrB03ZN)AHDH-I`)+h)c6zB=slsBPv;yz7YniyjK?2b6@_*X)5*jfidD8a zpUw0=leL1f+#3F@zndalmbufQRv^RB4~MTjH{vm=*JT+avTEkT-(i2B+9(nHmYcR) zQA9X+9qyoeMx9PAS@{*bJSgL=|9*_Qe9qP}h{l>k{IObRFn z706J9=*o=R=(V;$#EPgrSNXyEvnuL=3nOU`S=(sE6cXC+yotHZqPIPjhNc=JajrfwAS5u qv7gJ$qt*I{Mx%jkcMFBWNBJLqAs-NCuikM00000Jxd*6KTXWonNdVSA7zPwuoVor1DU*c|$o#Z?nlf3IF{l0VzI$n!m^lzRv%j7{Mk$jJAcP;~ zJ;NxDnNx?GBpv{ajO|xeCWf&FF{@f5whqo%{rC;W|6mP1zhCz@;8(q25dqd(wI@g< zMzw_wVsQNEA&_PW*vJ_jwey6I$WA{pIFxCTr;wzq1rrdZ#zP$}leIinoNGqC1jbry ze&3uZ50qQF%7cqzd%He3w0DR={~@rZgo*L-4gHX4Y!+nqePC?tk46&orNt+4lC&6z zh-`V|-8szF?!5#`!)K?;(huVV-ZU33o~JlYe3OW410u;mw$$&2wz2z$F-Vg{!zx83 zglk{d5Cj%|ef@}{NM!*DB27J!v6{G$S!2My2ni9wt$O3jmCILWj2s?a$i7JO?p8oe zJ=I`Tt5suLtu_mgnR4cbiw{5~eaV`R%xbl&n2gvF0+!^g`Nc}Wj8=0;<=R|Lft0$& z$uW79dOloE`P8;f)Z3BisTZ}{{ch_je|NDbu;d*3T^9hkxw7)=n$%rnUzJ@Q0ffZV z?sk}i$V`baI=Zjp1MY20xvB~(iSM6Txly5ZyEPz7DwPUJDRyJzV1~Ev+(NtA(Jge% z0?aQgps`iQ)ZBO6d%Pr0vi4pQ)?2&-}A{WRR&MY5}v5vZCx6Q;!qCvEz;6@EeDs5Rj6T@Rn?C z*c$D{TY0lDWn^$^lcucoqzpvoDSU;0o6Q3OW9_zJRD$SZwr_vAok@wDoSfWnP6&)K zw6wIs6)xt@ombO~PvFTk^JRopx}{U)3r^0EH;q-Qh0>fEgoI2xVBrJbnA&u%37k=q zGc-0H$AX3T^E3ZAgE6B=Z_Um-yJs`K(R(g4S9@|qC3gQPJ^4ue=b!(rynV_P#ffu{ zsZ*!&zAIZcfj$9oKR10jyu|Jw$&`&OH`dv;WlDK@Aj#pwZ-58h>JKlX%!K#pV+uj0 z2L)iFFCz6smJt#MUVlAWP*A8?x3spRwWS%!qze(0(*9Ck>*fEnu5Tq$t5t@-#*Hgm z-Fp7QrclVlg$u2A^~#kwJ-y)5AoekW_ny0PIC&L?sV1oZw_j}AMAhi><;&>q?hbvr z3J}SD&ar+dkpIGrkwRpCnL6j5^Jo|CHoqn9( z>ymCtFYK#hXV8l;zR*nLxUu6V-a2~J0slEQI4fj0d;auiv25A0Z*F{M6MppLjcB^i zhN8j6IQy@E;>y*I(SJL2T2$RV{UbjV?wxz@X~QrCUD<%f4N3TY!YhpiGa`$ZJeVg1 z!3O~vg*Vc@<2tCQxC=9?s_@XmOO@a)=bBMny$UfWhFvf3#ER+_0pK&k7T!Pe0ZL29 zs`lx}^TC4$ar5wD7(QwQUfsP1x0RQ}G%c8%tA69#HQ2*EoTM;~L|a??sW*=v{j9E- z3>swytsF5DK=owW3tGT}dk&77Gw%U6IGWC$#czK7ykdOtF9%RkScK)vABXEWT5%~5 z@9xGQe*Y4f!t7E3LqfMRW>lecY$=KdmY}7%1&bFyh<$taA`}h>c}wRhAVwn@(G}V_ z0%$t>VUf~@iVd|_imA(OZMSsU_PIz$7o22LS(xHe=_Ujm$58@BqunSQHwG(L{Qy_5 zUqU!!DJxlK2qDW*dkoG9OTjcvSfQ}m?>a7QJArsSPB;-^E2Mf#XIBJ~u1+NE1TM9= zBNnxB=*ZEY`c8&4c;E~&Kr)$x6fSad@=!H>Mh>@Nt3EMg_=uKajN|C>V{nqL>by!( z*MVi4%DS;w4DD^Lm^5i3#!noJ+wYiEFHZ z5-c9Vq6hBJ+DN1dH3=qwJMWx^3F9YXOT!k0d|k(3xjA|Cl7yi{hT)zs-Hi#8#v>Aq zGART?AxlMl+l7nx$$ju zdynh0eIUrQHamtde6b1-FI}RP%0{jb$}04ud@)T9(=uV07TG{0d%}*Rv-29Z@7#f= zre+n?WOZdFkMeVKP*6~y*89bPrYVoKnZ2b_sAnslSgwT+IOunbH0(s-Llb4Cp88sjFY7)>4s3Z70Oe^vkOx`KeqnhIQ-K zsVcL2^%`XXqF?=Do4SZ<>(&N{WYfltYE0NR*8lKnsmduByYioZV?chs;zt(NHJf?! z!20#;)tH-`gPNKe?FHItaMZ3|qZF>ITdTZ8)~{PrtJc#qLIpj(U|wQ-p9{zebZA~) zE-aHPOS_K1Q!8um%(Gk4v?maiOxk$#u}2Xy!`Quhw?2?DaITHIwsvjs(cpVO6 zP+e^;^73=h(HYV2<|GPdC@C(&m8;i+w{7BCG^h|`OH2LeN~5%Jq9Z6a7c5+akt2qw z&1ATrZ*54=30GT9TZv=H(3_B;`t4yc%d)gpd}9GrZ5ZcV$CMwwmVx3ygK@nhqCB2R z*s7_`oj)J9-Z~m~GNH~OFD+iO1UC;I3fp#ieXz(#Z0(J)qsPFq!aBAUgy6Vzr*CG+OaklB4_e>xfjUXORVC2YA zsy#-$h!J^8I48MCOYBgd!Zcu0(ELKKAe5Pao!_D_w<76qHTs zj|JlY?P@%Be6jL8b;kEUI3wcSahTNO3FfKNlZrbtNX4o5)i4Nq@^fk!c?Hue>#2Mw z?8rkZrd9QlX)&&!>pPv;{#PD-uEJx&Re*BxaqjyylZF@0+;h+SoM+D0y>MN|z9RJ^xO)8>hjt$W*LD99 zj&uw3b`}Nzo_IXP1aJdZ_9F_&d>MN*$(@HgnO(7@5yl0nviBkYQnv#zdLnyr$Y^>d z_-1zb8`^^`T8*b*kx!(~su?xVIb+P(|GP<~T5t6g#MF6a<|%J&Z6W`#fJE{%z>JB> zDL9UU*RNjU#K|P?+`fhOjt=Zpckr=T#IxrwkUD>XdwYBF;oW;fgO@X(2KxK1B$KDm zKRAH4)=s3;X$;>S!tl@yw6?WleQgbZi_Ohn7|Gtp^z;*uR)+-;!RJz`ObE z?5y3FzAlC2F)*-Gt=hV1{@;JB<9PQmR4S{+=ECqgh&m#IJLz}R@+{;|{zr?FJxT?MU;ZE^5DBxs!Q+MlYAue0mTO{G%m63Td? z5IqyYo8!L#^|(M3Yj1xhljh)7>ntsl%Ubxx3vKHqAY;&fsgI3u?4W8?rG+o%FR72E U9y{P^z5oCK07*qoM6N<$f+rtOlmGw# literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/ego.png b/cases/case-04-revenge-remorse/sprites/ego.png new file mode 100644 index 0000000000000000000000000000000000000000..512ab3123c8b48c666e6916fa098506efae6fb95 GIT binary patch literal 713 zcmV;)0yh1LP)o(>E%%$%8X?!D)NMIh1CJpe8%tKcAD zurNe)6?lk-Lf*Z7eKMC@#6LfPwdOYqm$;_@3>9F4@rlXDZSC#&@HvYseSJk(H%PyC z8-!23WEa_s6Dm_xCeP(=6c|py&U7WGQq`PJH}KS*ZeF`%m^|_6)?GYwsTJAmSIp1P zz`%zg!@?nx1D2I1xa-Isz%%fyMk?@qplNq4ic90H!W?j7uoIrOAObxc%a9I1Km%u5 z@a)E^{Eq|?(gmfdZFu?OuDdwa`v??|!C0jh1xhF&=Aq-_2s#?;v7;`9YdxJH(u^3W zP9vby!3$$91)2UfBsOfo?5A(oSD%129`)RugtfF}VxE_qzI_%%1Y-oN>^o{U0w%%m z<)f&mOl&r<#=4!vm6bmT7_hJo=#hu3qf;U*csg(b-tzaK@X4UKD6UBmvR;@t0~>Ii00000NkvXXu0mjf8MsG- literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/evidence.png b/cases/case-04-revenge-remorse/sprites/evidence.png new file mode 100644 index 0000000000000000000000000000000000000000..6e90e14f1c70913724b8e5fc7233c60947ae4bba GIT binary patch literal 270 zcmV+p0rCEcP)=()(nXPGQMBL|Ts+oT>pKjr%M zt%AogGeG$D0BXh%+V?$T+@P*&s4mEPK~+^aoj$Q)ssk}b9NU(^ zqDEG2nx+>Z1Zb&nid%$E5Z0tePhz!Q6e#TS(D)S7Pm@&4*^|77Ab69&7bRJ-ecR>V+s~d<({;{#jYx}F011U1;CXG6gGk>f%9=~UsI51v!yG$Yw03!NdEsAFX9zA^QsMmYL<#cLJg^>d6 z3m_uf^~@rm!C=65@7=+{kDpjv-sf0vw>2$q%nHa0CXgF&bNPPy0Jf(UD9oE0P5+4+bdf|cbJTl2Ga$_<&G%A8!oULL zxd)L;z-aSb=bYvo;8_BQGHVuP6ZdHGV(LBtygHcm0vX0<4*mWwYsp6Aw!KJ{2%w1~xjqDW4u T?P$ao00000NkvXXu0mjfY2OPf literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/guest.png b/cases/case-04-revenge-remorse/sprites/guest.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd58c64ba932695013403534a65f8a082ae07a0 GIT binary patch literal 748 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 N002ovPDHLkV1mD$@0|bu literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/nordberg.png b/cases/case-04-revenge-remorse/sprites/nordberg.png new file mode 100644 index 0000000000000000000000000000000000000000..40b44b6b4c42349a55af29aab1ac7d77126ed496 GIT binary patch literal 841 zcmV-P1GfB$P)&J3m)_Z4_-9& zA4F7bLnP9Oph|;MsgSmQ+MSub=g7UYGu4}%y|Z`DckXx2`OZKog)t*2CNwl|c(0hr zbsREhq4|FQ0TieN>d5DbnW?s>mSVGKb%X&+`#6wd0xsOWKR9Xf!i2BzudB^;o0QMN)$bUB?K(XA~ELWFQ1lzrxgB<7D7sq2@@%` zKSjDAN)fHBTX9$WX{tUwDYPpQ7=i)YwoE``hN2>h#UgBJLrQ6=N(~Ue1lM)Z|GD1) zQq2d2Virt<_4RSQdi@fS=p+sDlhf65JVmW-ZGNSgXzj+0tQ4^=!MgPRIn(h|r%6*Z zpmXQWl9U!*x_V`^2F;pYPOj^5P3=;SPMuN8Q_`otFQ)ub3d!y5kHMrc@a0?0gZu6H z{__{CGMn=qPk7*KA1cbDZ<-ILFmLW0SeER@maPpB4;?;0jZIA#0C;=%>@ktEnPX<( zxpR9^QK#UH>b(y|#gU-vJw4r3(dZP)<&GN1Og2a9blN-zN&)c09w~Su`k!Sw}t-Nu!34Vrl*ie{HdubI0>9<+W|cR+<@$ zy$&W=o;`miq}u!G1M>MN!Kj#dUA<~`SM`$R=<0g0IUL!Rix(-N7LUiNZq1r;U!dW^ z!Nu|Vbri2(Pv*m;1?zgA0k2$D2gh}B@BW==IQ|ldmRCHzee2d=r{F+ZIyc5YbN5Zr TCSlno00000NkvXXu0mjffUuBM literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/olson.png b/cases/case-04-revenge-remorse/sprites/olson.png new file mode 100644 index 0000000000000000000000000000000000000000..7a587ad729c7064b1bee6b25eeacdb8d795e4fb1 GIT binary patch literal 698 zcmV;r0!96aP)X1^@s61#ZvJ0007kNkl-pchsg;n>Im3DY$AC6p_-lAC5W% z4yBudh?JZl3`)wzH|INX&VBDW^>~MSIrDwr`Ockto?`*&<1AdmA4ohrGz4&s)>c=k z8t-~Xp7bRMc{02Nl5@M$ckcjT%P~N?CEaXu8x2}P)j1_ z(bRPfd)PX2?|xzlsU@~GC1|h+4manG6h#etJ*ax3Mi3z+&6eN2O{;P0KkFfmYvwT} zslf2rbC{c-!|d#%r)tGqsHG>5A3l%cUuwaCF$2x{Ci7nT`UT&%wnEcN(h9j;go_iG zk|qT;Wr(2RV53=M26n2y;k`GK{^MwDI)rOCuA}orml0#GVRU>#ZCcaJYN@XLf3L^@tan0Fr4i2Be`g#h`AK6sZ()7%OEWh#TV|p^-bjszG ze-zW8Oeh0~&<3qh0e=4YZh(P-LEOB3E9v1sf~qKCuS!rYl}g!laSE(^U}I#{5bnQd zMu&$Sd1s?k|F{eo_5tinf;qrKfS)?X$YIy8q$l7ylkfRwzrSR~jC1rNzbAdF}% ztmV<#dK~$DGZul2RnoOHR+1q~Bo^6hHt# zL=-LZ-1F0gZC&GVJc@{b1{;)R8A#$|vlfHeAj&*fkofxfh8UL?xQ zC>`qOb_-R->~`km2BW(piF7`H*1MwA#mhn;pB`4tX|L_*134J<2O7r_s%pu4v*v5H z#Le~i9;VfrK%1a))lbwU#*+zpy_iDr@gRditG9P|ak$J2H9?oNq?>06iTz;@`oBI~b!u?{0000`_m`rW^rK*(X)S8nxvV+@uN;G~ fOkGQ|p&9-Fc%;jG@fd*i00000NkvXXu0mjf<~@3X literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/rubble04.png b/cases/case-04-revenge-remorse/sprites/rubble04.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc700f7ebd9137e5a2e1c1a70204483ac4729f8 GIT binary patch literal 706 zcmV;z0zLhSP)+!1>O-=lh*M_naRSLI7X@q-i+-l6X2f zsT}fHMFlr~8B9htzjO1FpUiYg$uvm$GMN7e&ok)&%Bja0b`}-g24`7h4jTNg0`yP9 zOrU8k+=8;wQfFRgIR*31T4Zj*^gJ?8<^bm$FQ=x6gIB5|BO{}9w*DM#+HJ0=rDT;% zl>#Jntoo2)gvn~~$)%}q`j4u_>-jF8*y z-oPQP?d>kzB^!7+Nbl$8ai{MdJ})hy^=hlGI5;?j!Yu`;K3)xv&x@2GEPVU`+n!=v zYirX)+r76KRdxrGs|ob?^}}i{P_!fbTuttBI-7K*$as{-B4gQ387LZ!Qm5NZ-90^Y zrP)c-Gt;!Mq(uMcoKY+mqlJaV)0%2(-RhuJ@ejav0AE|0TOyiQ0CjbBlbZGZ1Lb#B or=hXPp~FXx()i<;%%=_E51);yBe*Vw)Bpeg07*qoM6N<$f=lp7KL7v# literal 0 HcmV?d00001 diff --git a/cases/case-04-revenge-remorse/sprites/squadcar.png b/cases/case-04-revenge-remorse/sprites/squadcar.png new file mode 100644 index 0000000000000000000000000000000000000000..195c2f33b23264233e8c1bdd508593bea5712acf GIT binary patch literal 2906 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 Ef|6aT!vFvP literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/game.json b/cases/case-05-butler-did-it/game.json new file mode 100644 index 0000000..e3d4a25 --- /dev/null +++ b/cases/case-05-butler-did-it/game.json @@ -0,0 +1,13 @@ +{ + "name": "Police Squad Quest — Case Five: The Butler Did It", + "start_room": 0, + "max_score": 100, + "intro_text": "POLICE SQUAD. A twelve-year-old girl went missing from her own birthday party between the cake and the candles, in a house with forty guests and one door. My name is Drebin. Detective Lieutenant Frank Drebin, and I have read the literature, and the literature is clear that in a house like this it is always the butler, which is precisely why it will not be. Type 'help'.", + "death_text": "† OFFICER DOWN. The party continues. The day restarts. †", + "verbs": [ + { "name": "use", "words": ["dust", "cuff", "book", "frisk", "radio", "arrest", "seal", "bag", "label", "weigh", "halt", "search", "check"] }, + { "name": "look", "words": ["investigate", "observe", "detect"] }, + { "name": "talk", "words": ["interrogate", "question", "brief"] } + ], + "flags": { "briefed": false, "cake_sealed": false, "route_found": false, "motive_found": false } +} diff --git a/cases/case-05-butler-did-it/rooms/room0.json b/cases/case-05-butler-did-it/rooms/room0.json new file mode 100644 index 0000000..579252b --- /dev/null +++ b/cases/case-05-butler-did-it/rooms/room0.json @@ -0,0 +1,52 @@ +{ + "name": "Police Squad HQ — Squad Room", + "enter_text": "The squad room. Somebody has left a book on your desk about country house murders.", + "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": 14, "y": 14, "w": 42, "h": 30, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 18, "y": 20, "w": 30, "h": 3, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 18, "y": 28, "w": 24, "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": ["", "A twelve-year-old is missing and you have not been briefed. Get briefed.", "", ""], + "objects": [ + { "name": "casefile", "sprite": "casefile", "x": 62, "y": 130, + "look": "VANE, ELEANOR, 12. Missing from 4 Cranbourne Drive between 7:40 and 7:44 PM, being the interval between the cake being wheeled in and the candles being lit. Forty guests. One front door, watched all evening by a hired man on the step. No windows opened.", + "synonyms": "file folder report papers case eleanor vane", "takeable": true, "points": 5 }, + { "name": "al", "sprite": "al", "x": 80, "y": 66, + "look": "Officer Al. Shoes, and about nine inches of trouser, and a conversation happening above the ceiling.", + "synonyms": "tall officer legs", "use_text": "You shake his hand. You have to jump." }, + { "name": "guest", "sprite": "guest", "x": 120, "y": 150, + "look": "This week's television actor, mid-wave, dead since the opening titles. Nobody has moved him.", + "synonyms": "star actor body", "use_text": "You check him for a pulse, as procedure requires. There isn't one. You note the time." }, + { "name": "hocken", "sprite": "hocken", "x": 106, "y": 126, + "look": "Captain Ed Hocken, holding a guest list with forty names on it and one crossed out.", + "synonyms": "captain ed boss", + "dialogue": [ + { "says": "Hocken: Eleanor Vane, twelve years old, gone out of her own birthday party in four minutes. Father's Cornelius Vane — shipping, mostly. Hocken: Forty guests, one door, a man on the step the whole evening. Nobody came out of that house.", + "choices": [ + { "text": "Then she didn't come out of the house.", "goto": 1 }, + { "text": "Who's on the staff?", "goto": 2 }, + { "text": "I'll take it, Captain.", "goto": 3, "sets_flag": "briefed", "points": 10 } ] }, + { "says": "Hocken: That's what I said. Everybody looked at me. Hocken: Frank, forty people saw a cake wheeled in and four minutes later there was a girl missing and a cake with no candles lit.", + "choices": [ { "text": "Who's on the staff?", "goto": 2 } ] }, + { "says": "Hocken: Cook, two hired girls for the evening, a governess, and a butler. Hocken: The butler's been with the family thirty-one years. Everybody in that house says the same three words about him and the three words are 'not the butler'.", + "choices": [ + { "text": "Then it isn't the butler.", "goto": 4 }, + { "text": "I'll take it, Captain.", "goto": 3, "sets_flag": "briefed", "points": 10 } ] }, + { "says": "Hocken: Good. And Frank — the cake's still in that house and forty people have had a fork in it. Hocken: Whatever that cake is, it is the only object in this case that was in the room at 7:40 and is still in the room now. Treat it like a body.", + "choices": [] }, + { "says": "Hocken: You haven't even been to the house. You explain that the literature on this class of offence is unanimous that it is the butler, that a detective who arrives at a house of this description and immediately suspects the butler is not conducting an investigation but repeating a convention, and that you therefore intend to clear every other person in the building first, on principle. Hocken: ...How many other people? You tell him forty-four.", + "choices": [ { "text": "I'll take it, Captain.", "goto": 3, "sets_flag": "briefed", "points": 10 } ] } ] } + ] +} diff --git a/cases/case-05-butler-did-it/rooms/room1.json b/cases/case-05-butler-did-it/rooms/room1.json new file mode 100644 index 0000000..23e9cb3 --- /dev/null +++ b/cases/case-05-butler-did-it/rooms/room1.json @@ -0,0 +1,42 @@ +{ + "name": "4 Cranbourne Drive — The Ballroom", + "enter_text": "Forty guests, forty coats, and a cake that nobody has been allowed to move since a quarter to eight.", + "music": 2, + "strokes": [ + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 168, "color": 7, "meaning": "Floor" } }, + { "Rect": { "x": 0, "y": 0, "w": 160, "h": 60, "color": 15, "meaning": "Wall" } }, + { "Rect": { "x": 0, "y": 12, "w": 160, "h": 3, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 58, "w": 160, "h": 3, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 61, "w": 160, "h": 107, "color": 7, "meaning": "Floor" } }, + { "Rect": { "x": 12, "y": 20, "w": 30, "h": 34, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 16, "y": 24, "w": 22, "h": 26, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 62, "y": 18, "w": 36, "h": 36, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 66, "y": 22, "w": 28, "h": 28, "color": 15, "meaning": "None" } }, + { "Rect": { "x": 118, "y": 20, "w": 30, "h": 34, "color": 0, "meaning": "None" } }, + { "Rect": { "x": 122, "y": 24, "w": 22, "h": 26, "color": 8, "meaning": "None" } }, + { "Rect": { "x": 0, "y": 164, "w": 160, "h": 4, "color": 0, "meaning": "Wall" } } + ], + "spawn": [18, 146], + "exits": [null, 2, null, 0], + "exit_flags": ["", "cake_sealed", "", ""], + "exit_blocked": ["", "There is one object in this room that was here at 7:40 and is here now, and you have not secured it.", "", ""], + "objects": [ + { "name": "cake", "sprite": "cake", "x": 78, "y": 122, + "look": "Four tiers, on a trolley, wheeled in at 7:40 by a butler and never lit. Forty guests have had a fork in it in the two hours since, because nobody thought to stop them, because it is a cake.", + "synonyms": "trolley tiers candles birthday", + "points": 25, "sets_flag": "cake_sealed", + "use_text": "You treat it as an exhibit, because Captain Hocken told you to treat it like a body and you do what you are told. You photograph it in situ. You measure the trolley. You take the weight of the cake on the kitchen scales with a witness, and you seal, label and initial every one of the forty forks. Forty-one people in this house watch a police detective weigh a birthday cake, and every one of them thinks less of him, and one of them thinks a great deal less of him and cannot entirely hide it. The cake weighs eleven pounds under what a cake of that size and construction should weigh, and it weighs it in the bottom tier, which nobody cut, because nobody cuts the bottom tier at a children's party. (+25)" }, + { "name": "tycoon", "sprite": "tycoon", "x": 42, "y": 130, + "look": "Cornelius Vane. Shipping, mostly. He has been on the telephone to three men since eight o'clock and none of them were police.", + "synonyms": "cornelius vane father shipping man", + "use_text": "You ask him who he has been calling. He tells you: his lawyer, his broker, and a man in Long Beach whose name he would rather not give, and he gives it, because you asked him plainly and he is too tired to do anything else." }, + { "name": "governess", "sprite": "governess", "x": 116, "y": 128, + "look": "Miss Aldritch, governess, four years in the house. She was in the ballroom at 7:40 in front of forty witnesses and has said so eleven times.", + "synonyms": "aldritch miss woman teacher", + "use_text": "You clear her in nine minutes, thoroughly, with three independent witnesses and a photograph. You then clear the cook, the two hired girls, the man on the step, and thirty-eight of the forty guests, in order, over five hours, while a butler stands in the corner of the room holding a tray." }, + { "name": "butler", "sprite": "butler", "x": 138, "y": 144, + "look": "Hobbs. Thirty-one years with the family. He wheeled the cake in at 7:40 and has been standing in the corner of this room ever since, holding a tray, waiting to be asked. You are not going to ask him, because the literature is unanimous, and a detective who arrives at a house like this and immediately suspects the butler is not investigating, he is quoting.", + "synonyms": "hobbs servant manservant tray", + "use_text": "You do not question the butler. You have now not questioned the butler for five hours. He has brought you a cup of tea twice. The second time he stood beside you for slightly longer than a man stands who is putting down a cup." } + ] +} diff --git a/cases/case-05-butler-did-it/rooms/room2.json b/cases/case-05-butler-did-it/rooms/room2.json new file mode 100644 index 0000000..25fb0df --- /dev/null +++ b/cases/case-05-butler-did-it/rooms/room2.json @@ -0,0 +1,161 @@ +{ + "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." + } + ] +} \ No newline at end of file diff --git a/cases/case-05-butler-did-it/rooms/room3.json b/cases/case-05-butler-did-it/rooms/room3.json new file mode 100644 index 0000000..0f02443 --- /dev/null +++ b/cases/case-05-butler-did-it/rooms/room3.json @@ -0,0 +1,170 @@ +{ + "name": "4 Cranbourne Drive — The Linen Room", + "enter_text": "Top of the house. A dumbwaiter hatch, a stack of sheets, and a twelve-year-old asleep on them.", + "music": 1, + "strokes": [ + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 168, + "color": 7, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 0, + "y": 0, + "w": 160, + "h": 62, + "color": 8, + "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": 7, + "meaning": "Floor" + } + }, + { + "Rect": { + "x": 10, + "y": 8, + "w": 60, + "h": 50, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 10, + "y": 20, + "w": 60, + "h": 3, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 10, + "y": 32, + "w": 60, + "h": 3, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 10, + "y": 44, + "w": 60, + "h": 3, + "color": 8, + "meaning": "None" + } + }, + { + "Rect": { + "x": 118, + "y": 14, + "w": 34, + "h": 40, + "color": 0, + "meaning": "None" + } + }, + { + "Rect": { + "x": 122, + "y": 18, + "w": 26, + "h": 32, + "color": 15, + "meaning": "None" + } + }, + { + "Rect": { + "x": 0, + "y": 164, + "w": 160, + "h": 4, + "color": 0, + "meaning": "Wall" + } + } + ], + "spawn": [ + 20, + 148 + ], + "exits": [ + null, + null, + null, + 2 + ], + "objects": [ + { + "name": "daughter", + "sprite": "daughter", + "x": 50, + "y": 128, + "look": "Eleanor Vane, twelve, asleep on a stack of sheets in a linen room at the top of her own house, with a balloon tied to her wrist. She has been here since 7:46. She has not been frightened for one minute of it.", + "synonyms": "eleanor girl child vane", + "points": 10, + "sets_flag": "found_girl", + "use_text": "You wake her carefully and you sit on the floor so you are not standing over her. She tells you it was a trick for her father, and that she was to stay up here and be very quiet until midnight and then come down and it would be the best surprise anybody ever had, and that Hobbs said her father would laugh. She says: 'Is he laughing?' You tell her the truth, because you always do: not yet. (+15)" + }, + { + "name": "dumbwaiter", + "sprite": "dumbwaiter", + "x": 132, + "y": 118, + "look": "The top of the shaft. Chalk from a party shoe on the sill, going out, not in.", + "synonyms": "hatch lift shaft ropes", + "use_text": "She came up it herself, at 7:46, and shut the hatch behind her, because she was told it was part of the trick and she is twelve and it was the best day of her life." + }, + { + "name": "butler", + "sprite": "butler", + "x": 96, + "y": 140, + "look": "Hobbs, at the top of the house, standing in a linen room doorway, holding a tray with a glass of milk on it that has been on that tray for four hours. Thirty-one years. He has been waiting all evening for one police officer to ask him one question.", + "synonyms": "hobbs servant manservant tray", + "requires_flag": "found_girl", + "wins": true, + "points": 25, + "use_text": "You ask him. It takes eleven seconds and he has been waiting five hours for it. Cornelius Vane is going under. Shipping, mostly. The house goes on Thursday and the staff went in September and Hobbs has not been paid since August and has not mentioned it, because he has been in this house thirty-one years and the girl is twelve and somebody had to give her a birthday. He wheeled her out in her own cake because she asked him for a trick to play on her father. Then, at nine o'clock, entirely on his own, he cut forty-one letters square out of the Tribune and pasted them on a sheet of paper and left it on the step, for two hundred thousand dollars, from a man who has not got two hundred dollars, so that Cornelius Vane would have to stand in his own hall in front of forty people and find out what it feels like to be about to lose something. He never intended to collect. There is nowhere in the note to send it. You arrest him and advise him of his rights in the correct order and in full, and he thanks you, and he puts the tray down first, because you do not go anywhere holding a tray. On the way out he says the only thing he says all night that is not an answer to a question: 'You were the only one who never once looked at me. Thirty-one years and I have never been so nearly invisible in my life.' You tell him you had read that it is always the butler and had therefore decided it could not be, and that this was, on reflection, the single stupidest professional decision of your career. He says: 'It usually is us, sir. There are simply not very many of us left.' Somewhere below, forty guests are still in the ballroom, and Officer Al says something, and everybody laughs, and everybody freezes, smiling, holding it — except a twelve-year-old at the top of the house, who is asking, again, whether her father is laughing yet. (+30)" + }, + { + "name": "tycoon", + "sprite": "tycoon", + "x": 26, + "y": 142, + "look": "Cornelius Vane, on the stairs, who has come up two flights and stopped one short of the landing and cannot make himself come up the last one.", + "synonyms": "cornelius vane father man", + "use_text": "You tell him she is asleep on the sheets and she is fine and she has a balloon on her wrist. He does not move for a while. Then he asks, and he asks it like a man asking about the weather: whether the staff have been paid." + } + ] +} \ No newline at end of file diff --git a/cases/case-05-butler-did-it/sprites.json b/cases/case-05-butler-did-it/sprites.json new file mode 100644 index 0000000..e5f448c --- /dev/null +++ b/cases/case-05-butler-did-it/sprites.json @@ -0,0 +1,12 @@ +{ + "_comment": "Act I, monochrome. Shared sprites copied from case-01.", + "butler": { "h": 26, "prompt": "A tall impeccable 1950s butler facing the viewer, tailcoat and white gloves, silver tray under one arm, utterly expressionless, black and white monochrome grayscale only" }, + "cake": { "h": 16, "prompt": "An enormous tiered birthday cake with candles on a wheeled trolley, seen from the side, black and white monochrome grayscale only" }, + "tycoon": { "h": 26, "prompt": "A stout wealthy 1950s businessman facing the viewer, dinner jacket, cummerbund, cigar, florid distressed face, black and white monochrome grayscale only" }, + "daughter": { "h": 20, "prompt": "A 1950s girl of about twelve in a party dress facing the viewer, hair ribbon, holding a single balloon, black and white monochrome grayscale only" }, + "governess": { "h": 24, "prompt": "A severe 1950s governess in a dark high collared dress facing the viewer, hair scraped back, hands clasped at her waist, black and white monochrome grayscale only" }, + "mansion": { "h": 30, "prompt": "The front of a large 1950s mansion with a portico and steps, seen from the drive at night, black and white monochrome grayscale only" }, + "dumbwaiter": { "h": 22, "prompt": "An open dumbwaiter hatch in a kitchen wall with ropes and a small platform inside, seen from the front, black and white monochrome grayscale only" }, + "ransomnote": { "h": 10, "prompt": "A ransom note made of cut out newspaper letters pasted on paper, lying flat, single object, black and white monochrome grayscale only" }, + "kitchenrange": { "h": 22, "prompt": "A large 1950s institutional kitchen range with pans on it and a rack above, seen from the front, black and white monochrome grayscale only" } +} diff --git a/cases/case-05-butler-did-it/sprites/al.png b/cases/case-05-butler-did-it/sprites/al.png new file mode 100644 index 0000000000000000000000000000000000000000..c039f87fb6e4f80edcd4c1cf9d64eab8671ada53 GIT binary patch literal 2685 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 literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/body.png b/cases/case-05-butler-did-it/sprites/body.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7ca5aa1b73f84a8afa2ccc19ba6ef079edfb61 GIT binary patch literal 1087 zcmV-F1i<@=P)ChO*hqoVl6^Ui6u?O z#)d%C#vf33ZZu>eq9szAT9Gb9lwy^pW0N%Yy?5U^N6vlon*>YW@NwVVbKg1N`Odlb zf`vgu8HA7uVb9agejy_FIH5r2nHVGtu0xQDV08TW5&&+3knj|V46K@Gg^1iqB#n6L zTm4b9?+nxg7Hatqt`lbbUAc1K+F*vurzZ~8k~3LwW)E(G&Sy4WWtaMx5_`XCl_;qo z>yWPD+RBYL%H!o@hu;~V?%uxRf^zU#R0)}8vW|q~IQGFvgdg74CB3iovjtX>X-4y0 zYeKv#k-52VHBOScG@mI;Yt<&gci+#waQgGl%JcK{_ol*#A`0sZ0HjJb%;lIg^(uLN z&%hkTiBDjCLbnR>V-h_6I*uwf)HTAU>{JPqD(GP0&){$?5H{UwQjvTkDt?Cn=czox%TAzyu){w5N zE6mOjpa1D>og7nZAf1|-o#oA&?(p^l2M)H_zy49!BK^Ou;}zD8IXwIU zQX>3v;pa!P1O$6u-@n`FpUKI|OA8B?j>3i_F8%o{1`iMUUh&6?5X2vJ24V%de25qO zUc!m-j{s}@nrvm`vBp$euGK33XK?D|N#l})N~MzB`Q)yaZ$JIyW4my*g8o~` z-1#579_sFyS5DU0i{aqlP&zQM&yJ0K2qD5&#a z$OVDVT)f-HqiN(}AlfisSZk|1B%($*~qOn@*9d?{1su(-H{VzG$!_5#8%1T*1A6d_3x|DC_2 zjDf#rM5~uaK9}=zapJIYeHnLeDPgg44N)BF_RH!OLVU6H$BZz@=*W0^r6s&;t^x5Z_3Jdf)?!IF;17LQe=Gl*snX zqTSeQi!j#6-krB^-t3G)M6k}pPykOR5p%uQc!1i36yhe&K@2FRxFV8G4DAVni}xQm z(a#tV++~s;Eg5IePjGd0iK4VD!iR)KZa_d$795xWhJ%Uf@%OEClj)S-oS!oQj-rTl znlhPAx+llSywmI9?ZrFv?giM}--8gqPS9h|B$eVgj=8GXoSdE-HiiYjT5DH;6cCV7 zf|((N!Po0+q*}u?^+?$V5#xTp@3at+$>ynrmI9hZX%=VKT*J;91xXbNKrfiwmkd#7Mupg*Rx=pYDHGi_5OmFQ( zZh>CDdhz+ce64W8;wFC`O(SMQ2p@&Ke-L`%9(45h$W>dh6)`qC8ylp+s%VrglaGZXF~Bs7-$t$d!Et>5&g*Q0u)LHgQp zlJutXnmo_vVeX;aUsv!3? zi?p-*nHwZD^f*LDo9{L#lTMrH=ci|BE}JE$&o|$bb~H@ck5Dr`>A@K%*LBhDc0ojF zwp!Txvd0vW3S$jE)U3>&E7E38LEs01$;)}SN=o3)FJ`28qp~Tn`I(rOu#J^BTF!9cqSwb;) zZqA&XIde#E9BVkddWjBLN`|>10c4`K*=+dP?GS{;VnMUnVle2xi@SGMtJkH7AgTiH z0+i(qr)Mp+s;cGP{cXr1IP>|Fe0^`}U-s#ocTjVu*Slc)FeRB&meHslEXw*UYD07*qo IM6N<$f*MkZO8@`> literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/coffeepot.png b/cases/case-05-butler-did-it/sprites/coffeepot.png new file mode 100644 index 0000000000000000000000000000000000000000..19124e47986f9669fd75bc96700a5ef00e1c4c58 GIT binary patch literal 500 zcmVgL=|9*_Qe9qP}h{l>k{IObRFn z706J9=*o=R=(V;$#EPgrSNXyEvnuL=3nOU`S=(sE6cXC+yotHZqPIPjhNc=JajrfwAS5u qv7gJ$qt*I{Mx%jkcMFBWNBJLqAs-NCuikM00000Jxd*6KTXWonNdVSA7zPwuoVor1DU*c|$o#Z?nlf3IF{l0VzI$n!m^lzRv%j7{Mk$jJAcP;~ zJ;NxDnNx?GBpv{ajO|xeCWf&FF{@f5whqo%{rC;W|6mP1zhCz@;8(q25dqd(wI@g< zMzw_wVsQNEA&_PW*vJ_jwey6I$WA{pIFxCTr;wzq1rrdZ#zP$}leIinoNGqC1jbry ze&3uZ50qQF%7cqzd%He3w0DR={~@rZgo*L-4gHX4Y!+nqePC?tk46&orNt+4lC&6z zh-`V|-8szF?!5#`!)K?;(huVV-ZU33o~JlYe3OW410u;mw$$&2wz2z$F-Vg{!zx83 zglk{d5Cj%|ef@}{NM!*DB27J!v6{G$S!2My2ni9wt$O3jmCILWj2s?a$i7JO?p8oe zJ=I`Tt5suLtu_mgnR4cbiw{5~eaV`R%xbl&n2gvF0+!^g`Nc}Wj8=0;<=R|Lft0$& z$uW79dOloE`P8;f)Z3BisTZ}{{ch_je|NDbu;d*3T^9hkxw7)=n$%rnUzJ@Q0ffZV z?sk}i$V`baI=Zjp1MY20xvB~(iSM6Txly5ZyEPz7DwPUJDRyJzV1~Ev+(NtA(Jge% z0?aQgps`iQq~R}6APQ;CQD84Vg}- zU}kJ=+>ww1y}7pfCLkvcE>ux?0B64{m=hSXs9^iiV}0^;=aL~2(IgCl1optf5Z7z# zQm@yl zUpFN%pU)v5=6*6u08`w`D-_>)JqgKSZ}06^r_;Ud$fN^Wt%oR;PM;HzgD`E4aHd>w zR;APF3Y7fxl0>k$SVF(w|57X#9U0fzXyf>X*sxU9K%qqHKxjX2BZ>-~Izbdsu4s~Y z$aqjyylZF@0+;h+SoM+D0y>MN|z9RJ^xO)8>hjt$W*LD99 zj&uw3b`}Nzo_IXP1aJdZ_9F_&d>MN*$(@HgnO(7@5yl0nviBkYQnv#zdLnyr$Y^>d z_-1zb8`^^`T8*b*kx!(~su?xVIb+P(|GP<~T5t6g#MF6a<|%J&Z6W`#fJE{%z>JB> zDL9UU*RNjU#K|P?+`fhOjt=Zpckr=T#IxrwkUD>XdwYBF;oW;fgO@X(2KxK1B$KDm zKRAH4)=s3;X$;>S!tl@yw6?WleQgbZi_Ohn7|Gtp^z;*uR)+-;!RJz`ObE z?5y3FzAlC2F)*-Gt=hV1{@;JB<9PQmR4S{+=ECqgh&m#IJLz}R@+{;|{zr?FJxT?MU;ZE^5DBxs!Q+MlYAue0mTO{G%m63Td? z5IqyYo8!L#^|(M3Yj1xhljh)7>ntsl%Ubxx3vKHqAY;&fsgI3u?4W8?rG+o%FR72E U9y{P^z5oCK07*qoM6N<$f+rtOlmGw# literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/dumbwaiter.png b/cases/case-05-butler-did-it/sprites/dumbwaiter.png new file mode 100644 index 0000000000000000000000000000000000000000..22d84b07812f281f0b75660d9ac06333b06bceb5 GIT binary patch literal 511 zcmVxGq`UWfqNt8_t{#+$7$^*a)5S74XfrNyFhtY_}$e9aQ zJg8S#GCNg8s=9Y(%_24FneO`i>gyWU-rMEjpx^7XR?d*;f39wfzum4(Xb%j zc#`>Y$S}LPYM{AZ7UQ9 z?N*7`lV+pJWGoM~6*ckgosWwCyQo5JvZKyB1X0Z1p)od!;5-Tlg+x^Z}zIM^+ zL?DV=e@MO6m#o(>E%%$%8X?!D)NMIh1CJpe8%tKcAD zurNe)6?lk-Lf*Z7eKMC@#6LfPwdOYqm$;_@3>9F4@rlXDZSC#&@HvYseSJk(H%PyC z8-!23WEa_s6Dm_xCeP(=6c|py&U7WGQq`PJH}KS*ZeF`%m^|_6)?GYwsTJAmSIp1P zz`%zg!@?nx1D2I1xa-Isz%%fyMk?@qplNq4ic90H!W?j7uoIrOAObxc%a9I1Km%u5 z@a)E^{Eq|?(gmfdZFu?OuDdwa`v??|!C0jh1xhF&=Aq-_2s#?;v7;`9YdxJH(u^3W zP9vby!3$$91)2UfBsOfo?5A(oSD%129`)RugtfF}VxE_qzI_%%1Y-oN>^o{U0w%%m z<)f&mOl&r<#=4!vm6bmT7_hJo=#hu3qf;U*csg(b-tzaK@X4UKD6UBmvR;@t0~>Ii00000NkvXXu0mjf8MsG- literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/evidence.png b/cases/case-05-butler-did-it/sprites/evidence.png new file mode 100644 index 0000000000000000000000000000000000000000..6e90e14f1c70913724b8e5fc7233c60947ae4bba GIT binary patch literal 270 zcmV+p0rCEcP)=()(nXPGQMBL|Ts+oT>pKjr%M zt%AogGeG$D0BXh%+V?$T+@P*&s4mEPK~+^aoj$Q)ssk}b9NU(^ zqDEG2nx+>Z1Zb&nid%$E5Z0tePhz!Q6e#TS(D)S7Pm@&4*^|77Ab69&7bRJ-ecR>V+s~d<({;{#jYx}F011U1;CXG6gGk>f%9=~UsI51v!yG$Yw03!NdEsAFX9zA^QsMmYL<#cLJg^>d6 z3m_uf^~@rm!C=65@7=+{kDpjv-sf0vw>2$q%nHa0CXgF&bNPPy0Jf(UD9oE0P5+4+bdf|cbJTl2Ga$_<&G%A8!oULL zxd)L;z-aSb=bYvo;8_BQGHVuP6ZdHGV(LBtygHcm0vX0<4*mWwYsp6Aw!KJ{2%w1~xjqDW4u T?P$ao00000NkvXXu0mjfY2OPf literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/governess.png b/cases/case-05-butler-did-it/sprites/governess.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce090832aaa9ce085e43ed278ca9d3e02f4b42d GIT binary patch literal 531 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 IM6N<$f{nyega7~l literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/mansion.png b/cases/case-05-butler-did-it/sprites/mansion.png new file mode 100644 index 0000000000000000000000000000000000000000..43a6c7a8b6e879fb6e55cfdfbce1150b6cdb44b3 GIT binary patch literal 1647 zcmV-#29WuQP)_ z7BnVCqD0j2Lw_{-#{z09SPBvmBaap>?b2?yJ2U3Yy?5`u>~3YUvv;27d~@bIXAXoA z5JI~3zP6G8*q>D^s^k-sON2k?%ma}Ao*Z(t4D@+zr~31pW&!2aU}1m+Qc8?7xQWZ{ zSC}`mcKzx)!!WdD=SzDTJZb4RCxi-X)~<{0+P!OANW41_2W__MAWR8?rOTF)GD&?f zf|Xg%wfRvCwB@`uZ?33#3GEjz;&xXT^78XhIAR2%b_B8E!(rJr zSq#1LUfk{O#;}3{6c-m`_VY7PvvW@d5FrHj39D$pzmr_%dvE_<`SRk$(lQMhjo7lf zx>}7GQK$+FV=5Mlsk*vaxoPueJr}VpxnRNkoL4b87~q={o(0Gx3XC(Sh{2h7z307l7oZbjDd5mefi7Nr_pfaFy_yjr%fxR1n0np z^&3dBe?MHo^y7f@AGK|4T>mD@%cmj|jbO#fmFe|;eSOa5DTR1Eo*s`xqZmjeXum!Q z=LYiZh*mhQd>R46#5{_oiui~u;Nce+aV4BN(!XIoKJR0JjUO2lF@luRnYtsA$T zwFXC7St*jqL0swR2!%1uoKvq|yAF+wM^G?qnC@p3sR)nK>?f3uO_L{7}&SqoJVz2C;{hasyMQOhsqs zZJ4&LdU|?@vpDnZ8JH#~tEtJQWttlfITgl_n}C|SS{)atUp%%LzhAwo-w*AMoPm)m z7y$s}XZ(>2kH-?wzp0eOlEsU3d-SN$I=(nJ&cF>5 z1A|G}mXY}D?;H6#4hSKQ%zPkN{I`DmxCyedav@5~o^oaw@q^>_)oW0(up%8~^h=lK zWjd7z7bz(gkpSl*aufx=y6pxJoeB^)fbV~3c}+)77c>!d=FDj%&x5O@od49h36D3H zu8iU&d6?2cK`-)v>&Wf7i!X?Jm5Y{s;twf^R0`!&p9XhNsy$XZ8CCeiu1sB>Av0`x zPg!6r0K&7@$WagLz@;AorqeR~({xzxP9zfezX`ME!*y_#eYH#DbIm}FUtuQWJj=E9o+D)5SF z?vej%eG=^dt~@Ic&kZw5u4@Q0m|T}uo@+guekq-~Y&>Gw+wy@e;06{~03{bHZ4%cU z9?+2Qd&y4lP+_;{52RcN4)1h|-gGaCMQzRQCMg66QaJ7QGp(Tx<)`ICE_Bf9bd8&e tSRf>&*A6&(-zg~_Owk)Z6cIB){RgH*jqSQt&5{5B002ovPDHLkV1hi25TyVB literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/microscope.png b/cases/case-05-butler-did-it/sprites/microscope.png new file mode 100644 index 0000000000000000000000000000000000000000..eb82ab83992cff368e8996129142c37a263b51ba GIT binary patch literal 523 zcmV+m0`&cfP) z+inv<3_bR4Llg1>O4Rm+M&e^=$`3S%fK()U5h)M(86ZE#igBi z;g-u~X1KlEjKH;$VDUGAs&}vF`OW={#T)&19K2Z~v$?Ympm?-DaWEnoFIi`1$w6n|uO2rmb;AXW!jYsEEa1iEp3@%*J8 zAHM?SWv)r^5xJbbKGk<0-gBKaJ*0vmx{ja#3e-#)B|`iG#Ny?Qe*upbAHT6Qq3r+w N002ovPDHLkV1mD$@0|bu literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/nordberg.png b/cases/case-05-butler-did-it/sprites/nordberg.png new file mode 100644 index 0000000000000000000000000000000000000000..40b44b6b4c42349a55af29aab1ac7d77126ed496 GIT binary patch literal 841 zcmV-P1GfB$P)&J3m)_Z4_-9& zA4F7bLnP9Oph|;MsgSmQ+MSub=g7UYGu4}%y|Z`DckXx2`OZKog)t*2CNwl|c(0hr zbsREhq4|FQ0TieN>d5DbnW?s>mSVGKb%X&+`#6wd0xsOWKR9Xf!i2BzudB^;o0QMN)$bUB?K(XA~ELWFQ1lzrxgB<7D7sq2@@%` zKSjDAN)fHBTX9$WX{tUwDYPpQ7=i)YwoE``hN2>h#UgBJLrQ6=N(~Ue1lM)Z|GD1) zQq2d2Virt<_4RSQdi@fS=p+sDlhf65JVmW-ZGNSgXzj+0tQ4^=!MgPRIn(h|r%6*Z zpmXQWl9U!*x_V`^2F;pYPOj^5P3=;SPMuN8Q_`otFQ)ub3d!y5kHMrc@a0?0gZu6H z{__{CGMn=qPk7*KA1cbDZ<-ILFmLW0SeER@maPpB4;?;0jZIA#0C;=%>@ktEnPX<( zxpR9^QK#UH>b(y|#gU-vJw4r3(dZP)<&GN1Og2a9blN-zN&)c09w~Su`k!Sw}t-Nu!34Vrl*ie{HdubI0>9<+W|cR+<@$ zy$&W=o;`miq}u!G1M>MN!Kj#dUA<~`SM`$R=<0g0IUL!Rix(-N7LUiNZq1r;U!dW^ z!Nu|Vbri2(Pv*m;1?zgA0k2$D2gh}B@BW==IQ|ldmRCHzee2d=r{F+ZIyc5YbN5Zr TCSlno00000NkvXXu0mjffUuBM literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/olson.png b/cases/case-05-butler-did-it/sprites/olson.png new file mode 100644 index 0000000000000000000000000000000000000000..7a587ad729c7064b1bee6b25eeacdb8d795e4fb1 GIT binary patch literal 698 zcmV;r0!96aP)X1^@s61#ZvJ0007kNkl-pchsg;n>Im3DY$AC6p_-lAC5W% z4yBudh?JZl3`)wzH|INX&VBDW^>~MSIrDwr`Ockto?`*&<1AdmA4ohrGz4&s)>c=k z8t-~Xp7bRMc{02Nl5@M$ckcjT%P~N?CEaXu8x2}P)j1_ z(bRPfd)PX2?|xzlsU@~GC1|h+4manG6h#etJ*ax3Mi3z+&6eN2O{;P0KkFfmYvwT} zslf2rbC{c-!|d#%r)tGqsHG>5A3l%cUuwaCF$2x{Ci7nT`UT&%wnEcN(h9j;go_iG zk|qT;Wr(2RV53=M26n2y;k`GK{^MwDI)rOCuA}orml0#GVRU>#ZCcaJYN@XLf3L^@tan0Fr4i2Be`g#h`AK6sZ()7%OEWh#TV|p^-bjszG ze-zW8Oeh0~&<3qh0e=4YZh(P-LEOB3E9v1sf~qKCuS!rYl}g!laSE(^U}I#{5bnQd zMu&$Sd1s?k|F{eo_5tinf;qrKfS)?X$YIy8q$l7ylkfRwzrSR~jC1rNzbAdF}% ztmV<#dK~$DGZul2RnoOHR+1q~Bo^6hHt# zL=-LZ-1F0gZC&GVJc@{b1{;)R8A#$|vlfHeAj&*fkofxfh8UL?xQ zC>`qOb_-R->~`km2BW(piF7`H*1MwA#mhn;pB`4tX|L_*134J<2O7r_s%pu4v*v5H z#Le~i9;VfrK%1a))lbwU#*+zpy_iDr@gRditG9P|ak$J2H9?oNq?>06iTz;@`oBI~b!u?{0000j}d!5QAlh{A|04!QG%4tTfIzee4qq4WaE239(epL2%p&PWm7T*WvaGA&?>{0cHXy z^E`81*49i92;a}ooeoD#?`g3cDGdZ5?k`NKrapejMzG!|Xuop-gcg4F>-+F7lr&_Epi-H~H|iaDGj00000NkvXXu0mjf DoYqf> literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/revolver.png b/cases/case-05-butler-did-it/sprites/revolver.png new file mode 100644 index 0000000000000000000000000000000000000000..60277ac17069608edaa66304dbab0fe3c6b615b8 GIT binary patch literal 281 zcmV+!0p|XRP)`_m`rW^rK*(X)S8nxvV+@uN;G~ fOkGQ|p&9-Fc%;jG@fd*i00000NkvXXu0mjf<~@3X literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/squadcar.png b/cases/case-05-butler-did-it/sprites/squadcar.png new file mode 100644 index 0000000000000000000000000000000000000000..195c2f33b23264233e8c1bdd508593bea5712acf GIT binary patch literal 2906 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 Ef|6aT!vFvP literal 0 HcmV?d00001 diff --git a/cases/case-05-butler-did-it/sprites/tycoon.png b/cases/case-05-butler-did-it/sprites/tycoon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7ae0cfb67e5ac3bd992f331db5a01d1f5114a9 GIT binary patch literal 837 zcmV-L1G@Z)P))>;lg@_%4cDA%uDV;1Hg-+nL!f%~pDMfEQ* zK8&ozw(Z?)ZNws?_fv2TY4mVP*CdBW?^7(k%Y}A01ToqNrD#CExIW>T2 zY=-ovdMYTD9$@g`px=o&qo3A(hdn2bALD8mI>ln4h)gz%a=C1rNA`Eo>=qx)w(RKX zenV%@PEKFFa%oCIwSbf;5ytLpR*Hp!s0aON*=c3nx_Re<(W(yuTItUnc$RMO8q**a z7e8b9`&V?OyD-17fZ;V=o zfAj9G<6T4YA1)B{vr#XC)t|qblkAyvRqM0sN=^j=d?QD*>KlAnS~9Nh{^mE{Q~mK# zD?!l2qXY}{3y#l?!yAwLaicYN4IS3Tr5(R;P2M*EHSNuZ;x6L9jq9l<<=T5QG?Kg5 znNHUmxhAhQbVo-ATkD(Hzd2&TVzFgwC#O7dBNtbf#W z-tQgueaW9QSbtBBu~=0s#N=|^*4&0=?bf3Ay}2gOrw3^m+rIhat0D2$>)pbA0d`8O bV$AF_lI6EvTU>YwXd;8BtDnm{r-UW|PF*W> literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/binoculars.png b/cases/case-09-final-insult/sprites/binoculars.png new file mode 100644 index 0000000000000000000000000000000000000000..a344f375c3789eb6683a2e4e5ef33aa461e58909 GIT binary patch literal 260 zcmV+f0sH=mP)V7f45M^DG&niaeIP|X(JuY}+NGKDiNGEu1(Li}fIyR`30Y7z9LHhbUq9A+x8Tv{ zitDwTbg_NkO;yo|0aMLOxC4wV2f^Jj$1DK=yVc?G_X`lP5!>qL#v8iGvJyCww$@-? zLe%Yc5BOA5fGEbPNXv|WW)xiIFLM9gRxD7E=0GNnW#EKtdl8CJLC677L zl28Z)bHi(l+(#JtAx6w)h%uxK+zG@4&OPQ&Y90b&zeI$~HP)MWbWyWx!WuW(|GoE~8JRiv?`_^L7G~hwpE+}8=6rKz=9mxygtoTu z^zq}zz6=adAS8)Ln)cwmhw~23Ih8Al0AmqYG!@NAc*=aixz7e1s4BU*L@iya;6><79&=e@$)Yp;fV~t{j>!Z9bmA?QS?z9 znZMjeg^+pv^fZ0;$w&C$+<6#l#3u4QhcO1$+4#0D8l|8P3NPAYQ6E*6xC$=>MxNy` zx?X2MBmThBoO>>gnlj)(bqMxyAi6w)S0T8QXcSHjZ)n>-@i4na{XY`z%~$jKJ#0hMBrxIO$4_Xw zw#P$vPTs<64Q>tP9U3Gwo?7x|*EKrIo;8%B5XioLw~ve8Jc5O59uk;HQk|yiZR`M& z+Y`<>q-lXXmogsHTgrh(qe4O$!6NaVZVAW6g%h-Pbq!Y*3%~>zD>b$p<))XHb1)TJ z$W%K5SllH-5d!{N%y4*Lg2~AqQcp-zi#!Vm6cBV<94l}Kn45mG-b#(c1>=_CK8{B^vVP!ML!Tu(W+>t8p$l*>C_^QGau&~guwTs%l z6XAA~@rmyvFE;SpOJ@LfNRk9bia4{Jo)}yCX3`cOQ&^f>Y)*=egqfty6zFz6LXm@t zxK`ko#%P^fj(n8O0Bj2^=bwkyD+P7DT)Ekal5j^M*ED^R!z_<Xed!^YGq%S35!{AfF8UZthgW+^(1>2mmh7HsC_7rAzY^Hb>ltW2M8emL9 vf08Ukhkr7ialgqvD4p&E3I<{f>a`+1_QP2p6@;JE00000NkvXXu0mjf7xrDV literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/counsellor.png b/cases/case-09-final-insult/sprites/counsellor.png new file mode 100644 index 0000000000000000000000000000000000000000..22b960464360f9f42b6b1e1b17b8a4409095a061 GIT binary patch literal 670 zcmV;P0%84$P)u=j7r`sC@Oz$fH z)R+)0eP2DeS9D*^gfs08`#ya7n6*O*Y97k^bbR7+Q{4_Jt&Ga=nIQ#80uW>LqK;yw z2V=L+OPIPZGW$?M@v#(IYDJyA_ptc?oC#(B@{!2O6Jzuhjoz!qfDr4vK5%m`lr})$ zH@B4w00uaKpw5f=9=S9%-8o!7g==z55eh#9L=2~JZ$ zL&|}>`}>Agzi**qW)Zt{J5f`Y4V%6c-f#WFf#)yqm8(!cHo>HYruhd#9T(7u#%7MXQM81RUR(PDf{WY1 zVdmLz9NL;9(x8^DtFJJSB~|Glj;}DTbOec-_`l|hMj>|GULgccchxekz?IRmRFeRg z${^d&jJtz_Bh02%VU^*E#vntGYSx^BeWw_bcH86d7oQPA(8Os#L;wH)07*qoM6N<$ Ef;J03e*gdg literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/ego.png b/cases/case-09-final-insult/sprites/ego.png new file mode 100644 index 0000000000000000000000000000000000000000..086b8ee10fdaef65f6c9d5cb840b5620603879ff GIT binary patch literal 813 zcmV+|1JeA7P)May6*3rc!fdg(=|u!pF1*{ytOp9(}lgaVQ1 zp<)UDJY^8pgM@`XY)MdPiNQ(_5*QM@>MH(WXXp1jNA8_*c4obBxtu@W^F8<8a}If) z)4BosYVxT5bmkW|v%*96HihMkj=ir>^lw%`|GaQfmjYZPYJCY@`+icTc$bc@3Y{;G z1SeT^h%SpuGiBk%e^k0E6x^*=Q**VWy|DJ3{iKA==^_$1ZA4Ua3h20-AGvEl6O;V}y3 z4!or9^1oM{X6l?2`Do`bNA|r*l1Su`K(+0Kjhs0BHyWNzJpF6ek$Ax+iF@tUXQ(Qy zSk|$~AeQjyu_+|+ZibAE8qYqt8ec4-Qlrzu$uCA5fIuYm{BTB3@(76tfBbWmT5SOX zmua{H1QXIU&E?Uq66S)*0>}dF`ppGY=Nlo6 zp&ff;^dQR2&3ha=_A}d_S`#5*&&_*E<*v3bI`H+6^{l6kPN)|p?JSeks)%!3yX{=> za?e6_K2n@IJI(f|`|yPnIsW^d(?c7Fusn+q%s?$eN$YnqczNp}&ksDu@aUI+xjfIf z@!dhal+EBJiI=`pO(`XcPihe(zQjPKhtezKp-3FdcT7k~CA>)pSxk&ux9>G%u&hdH z`*{3f_Y8Fq64^B(R3B3Ns z+q$f~%+@WNUK-goKK0)24|R6-I^P~YQm=@m4YX$UDnx{lU8CnrTr82tdV89^@K6JV zlY;k1c%QK9c&tcteWG~_NHu|N0&Db4#c7iz8H@9RiWo+p0 r)6{!4Q+Y6>!dWSI==#2O&G~d6aAkLk5~cRx00000NkvXXu0mjfR{oA5 literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/envelope.png b/cases/case-09-final-insult/sprites/envelope.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5f49eac48eecc729fdf24956740a62793c1376 GIT binary patch literal 243 zcmVnP`|~A34?qA08>9&< z*(T2Cl`$65gS1JsRWpEtuEg`Pqfr8rBq}mhO7e}%=mgd8ikL8Nq+uYu{;04N(+J81 zqS5-^y$4Mqc8|t$MUfU;v+7%X t5Uc`~kC9e^R%$OZxx-002ovPDHLkV1nyOXhi@3 literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/hocken.png b/cases/case-09-final-insult/sprites/hocken.png new file mode 100644 index 0000000000000000000000000000000000000000..0457f3e10f71ab351fc911e08f44f1bd7ef0d5e5 GIT binary patch literal 659 zcmV;E0&M+>P)F}h?at@+PR6KAfi?+qEGq< zgj(4m$x4bcQp&KTRAzkh?mZ{YeUE86aNyp1e&=^SFR?HL0+m8_l4ES4x&8r--*ZL` z09F;}HCw5%0dW*gJ zVPN0@6NvNW2_76A;#_e|)8pR0L##|R-8013Y(ESv923RgA0yX2E+EGC@*^;WXzj)^ z?z!3pWC9S!#LO_65J&o#WbSPd_b1mtos}9B2@d97VE*GTvTz7XC(*b$iuF(Lq&o8h zlq-)jD25gotv;c!d=^AnkuOL9g1LOD@0Jb*2FO;%kd;O7#%C~`&#S)tpo6sS0T~V} zH3VddB?BTY-$--iA!2dHcU1dS2wq`N=8fE&Ifr6)0j2OYb`^F*$41(1LjiYI&cLWc z5Q11IAc(#_MKg{}MjP9aKdx}!TuoQ>ECNdBYBZGHoCQ$;P>A~1XIhWHTS@lJXjOhC z{GH*Vtx$)Xm=iG?juKe%5*q7=s~NXIXqi)ygf$K2K?%!004c8z*9K}G+dThwY)d@Z zywt2qC(<$+_3JE;`O4yrd5^V!7JcF!#SxFlTsVJmTE`&5__DbaE0=A&r|zz80U6Yz tdg#gbR(sg#;-{ZNRoAv!?d5Ek<-Y=(NcWu~kWv5u002ovPDHLkV1kKNDm4HA literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/jane.png b/cases/case-09-final-insult/sprites/jane.png new file mode 100644 index 0000000000000000000000000000000000000000..484c54372d17ef0d27c8d3465fef1183e6a98fb2 GIT binary patch literal 630 zcmV-+0*U>JP)X1^@s6<3|LG0006#NklE~Wccr|yCA^6cA7n4vq^ z#td}l`T5HM2CslV{Nc#x@QG7BpTv8ScUiF}B~9t(MdvEj@n>b_{OK48g<_;o6qzHI zd63-F?*jo6FTAHA03KvOQy?1{85|xScg|tTuUwuH2v`iH)JE?Zn^?4T9X>v*@}88Grk{(OdMep#osu0qDt_vb)ZZl9 znx+PEpkiW-ku&}Mk88a{r;hfvLII=%0o0f$4k{W}z52VlmIR4vsDZ1fnbjd)Xi2BP zZ-V@*s%iA9qMGS;z6#sMNT{lMIKfc%&Z@L!r$b@rO25eH%NPA2VW}wT*fNPkxNu4{ zQCX}_=@Cy%ukO_nNk5tas##`CXNT>Ri=OkN~zDVz@Zpxyz#(r1b!WV4&~m>w8m&lu)@^k1nW@&T&hPtY7E&4>{>%RjObc Q%m4rY07*qoM6N<$f|tcDLjV8( literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/ludwigdesk.png b/cases/case-09-final-insult/sprites/ludwigdesk.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7e08261088d3649c1707c3825cb0e5f7ab26cc GIT binary patch literal 796 zcmV+%1LOROP)P000yS1^@s6cz2e)0008xNklSPgP$i&99iTzmkollu@tO!9?&=DKr{&c*c{B zG=R3)skIuvc3#(OG`_x#^pl!a>T^8E0rq0i-yH1~+Iwz)`n2j;V%1h-kbvr%?ECvR1u+~P|XP0cx_+he{dkHq8B#$icLm+B+>UPDyBNc(WsUz__#+biFKup?A&u(H*M$Et2kdYIv37vKu#&}(h zNv83Wr_Zj+*q3!bGuxt#@+ou67z5uo2#z{Y)4D0lD2$9yI+d0o=e&~qu(hZ+>cV}) zyK825WjsTLkx^%yQj&0v%AT>ex2IhRD~9tV9)Qt034c0000!joT_};t=we0*X_<6+s9q{c2$c#mqYIT4U4(+7dZ~vX zttdgo8ycuxFe;Kt>!DnwvAL@%6Z0>w3Jsk3`OnOm^L^)h2Z{+J%}|8;hB|V) zduU(wULrMoMocibAqO*0``p$_9(T8C?myqD783+|m%ZMK2khM&QV8-@7Ls~#i%w=N zCgoS79vxMsh7AsCTsx8am6tcgPv*Z~7qz6>>2*56qfED2F^-R{+0?Yxt$(Tq|5;UgYh{Wk=0}jVn%?k!GT6fI+1`>gQbt$Qj4H77A zjy21>yUB&snXyPL=>#$0>ajy8AjBd`>I=_mYBp+2H+x%QJ_(6qr#=rQ$L5zGpajDi z9U9=^1B=>-`M8}JiuSI4%v-SpRiz1-eK8w9J-V_2OUr-a{jWh-Oui)tS#Bvt!i|$C zhzUXJ^f1V>c4V!ehnQDYs9)v9irjL*HU_ffQAzro?7KQnyxVsMnO`O$EDSic)dDH| z5y4h;vJE2bJc*P-h}@(pq*0TQxc{~r6^CEo$+l`pvWUOde%K5vd)SK0aR($z0qIu? zSDtqOV62%Mg?s6h*nTt_BnbJZQ+Q8NG9uxF&oCxv7?!Ke9rDX8yVkAQ$v$5s1{Fbw z5H2og#;spXcwdx@@ugASo<6S}R;wc26w3Kd4emusdKxgol&zx{-4vFIhKKfM>v9EQpQLSpq8y4I~dA)o*uC=dWTxS+eX5IFA;12%4A4hofJ8AAv@Uwa+YG+?+} zs#c(tWLeHSVt9L*0uk;{ytZtO26uJv4IwnCXPNJyy`gy*W$<2=GwpJAzL^kbT5cr* zbqk-2F_t+;eL9mrFEdX_qEon|EwV{lz)l;V82@_V(#6P6%QTmuK;{6xg+Tr6t++YO z0sK}vDVL?vTLx)Q7Mj=ADubzAXnWm&LM$x2W33VRVEQ35fDD19*NX~}fKp=N$l(ZL zEL(>}7x#4T5kn&wlOSY0)VaL$fk6bC0E%$&{YQ$3dO=y893AEC%b6?Ji^WRnK68o@ z;nMO7r>5@n_T76ozV=V*}I#MpUlL#2xni->AXWn zoxA7HUhwppQ#gL?D9(aH#UL(fj;#2_2K90cT7&+!SL`Q92nS#;?>J2e=7Ut zT~4iH?U9QO;0u6?>QJfGjm3}EUroj;fy&X%rrozGX8eVurggqHKmVquw|6`0K~Sw$ mF*G#jot>BdBHCvg+~I!_LCC8|zIt2$0000hn~Fc%2~3j-5kU_mTp<53upn0W@Cffext%pfRfRbXL+mZAA* zNzX>UOK6nK-TD5ue`g1x3a0{50RZ_Oz!slob58sjRfixD(u9N+fC7zeVJ~O@hDV`b z0>~^>xp7!>EwXLuZ$t%oA2M?e;{=i>5Zm{j zyNAU9Vs&B@MmCsR1{<6SN2kYkX0IZtpT36Uz4XX?bF@HNSQk3dnJ2CH3Jb)_6YiX`xqA2zet%}Pt_1o7;R zMx#E!3xMX=P&bA9Q9RyUA(mHL7Llo`Y>5I00000NkvXXu0mjfl3KQZ literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/podium.png b/cases/case-09-final-insult/sprites/podium.png new file mode 100644 index 0000000000000000000000000000000000000000..605711b5083e5cc9c0ecdab64e0d1389caa17317 GIT binary patch literal 540 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 literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/sofa.png b/cases/case-09-final-insult/sprites/sofa.png new file mode 100644 index 0000000000000000000000000000000000000000..c41fe507a9f23dabfd68869399bd744785eec3d8 GIT binary patch literal 1145 zcmV-<1cv*GP)abYN_alAQnF)vHD@~r}0CgX~hTq z@Qt?q2t|ad5$%T{wZ;~yi5J?GAXu?hMM<=2V{&Ki%sE^3nKN^5qUSPm&uhQd-g^xh zHb@8CcW2kSsio_?dpJp8jDb=rJs|}mf~N>SPmCvqxv71}?gf!cVhy77j@-8kHeem& z;>2f4`5xpr8(x_X2g1)C-iL_3z@YDAQ0!GWt?bve99)KCg4!?w!jy@=l!0Z7q z)-j39*>sAmX_Q_)U{PXbW#q22;#Z-yTk)>@@5SQZR{-AbcAX|7%ualcmQ8&w5mucQ zt3sE}4A>AJ+_wkEjvkj=ngCDGlp8i^S%`|ct8)XRJGx*LV3@7WRJFVf3~Lyb?Wd+G z4P}|{=iWVp((4Cs*Q#!Ko(DxlM+Wv9GEPPm6_mGd$NuLVKmjT`#`@I-v~S&NJ+hfj z5rib-%M+)p&&;yVL^-tf9y1Zn9~r~RT|?OU;mgnf21Z^(6UR95!f>ov7yZWT8ZLJX z9c+;7GYs_XWsJZ14u;3S2DHE@rm`wvGD!&K6>To%K4n$IHg;FHz|{77+!s8IbE*~P ztBVL>(DUS>;HKsqX4I{BKD1U;O5oBQjcpsy`M?k^O-_MH)Y>56kwHM<>7!!|6LU~3 zuu>kBXA4-O7J0UF&%?m!5R)GrM>P8j$QE3xzir#@+x(eN-oxg{$DF4GEzt_7o{wKk zCHyvh7TtKOaG+#cjD8Z zz7Jo@x%u{9vv%iR3sbRS4MP4Me_UCF3F_dj@5i>M`)$8kS;_6v0{r@VGLlj#%-JA-CUJJMmkb(Y3j1!yV6U$l~Wi>Z#`Sflqu`fXk=z|J~E8b+oL(8nemiI zq<0uF!a_OmF+Q7gF2SdCB?P0wIz^#2E2Q&Vq@RN-+td?**V#Uz8; zft>YV4NU*BUbDT-0>}y3&a?CCefL$z{M@`M1cYlzl*jrn$B6@dce&9{00000 LNkvXXu0mjfB$+M~ literal 0 HcmV?d00001 diff --git a/cases/case-09-final-insult/sprites/tanya.png b/cases/case-09-final-insult/sprites/tanya.png new file mode 100644 index 0000000000000000000000000000000000000000..f02142688117a1bacfe550a641294a6b45419fe4 GIT binary patch literal 638 zcmV-^0)hRBP)X1^@s62ynlM0006-Nkl0v@6g@L}X%(VW5Lyr#;zkh!#f{L7;y-Xx7lJFH3#%Z72-ZUUpolb3iXR{%b?HKg zMZ}MVA})#xts=N7E{b26iV~AFP39iC_q~@C?_*}(n|tQmJLleqK!FZP2FZi0O$vEc zNSaTFQzt+W4jI=+*3J*BC z2zKhYbo?ErPZaU9FMyrDU||m+fOpUbxOr=?ynFN*P8IU-%{FRRCLpc@Mw`uVp*8T> z*!WpG!Q)?d5hTFpvdGY(`r@J8z(U8t9p2xW$H?J9gx_^wwTUm!o?z+2s>Q{FM+?RB z?7XapfJUpMlE~+oleUIH2^5hKQ*|z$AD7bPX`ya180hKqmj)CnF2D;V%Jw(F&N`ga zl$|AWVDBy*8rg4ZL_QKH3~=`^%Z0^dL_T2Z+Py?oCWn$aE#1<`sw}?!W;wN6En7*- z^2&+?{#WNf>MHr6yyYeajxh-!238hcX}P)}q1di_@%07*qoM6N<$f=9F_f&c&j literal 0 HcmV?d00001 diff --git a/tools/__pycache__/sprites.cpython-314.pyc b/tools/__pycache__/sprites.cpython-314.pyc index 3cb7abfe6cca7c3c4630741918b641ddca5b9b7b..2c65db74bd719848b6faad470e39969f7bcb6750 100644 GIT binary patch delta 536 zcmeAVdlJU0&Bx2d00g_&rDUaUA$$x15zjKY(PRGe6%fhKI;tWwCxxOlRv+Dt~#$@|rUn2H1@^Qli@+%tK; z`aV5Y9=4m3Y7<2!2;Sfq=&$Llnc;k$U*QWg11IkTUcs)I8G$n+zpw&%-`N=WgeO;M zsEV-zc^!;hEHh<4Ff*`neq;ce@ttS#W{uV;T_E%4CoKjc+waT_TuRqD6@L{w108Wh zSK3pG?I=phHV|pX1Qa=`zzQN&xjjuc m_h_au$|^FNeDGjoVBzVgy231ZlZB(r?ISY-i&T*$&=LUdscfA9 delta 438 zcmaD7)*r^J&Bx2d00ci*resNOK#k?kl0JBZ|PWCl{l1lWM&adjn69@Z0_oSy6)C&bx6q%0Fq=d4TSfo?