At a glance

Test
crates/engine-shell/tests/full_game_ladder.rs (part C in full_game_ladder/continuous.rs)
Spine
scripts/replays/full_game_spine.toml - the milestone list, New Game (opdeene) to the credits crawl (edlast)
Baseline
scripts/replays/full_game_baseline.toml - every score is asserted >=; a drop is a finding
Part A
The spine is anchored, ordered and routed through the disc's scene graph
Part B
The segmented ladder: each segment seeded from its milestone's retail save and scored on four cumulative tiers
Part C
The continuous run: one New Game, never re-seeded, reloading only its own saves after a wipe
Needs
Your disc (LEGAIA_DISC_BIN), the extracted tree and the save library; without them every part prints [skip] and passes. Anchor bytes are read at test time and never committed.

Three terms recur below. A scene's script records live in partitions: P0[n] holds placed props and doors, P1[n] NPC and entry records, P2[n] walk-on and spawned records. A walk-on band is a run of tiles that starts a P2 record when stepped on. A story flag is one bit of the system-flag bank, written like 0x227; op 0x3F is the field VM's scene change.

How it relates to the other ladders

InstrumentQuestion
critical_path_replayHow far a pad run gets along the chapter-1 route, with no seating.
chapter1_frontier_ladder (parity)Which chapter-1 scenes load, script, walk and leave - breadth.
Chapter-2 / chapter-3 / boss spine oraclesWhether the pinned gates of one story arc sequence through the engine.
This ladderHow far each stretch of the whole story gets from a real save there, and how far a cold New Game gets without help.

The chapter ladders are deeper where they reach; this one is shallow and wide. A stall here names where to point the deep instruments.

The spine

The spine is the main-story milestone sequence. Each milestone names its scene and a retail anchor: a save on one of the library's memory cards (card file and save name) or a catalogued save state (scenario label and backup fingerprint). The ladder reads the anchor's SC save window, RAM 0x80084140..0x80086140 - exactly the block a memory card stores (save record) - so a card save and a live state yield the same thing: party records, bag, gold, the system-flag bank at 0x80085758, the scene label and the field position snapshot.

The order is the anchors' own. The two playthrough cards are one run whose play-time counters and flag populations rise together; chapter-1 anchors, which come from several sessions, are ordered by flag inclusion; the ending anchor is a debug credits run that anchors the scene but is excluded from the order check.

Part A re-derives all of it: every anchor loads into the scene the spine names, the flag-inclusion order holds pair by pair, every reach flag is set in its own anchor, and a route between consecutive milestones exists in the disc's scene graph. It prints that route with its hop kinds:

ArrowHop
>A 0x3F scene change a walk-on .MAP band reaches.
=>A 0x3F only a talk, touch or scripted record carries.
~fmv~>An FMV hand-off (4C E2 id) from a walk-on record; the destination is retail's post-play dispatch (FUN_801CEA3C).
~fmv=>An FMV hand-off from a record no walk-on band reaches.

Routes are cheapest-first with walk-on hops preferred, so a => in a route means no all-walk-on route exists. What "reached" means is per milestone: scene (in the scene, walking), control (and the pad is back) or flags (and every reach flag is set). A reach flag is one the anchor gained over its predecessor that a clean partition-2 SET site in that scene writes, per the disc-wide system-flag census; entry-script writes are excluded because they fire on every visit.

Waypoints

The cheapest route is not always the story's. A milestone can name via scenes - story waypoints the anchors show the retail run passed through - and they are visited in order, each with its beats pass played, before the route heads for the milestone itself. Each is justified in the spine by the flags that put it there. Typical reasons:

  • An item behind a detour. The Fire Path milestone goes through stone, which holds the Star Pearl that opens the tunnela door; the cheaper elevator route only opens after Xain.
  • A flag another scene waits on. conc3 P2[10] sets the 0x3E5 the juui1 hand-off in conc2 tests; dohaty P2[13] sets the 0x1D4 every station placement waits on.
  • An errand. Sol Tower B2 visits koin2 and koin4 for the Sage's Gate chests and the bread they ask for.
  • A shortcut that leaves the dungeon. In garmel and vozz the cheapest route walks back out to the overworld; the story's way on is a boss or a scripted flight.

A milestone may instead name continuous_via: waypoints only the continuous run plays, where a seeded segment starts past the story or its seated hand cannot play it. Dr. Usha's research and Nivora are the case.

