Skip to content

FRLG 00.26: the Bike Voucher, back to Cerulean, the Bicycle - #224

Draft
dayfine wants to merge 40 commits into
frlg/stage6-vermilionfrom
frlg/stage7-celadon
Draft

dayfine wants to merge 40 commits into
frlg/stage6-vermilionfrom
frlg/stage7-celadon

Conversation

@dayfine

@dayfine dayfine commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Depends on #222

After Lt. Surge the story had no row for the Bicycle. This adds 00.26 in a new PokemonFRLG_AutoStoryTableCeladon.cpp: from Vermilion's Center to the Fan Club chairman (YES, Bike Voucher), north round Route 6's trainers, through the Underground Path and Route 5, Cut through Cerulean's south tree, the Bike Shop clerk (Bicycle), 5 Repels and 2 Escape Ropes at the Mart, and the nurse; the Fan Club and Bike Shop maps are generated from pokefirered, and two waypoints keep the planned walks off Oak's aide on Vermilion's (25, 7). The new AutoStory Celadon sim tests run the row with the aide present (no battle, every walk ends where planned, each talk faces the chairman or the clerk), check that 00.26 starts where 00.25 ends and what the Mart step buys; the FRLG AutoStory and Overworld suites pass locally. Not run on the console yet.

Update 2026-11-09 (25d866b, core plan stage 5): on console B (00.27 run 2) wild battles on the open leg "east 11" across Route 10 showed only after the hold, and the walker took the player to be anywhere on the leg ("stopped 0 to 11 tiles in"). Story walks now record an open leg's screens as the shared timed event log (FRLG's screen observer, from #122) through the hold and the watch after it; when something shows after the hold, the shared classifier names it and a wild encounter is placed on the tile its step reached, from when its text box rose less LATE_WILD_BATTLE_DELAY (the number measured on that text box). The bound is now 3 tiles walking, 5 running. New OverworldLateBattle sim tests (battles on steps 3, 6 and 10 of the leg) were red first, logging the console's "0 to 11", and still reproduce it with the new sim rule off. FRLG, Pokemon:: and StoryReplay (17/17) results are unchanged apart from the new tests, on the headless runner; not run on the console yet. #122 is merged down #213 to #258.

Merged #222's core stage 8 (the FRLG sim runs through the story action table); OverworldStepSim carries this PR's hop()/step_onto() steps.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

dayfine and others added 3 commits November 3, 2026 19:20
… Bicycle

New row 00.26 in PokemonFRLG_AutoStoryTableCeladon.cpp: from Vermilion's
Center to the Fan Club's chairman (YES, the Bike Voucher), north round
Route 6's trainers, through the Underground Path and Route 5, the tree
into Cerulean, the Bike Shop's clerk (the Bicycle), 5 Repels and 2 Escape
Ropes at the Mart, and the nurse. Two waypoints keep the planned walks off
Oak's aide on Vermilion's (25, 7). The Fan Club and Bike Shop maps are
generated from pokefirered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Keeps add_tests() under the function length limit with 00.26's tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
New row 00.27 in PokemonFRLG_AutoStoryTableCeladon.cpp: from Cerulean's
Center, the city's south tree again, out east and Route 9's tree (2, 8),
Picnicker Alicia, Hiker Jeremy (waited for to look north) and Bug Catcher
Conner, the only three of Route 9's nine the way can't walk around, legs
round Hiker Brice's row and above Picnicker Caitlin's line, down the two
ledges, and Route 10's north part to its Center's nurse. Route 9, Route 10
and Route 10's Center are generated from pokefirered; the save card reads
ROUTE 10. The row sim takes hop() and the new step_onto(), a single step
onto the tile above a ledge, which a held leg would hop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine and others added 4 commits November 5, 2026 12:19
…228)

* Extract common wall convergence search behind game movement adapters

* Use shared wall convergence search for FRLG re-anchoring

* Document wall recovery policy and expose span-based API before helpers

* Show expected and actual wall holds in table-driven failures

* Use static movement policies with explicit map context and document test rooms

* Select static recovery policy with explicit FRLG world context
dayfine and others added 3 commits November 6, 2026 20:01
* Navigation tests: match shared FileIO Windows compiler policy

* Build FRLG map data from verified pinned Packages resources

* Canonicalize embedded map dependencies to prevent duplicate Ninja outputs

* Retire duplicate FRLG map builder through the Simulation battle-data exporter

* Adopt published v2 FRLG resource pack and approved Simulation tools

* Allow native map parity fixtures from pinned v2 publishers
dayfine and others added 6 commits November 7, 2026 07:00
* Build FRLG map data from verified pinned Packages resources

* Retire duplicate FRLG map builder through the Simulation battle-data exporter

* Adopt published v2 FRLG resource pack and approved Simulation tools

* Run full native validation against complete pinned image fixtures

