Skip to content

Tidewater Docks and Thunderhead Mesa: legal winning strategies and three staff fixes - #191

Merged
jiro-by-nori[bot] merged 5 commits into
mainfrom
scenario-remix-tidewater-thunderhead-wins
Nov 1, 2026
Merged

jiro-by-nori[bot] merged 5 commits into
mainfrom
scenario-remix-tidewater-thunderhead-wins

Conversation

@jiro-by-nori

@jiro-by-nori jiro-by-nori Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Summary

🤖 Generated with Nori

Tidewater Docks and Thunderhead Mesa (remixed in #190) went from 12/12 to 0/12 in the scripted sweep. Traces showed this was not the scenarios being impossible: both are now won legally on the map a new game generates, with the scenario's own cash, loan and research, using ordinary player commands only.

Diagnosis (telemetry, not blind seed sweeps)

  • Script defect, main cause. The site plans put most flat rides 2 tiles from their spine. That leaves no queue tiles, so rideQueueCapacity was 4, and guests still walking to a ride count against it. Four walkers crossing the long park filled every ride. At Tidewater, 399 of 515 guests had nothing to ride and spent about $4 a month. Income could not cover 18 staff ($1,020 a month) plus $200 a month of research.
  • Script defects at Thunderhead.
    • Overlapping placements boxed in a Ferris wheel exit, so it was never repairable.
    • A patrol rectangle edge stranded the cliff-trail handyman.
    • The 35-tile trail had no bins, so litter sat at 100 and the rating went to 0.
  • Three sim bugs in staff, fixed with regression tests (src/sim/staff/staff-system.ts):
    1. Idle staff could wander towards a queue tile, which is walkable but outside the walk graph. They then froze for the rest of the game.
    2. Every mechanic chased the same nearest breakdown, so all mechanics moved as one pack. Now one mechanic answers each breakdown: a mechanic skips a ride that a nearer mechanic is already heading for.
    3. New hires spawn on a random tile and were "rescued" onto the nearest path tile in any network. On one seed this stranded both mechanics on a cut-off fragment, and every ride stayed broken. A worker off the paths is now placed on the entrance's network.

Strategy changes (bench only)

  • Re-laid plans for both parks. Rides get real queues (capacity 8 to 20), with bins on every footpath and research funding off. Every ride both parks use is already researched.
  • Tidewater:
    • Builds round the prebuilt stall and wheel on the west quay.
    • Repays the $6,000 loan, which happens by month 4.
    • From month 20, walks the south quay out to both finger piers and lines them with rides.
  • Thunderhead:
    • Lays the cliff trail (with bins) first.
    • Builds on the mesa top by the gate.
    • Then builds on the west shelf.
    • Handymen patrol the trail and the shelf.
  • New site-plan steps: bins, repay and wait. Also new: flat.clear, route.bins, roaming (null) patrol entries and researchFunding. runScenario gains realResearch.
  • Layouts were chosen with a scratch search that tried each placement on a cloned world through the real commands. The committed plans are fixed and are played with real cash.
  • No scenario JSON, terrain, ownership, goal, deadline or rule changed. No difficulty tuning was needed.

Results (pnpm balance -- --scenario <id> --seeds 3, plus the new-game seed through the win test)

Park New-game seed (real research) Seeds 1–3 Before
Tidewater Docks (repay $6k loan, value ≥ $5,500 by end of year 4) won: value $6,389, loan $0, rating 912 1/3 (seed 2 $7,110; seeds 1 and 3 miss at $5,411 and $5,042) 0/12
Thunderhead Mesa (460 guests, rating 700 by end of year 4) won: 637 guests, rating 818 3/3 (579–662 guests, rating 732–818) 0/12

Regression check after the staff fixes: every park on seeds 1–3. Glacier Point is identical to main on the same seeds. Mossgrove Isle over 12 seeds: 2/12 on main, 1/12 here. Mean ride income is unchanged ($297 vs $299 a month); one seed sits on the $350 line. It was not retuned. Details are in docs/BALANCE.md.

Test Plan

  • bench/hard-park-wins.{tidewater,thunderhead}.test.ts: each park plays to its deadline on the scenario seed with real research and must win. It also checks that every first-year ride opens and has room to queue.
  • Staff regression tests: they fail on main and pass here (queue-tile freeze, pack mechanics, stranded hire, mechanic on a separate path stretch).
  • pnpm format:check, lint, typecheck, src and bench suites.
  • Canvas2D browser proof: the won saves are loaded in the dev build (e2e/hard-parks-proof.spec.ts won-park block). Screenshots are on the proof branch, linked in a comment.

Share Nori with your team: https://www.npmjs.com/package/nori-skillsets

jiro-by-nori Bot and others added 4 commits November 1, 2026 14:02
…ue onto the park's network

- A mechanic skips a broken or due ride that a nearer mechanic is already heading for, so extra
  mechanics answer other breakdowns instead of following each other as a pack.
- Wandering staff only keep or pick destinations they can reach; a queue tile (walkable but
  outside the walk graph) froze a handyman for the rest of the game.
- A worker standing off the paths is put on the network the guests enter by when it can be,
  not on a cut-off stretch of path where it could never reach a ride or litter.

Co-authored-by: Nori <contact@tilework.tech>
Site plans re-laid on each park's new-game map so rides have real queues (the old plans put
most rides at lateral 2 with no queue tiles, so four walkers saturated each one), with bins on
every footpath, research funding off, the Tidewater loan repaid before expanding to the piers,
and patrols that cover the Thunderhead cliff trail. New site-plan steps: bins, repay, wait,
flat-step clearing, route bins, null patrols, research funding. runScenario gains realResearch.
bench/hard-park-wins.test.ts plays both parks to their deadlines on the scenario seed with the
scenario's own research and asserts a win.

