Open Routes 38 to 41, Olivine and Cianwood to the Mineral Badge (#32)
Enable Route 38 and its Ecruteak gate, Route 39 with the MooMoo farm, Olivine City and its buildings, the Lighthouse's six floors, Routes 40 and 41, and Cianwood City with its gym, pharmacy, Photo Studio, Mania's house, the Poke Seer and the Lugia speech house. Olivine's port, the Battle Tower gate and Whirl Islands stay closed. The story runs from the rival in Olivine through Jasmine and Amphy, Suicune and Eusine, the SecretPotion, Chuck's boulders, the STORMBADGE, TM01 and HM02, back to Amphy's cure, Jasmine, the MINERALBADGE and TM23. Port GiveShuckle and ReturnShuckie with every return code and Mania's wrong last-Pokemon speech, PokeSeer with its high-byte-only OT check and reused caught level, PhotoStudio's no-printer path (Printer Error 2), and PlaySlowCry. wMooMooBerries joins the saved script bytes. Port trainer item AI: the 13 healing, status and X items, the highest-level gate, item use while Mean Look or Wrap prevents switching, and the original's random and state quirks, checked against the ROM over 5,632 states. Leaders with items are no longer refused. Game Corner sprites match the original frame by frame: cursor and reel positions, Golem's whole-frame flips, frame timing, the frame a removed sprite is still drawn, and the Golem roll's screen shake. The Burned Tower rival's garbage trainer header is documented as a boundary: its seen text dispatches text command $7f into home code before any battle. The playthrough continues for six stages to Jasmine; its driver can Surf, fish and travel through floors joined by holes. New tests cover trainer items, Olivine and Cianwood side content, and reference checks for trainer items, trainer sight and Game Corner animations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7c4e8521d4
commit
b5c2b19094
29 files changed
+2708
-139
No files matched your search
+21
-2
@@ -396,9 +396,28 @@ The numbered sections below keep their full scope. Each one opens with a checkli
|
||||
- Roaming Pokémon (`game/world/roam-mons.ts`): `InitRoamMons`, `UpdateRoamMons` on connections, door and pit warps and one wild battle in sixteen, `JumpRoamMons` on Fly, Teleport and Continue, and `CheckEncounterRoamMon` in the grass. Suicune's slot is kept but not started, as the ROM leaves it. Saves gain `roamMons` and `roamMonsMap`. A rollback restore (a failed import) keeps the beasts in place; only Continue moves them.
|
||||
- The Bug-Catching Contest: the gates on contest days, `GiveParkBalls`, `SelectRandomBugContestContestants`, `ContestDropOffMons`/`ContestReturnMons`, the timer on the game clock, running out of balls, QUIT in the start menu, the catch-and-swap prompt, `BugContestJudging` with the ROM's contestant table and prizes, and `CheckPartyFullAfterContest`. The contest state saves. The start menu's balls and catch status shows as a text page above the menu.
|
||||
- The Game Corner: `SlotMachine` (reels with their spin rates and scrolling, the normal and lucky bias tables, the seven streak, Golem and Chansey with the egg, payouts, the 9999-coin cap) and `CardFlip` (deck, board, cursor and group navigation, paytable). They run on a realtime tile screen, which advances two frames per world tick with the buffered button. The Card Flip board and slot frame are checked tile by tile against the ROM's own tilemaps.
|
||||
- Engine fixes found on the way: `getnum`, a plain `warp` that continues its script on the new map, `PokemonNames`' EGG entry, and a map trainer whose script is `ObjectEvent` (the Burned Tower rival) is no longer sighted once its own flag is set. In the original, its "beaten" check reads `ObjectEvent`'s bytes as flag $f251, bit 1 of `wNumKeyItems` through echo RAM, which is set with the usual two or three key items; the other case has not been checked against the original.
|
||||
- Engine fixes found on the way: `getnum`, a plain `warp` that continues its script on the new map, `PokemonNames`' EGG entry, and a map trainer whose script is `ObjectEvent` (the Burned Tower rival) is no longer sighted once its own flag is set. In the original, its "beaten" check reads `ObjectEvent`'s bytes as flag $f251, bit 1 of `wNumKeyItems` through echo RAM, which is set with the usual two or three key items; reference checks now confirm that zero, one, four or five key items make the original sight the rival with a garbage trainer header. Its seen text runs an out-of-range text command into home code before any battle, so the native port does not reproduce it (see NATIVE_PORT.md).
|
||||
- Tests: `tests/roaming.test.ts`, `tests/bug-contest.test.ts`, `tests/game-corner.test.ts` and `tests/ecruteak.test.ts`. The playthrough continues through the National Park to Floria, Sudowoodo, the Kimono Girls, the Burned Tower and Morty; its driver now chooses moves by type matchup, buys at Marts, and uses Super Potions and Awakenings in trainer battles.
|
||||
- Remaining: Tin Tower and the Clear Bell, Suicune's appearances, the Game Corner's Golem walk cycle (two ROM frames with flips), the contest status box layout, radio and rematches (#30), breeding (#29), routes beyond Ecruteak and the gyms after Morty, mobile and link features, and audio.
|
||||
- Remaining: Tin Tower and the Clear Bell, Suicune's appearances, the contest status box layout, radio and rematches (#30), breeding (#29), routes beyond Ecruteak and the gyms after Morty, mobile and link features, and audio.
|
||||
|
||||
## Implemented: trainer items and Game Corner reference follow-up (board #32)
|
||||
|
||||
- Trainer item AI now handles all 13 supported healing, status and X items, the highest-level gate, item consumption, and the original random and state quirks. Mean Look and Wrap stop switching but still allow item use. This removes the item refusal for Chuck, Jasmine and later leaders; Chuck and Jasmine are reachable since increment D.
|
||||
- Game Corner sprites now use the original screen coordinates, reel symbol window and Golem flips. Reference tests cover all cursor positions and selected reel states. The Golem, Chansey and egg are compared frame by frame against the original's `PlaySpriteAnimations`: a three-Golem run and a Chansey round with two eggs, 385 frames of shadow OAM, `wSlotsDelay` and `hSCY`. That covers the whole-frame flips, frame timing, the extra frame a removed sprite is still drawn, and the Golem's roll shake, which the slot screen now shows.
|
||||
- The Burned Tower sight check is verified for zero through six key items. With 0, 1, 4 or 5 key items the original's garbage header would battle SwimmerF's ELAINE, but its seen text first jumps into home code through text command $7f. The native suppression stays, as a documented boundary.
|
||||
- Trainer-item reference coverage compares 5,632 controlled states plus four dispatch cases. The unit suite also runs a battle using Clair's Kingdra and real class items. These comparisons bypass text/audio/HUD routines and do not establish physical-device acceptance.
|
||||
|
||||
## Implemented: Routes 38–41, Olivine and Cianwood to the Mineral Badge (board #32, increment D)
|
||||
|
||||
- Route 38 with its Ecruteak gate, Route 39 with the MooMoo farm's barn and farmhouse, Olivine City with its Pokémon Center, Mart, Café, gym and houses, the Lighthouse's six floors, Routes 40 and 41, and Cianwood City with its gym, Pokémon Center, pharmacy, Photo Studio, Mania's house, the Poké Seer and the Lugia speech house are open. Olivine's port, the Battle Tower gate and Whirl Islands stay closed.
|
||||
- The story runs on existing primitives: the rival's Olivine scene, Jasmine and Amphy, the SecretPotion (the pharmacist then runs `MARTTYPE_PHARMACY`), Suicune and Eusine at Cianwood, Chuck's boulder-throwing intro and Strength boulders, the STORMBADGE, TM01 and HM02, Amphy's cure, Jasmine's return to her gym, the MINERALBADGE and TM23.
|
||||
- New specials (`game/scripts/cianwood.ts`): `GiveShuckle` and `ReturnShuckie`, with Mania's OT, ID, nickname, Berry, gift caught data, the daily flag, every return code and the original's wrong speech when Shuckie is the last Pokémon that can fight; `PokeSeer`, with the action table, the OT check that compares only the ID's high byte, gift and event landmarks, the advice thresholds and the caught level reused from the last reading; `PhotoStudio`, which takes the no-printer path; `PlaySlowCry` (audio only). `wMooMooBerries` joins the saved script bytes.
|
||||
- `PhotoStudio` without a Game Boy Printer: `PrintPartymon`'s handshake reads $ff, `CheckPrinterStatus` reports `PRINTER_ERROR_2`, and B cancels with no photo. The port shows that status box's text on one page; the Pokémon's print page behind it and the box alternating with "CHECKING LINK" on each retry are not drawn.
|
||||
- The Seer's reused caught level is `wSeerCaughtLevel`, a byte in the "Miscellaneous WRAM 1" union. The port keeps the Seer's own last reading until a load; in the original, other users of that union (such as `wBufferMon`) may have changed it in between.
|
||||
- The playthrough driver gained `sail` (Surf across open water, answering `AskSurfScript`), water-aware `cross` and `walk`, breadth-first `travel` through floors whose holes land in cut-off corners, Great Balls and pharmacy purchases.
|
||||
- Tests: `tests/olivine-cianwood.test.ts` covers MooMoo's seven Berries and the saved byte, every Shuckie outcome, the Seer's readings, its ID quirk and reused level, and the Photo Studio. The playthrough continues for six more stages: Routes 38 and 39 and the rival, Strength and the Good Rod, a fished Krabby taught Surf, the Lighthouse, Routes 40 and 41, Eusine, the SecretPotion, Chuck (a loss retries from Cianwood's Pokémon Center), Fly, Amphy and Jasmine.
|
||||
- Local validation (2026-10-13): 790 unit tests passed, 3 skipped (scratch tests excluded), including the 32-stage playthrough; without a ROM, 168 passed and 625 skipped. Both builds, reference/profile checks, vendor integrity and release isolation passed. Browser checks: 181 passed, 21 skipped, 12 known WebKit menu failures (#70). CI and physical-device acceptance were not run.
|
||||
- Remaining: Olivine's port and the S.S. Aqua, the Battle Tower, Whirl Islands, the Game Boy Printer, routes beyond Olivine and Cianwood (Route 42 onward), radio and rematches (#30), breeding (#29), mobile and link features, and audio.
|
||||
|
||||
## Native battles: current state
|
||||
|
||||
|
||||
Reference in new issue
Block a user