Segments, tiers and seeding

One pad run cannot cross the game, so the ladder is segmented: segment i seeds the engine at milestone i and asks how far it gets toward milestone i + 1. Segment 0 is seeded by BootSession::start_new_game - the cold opening, not a save. The tiers are cumulative:

Seed segment isave at milestone i Lands in scene?Field or WorldMap Entry settles?pad back or script left Reached seated?doors + beats pass Reached by pad?fresh seed, input only yes yes yes yes no no no no yes 0 · noneseed failed 1 · loadssave lands 2 · entersscript settles 3progresses 4pad The headline: how many leading segments, in spine order, each clear tier 3 and tier 4.
Tiers 3 and 4 are two separate passes over the same route. The seated pass proves doors, scripts, gates and the scene graph; the pad pass repeats the route from a fresh seed as a player would, and is the locomotion claim.
#TierCleared when
0noneThe seed fails, lands outside its milestone scene, or the seated pass panics.
1loadsThe seeded save lands in its milestone's scene, Field or WorldMap.
2entersThe entry script settles: the pad comes back, or the script leaves the scene itself.
3progressesThe next milestone is reached by seated traversal plus the beats pass.
4padThe next milestone is reached with pad input only.

The headline is how many milestones a cold New Game reaches contiguously at progresses and at pad, plus the tier sum over all segments.

Seeding

A seed goes through the host's own resume path, BootSession::resume_save, so a segment is a load of a real save. The import carries the whole system-flag bank, the party count and roster, and the field position snapshot where the resume seats the party. The anchor's Field Move option comes in with the other options words, as retail's card load restores it, so the ladder's player runs or walks as the anchor's player did - timed scripts are paced for it. A state anchor taken mid-field has a live position that differs from its snapshot, so the ladder arms SceneHost::set_entry_seat with the live one; a card save seats from its own snapshot.

The continuous run

Every segment above starts from the retail save at its milestone, so it plays with the party, bag and gold a retail player had there. That scores each stretch's doors and scripts; it does not say whether the engine's own run arrives at a stretch able to clear it. Part C asks that. It seeds one session with start_new_game and plays the pad pass toward each milestone in turn, never re-seeding.

Part B - segmented New Game retail save retail save retail save each stretch starts fresh from what retail held there Part C - continuous New Game own save own save own save wipe: reload own save party, bag, gold and levels are whatever the run earned
The continuous score, [continuous] reached, is the count of milestones reached in order. Its distance from the segmented headline is the measurement: how much of each stretch rests on arriving with a retail player's party.
  • The story state is the engine's from the first frame. The next anchor's flags still steer the beats pass - they are route knowledge - but nothing of an anchor's party or bag reaches the session.
  • It keeps its own saves. At each milestone reached it takes World::save_full; after a party wipe it reloads that save, with the same guard retry and reload allowance the pad tier has.
  • It stops at the first milestone it cannot reach and prints the stall.

What only a continuous run exercises

A seeded segment starts from state retail wrote, so anything the engine would have had to write itself before that point is never asked of it. The continuous run is the only pass in which those writes are load-bearing:

  • Scripted grants. A flag, item or equipment change an earlier script makes is in every later anchor whether or not the port runs the op correctly. Op 0x3B (SET_EQUIP_SLOT, how a Ra-Seru is put on and grows a stage) is the case in point: a mis-applied port still passed every segment, because each seed already wore the Ra-Seru.
  • Joins after a reload. A member who joins takes a level-1 record from the starting-party template, which a seeded save (already holding all four records) never reads.
  • The pause menu, the shop screen and the Point Card. No seeded pass buys; the continuous hand drives the merchant's op 0x49, the buy list, the quantity stepper and the recipient picker, and with the card held every purchase runs its accrual and toast.
  • Growth and captured Seru. Levels, gold and the bag are what the run earned, and a party that fights learns Seru magic and casts it into rounds where a target may already have died - the turn picker's dead-target redirect.

How the continuous hand plays