Co-authored-by: Nori <contact@tilework.tech>
BALANCE.md and scenario-remixes.md record the diagnosis, the demonstrated routes and the
results; bench, staff, guests and e2e noridocs follow the code. hard-parks-proof.spec.ts gains a
won-park block that loads the saves bench/hard-park-wins.test.ts writes.

Co-authored-by: Nori <contact@tilework.tech>
…osure, per-park win tests

- The off-path rescue only prefers the entrance's network for a worker off the walk graph; a
  mechanic repairing a ride on a separate stretch of path is no longer moved away (test added).
- wander's reachability check is a module function, not a closure per call.
- A repay step never borrows first.
- The win test runs one file per park so the long runs go in parallel; the queue test checks the
  handyman never stays on one tile, on two seeds; the e2e won-park block skips with a message
  when the saves are missing.

Co-authored-by: Nori <contact@tilework.tech>
jiro-by-nori Bot added a commit that referenced this pull request Nov 1, 2026
🤖 Generated with [Nori](https://noriagentic.com)

Co-Authored-By: Nori <contact@tilework.tech>
@jiro-by-nori

jiro-by-nori Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Proof: both parks won legally (Canvas2D, dev build)

The won parks were saved at their deadline by bench/hard-park-wins.*.test.ts. They use the new-game seed, the scenario's own research, cash and loan, and only ordinary commands. Each save was imported into the browser. The evidence README, the saves and every screenshot are in nori/pr-proofs/pr-191.

Park Result at the deadline
Tidewater Docks (seed 2202) Objective met: loan $0 (repaid by month 4), park value $6,389.10 (target $5,500), rating 912, 483 guests
Thunderhead Mesa (seed 3101) Objective met: 637 guests (target 460), rating 818 in the sim and 797 after the browser recalculates it (target 700)

Tidewater: west quay
tidewater quay

Tidewater: piers
tidewater piers

Tidewater: finances (loan $0, research off)
tidewater finances

Thunderhead: mesa top
thunderhead mesa

Thunderhead: west shelf below the cliff trail
thunderhead shelf

Thunderhead: Park window
thunderhead park

Test runs on this branch:

bench/hard-park-wins (both parks, real research, new-game seed)   Tests  2 passed (2)
src/sim/staff                                                      Tests  56 passed (56)
pnpm balance --seeds 3: thunderhead-mesa 3/3, tidewater-docks 1/3; all other parks match main

Canvas2D only: importing large built parks crashes headless SwiftShader WebGL2 in this sandbox, the same as on main (see the PR #190 proof).

…ter-thunderhead-wins

Co-authored-by: Nori <contact@tilework.tech>
@jiro-by-nori
jiro-by-nori Bot merged commit 9d4dc86 into main Nov 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants