# Reverberations ("Reverb") by Russell Glasser # subtitle "A Hectic Voltairian Adventure"; (c) 1996, updated/revised 1998 # Release 1 / Serial number 990110 / Inform v6.10 Library 6/5, Z-machine V5 # (IF Competition 1996 entry, 13th place) # VERIFIED COMPLETE SOLVE: 50/50, won=True (win text), died=False # # Reproduce with the RNG-pinned replay harness (free, no API): # cd ~/src/zwalker # python3 scripts/replay_solve.py games/zcode/reverb.z5 \ # walkthroughs/reverb_verified_50.txt --seeds 24 --out solutions/reverb_verified.json # => reverb_verified_50.txt: VERIFIED 3/None at seed 1 | 72 cmds | died=False | won=True # # Expected final line: "In that game you scored 50 out of a possible 50, in 72 # turns." printed just after the winning banner # "*** You Rule! The game's totally over! ***". # Winning ending: you chop the earthquake crack in the Mayor's office floor with # the fire axe; the whole mob (boss Robert "Tasty" Tasker + his men) drops # through the rift into the office below, where Jill's SWAT team books them, and # Jill hires you as an investigator and kisses you -- "The earth moves for you. # Or maybe it's just the quake." # # SCORING / why WIN_TEXT and NOT MAX_SCORE: this is a max-50 game (its own SCORE # verb and status line report "out of a possible 50"), but the interpreter's # vm.get_score() reads Z-machine global 17, which in this Inform build is NOT the # score global -- it holds the constant 3 for the entire game while the true # score (status-line "Score: N") climbs 0 -> 50. So get_score() can never equal # 50 and a MAX_SCORE directive would never verify. The win is declared purely by # WIN_TEXT, anchored on the unique closing banner (it does not appear at boot). # The "VERIFIED 3/None" in the replay line is exactly that garbage global; the # real, machine-checked win condition is the WIN_TEXT match with died=False. # # Why a pinned seed: boot draws no randomness (two boots are byte-identical) and # every hazard is a turn-based scripted event, so the game is fully # deterministic -- this exact 72-command list wins 50/50 on all of seeds 1..24. # The interpreter RNG is pinned after start() per the harness contract. # # TIMED-DEATH HAZARDS (every command below is load-bearing -- do NOT insert # probe/look/wait turns; several scenes kill you or reset if you dawdle): # * Mayor's office: after `get file` the henchman closes in; `jump out window` # must be the very next real action. # * Hangin' Out: `kick second window`, then exactly two `wait`s bring Jill to # the second-storey window; `jill, hold me` then `jump` drops you into her # arms (a bare `jump` before she is ready = a three-storey fall). # * Cosmetics dept: `spray thug` then `kick thug` then MOVE immediately (`nw`); # one wasted turn and the thug gets up and kills you ("*** You are toast ***"). # * Endgame: `break glass with hammer`, `get axe`, then exactly two `wait`s let # the earthquake open a hairline crack, then `hit floor with axe` (+7 -> 50). # # Route (12 scoring actions, cumulative): search pizza->file 2; show file to # D.A. 7 (Guido jailed, box snatched); mayor's cabinet file 10; jump out window # 15; jump into Jill's arms 20; bomb in sewer 25 (earthquake begins); spray thug # 30; grab rope+hammer 32; show closed box to guard 35 (bluff past him); rope- # swing off the roof back through the mayor's window 40; smash the fire-axe case # 43; chop the floor crack 50 -> win. # #% WIN_TEXT: You Rule!\s+The game's totally over # # Generated by scripts/solve_reverb_adaptive.py (RNG seed 1); route derived from # Sasi's reverb.sol (IF Archive) plus machine exploration; replay-verified by # scripts/replay_solve.py. x counter read note get pizza box sw s w s x district attorney wait open pizza box search pizza show file to district attorney n w w u e w u e open window unlock cabinet with key open cabinet get file jump out window kick second window wait wait jill, hold me jump w d e e e n get pizza box open box get bomb s put bomb in sewer e s se get spray spray thug kick thug nw n s sw get hammer get rope ne n w w w close box show box to guard w u u u tie rope to rod hold rope jump break glass with hammer get axe wait wait hit floor with axe