The continuous hand is the pad tier's hand plus what a player who means to finish does between fights. On arrival in a field scene it runs one upkeep pass, in this order:

  1. Shops. It talks to each merchant with a priced stock list, buying healing items for each present member, then the affordable equipment that improves a slot the most, then more heals. Stock is counted in healing restored, not item count, and a counter that sells heals is visited first.
  2. Equipment. Start, Equip, the Best Equipment row for each member; empty Goods slots are filled best passive first. Because Best Equipment ranks a weapon by stats alone and an off-class weapon raises the arm command's AP cost (arts command gauge), the hand then swaps in a weapon that swings cheaper.
  3. Rest. Under four fifths of its HP (or low MP) in a scene that rolls no encounters, it takes the scene's rest: a bed's walk-on band or a keeper whose record runs the 4C 82 restore.
  4. The scene's story. It plays the beats pass without waiting for a door to refuse, for further rounds while a round still raises a new flag.
  5. Training. While a member is more than a level short of the target - the anchors' own level curve a few milestones ahead - it trains from the bed, taking the fights it prices as winnable.

In a fight it takes the random encounters it expects to win, pricing each from what the run's fights have cost so far, and runs from the rest; it saves MP for fights it cannot flee, aims its strikes and casts at the foe they land hardest on (stepping retail's angular target ring with Right), and runs past encounters on the way to a staged boss so the party's HP and bag are the boss's. Its options travel with its saves, and it switches Field Move to Run when walking is what holds it - the playthrough's player had by Mt. Rikuroa.

