Skip to content

BDSP AutoStory v4: new game to Floaroma as one story table on the shared steps - #128

Draft
dayfine wants to merge 168 commits into
bdsp/actions-v4from
bdsp/autostory-v4
Draft

dayfine wants to merge 168 commits into
bdsp/actions-v4from
bdsp/autostory-v4

Conversation

@dayfine

@dayfine dayfine commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

Depends on #148 (base bdsp/actions-v4); the diff shows only this PR's change.

BDSP AutoStory rewritten like FRLG's: one table of story steps from 00.00 to 01.11, run by #122's shared engine with its checkpoint dropdowns and stats, written in the shared story steps (ROUTE, LEGS, STEP, TALK, MASH, BATTLE, HEAL) instead of segment functions replaying recorded stick holds.

  • Walks are routes planned on the JSON maps onto the decomp's scene triggers and coord events, with Developer-Butters' button sequences from [WIP] BDSP Autostory PokemonAutomation/Arduino-Source#1717 for the scenes (credited). 01.05–01.10 (folded in from BDSP AutoStory: plan 01.05 to 01.10 on the story maps #175) are map-planned routes and door taps that wait for the location banner; 01.08 starts from the wall west of Rowan's scene.
  • Most named events are now shared steps (folded in from BDSP AutoStory: the story table's named events as shared story steps #173); Events_*.cpp is 725 lines (1,487 before). Still named, because the shared steps don't cover them: the Azure Flute, briefcase, starter choice, catching tutorial and catch (BDSP-only menus and scripts), 00.04c's Mart lady (checks two signs, looks for her up to three times), 00.04d's stairs (Dawn's scene is not on Diamond's trigger), 00.05b's wandering clowns, 01.04's gym loop (walks back from the Center after a loss to keep the experience), and 01.09's Rock Smash (Yes/No box).
  • Maps: the mine's entrance hall (from the decomp), the coal room as a room world, and the mine's warp tiles as doors. TALK waits 8 s for a line (Roark's comes after a camera zoom, r98).
  • Start-save check: a row that saves first names its start map (saves_in). The start save reads the save screen's place name and, if it is not that map, backs out unsaved and stops with FatalProgramException, so a run never saves over a good checkpoint from the wrong place (r76/r77 did).
  • A Pokemon Center is its warm floor (at least 30% of the screen) in a room (indoors()); Jubilife's yellow plaza read as a Center and a won battle was called lost (r79).
  • Fixes from console runs r9–r103 (each named in its commit): door steps watch for the fade themselves, talks turn to the pose's facing first, Center doors in and out, the Ravaged Path exit, settling while Floaroma's cloud shadows move.
  • Small changes to parent PRs' files that the table needs: town plan costs for D-pad legs, Route 201's measured path in RouteRecords and Segment00Lines, and the Center test in the Walk suite.

Testing

  • Suites: StoryTable (lints: a row has saves_in exactly when it saves first, each row starts where the last ends, town routes take the short way), StorySimulation (the whole story in English and Japanese, every route planned), and Walk. Offline on BDSP AutoStory: grid simulation of walks and scenes for unit tests #167's grid simulation (throwaway merges, not part of this PR), every row from 00.04d to 01.11 ends on its table tiles.
  • Console: the start-save check stopped as meant on console B (01.10 started in Floaroma read "floaromatown" and stopped unsaved).
  • Not run on the console yet (from BDSP AutoStory: the story table's named events as shared story steps #173's and BDSP AutoStory: plan 01.05 to 01.10 on the story maps #175's checks): 00.02's Lakefront scene end at (17, 14/15); 00.03's Pokedex scene ending at Rowan; 00.05's start at (48, 62) and Barry's Town Map talk; 01.01's step onto Barry's coord event; 01.02's Gate trainers and Oreburgh welcome scene; 01.03's Center door column (47, not 46), the mine's warps and 19-tap hall, Roark's talk and scene timing; 01.04's 20 taps from where the heal leaves us; 01.05–01.10's routes and door banners; 01.11's 8 taps west and the old couple's talks.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E

dayfine and others added 7 commits November 1, 2026 11:47
…tory-v4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The screen readers the story's segments 00 and 01 use, in their own
files, with the upstream detectors (DialogDetector, MenuDetector,
BattleMenuDetector, SelectionArrow, GameNavigation) left as they are on
main:

- Adapted from PokemonAutomation#1717 by Developer-Butters,
  kept nearly as written: TransitionWatchers, ShopDetectors and the shop
  item name and price readers, BattleOpponentNameReader, the BDSP move and
  type data, the AutoStory OverworldDetector, MenuCursorDetector and
  OverworldMatchers.
- BattleMenuReader: the battle command and move under the cursor, from
  PokemonAutomation#1717's additions to BattleMenuDetector, beside it rather than in it.
- NameListDetector and SystemKeyboardDetector for the new-game intro;
  NameListDetector finds the menu arrows itself, as SelectionArrow.cpp
  keeps its finder out of its header.

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

The AutoStory program from a new game to Floaroma: its options and
segment and checkpoint lists, and segments 00 and 01 as one table of
the shared story steps (StoryTable), run by the console story executor.
00.04b to 00.04d walk planned routes on the story maps; the walker
(Walk, RouteWalk), the Pokemon Center and the location reads are ours.
Segments 02 and later are not carried.

Adapted from PokemonAutomation#1717 by Developer-Butters,
kept nearly as written: AutoStoryTools (stats, checkpoint save and
save_game, the Bag search, Potion use, buy_items, open_menu, dialogue
waits), Segment_00_tools and Segment_01_tools (the starter, the Starly
battle, trainer and wild battles, settings check, grass walks, running
from wild battles), Utils Battle, Dialog and Navigation, and the
recorded stick holds of 00.01 to 00.05 (tutorial parts 1 to 4, the
landmark alignment, the Poketch scene) in Segment_00.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…'s units

StorySimulation runs segments 00 and 01's table from 00.00 to Floaroma
against a fake game, in English and in Japanese; StoryTables checks the
table's rows; Indoors and the AutoStory tests cover the walker, the
location reads, the Pokemon Center and the Sandgem and Jubilife events.
Registered in PokemonBDSP_Tests, without PokemonAutomation#1717's Bag and MenuDetector
screenshot tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
indoors(), add_wrapped_log() and the walker's tests now come from
bdsp/walk-v4, so the copies here go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The walker no longer runs from wild battles itself: every walk and route
call takes run_from_wild_battle(), escape_wild_battle() for a standard
wild battle, from Segment_01_tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
@dayfine
dayfine changed the base branch from bdsp/nav-v4 to bdsp/walk-v4 November 1, 2026 20:10
dayfine and others added 3 commits November 1, 2026 12:33
… stats) into bdsp/autostory-v4

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

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

# Conflicts:
#	SerialPrograms/Source/PokemonBDSP/PokemonBDSP_Tests.cpp
#	SerialPrograms/cmake/SourceFiles.cmake
dayfine and others added 10 commits November 1, 2026 13:54
…the scripted parts

The program, segments 00 and 01, rewritten as FRLG's AutoStory is: one
table of checkpoints (00.00 to 01.11) on the shared story steps, run by
the shared engine with the start and end dropdowns and AutoStoryStats.

- 00.01 to 00.04 are planned walks on the JSON maps and the five
  interiors, stepping onto the decomp's scene triggers; they replace the
  recorded stick holds and the landmark alignment (OverworldMatchers),
  and have not run on a console yet.
- 00.04b to 00.04d keep their rows; 00.05's Jubilife beats, measured on
  the console, are rows of walks to walls and named events.
- Segment 01's walks are events split at their old steps, unchanged.
- Actions, Bag, Mart, Center, Battle, WildBattle and Settings hold what
  the steps use of AutoStoryTools and the segment tools, which are gone,
  with BDSPData, BattleOpponentNameReader, Dialog and Navigation.

Tests: the table lints and every variant names an event; the simulation
runs 00.00 to Floaroma in English and Japanese, each start pose chained
and every route planned; the intro and screenshot tests moved by topic.

Adapted in part from PokemonAutomation#1717 by Developer-Butters.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…dsp/autostory-v4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The table reads points and regions with map_point() and map_region();
the places file keeps only the story worlds a walk plans on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The clerk's 5 Potions after two missed visits to the lady needed the shop
detectors and item readers from PokemonAutomation#1717; the lady is the way the console
runs took (r261). Drops the Mart, ShopDetectors, ShopItemNameReader and
ShopItemPriceReader.

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

# Conflicts:
#	SerialPrograms/cmake/SourceFiles.cmake
…story-v4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
@dayfine dayfine changed the title BDSP AutoStory v4: new game to Floaroma on the shared story steps (no #1717) BDSP AutoStory v4: new game to Floaroma as one story table on the shared steps Nov 1, 2026
@dayfine
dayfine changed the base branch from bdsp/walk-v4 to bdsp/actions-v4 November 1, 2026 22:19
dayfine and others added 4 commits November 2, 2026 07:32
in_pokemon_center() read only the floor's warm yellow, so Jubilife's
plaza (63 %, r79: a won tag battle called lost) and Sandgem's and
Oreburgh's streets (30 to 35 %) passed. It now also needs indoors().
Checked offline on 635 lab frames (failure shots, route shots, r79's
video): the two together pick out exactly the Center interiors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
# Conflicts:
#	SerialPrograms/Source/PokemonBDSP/Programs/AutoStory/Maps/PlayerHouse1F.json
#	SerialPrograms/Source/PokemonBDSP/Programs/AutoStory/Maps/Route201.json
dayfine and others added 5 commits November 2, 2026 11:12
The Starly battle is a BATTLE step, variant "starter" (fight_starly(): no
talk first, no Poke Balls, and the scene goes on either way), and the walk
out of the lake after it a MASH scene that ends on the Lakefront's quiet
overworld, instead of Butters' fixed 60 s of B.

Stays named: starter_briefcase (B until an image match of the open
briefcase) and choose_starter (the briefcase's cursor from the program's
starter option): menus only BDSP has.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Rowan's Pokedex is a MASH scene ending at Rowan in the lab, through the
fade into it. Butters' sequence pressed B through Dawn's and Rowan's
lines and the nickname question, then A for the Pokedex; the scene's B
answers the question No too, and closes an item's lines as it closed
Barry's parcel in 00.04 (r45).

Stays named: nothing in 00.03.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Barry's Town Map is a TALK west from beside him at the School's back wall
(the walk there now says it ends facing him) and a MASH scene with A to
"You obtained a Town Map!". The event's second try, north to the wall
again when he did not answer, is not kept: the walk north already ends
on the wall.

Stays named: up_the_steps. It taps a tile west and two north from 00.05's
save below Jubilife's steps, and that save's tile is not known (the map
has only where the taps end, "up_the_steps", column 46 or 47 a few rows
up), so the row has no start pose for a LEGS step to walk from. It needs
the save's tile measured on the console, as a point on JubilifeCity's map.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
01.01 starts where 00.05c ends, (58, 22) on Jubilife's street east to
Route 203, and is planned on the joined Route 203 and Jubilife: a route
to (4, 18) on Route 203, a step east onto Barry's coord event (column 5,
rows 17 to 20, VAR_ROUTE_203_RIVAL_STATE 0, Diamond's zone event
narc_0329), then his battle, which leaves us on the trigger (assumed).

Dropped with jubilife_center_to_street: its start from a save at the
Jubilife Center's PC (two tiles south, three west, the nurse, then stick
holds to the street). A save there no longer starts 01.01; the row's save
is made on the street. Dropped with east_to_barry: its walk east row by
row past walls, which the plan replaces.

Stays named: nothing in 01.01.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
01.02 starts on Barry's trigger, where 01.01 ends, and is planned on
Route 203's, the Gate's and Oreburgh's maps with the Diamond decomp's
zone events (narc_0329, narc_0250, narc_0044):

- a route east along Route 203 to the Gate's warp tile (55, 9), fighting
  the trainers who see us, then a tap east to the Gate's banner;
- a route to (6, 22), a step onto the Hiker's coord event (7, 22), and a
  MASH scene for his HM Rock Smash and the Hidden Moves card after it
  (no dialogue box; the scene's B closes it, as the event's two B did);
- a route east along row 22 to (27, 22), fighting Picnicker Diana and
  Camper Curtis, now on the Gate's trainer list with ranges that reach
  the row; a tap east to Oreburgh's banner;
- a route to (9, 13), a step onto the coord event of the man at the
  entrance (10, 12..15), and a MASH scene for his walk to the Center
  and Barry's lines. Where it leaves us is not known, so the row ends
  there.

Dropped: the met_hiker flag (the walk east meeting the Hiker on its way;
the step onto his trigger is explicit now), and the walk east row by row
past walls. Events_Route203.cpp had only these events and is gone.

Stays named: nothing in 01.02.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine and others added 2 commits November 2, 2026 11:39
From all four of Barry's trigger rows at once the planner found no way
east (StorySimulation's poses chain): walk south down the trigger's
column to the cliff below row 20 first, as 01.08 does at its start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
In the grid sim (bdsp/sim, merged locally), the walk east along the
Gate planned one leg to the wall on row 23, where both Curtis and Diana
see it: Curtis was fought under Diana's name, and her stop on the walk
on to the wall went unseen, so the route ended at (24, 23). Two routes
now, to (20, 22) past Curtis's column and on to (27, 22) past Diana's.

They come off the trainer list again: the grid sim does not know them
beaten in 01.05, and they stopped its walk back west. The walker fights
them as trainers the map lacks, one per route.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine and others added 11 commits November 2, 2026 12:58
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
01.03 starts where Oreburgh's welcome scene leaves us (now 01.02's end
too) and is planned on Oreburgh's map and the mine's coal room
(Diamond's zone events narc_0044 and narc_0197):

- east to the fence below the Center and north, the one known tile to
  plan from; two taps west below the door; Barry in it (TALK, MASH);
- a route down the door's column, round the Hiker's patch, to above the
  mine's warp tiles (44..48, 59) and a step onto them. The generator
  writes those tiles as doors (WARP_DOORS), so no plan stands on them;
- the entrance hall, which has no map, on 19 counted taps each way and a
  step onto its warp row: no hold that a wild battle could end;
- in the coal room (now a room world): down the corridor to the boulder,
  a route to below Roark, his talk and scene, a route back to the warp;
- out below the mine's sign (to the wall), a route to the Center's
  doorstep (46, 21), and the heal. 01.04 now starts there, outside, and
  its out_of_the_center event is gone.

TALK waits 8 s for a line, not 3: Roark's first comes after the camera
zooms in on us (r98).

Dropped: the nudges round the Center's door and below Roark (they made
up for stick holds; taps are whole tiles), the Roark-gone check by A
after his scene (the scene rule's quiet overworld ends it), and the
walks until a transition.

Stays named: 01.04's gym_until_roark_beaten. After a loss it walks back
from the Center keeping the battles' experience, which a reload of the
row's save would take away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
01.11 starts at 01.10's end, (11, 29) facing north, and walks as the
console did (r250a, r251a): 8 taps west along row 29 (LEGS), north until
the old woman stops us (to_wall, anchored below her at (3, 26)), her
talk; a tap west (LEGS, anchored below the old man at (2, 26), facing
north, so the talk's turn only turns), his talk.

Dropped: the event's tolerance of one uncounted tap west (7 of 8); LEGS
wants all 8.

Events_Route204.cpp keeps only 01.09's Rock Smash.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
00.05 starts from a save at (48, 62), below Jubilife's steps (45..47, 61)
against the wall east of them, where 00.04d's Dawn scene now says it
leaves us: the old event went "a tile west, then up the steps" from
there, two taps north (2026-10-30). That tile is the event's numbers on
the map, not a measured one (#134).

up_the_steps is a LEGS step of the same taps, a tile west and two north,
ending on (47, 60); the route to the Center plans from that one tile,
not the steps' region (46..47, 58..60).

Events_Jubilife.cpp keeps only 00.05b's wandering clowns. The Events
header lists what stays named and why.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The Center's door is the decomp's (47, 20), as Sandgem's and Jubilife's
doors were where the console came out of them. The map's doorstep
(46, 21) only says where 01.04's 20 taps to the Gym were counted from,
so out of the Center we may be on either tile.

Barry's talk and the heal are now from (47, 21), a tap west of the
fence, not two. The heal still lines up on the lit doorway when north
finds no door.

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

Two fixes for #173's CI (the BDSP simulation tests):

- 01.03's taps through the entrance hall had no world to walk on ("no
  world holds OreburghMineB1F"). The hall gets its map from the Diamond
  decomp (narc_0313, zone event narc_0196; the Hiker hidden by his flag),
  with its way up (11..13, 1) as doors, and a room world. Down, we land
  on (12, 1); up, on (11, 21).
- 00.04d's Dawn scene ended on Jubilife while the stairs step before it
  left the pose on Route 202, so the scene waited for a fade that never
  comes (the grid sim's "no fade ... map mismatch"; on the console it
  would have failed after 120 s). The stairs step now ends below
  Jubilife's steps, (48, 62).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
The stairs into Jubilife were a STEP whose variant names the event
jubilife_stairs. Since the last commit gave it a pose after (below
Jubilife's steps, so Dawn's scene waits for no fade), a walk check that
holds STEPs to their pose after expected it on Jubilife (the grid sim,
which stubs events: "into_jubilife: ended on Route 202"). It is an event
like the others now (event(), GAME), run the same way by its variant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine added a commit that referenced this pull request Nov 3, 2026
#128 now has seg01's planned 01.05 to 01.10 (#175) and the shared steps
(#173). Their executor changes go where this branch moved the walking
steps: per-world trainers, the Twins as a pair (ConsoleStoryStepIO::fight),
the "to_banner" tap (StoryStepIO::tap_to_banner), and the 8 s wait for an
answer to a talk (StoryWalkSteps::talk). The story sim taps to the banner
too, and walks a route on the joined world it plans on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
dayfine and others added 2 commits November 3, 2026 05:26
With the story run options' verify mode on, AutoStory runs the start
checkpoint as verify_checkpoint() does. BDSP rows save at their start and
never at their end, so the reset from HOME between runs loads the save the
first run started from. A new game's intro has no save to reload and is
refused. Not verified, the game is closed as after any failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autostory AutoStory programs game:bdsp Brilliant Diamond/Shining Pearl

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant