Walk Red, Blue and Yellow from Lt. Surge into the Hall of Fame - #607
Merged
Conversation
… Surge `wBattleType` is read across onto Crystal's numbering at the wild-battle node: BATTLE_TYPE_OLD_MAN and Yellow's BATTLE_TYPE_PIKACHU share `DisplayBattleMenu`'s branch, so both are the Dude's tutorial with the raw byte and its tutor on the request. `LoadPlayerBackPic`'s `ProfOakPicBack` is Yellow's third `player_back` slot, which bumps the cache format. - `StartBattle` sends the player out on a normal battle alone: a Safari or a tutor's fight keeps the back pic up and draws no player HUD. The Safari had been sending the lead out. - The cursor `DisplayBattleMenu` and `DisplayListMenuIDLoop` draw themselves is the Dude's auto-input machine over the cartridge's own `DelayFrames`: 80, 50 and 80 on Red and Blue, 20 each on Yellow. The tutor's ball is the cartridge's POKE_BALL, not Crystal's. - `ItemUseBall`'s `.oldManBattle` lands the ball except under Yellow's EVENT_INITIAL_CATCH_TRAINING, where `$63` breaks out and `wCapturedMonSpecies` ends the battle anyway. - `OverworldLoop` reads `wCurOpponent` once the script has returned, so a row's battle stands behind the rest of the row. - A tutor with no party stands on the fallback party, never written back. - `_ItemUseText001` puts the item on the bottom row; `_ItemUseBallText05` is a `line` and a `cont`. - `wStringBuffer` outlives the row that filled it: Lt. Surge's receipt had printed a bare marker where TM24 goes. - Yellow's `OaksLabScript_RemoveParcel` ends on `call` and `ret`, its lab writes LIGHT_BALL_GSC over the starter's catch-rate byte and calls `DisablePikachuOverworldSpriteDrawing`; all three are read now, so the lab hands over PIKACHU and takes the parcel. - The story walk takes Yellow's EEVEE ball, Damian's CHARMANDER for HM01 and Yellow's own EVENT_GOT_DOME_FOSSIL, and reaches Lt. Surge. - `validate.gd` runs its topics on the first frame: the root is not inside the tree in `_initialize`, so a screen a topic adds is never ready. `gen1_battle.gd` drives the five tutor fights on the real overlay that way.
Back up the Underground Path, Route 9 behind its tree, Rock Tunnel's four ladders, Lavender Town, Route 8's Underground Path to Route 7, Celadon City and the gym: four badges, 55 fights, 103 steps on all three cartridges. Vermilion's gym tree stands again on the way out, since `ReplaceTreeTileBlock` edits the tilemap alone, and is cut from inside the fence; Rock Tunnel's route is the one `TilePairCollisionsLand`'s CAVERN rows leave.
The story walk runs on from Erika to the poster's guard, four hideout floors down to the LIFT KEY, the car to Giovanni and the SILPH SCOPE, the car back up, Lavender's tower floor by floor past the rival, the channelers and the ghost MAROWAK, and Mr. Fuji's POKé FLUTE, on all three cartridges. Fixed at their seams and pinned in the checks: - A trainer header's text can be machine code. Red's `RocketHideoutB4FRocket3AfterBattleText` is `text_asm` whole, Lance's after-battle text sets EVENT_BEAT_LANCE behind its line, and Yellow's end-battle text reaches the LIFT KEY's `ShowObject` behind a `text_promptbutton`. All three header texts decode as scripts now; the after one is resolved in place of the line and the end one runs behind the won fight. The LIFT KEY had never appeared and EVENT_BEAT_LANCE had never been set. - `wBattleResult` at zero had no row in `GEN1_BATTLE_OUTCOMES`, so the tower's MAROWAK stood again after every won fight. - A header's plain lines are filled the way a script's box is. - The story tool plans through spin tiles, one edge per ride, and answers `DisplayElevatorFloorMenu` with a standing floor.
Route 12's SNORLAX wakes to the flute and is fought off the map script, the two gates on Route 12 and Route 15 are crossed, Route 13 is left at row 8 (its rows 4 and 6 end at Bird Keepers standing in one-cell corridors, so a crossing may name its edge cell now), and Fuchsia's gym gives the fifth badge on all three cartridges.
The gate's fee, areas 1, 2 and 3 to the secret house's HM03 and the GOLD TEETH, back the same way, and the warden's HM04, on all three cartridges. The Safari centre's tree lines split it three ways, so the entrance reaches the east door alone. `wSavedCoordIndex` was written when a row was resolved rather than when its step was spent, and a `YesNoChoice` resolves both sides before the answer, so the gate's "Leaving early?" always landed on the NO side's state and asked again for ever. The run keeps its own copy now and the world takes the step; `gen1_walk.gd` pins the early leave.
…card key door open The story walk buys FRESH WATER on Celadon Mart's roof, hands it to Route 7's guard, climbs Silph Co. to the CARD KEY, opens 3F's and 11F's doors, fights the rival and Giovanni, takes the MASTER BALL, rides the pads back to 3F's car and crosses Saffron Gym's pads to the MARSHBADGE on all three cartridges: six badges and four HMs. PrintCardKeyText sets BIT_CUR_MAP_LOADED_1 behind the block it replaces, so the floor's callback turns wCardKeyDoorY into the door's own flag on the next frame. The port flagged it on the next map load instead, and opening a second door elsewhere first overwrote the coordinates: 3F's door shut again on the way back from 11F. The card key steps set the bit and the map-loaded pass runs the unlock. gen1_walk pins the flag on the frame after the box. A text_bcd over a buffer the script has written every byte of is filled at import: Yellow's Safari gate said <NUM_CD3D> where Red spells ¥500, and HiddenCoins' two boxes said <NUM_FFA0> on all three. gen1_maps refuses a number marker in any map's script and pins the fee line. Cache format 130. Route 7's gate is entered on its lower cell alone, as block $5F's arch tiles are not in Overworld_Coll. A pad that warps on its own map counts as arriving, which is how Saffron Gym is crossed.
The story walk takes Silph Co.'s LAPRAS, teaches it SURF, sails Route 19 and Route 20 through the Seafoam Islands to Cinnabar, turns the Mansion's switches for the SECRET KEY, answers Blaine's six quiz machines, surfs Route 21 to Pallet and beats Giovanni in Viridian's gym: all eight badges on all three cartridges. CinnabarIsland_Script sets BIT_CUR_MAP_LOADED_1 on every frame and nothing on the island reads it, so gen1_map_load_pending() now answers only for a bit some callback of the map takes; the walk had never settled there. A hidden event's text row can sit past every object's, as the Mansion's four switches do, and the table was grown before the hidden rows were read, so the switches opened nothing. Cache format 131. gen1_maps refuses a hidden event naming a row that was not read and gen1_walk presses 3F's switch. Route 20's rock column at x = 62 parts its two seas below the islands' north field, so the sea from Fuchsia takes the west door; B3F's pool is crossed from its one $15 bank a side, TilePairCollisionsWater's CAVERN row keeping the $05 banks off it. A surfing walk plans over water alone until the cell it lands on, a dungeon hole is fallen through when a step ends on it, a same-map pad counts as arriving, and a cell whose script only moved the player off it is planned around next time. Yellow's Route 19 keeps two more rows of sand.
… three The story walk teaches STRENGTH to the LAPRAS, crosses Route 22's gate and Route 23's guards and river, solves Victory Road's three boulder switches, beats the Elite Four, Lance and the Champion, and is inducted into the Hall of Fame: 360 steps on Red and Blue, 361 on Yellow. RomRegistry marks all three playable, which is what the shelf's Play reads. EndTrainerBattle's ResetButtonPressedAndMapScript zeroes wCurMapScript, which the silent call dropped: an end-battle state that calls it and prints on, as every Elite Four room's does, stayed on itself and printed the after-battle line for ever. The call writes the zero now. Cache format 132. DisplayTextID by id is hSpriteIndex too, so a map script opening a trainer's row hands TalkToTrainer the object of that index; Lance's own coordinate trigger had asked for a wild Pokemon of species 0. HallOfFamePC is a runtime request on Generation 1 that nothing answered, and jp Init behind the Hall's save is another: the world screen opens the induction and the credits for the first and restarts for the second, the node commits ENGINE_HALL_OF_FAME in front of the request, and the story walk stops at the reset. A real playthrough had ended on a prompt to press A. A Generation 1 boulder moves alone: TryPushingBoulder is MoveSprite on the boulder, armed by a first bump, so the walk steps after it between pushes. gen1_walk pins the Elite room's return to its default state, Lance's trigger, and the induction's request, flag, save and reset.
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.
Added
RomRegistrymarks Red, Blue and Yellow playable, so the shelf offers Play on all three.HallOfFamePCrequest with the induction and the credits, and thejp Initbehind the Hall's save with a restart; a playthrough had ended on a prompt to press A.wBattleTypemaps onto the Dude's tutorial with the cartridge's own ball, back pic, cursor timings and outcome. Yellow's walk takes the Pikachu, the EEVEE ball and Damian's CHARMANDER and reaches Lt. Surge.gen1_walkpins the catch training, the ghost MAROWAK both ways, the Safari gate's early leave and the card key door's flag;gen1_trainerspins the three coded trainer headers a cartridge carries;gen1_mapsrefuses a number marker in any map script and pins the Safari fee line;gen1_battledrives the tutor's throw on every cartridge.Fixed
EndTrainerBattlezeroeswCurMapScript, which the silent call dropped: every Elite Four room's end-battle state, which calls it and prints on, stayed on itself and printed the after-battle line for ever.DisplayTextIDby id ishSpriteIndextoo, so a map script opening a trainer's row fights the object of that index; Lance's trigger had asked for a wild Pokemon of species 0.CinnabarIsland_Scriptsets BIT_CUR_MAP_LOADED_1 on every frame and nothing on the island reads it, so a load bit no callback of the map takes is no longer pending; the walk had never settled there.PrintCardKeyTextsets BIT_CUR_MAP_LOADED_1 behind the block, so the floor's callback flags the door on the next frame. The port flagged it on the next map load, and a second door opened elsewhere first overwrotewCardKeyDoorY: Silph Co. 3F's door shut again on the way back from 11F.text_bcdover a buffer the script wrote every byte of is filled at import: Yellow's Safari gate printed<NUM_CD3D>where Red spells ¥500, andHiddenCoins' two boxes printed<NUM_FFA0>on all three cartridges.RocketHideoutB4FRocket3AfterBattleText, Lance's after-battle line and Yellow's end-battle text all decode as scripts now. The LIFT KEY had never appeared and EVENT_BEAT_LANCE had never been set.wBattleResultat zero had no outcome row, so the tower's MAROWAK stood again after every won fight.wSavedCoordIndexwas written when a row was resolved rather than when its step was spent, so the Safari gate's "Leaving early?" asked for ever.OverworldLoopreadswCurOpponentafter the script has returned, so a battle request now stands behind the rest of its row; Yellow's initial catch training set its event before the throw and the ball could miss.wPartyMon1CatchRateis a silent store,DisablePikachuOverworldSpriteDrawinga silent call, andOaksLabScript_RemoveParcel'scallreads like Red'sjp.tools/validate.gdruns its topics from the first_process, since the root is not in the tree during_initialize.Changed
ProfOakPicBackis a thirdplayer_backslot, imported boxes carry their numbers, a hidden event's rows are read, and a state that callsEndTrainerBattlereturns to the default one.elevator_requested,vending_requested,hall_of_fame_requested,quick_save_requestedandsoft_reset_requested, plans through spin tiles, surfs and lands, pushes a Generation 1 boulder the wayTryPushingBouldermoves it, falls through a dungeon hole, takes a pad that lands on its own map as arriving, plans around a cell whose script moved the player off it, and names a crossing's edge cell.