The cases the continuous hand had to learn
  • Talks the story reaches from elsewhere. A talk that ran and raised nothing is asked again once a later talk has moved a flag its record tests; a record that polls a box (CD F8) is stood in after its talk arms it.
  • A maze of stones and closers. A gate stone (4C 70) is examined only from a tile the walk reaches, so korb3's maze opens gate by gate from the hall the party arrives in.
  • An errand the story waits on. kor's guard dogs wait on 0x40A, which the Sage's Gate spawns once all eight chests in koin2 have each been handed a Soru Bread.
  • A rest that stops resting. A keeper restores on one branch of its story only; a rest that lifts nobody is remembered as dry, and a bed that stops working leaves the bag in its place.
  • A counter the story has closed. dolk2's dealers sell nothing while the festival flag 0x27D is up; the hand finds and plays the record that lowers it, then returns.
  • Budget. A stretch has the pad segment's walking budget plus a share per waypoint, and four times its battle allowance, since this hand fights.
  • A milestone reached with a fight committed. A save between a record's 3E FF and the fight it commits (Cort's arrival in jouine) would skip the boss on reload, so the run keeps its earlier save and walks into such a door ready.
  • Nivora's solo duels. Gala, Noa and Vahn each fight a Delilas sibling alone out of one bag of heals, and Che's duel (Gala's) is the one the bag runs out on. Before it Gala swaps her least wanted worn accessories for better ones the bag holds (the upkeep only ever fills empty slots), keeping any element guard, and puts the old ones back after the duels; in the fight she drinks the Elixir that covers the most missing ramps first: one Wonder Elixir for the defence, attack and speed ramps instead of three turns of single Elixirs.
  • A later start. LEGAIA_FGL_CONTINUOUS_FROM seeds the run once from a later anchor; its stalls read against the anchor's position before its flags.

The carried-state diff

Under LEGAIA_FGL_TRACE the run prints, at each milestone and at the stall, the engine's own state beside the retail anchor's: levels, XP, HP, MP and equipment bytes, the party, gold and bag, and the flags each side holds that the other does not. It is what tells an engine defect from a weak party:

The diff showsReading
An equipment byte or bag item retail holds and the engine never gainedA scripted grant: find the op that writes it in the scene the anchors bracket.
A member in the roster with no record line (zero max HP)A join that found no template row.
Lower level and XP, same equipmentGrowth: the hand fled or the fights paid nothing.
Flags the anchor has and the engine lacksBeats retail played that the hand walked past (optional ones show here too).
Flags the engine has and the anchor lacksA beat retail had not played yet, or a latch.

A ratchet, not a guarantee

Every random draw - the encounter step, the formation, the escape roll, enemy targeting - comes off one world rand stream, so a change that shifts one draw re-deals every later fight. The baseline therefore records the continuous score on several dealt streams ([continuous_seeds], one row per LEGAIA_FGL_RNG_SEED), and each dealt run asserts its own row.

How the two passes play a segment

The seated tier

Seated traversal follows the route hop by hop. On a field scene it seats the player one tile off a walk-on door and then onto it, so the engine's own tile-change dispatch fires the door record; on the overworld it seats the player on the installed portal. The engine does the scene change; the ladder only places the player. A hop that still fails after the scene's beats have run marks its edge dead, and the route is recomputed around it.

The beats pass runs once per scene visit - and again when the story returns to a scene with new flags - when the scene is the target with its reach flags unset, at a waypoint, or when a hop's door does not fire. It approaches every boss stager whose park gate is clear, every round until a contact gains nothing, and talks to the NPCs whose records reach a flag the next anchor carries or a destination the route needs.

The pad tier

The pad tier repeats the route from a fresh seed with the random-encounter roll armed, and plays the same waypoints and beats with pad input only. It plans with an A* search over the collision lattice (World::field_dir_blocked and the actor boxes) and follows the plan with a walker that inverts the live camera remap. The planner models the two ways a field map joins its own parts - a town's house interiors sit in the same map as its street:

  • a kind-0 teleport tile is an edge to its landing cell, and a closed door prop standing over one counts as open, since pressing into it is the touch that opens it (31 00);
  • an object door - a touch-class or interact-class prop whose record reaches 31 00 - opens itself on contact or on the action button, which the follower taps when held against it.

Where the start's walk component cannot reach the door, a pad hop tries a crossing scene. Ledge hops, warp pads that read their own floor list, clocks and timed switches are each modelled where the route needs them.

Input conventions in both passes

  • Scripted sequences get Cross on a press-2-release-14 duty cycle, and nothing while no script holds the frame.
  • The naming prompt's Yes/No confirm gets Up first, since it opens on No.
  • A menu press waits out the field pad hold (_DAT_8007B6B4): every map install seats 0x28 frames of it, the field-back load after each fight included, and a conversation's release 0x10. The pad controller and its menu accept sit it out, so a Start sent into it is lost; the heal and dress passes after a fight press only once it is out.
  • An all-party restorative (Healing Bloom, Magic Fruit) is confirmed on its party-wide confirm, which picks no row.
  • BootSession::tick routes the naming prompt's pad edges and drains the per-tick queues as both play hosts do, so a headless driver that only ticks crosses the opening.

How fights are played

A battle is fought through the command ring, one pad edge at a time, by a fighter shaped like a player. For each member, in priority order:

  1. Revive a member who is down.
  2. Heal a member in danger - a party heal when two or more are, else the smallest single heal that lifts the worst-off clear. Heals already committed this round count as landed.
  3. Cast the strongest affordable damaging Seru spell.
  4. Attack through Command, entering the longest art the command pool pays for and spending the rest on plain directions; whether a matched art fires is the queue builder's call. Rotted limbs (+0x16E & 0x38) close their own directions, and the plan keeps to the open ones.

A member is in danger when it is under 45% of its HP (three fifths against a boss far above the party's HP), or cannot survive another loss the size of the biggest it took between two of the party's command windows - a round, not a hit.

Random encounters that interrupt a segmented pad walk are fled through the round prompt's Run, unless the fight forbids running; after two failed runs with nothing to heal with, against foes the party can plausibly beat, the hand fights instead. Guards and boss reads: a foe that winds up - a charge body that sets its caster's ability latch and deals nothing - is guarded against on the turn its blow lands, and a boss lost to once is retried with its element guarded.

Tick caps. A fight runs at least 60 000 ticks and continues while a foe's HP is still dropping, up to 600 000; it is unresolved only once 36 000 ticks pass with no foe losing HP.

How to read a stall

Part B prints one table row per segment and a stall list. Each stall line is one level down from the tier that failed:

Line shapeMeaning
seed: ... / seed landed A in <mode>The resume failed or did not land walking in the milestone's scene (tier 0).
entry script never released: <holder> ... op=..The pad holder - cutscene timeline, dialogue, spawned record - parked on that instruction for a whole window.
hop A -> B: no walk-on door to BThe scene change is carried by a talk, touch or scripted record that seating cannot trigger, and no talk the ladder finds leads there.
no overworld portal to B installedThe overworld seeder installed no portal to B under the live flags; the portal set is printed.
N door(s) to B, none fired: ... gates FAIL: 0x.. clearThe door record's story gates (retail FUN_8003BDE0) refuse it; the failing flags are named.
B is reached by an FMV hand-off ...The hop is a movie whose trigger record is not on a walk-on band.
reach flag(s) 0x.. never setThe target scene was reached but the beat that separates the milestones did not play.
battle unresolved ...: action SM ctx[7]=0x..The fight ran out its budget in that action state (FUN_801E295C).
party wiped: ...The fighter lost.
no walkable path ... / pad walk stalled at tile ..The lattice cannot reach the door, or the follower stopped making progress on a path that exists.
PANIC: ...An engine panic, caught per segment.

Under each failed seated segment the ladder lists the flags the next anchor has that the engine never set, each with the disc sites that set it (scene, partition, record) from the system-flag census - usually naming the record to look at next.

Two stalls that are not what they look like

An unresolved battle is not proof of a parked engine. The line prints the action state on the tick the budget ran out; a fight still trading blows reaches the cap as readily as one that froze. LEGAIA_FGL_TRACE=1 LEGAIA_FGL_TRACE_HITS=1 settles it: a parked engine shows no [commit] and no [hit] after some tick, an outlasted hand shows commits to the end.

A pad wipe that moves with an unrelated change is first a rand-stream question. Any change in how many draws happen before a fight - gating a fog region, say - deals every later fight another hand. Run the segment under a spread of LEGAIA_FGL_RNG_SEED values and count the wipes; the fragility is often a property of the anchor (a lone member at low HP) rather than of the hand.

A third shape is a boss the anchor's party cannot outlast: the hand's damage rolls are right - every term reads off the disassembly - but the party saved at that anchor cannot survive the boss's turns, and the fix belongs in what the fighter chooses (guards, healing order, MP top-ups) rather than in the engine.

Diagnostics

With its wall-clock fields stripped, the trace of part C and of part B is byte-identical across runs of one binary on one stream. Nothing the hand does may follow a std HashMap's iteration order, which is drawn per process: town0d has three talks that lead to jou, and the order they are walked in moves every later frame number in a run that still reaches every milestone. A trace that moves on one binary is checked first by preloading a getrandom that returns a fixed stream, which pins the hash keys and leaves time, threads and heap addresses live.

Trace switches, all environment variables:

VariablePrints
LEGAIA_FGL_TRACE=1One line per beat played, hop failures, [battle] start and end lines, per-segment frame and planner cost, and part C's aim and carried-state lines.
LEGAIA_FGL_TRACE_BATTLE=1 / _HITS=1A battle line every 1000 ticks / each HP change with its actor and action state.
LEGAIA_FGL_CAPS=1Each script context the engine's anti-hang timeline cap ends. Retail has no such cap, so each line is a record the engine cut short.
LEGAIA_FGL_PAD_DEBUG, _SHOP_DEBUG, _HEAL_DEBUGThe fighter's pad and menu windows in a stuck fight; each shop and field-heal pad edge.
LEGAIA_FGL_WALK_DEBUG, _PLAN_DEBUG, _COMP_DEBUG, _JUMP_DEBUG, _CLOCK_DEBUG, _POS_TRACEA stalled walk's wall map, the planner's door edges, the tile map of a failed walk component, door and lift rides, clock flags, scripted movement.
LEGAIA_FGL_PROBE_AT=<scene>:<x>,<z>;U;R;...Seats the player and holds each listed direction, printing where it went - asking the engine, not the lattice, whether a spot can be walked off.
LEGAIA_FGL_EDGES, _GAINED, _SITESPart A: a scene's in- and out-edges; the flags a milestone's anchor gained with their disc SET sites; every site that sets or clears a named flag.

How to run

The extracted tree and the save library default to extracted/ and saves/library/ under the repo root; point a worktree at the main checkout's copies:

LEGAIA_EXTRACTED_DIR=/path/to/extracted LEGAIA_SAVES_LIBRARY=/path/to/saves/library cargo test -p legaia-engine-shell --profile release-test --test integration full_game_ladder:: -- --nocapture --test-threads 1
VariableEffect
LEGAIA_FGL_ONLY=<id>,...Runs only the segments ending at those milestones; no baseline assert.
LEGAIA_FGL_NO_PAD=1Skips the pad tier.
LEGAIA_FGL_RNG_SEED=<u32>Deals the pad segments and part C another hand of the world rand stream; part C asserts the matching [continuous_seeds] row.
LEGAIA_FGL_SEATED_RNG_SEED=<u32>The same for the seated pass.
LEGAIA_FGL_PIN_RETAIL=1Pins every fidelity toggle to retail (WorldToggles::pin_retail), so both parts measure the retail-faithful mode.
LEGAIA_FGL_CHECKPOINT_DIR=<dir>Part C keeps its own save at each milestone (disc-derived state: keep it under target/).
LEGAIA_FGL_CONTINUOUS_FROM / _RESUME / _UNTIL=<id>Start part C from a later anchor, resume it from a kept checkpoint, or stop it at a milestone - probes for one stretch, none of which assert the baseline.

The ratchet asserts every per-segment tier, both headline counts and the tier sum >= the baseline. Raise the baseline in a reviewed edit from the block the run prints; never lower it to make a red run green. A full continuous run is a whole New Game, so the seed set is run one seed at a time.

Solid NPCs

Both play hosts make NPC bodies solid; the ladder's pad tier leaves them passable unless LEGAIA_FGL_SOLID_NPCS=1 arms them. Armed, a body stops the walk exactly as it stops a player, and the pad hand has to go round it or be let past by the story:

  • A person is walked round, not spoken to. A press held against an NPC re-plans from where the body stands instead of tapping the action button, which in the misty Rim Elm starts a fight.
  • The planner reads the bodies the walk collides with, and leaves out the one on the goal tile: that is who the walk is going to.
  • A body the camera's window hides is still planned round. It is solid again by the time the walker reaches it, and some are plugs: in the Bio Castle corridor an invisible item stands in a gap the scene opens in the wall, and on retail it still blocks the gap after it is picked up. A body outside the room's latched region box stays passable until the next warp, and is left out.
  • Bodies that seal a route are dropped in stages, first all but those within eight tiles, then all of them, and a failed plan is remembered only while the bodies stand where they stood.
  • A talk side inside a wall is skipped, and a lean another body stops short steps along the counter and leans again.
  • A door contact that lands on the tile it is pressed from is not an exit.
  • A wall corner the planner reads open is stepped off sideways. The walk's leading probes reach past the player's own column, so a walk a few units off a narrow corridor's line presses into the wall beside it; after eight frames without moving it takes one sideways step and goes on.

A body can also be a story gate, and then no route is the right answer: some guards stand in the only way on until a story branch moves them, and the route plays the scenes that do. Nivora Ravine is one: sixteen BLOCK placements stand round the landing until Dr. Usha's research is done, and the entry script retires them only then. A run that left Dr. Usha's lab town without that flag reached Nivora boxed in, which is how the solid-body run found that its hand stood in the intercom's box a few units short of where the intercom answers.

What it cannot measure

  • The seated tier places the player. It proves doors, scripts, gates and the scene graph, not locomotion; the pad tier is the locomotion claim.
  • The segmented hands do not shop, and pick conversation options by rotation. A beat that waits on a purchase or an equip reads as a stall there; only the continuous hand buys.
  • The segmented fighter is narrow. It guards only a foe that hits hard every other round, takes the target cursor where it opens, changes equipment only to guard a boss's element after losing, and flees random encounters. A fight that needs anything else reads as a wipe.
  • Crossings are found by trial. The pad planner does not read which side each door of a crossing scene lands on, and a crossing whose side is story state needs that beat played first.
  • Transports a script spawns on a flag are not graph edges. Routes follow 0x3F names and FMV hand-offs; a flight or cart an entry script spawns is taken on arrival, which the graph does not model.
  • Waypoints are hand-set from the anchors' flag differences; a stretch whose retail path left no flag the census can place has none.
  • Chapter-1 anchors come from several sessions, some with cheat-seeded parties, so they seed faithfully to that session rather than to one canonical playthrough.

Route notes

The full page keeps a long list of scene-specific facts the route and the pad hand depend on, each a property of the disc's scripts cited by scene and record. They fall into four groups:

GroupWhat it covers
Split parties, pickers and staged fightsThree-actor talks (43 02) where each member stands in its own part of the map and Square hands control on; how a script's picker is answered; staged boss fights on walk-on bands.
Sol TowerThe warp pads that read their own floor list (op 0x49 sub-op 4) and branch to one scene change per floor; the stone maze in korb3 and Gaza's fights.
NivoraThe Three Tunnels split, the boulders and the flags nilboa's entry script raises; Uru Mais and its three dreams.
Overworld and dungeon joinsWhere the overworld's static collision grid splits into separate walk components, and which story beat (a drained water gate, a thawed route south) joins them.

See also