* Include native image golden sidecars in fixture pin

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
…ry table (#260)

* PokemonFRLG: Load an exported checkpoint record back into a story row

read_story_checkpoint_export() is the inverse of story_checkpoint_export():
it reads a pokesim-native-checkpoint-export/1 record (the shared checkpoint
through Pokemon::read_story_checkpoint, plus FRLG's menu and supplies) into
the same StoryCheckpoint type that story_checkpoints() holds, so
build_checkpoint() and make_story_segment() take loaded rows unchanged.
The envelope constants are checked, every native field is required and
unknown fields fail, so a record is read as written or refused.

PokemonSimulation's data/story/native/frlg-parcel-00.05.json (its commit
051785fa251f37b71eb661d4b583435d70f69439, the export tool's output for
row 00.05) is built into the program from StoryData/ as
autostory_checkpoint_json(), and load_story_checkpoint() reads it.

Tests: CheckpointExport reads the capture and checks it exports back to
the same file and to the same JSON as table row 00.05, and refuses eight
altered copies; the existing export cases also round-trip every native
field. AutoStory - Simulation runs the loaded 00.05 and the table's 00.05
through FakeGame and compares describe(), the trace, the log lines and
the save pose.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss

* Document Parcel JSON equivalence checks and migration lifetime

* Order Parcel JSON for readers and distinguish snapshot from requirements

* Load Parcel story table entry from authored JSON and replay it in both repos

* Separate FRLG checkpoint JSON parsing and migration writing

* Share authored checkpoint envelopes and embedded resource loading

* Use shared authored checkpoint loading for FRLG

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
dayfine and others added 9 commits November 9, 2026 00:19
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
…adon

# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/PokemonFRLG_Tests.cpp
#	SerialPrograms/cmake/SourceFiles.cmake
# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/PokemonFRLG_Tests.cpp
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStorySimulation_Tests.cpp
…s start pose

# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStorySimulation_Tests.cpp
# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStorySimulation_Tests.cpp
The start pose sim test runs the console's case as well as 00.09's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Console B, 2026-11-09, row 00.27 step route10_nurse failed twice with
"no fade in and out after walking onto the warp to
Route10_PokemonCenter_1F". Run 3: the crossing onto Route 10 wasn't held
up, the open legs carried the player a tile east, the leg down column 17
met the fence post (17, 12) and the walk ended in the grass on (14, 10).
Run 2: the leg down column 16 ended a tile short, west 3 met the
Center's east wall (15, 20) and north 1 ended on (16, 19).

Copied from frlg/route10-door-red (0b00d5d). Both fail now (red) on
exactly those end tiles; the map matches pret and the screenshots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Console B, 00.27 run 2: on the open leg "east 11" across Route 10 wild
battles showed only after the hold, and the walker took the player to be
anywhere on the leg ("stopped 0 to 11 tiles in"). The sim test runs a battle
on steps 3, 6 and 10 of an open leg through Route 10's grass and asks for
the player bounded to 3 tiles around the battle's. Red: the walker logs
"stopped 0 to 11 tiles in" for each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
dayfine and others added 3 commits November 9, 2026 02:40
…'s Center

route10_nurse planned one walk from Route 9 (70, 8) to the nurse, and its
open legs ended a tile from blockers: on console B (2026-11-09) the
crossing onto Route 10 wasn't held up and the leg down column 17 met the
fence post (17, 12) (run 3), and the leg down column 16 ended a tile short
so west 3 met the Center's wall (15, 20) (run 2). Both "no fade" at the
door. The map is right.

The walk is now three steps: a route to the wall (17, 11) at the end of
row 11, which takes up the crossing's tile; legs down column 16 to row 23,
up to the Center's wall (15, 21) and west along row 21 to the wall
(10, 21); and the route from three east of there onto the door. The red
tests pass, and a new sim test starts each leg a tile off after every
open leg of two tiles or more.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
… events

An open leg's screens are now recorded as timed events (the shared
ScreenEventLog, with FRLG's screen observer) through its hold and the
watch after it. When something is seen only after the hold, the shared
classifier says what it was; a wild encounter is placed on the tile its
step reached, from when its text box rose less LATE_WILD_BATTLE_DELAY,
which is what that delay was measured on. The leg then stops 3 tiles wide
walking (5 running) instead of anywhere along it, and the player is found
again from there. The sim records its screens the same way, behind the
rule place_late_battle; story walks give the walker the observer.

Sim test: green for battles on steps 3, 6 and 10 of the leg; with the rule
off it still logs the console's "stopped 0 to 11 tiles in".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
dayfine and others added 12 commits November 9, 2026 03:04
# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStoryRowSim.cpp
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStoryRowSim.h
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss

# Conflicts:
#	SerialPrograms/Source/VideoGames/PokemonFRLG/Programs/AutoStory/PokemonFRLG_AutoStorySimulation_Tests.cpp
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VUubhHeYSMGSSDXZkKZss
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.

1 participant