Repository navigation
Conversation
A story checkpoint as a list of StorySteps (route, legs, step onto a trigger, talk, YES/NO, scene, battle, train, heal, shop, save, ready for a boss, and a game-only step), plain data, built into engine events by build_story_checkpoint(). Each event asks the game's StoryStepExecutor to do its step: one virtual per kind, failing as unsupported unless the game overrides it. Poses are the game's (TilePose); skip_if names conditions the executor answers. Tests run tables against a fake executor: event order, skip_if, pose propagation, failure naming, unsupported kinds, a segment with a reload, and lint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
SegmentPolicy is now where retries are set: attempts per checkpoint (default 3), stop at the first failure (no reload; the game stays where it failed), and in-place recoveries per event (SegmentHooks::recover, then the event again) before a checkpoint is reloaded, default 0. run_segment reports each checkpoint's attempts and recoveries and logs "[Checkpoint] 00.07: passed on attempt 2 (1 reset)" and "[Segment] 00: 2 of 3 checkpoints one-shot", so the one-shot rate can be tracked. StoryRunOptions is the program-option group both AutoStory programs embed: "Attempts per checkpoint" and "Stop at the first failure". A story step's skip_if condition is a run flag unless the game overrides holds(). Tests: the policy against the fake executor (attempts then fail, stop at first failure, recover in place, one-shot report). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
build_story_checkpoint() calls StoryStepExecutor::begin_attempt() before building, once per attempt, so a game can start the attempt afresh (BDSP: the trainers who can see us again; the row's failure mode). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
This was referenced Nov 1, 2026
…r Fast) StoryChecks: THOROUGH steps read the screen to confirm what they did (purchases, the Bag, status after battles, position); FAST trusts counts and timings. Each game decides what its steps check at each level. The executor carries it (checks(), set_checks(); THOROUGH by default), and StoryRunOptions gains a "Checks" dropdown, Thorough by default, read with checks(). Tests: the level reaches a step; the option group's defaults. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…eed it StoryRunOptions gains "Game language" (any language the games have, English by default, never refused for lacking a reader), and the executor carries it (language(), set_language()) for the few reads that need text: item names in a shop or the Bag. The header states the rule: steps never match dialogue or menu text, and a game with no reader for the language falls back to language-free checks. Tests: the option's choices and the executor's language. 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 1, 2026
…s PR 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
…d AutoStory stats, for story runs
StoryRunOptions (now "Story Run") takes the game's checkpoint database
and shows Start and End checkpoint dropdowns, labeled as SV labels its
segments ("00.09 Pewter Gym: Camper Liam, then Brock") and built with
#43's make_story_select_database(); a story in sections passes them joined,
so a section's entry is at #44's story_index(). A start after the end is
refused. record_story_stats() adds a segment's run to #45's
AutoStoryStats: the segment, each passed checkpoint, each reload.
Tests: the dropdowns' labels, slugs and defaults, the start/end check,
and the stats.
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 1, 2026
The program's integer START/END options give way to the shared story run options' checkpoint dropdowns (#122), labelled from the table ("00.09 Pewter Gym: Camper Liam, then Brock"), and it counts the shared AutoStoryStats (#45): a segment per run, the checkpoints passed and the reloads. The reload and log hooks move into a helper, keeping program() under the function size limit. 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
This was referenced Nov 1, 2026
dayfine
added a commit
that referenced
this pull request
Nov 1, 2026
The story maps, devtools/maps/bdsp_maps.py and the CMake embed are maps-v4's (add/add conflicts resolved to its versions); this brings in nav/story-steps (#122) underneath. The per-map grids still load the maps here until the next commits move them onto the shared MapData. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
This was referenced Nov 1, 2026
dayfine
added a commit
that referenced
this pull request
Nov 1, 2026
… stats) into bdsp/autostory-v4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…y) into nav/story-steps # Conflicts: # SerialPrograms/Source/Pokemon/Navigation/Pokemon_Navigation_Tests.h # SerialPrograms/cmake/SourceFiles.cmake
StorySteps and its tests move unchanged to Pokemon/AutoStory, next to the events and segments they build on (#114), and register from Pokemon_AutoStory_Tests.h. The story run options include them from there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
Code health limits a class's public methods: the methods a game overrides for each step kind are now protected, reached through dispatch_story_step(), so an executor's public face is the attempt, the checks and language, run() and holds(). The test fake follows, and the segment-of-tables test moves its setup into a helper. 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 1, 2026
The executor's and the simulation fake's step-kind overrides are protected, as the shared executor declares them (#122); the table's walks say WildBattles::FIGHT instead of a defaulted bool; the battle loop's body is braced on its own lines; and the panel list keeps its length. 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 1, 2026
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 1, 2026
#122 made Grid's at() read-only and added cell_at() for writes; the story world and the Ravaged Path's smashed rocks follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…/story-steps # Conflicts: # SerialPrograms/Source/Pokemon/AutoStory/Pokemon_StorySegments.cpp # SerialPrograms/Source/Pokemon/AutoStory/Pokemon_StorySegments.h
dayfine
added a commit
that referenced
this pull request
Nov 1, 2026
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 1, 2026
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 1, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E
…into nav/story-steps 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
Verify mode, a toggle group in the story run options, runs the start checkpoint, which must also be the end, a set number of times from its save without saving at its end, and needs a set number of them to pass (3 and 2 by default). VERIFY.policy() gives the policy for verify_checkpoint(), unset when the mode is off. 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
dayfine
added a commit
that referenced
this pull request
Nov 3, 2026
dayfine
added a commit
that referenced
this pull request
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on #114 (and through it #43–#45).
FRLG's story was a declarative table and BDSP's a list of wrapped functions, with no shared way to say "walk here, talk, answer YES, fight". This adds one step vocabulary (
Pokemon_StorySteps.h), with a builder from table rows to engine events and an executor interface each game implements, and oneStoryRunOptionsgroup both programs embed: start and end checkpoint dropdowns (#43's select database, joined at #44'sstory_index()), attempts per checkpoint, stop at the first failure, a Thorough/Fast checks level and the game's language.SegmentPolicyis the one place retries are set, andrecord_story_stats()adds a run to #45'sAutoStoryStats. Tested with the StorySteps suite against a fake executor (event order, skip conditions, poses, failures, the retry policy, the options and the stats) and the existing StorySegments suite in fork CI; no console runs of its own.Design note
StoryStep{kind, name, why, target (Pose), direction, legs, fight_wild, yes, may_lose, battles, items, variant, skip_if, pose_after}andStoryCheckpoint{id, title, start (Pose), steps}.build_story_checkpoint()emits afrom_saveevent for the start pose, then one event per step; saving stays the game's (FRLG saves at the end, BDSP at the start).StoryStepExecutorhas one virtual per kind, each failing asunsupported_stepunless overridden, so a table using a kind the game lacks fails by name. Chosen over a table ofstd::functionbecause a fake overrides only what a test needs, and the kinds stay one list.run()wraps every step (FRLG turns console exceptions into failed Outcomes; BDSP goes through its runner for screenshots and the lab log line).begin_attempt()is called once per attempt.holds()answersskip_if, by default from run flags that earlier steps set.StoryCheckpoint(FRLG: supplies and START menu; BDSP: what a failure does). Per-step extras go invariant: BDSP route plan costs (town,robust), D-pad legs that may end a tile short, and segment-registered variants for the Mart lady, the signs' gap and the Jubilife stairs. Trainer sight lives in BDSP's executor (its route kind fights who sees us; trainers reset per attempt). Door line-up is inside BDSP's HEAL (lit doorway by sight).Pose/TilePose: FRLG one-tile poses with facing; BDSP sets of world tiles. Executors return where a step left the player;pose_aftercovers scenes.🤖 Generated with Claude Code
https://claude.ai/code/session_01AKYzhrMnPK61XHWEch4a6E