Commit Graph

16 Commits

Author SHA1 Message Date
type-two
9a64cfdf9f Add tools/webbuild.sh — bake the whole campaign to one wasm
MRPGI (827797a) can now bake a folder of game folders into a single browser
build with its title screen intact, so the entire sixteen-case campaign is one
2.1 MB wasm rather than sixteen separate builds. This wraps that for the repo.
Deploy stays a separate deliberate step.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 18:40:12 +10:00
type-two
865c7a83a2 Case Twelve: The Late Movie — the finale, and a reproducible win-path suite
Sixteen cases. All lint clean, all win paths verified by tools/verify.sh.

John's multiverse finale, with his own Stay Tuned correction folded in as the
frame — which is what made it work. The television is not a neutral doorway,
it is a subscription: a satellite dish on the property annex roof that is on no
asset register, aimed down through the roof at a 1958 set with no plug, and a
man in a maroon blazer at ten to midnight who does the one thing that has ever
worked on a Drebin — hands over the paperwork and asks him to sign. Frank Jr
reads the terms first. Nobody has read the terms in four hundred years, and
that is what wins the case six rooms later via Clause 14.

Five channels, each a genre with a rule the family breaks with a form: an
iron-curtain spy picture where the unapproved encore becomes the only
state-approved act of resistance in history; a carrier-deck melodrama where the
unlandable jet lands because somebody finally read the manual, and the
saxophone stops mid-phrase because you cannot underscore procedure; a 90s
buddy-cop show that locks onto Sr the moment it reads DAYS TO RETIREMENT, and
is beaten by a Form 14 reassignment, because a man who has been reassigned
cannot be killed in the line of duty; a UK procedural whose silence technique
loses to a man who simply has nothing he needs to say; and a cartoon, survivable
twice, if you fill in the injury form afterwards.

The Twilight Zone kid is the actual antagonist — not the salesman, who only
sells the dish. A boy of nine on the crater set, lit from below by a television
that isn't there, who can do anything and only wants nobody to leave.

The win: they supply sixty-seven years of Drebin paperwork as the contractual
replacement programme, in good order, and the instrument must broadcast it on
all 666 channels — and none of it is entertainment. The boy watches eleven
minutes, stops smiling because it is the first thing he has ever seen that was
not made to hold him, says "Oh", and turns the television off from the inside.
The three Drebins are one man for exactly one frame.

Also: the win-path harness lived in a scratch dir and got wiped mid-session,
which made every case look like it had broken. The games were fine; the harness
was not reproducible. It now lives in the repo — tests/scripts/*.jsonl plus
tools/verify.sh — so regression testing survives the machine.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 13:39:20 +10:00
type-two
a9e53ccc49 Hook up the engine's new title screen as the front door
MRPGI (fa7fa10) grew a title screen / world picker: point --game at a
folder of game folders and you get the shelf. cases/collection.json names
it POLICE SQUAD QUEST, and a bare ./play.sh now opens it instead of the
shell menu — arrow keys, Enter to play, Esc backs out of a case to the
shelf. ./play.sh <number> still jumps straight in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 21:50:43 +10:00
type-two
8c714d56aa Case 8 1/2: The Heron — the Interpol team-up
Fifteen cases, all playable, all lint clean, all verified end-to-end. This one
came in at 100/100 on the first verification pass, same as The Liaison.

John asked for the Clouseau crossover — Drebin dragged into an Interpol team-up
chasing a jewel thief to the UK. The archetype that was the wrong shape for the
1958 era is the exact right shape for Nielsen's Drebin: two detectives on one
case, one oblivious-competent, one confident-catastrophic, each convinced the
other is a genius. Done as always by archetype, never import: Inspecteur
Gustave Fouchard of the Surete, twenty years on one thief, introduced disguised
as a chalk outline he drew around himself from inside; an accent the parser's
literalism keeps faithfully transcribing and correcting for units; Hugo the
driver with standing instructions to attack him at irregular intervals, who
crosses the Atlantic in an overhead bin (asking to join the programme is a
death); and the Heron, a gentleman thief who leaves an engraved card with
nothing on it, because he is not telling you who he is, he is telling you he
has a stationer.

The thief is R. Fanshawe-Root — cousin of the Quartet's Professor. The family
that plans versus the family that does. The scheme launders the stolen Rose
through the auction house's own catalogue via a paste copy consigned before the
stone ever left Antwerp; Fouchard's destruction of the plinth (a structural
event, per the insurance filings) is what exposes the paste, because his
catastrophes are always accidentally probative.

The catch is the most Drebin thing in the campaign: no signal, no weapon,
mid-bidding on the next lot — routine inspection, sir, would you mind turning
out your pockets. And he does, because in twenty years and forty-one operations
involving a submarine and a trained cormorant, nobody has ever simply asked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 19:49:09 +10:00
type-two
518fce7e84 Act Zero: The Liaison — the spy-spoof crossover, 1965
Fourteen cases, all playable, all lint clean, all verified end-to-end.

John asked for a Get Smart-era crossover. Done the same way as the Ealing case:
archetype parody, never character import — the shapes of the sixties spy spoof
in entirely original lines. A federal bureau whose initials expand differently
every time anybody asks. A shadow organisation never once photographed,
recorded or arrested, which the Bureau takes as proof of how good they are. A
secure-conversation dome inaudible only to the people inside it, while two
hotel porters take accurate notes at the far end of the room. A telephone in a
shoe, which rings at 2 AM in a stakeout doorway, and which Sr answers and
takes a message on, in block capitals, with the time, because the log does not
care what the telephone was wearing. An agent who dictates his conclusion and
bargains it down under oath: there is a mastermind in this city; there is a
criminal in this city; there is a city.

The timeline hands the plot over for free: the tins stop at 1958, so by 1965
the pattern is seven years silent, and a federal analyst has finally assembled
it — twenty-four pins on a map that should hold twenty-six, and Sr does not
correct her. The Bureau concludes saboteurs and sends fourteen agents and a
dome. The city assigns its best detective as liaison. The pattern is him.

Margaret Vale is the point: the competent-partner archetype turned into the
only person in the saga who beats the family trait. She works it out — one
name, nineteen years of attendance and signatures — and writes nothing down.
The Drebins write everything and are never read; she reads everything, knows,
and chooses not to. The case's centre is a shared four-hour watch in the
doorway her model predicted, and the question she asks at dawn, and the
answer, which is yes.

Also quietly answers Case Eleven's open question of why he stopped: the last
tin is dated the month Prosky drew nine to fifteen for the Ardmore job.

100/100 on the first verification pass, lint clean on the first pass — the
linter's trap rules have now paid for themselves in full.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 19:36:30 +10:00
type-two
7b2222f97a Beirut cold open, the unused film beats, and ZAZ's back catalogue
MRPGI is verified clean and in sync; all thirteen cases still pass against it.
This pass closes the content gaps a sprite audit turned up — several generated
sprites were never placed, and each one was a missing film beat.

- Case Seven now opens in BEIRUT, as the film does: four days at the back of a
  summit of the six least popular men on earth, holding a glass of water,
  which is where a Los Angeles shipping company with two hundred and six ships
  gets named out loud. Added as room6 with start_room pointed at it, so nothing
  renumbered. Case is now 140 points across seven rooms. The despots are
  generic fictional strongmen rather than caricatures of real heads of state.
- Case Ten: the P.L.O.T. Device itself now appears — the title object of the
  case had never once been on screen — plus Cane's self-driving car, which
  refuses the destination and plays an advertisement before the paperclip
  intervenes.
- Case Six: Danny Cavanaugh's publicity still, captioned in his own hand,
  "DANNY CAVANAUGH — AVAILABLE."
- Case Eight: Hector Savage's fire hose, and Meinheimer's own wheelchair.
- Case Nine: Tanya Peters and the clinic on Wilshire (Frank is DONOR OF THE
  QUARTER; there is a plaque; his wife has not seen it).
- Case 00b: the Professor's four-foot diagram, admitted as Exhibit 1 over a
  defence objection that it is prejudicial, which the judge agrees it is.

ZAZ's own earlier films go in as texture, not cases (DESIGN §10):
Airplane!'s "don't call me Shirley" in Case Five, the escalating "wrong week to
quit" across four rooms of Case Eight, the drink poured into his own face, and
Otto the inflatable partner in Act III at forty per cent with no pump. Kentucky
Fried Movie's news anchor who doesn't know he's on air (twice, 1988 and 2025)
and Feel-A-Round at the Academy Awards, where the usher cannot move because he
is the horse.

Six name-shadowing blockers caught by the linter on the way in, including
'earpiece' swallowing 'plotdevice' and 'body' swallowing 'comedian'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 18:37:54 +10:00
type-two
9bfd6ddb44 Cases Three, Four, Five and Nine — the campaign is complete
Thirteen cases, all playable, all lint clean, all verified end-to-end at
100/100 (Case One is 95 + 5 optional by design).

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

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

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

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

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 00:15:47 +10:00
type-two
104cedbc2f Case Eleven: What He Wrote — the grandfather arc closes the loop
Nine cases playable, all lint clean, all verified end-to-end.

A records-modernisation project puts sixty-seven years of paper through a
scanner, and Frank Drebin Jr becomes the first person ever to read one of his
grandfather's reports. Page nine of the Meridian Street file sets out the
survey, the recommendation, the transfer and both signatures, in the same flat
careful voice as everything else. He put it all in. He put all of it in. Page
ten is the property schedule, because there was never going to be an
explanation — to the man who typed it there was nothing there to explain.

The palette drifts backwards through the case: room 0 is Act III cold blue, the
basement is nearly all grey, the last rooms are 1958 monochrome, and every 1958
prop is generated mono so it reads as lit by a different decade — the owl trick
from Case Ten extended across a whole case. Ninety-one-year-old Stanley
Kowalczyk, the rookie from Act Zero, is the only warm-coloured thing in it,
because he is the last living link and he has had his commendation on a wall for
sixty-seven years, next to a note telling a night clerk to be at his sister's.

Under the third floorboard at 1114 Delaware: nineteen tins, 1939 to 1958, every
one full, not one ever opened, with an inventory on top in a flat careful hand
headed PROPERTY — NOT YET SUBMITTED. He never spent any of it. It was never for
anything.

Jr does the only thing a Drebin can do with a true fact. Eleven pages, every
sentence true, submitted at 3:14 in the morning — and the portal thanks him and
asks him to rate his experience with the records modernisation portal today. He
rates it honestly, because he is constitutionally incapable of anything else,
and leaves a four-hundred-word comment, and nobody reads it. The cycle is the
punchline and the punchline is the tragedy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:54:11 +10:00
type-two
58471b6a8e Act Zero crossover: The Quartet — Drebin Sr vs. the Ealing incompetents
Eight cases playable, all lint clean, all verified end-to-end.

John asked what 1950s bumbling criminals Drebin Sr could look good against.
Clouseau is the wrong shape twice — 1963, and a bumbling detective rather than a
criminal. The right seam is the Ealing comedies: The Ladykillers (1955) and The
Lavender Hill Mob (1951). Done as archetype parody, never character import,
which is exactly what ZAZ did to M Squad — take the form, not the people — and
which lets the gang be tuned to make Sr's twist land.

Five lodgers calling themselves a barbershop quartet, and in eleven weeks nobody
in that house has raised the arithmetic. A mastermind who is nought for eleven
and blames personnel every time. Muscle brought for the violence who offers you
an aniseed ball. A driver who cannot drive and came with the goggles. A
safecracker who is the best in the state and has been deaf since 1943, and has
been asking about that since August. An inside man who works at a different
company on a different street and has raised it four times.

The twist: they tunnel eleven feet through Victorian brick for eleven weeks to
reach a vault Frank Drebin Sr emptied five weeks earlier — legitimately, on his
own written recommendation, signing the transfer manifest at both ends. Arrested
inside an empty room. The paper calls it the finest detective work in the city
in twenty years and every word of it is true. This is why he has never been
caught: the visible criminals are loud and his own crimes are silent.

The case is actually cracked by a seventy-nine-year-old landlady who took a bus
to the police station to complain about the noise, and she never learns it.

New lint rule, from a real 10-point loss here: two DIFFERENT objects awarding
points for setting the same flag — points fire on the false->true flip, so
whichever runs second silently pays nothing and max_score goes unreachable. Same
object paying via `use` or its own dialogue is fine; those are alternatives.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:30:26 +10:00
type-two
8d18a87cb7 Act Zero: 1958 — Frank Drebin Sr, and the score is the confession
John corrected the family tree and the correction is better than what I had.
Leslie Nielsen's character is plain Frank Drebin; the 2025 film makes Neeson
"Jr", which retroactively makes Nielsen the father without ever calling him Sr.
So Frank Drebin Sr is now a THIRD Drebin one generation further back — 1958,
entirely ours, no canon to violate. Terminology corrected across all three docs.

The twist, per John's "maybe he is really a criminal": he is the most prolific
criminal in the city's history, he is also a decorated homicide detective, and
he has never once lied about any of it. Not corruption — corruption requires
noticing. He is a Drebin: totally literal, totally sincere. He robs the payroll,
then investigates it diligently and files an immaculate report stating what he
did, because the form asks what happened and he answers the form. Nobody has
ever caught him because nobody reads the reports. Best clearance rate in the
division.

The mechanic: the score is the cover-up. Played completely straight, no jokes in
the system text — every scoring action is correct procedure that destroys the
evidence against him. Lifting a latent removes it from the metal. Section 9
requires the spoiled card be incinerated, witnessed. The typed report supersedes
the rookie's notes and the Captain signs it unread. You reach 100/100 in room
three; the final room is worth nothing, because you have already been paid in
full for the cover-up.

He is also the Gremlin — the chickens on the Captain's desk come from the coop
he built in 1951, and in seven years nobody has said the word out loud, so it
has never occurred to him that anybody wondered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:22:43 +10:00
type-two
72815f8c55 Case Six: Testimony of Evil — the whiskey exploit is the puzzle
Act I, monochrome. Five rooms, 100 points, verified at 100/100 with four
verified deaths.

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

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

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

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 23:11:22 +10:00
type-two
3b20f7accc Case Eight, a case picker, and a linter for the authoring traps
Case Eight — The Smell of Fear (1991). Act II, full colour. Five rooms, 100
points, verified at 100/100 with two verified deaths.

The puzzle is identification: Meinheimer has an eidetic memory, so the double
cannot be caught out on a fact — he can be caught out on a manner. Ask him two
questions and he answers "about four hundred", "roughly", "give or take", and a
man who remembers everything never says roughly. The catch is gated on having
heard the approximations, so the player has to earn it. Accusing him without
that is a death. Also in: the Blue Note, the SWAT tank through the wall into the
zoo (which arms the lion that kills Hapsburg two rooms later), the mariachi
infiltration, and a nuclear device disarmed by tripping over its power cable.

tools/lint.py: three of the four bugs that cost real time here were the same
class, and I walked into sets_flag-on-a-takeable twice — once in Case Ten, then
again in Case Eight after documenting it. So the rules are a linter now, not a
paragraph. It caught two live instances of that trap (case-08 blueprint,
case-10 wig) and a scoring mismatch on the first run. All five cases lint clean
and all five still win.

play.sh is now a case picker: bare invocation lists the cases and asks, or pass
a number.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 22:55:40 +10:00
type-two
e429351ab3 Case Two: Ring of Fear — the paperwork is what keeps you alive
Act I, monochrome. Five rooms, 100 points, verified end-to-end at 100/100 on
the first pass, plus three verified Sierra deaths.

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

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 22:47:23 +10:00
type-two
e95360a1b2 Case Ten: The P.L.O.T. Device (2025) — Drebin Jr, and the owl
Act III, cold-palette EGA. Six rooms, 100 points, verified end-to-end
headlessly at 100/100 with the win firing.

The homage John asked for is a register, not a costume. Nielsen played Drebin Sr
oblivious — the joke was he never noticed. Neeson plays Jr sincere: he notices
everything and means all of it, so his text is written straight and often
genuinely moving, and the comedy is what it turns out to be about. He gives a
Taken speech about his particular set of skills, chief among them paperwork. He
takes four armed robbers in eleven seconds dressed as a schoolgirl with his back
to the actual crime. Cane gets the same sincerity back at him from the wrong
face.

The three-era payoff pays off: the owl sprite is generated monochrome and placed
in a full-colour room, so Frank Drebin Sr is visibly lit by a different decade
than everything around him. The palette rule from DESIGN §2 doing the emotional
work at the climax.

Planned cases 10 and 11 merged into one folder — same film, same cast, no
duplicated sprite set, and the owl payoff lands in the same case as its setup.

Third authoring trap documented: sets_flag fires on use, never on take (points
does both). A takeable item silently failed to set its flag and the gate it fed
never opened; gate on `needs`, which checks inventory, instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 22:39:00 +10:00
type-two
34c1f18335 Case Seven: From the Files (1988) — the umpire problem
Act II, full colour EGA. Six rooms, 100 points, verified end-to-end headlessly
at 100/100 with the win firing, plus two authored Sierra deaths.

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

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

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

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

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

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 22:29:27 +10:00
type-two
0e2523a8a9 Police Squad Quest: research, design bible, and Case One playable
A Sierra-style adventure in the Police Squad!/Naked Gun universe, on MRPGI —
which reimplements AGI, the engine Sierra shipped Police Quest on.

The premise: Police Quest's pedantic procedure x Police Squad!'s farce. The
game grades you on correct procedure with a straight face, and the reward for
perfect procedure is catastrophe anyway. Per John, the famous Police Quest II
bugs are shipped deliberately as canon gags.

- RESEARCH.md — all six Police Squad! episodes, all four films (incl. Neeson's
  Frank Drebin Jr, 2025), the recurring cast, and the ZAZ comedy grammar.
- DESIGN.md — the joke engine, the two Drebins across three eras (Drebin Sr's
  1982 cases render in a monochrome EGA subset for the 1950s M Squad look),
  an eleven-case campaign, and the PQ2 glitch-to-feature table.
- cases/case-01-substantial-gift — playable. Five rooms, 100 points, full win
  path verified headlessly at 95/100 plus four authored Sierra deaths.
  Procedure gates, dusting for latents, and Miranda rights in the correct
  order are all pure JSON; no engine features were invented for it.
- tools/sprites.py — all 24 sprites generated locally on MODELBEAST
  (flux_local -> bg_remove_local -> trim/downscale), reproducible by seed.

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