Open the League: Victory Road, the Elite Four, the Hall of Fame and the credits (#33)
Checks / web (push) Failing after 18s
Private ROM checks / private-rom (push) Failing after 25m31s

Routes 26 and 27 with their houses, Tohjo Falls, the Victory Road gate,
Victory Road, Route 23, Indigo Plateau, the Elite Four's rooms, Lance's
room and the Hall of Fame are open.

- halloffame (game/scripts/league.ts): the music fades as SAVING RECORD
  shows, the win and the team (without Eggs) are recorded, each Pokémon's
  back picture passes and its front picture slides in for its "New Hall of
  Famer!" page and cry, then the player's card with the play time and
  Professor Oak's rating; the play time stops meanwhile. The world then
  continues at New Bark as Continue does after the cartridge's reset.
- credits and the credits after the Hall of Fame (CreditsMachine): the
  ROM's script, strings, banner Pokémon and THE END, frame by frame as
  VBlank_Credits presents them, with the frames each command group runs
  over measured on the cartridge. B shortens credits seen before.
- wait, appear/disappear of the player, and rival names in battle texts
  (PlaceEnemysName prints wRivalName alone: "???" before he is named).
- The tile-screen renderer wraps hSCX/hSCY at 256 pixels and gives rows
  their own hSCX.
- Reference: the credits match the cartridge on every frame (BG map,
  banner tiles, CRAM palettes, LY overrides, parser), with and without B;
  the ceremony's pages match for every species and the player's card for
  Chris and Kris.
- Playthrough: five stages from Tin Tower to the Hall of Fame (HM07 from
  Ice Path, Tohjo Falls' waterfall, Victory Road's ladders, the Elite Four
  and Lance); the driver follows warps within a map and fights carefully
  from here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
kawaandClaude Opus 5.5 committed 2026-10-17 14:52:14 +02:00
1 parent b6fdc23508
commit f05fd8ebee
23 files changed
+1943 -107

No files matched your search

+13 -2
View File
@@ -515,7 +515,7 @@ The numbered sections below keep their full scope. Each one opens with a checkli
## Implemented: the Hall of Fame PC (board #29)
- `wHallOfFameCount` and `sHallOfFame` are saved as `hallOfFameCount` and `hallOfFameTeams` (newest first, at most 30 teams of up to six Pokémon with species, ID, DVs, level and nickname), migrated by absence to none and validated against each other. They are separate from `hallOfFame` (`STATUSFLAGS_HALL_OF_FAME_F`), which the Battle Tower, radio, Pokégear and marts read.
- `GetHallOfFameParty` (Eggs left out) and `AddHallOfFameEntry` (the oldest of 30 teams drops off, the count stops at 200) are ported as `addHallOfFameEntry`, but nothing calls it until the League's ceremony is ported.
- `GetHallOfFameParty` (Eggs left out) and `AddHallOfFameEntry` (the oldest of 30 teams drops off, the count stops at 200) are ported as `addHallOfFameEntry`, which the League's ceremony calls (below).
- `PokemonCenterPC.ChooseWhichPCListToUse` picks `PCPC_POSTGAME` from the count, as the original does, so HALL OF FAME appears once a team is recorded. `_HallOfFamePC`, `LoadHOFTeam` and `DisplayHOFMon` show each Pokémon's page with its cry: A shows the next Pokémon, then the next team; Start skips to the next team; B returns to the PC. The original's unreachable "HOF Master!" title (it needs a count of 201) is kept.
- `tests/reference-hall-of-fame.spec.ts` writes 255 teams (every species, Unown, level 100, the Nidorans, win 200, all eight frames) into the cartridge's SRAM, runs its `_HallOfFamePC`, and compares the tilemap, attributes, graphics and palette with the port's page. `HOF_AnimateFrontpic` is the one routine stubbed: the port shows the picture at rest, without the `ANIM_MON_HOF` animation. `tests/hall-of-fame.test.ts` covers the records, the PC menu with and without them, browsing, and save, reload and migration.
@@ -528,11 +528,22 @@ The numbered sections below keep their full scope. Each one opens with a checkli
- Refused with the reason: unported maps, the Bug-Catching Contest, a Battle Tower challenge in progress, characters outside the naming screen (traded Japanese names, ligatures). Not carried over, with a note in the preview: the tiles walked count, Mystery Gift items, link battle records; time-windowed objects follow the clock again.
- Savegames → Import backup reads `.sav`/`.srm`/`.dat` files (or any 32 KiB non-JSON file), previews trainer, place, progress, which copy and clock were used and the notes, then adds or replaces a save like a native backup (`SlotSession.previewCartridge`). Tests: `tests/cartridge-save.test.ts` (the committed real `.sav` and Virtual Console `sav.dat`, backup fallback, clock footers, day counters, refusals), `tests/save-slots.test.ts` and `tests/save-slots-browser.spec.ts`.
## Implemented: the League, the Hall of Fame and the credits (board #33, increment A)
- Open: Routes 26 and 27 with their three houses, Tohjo Falls, the Victory Road gate (badge check), Victory Road with the rival, Route 23, Indigo Plateau's Pokémon Center and mart, the Elite Four's rooms (doors that lock and open), Lance's room with Mary and Oak's scene, and the Hall of Fame. Route 22, Route 28 and the rest of Kanto stay closed.
- `halloffame` (`HallOfFame`, `game/scripts/league.ts`): the music fades as "SAVING RECORD…" shows for 100 frames, `STATUSFLAGS_HALL_OF_FAME_F` is set and the League win and team recorded (`addHallOfFameEntry`), `MUSIC_HALL_OF_FAME` plays, each Pokémon's back picture passes (`HOF_SlideBackpic`, hSCX $90 to $70 by 4) and its front picture slides in (`HOF_SlideFrontpic`) before its "New Hall of Famer!" page and cry (60 frames), then the player's pictures, name, ID and play time (`HOF_AnimatePlayerPic`) with `ProfOaksPCRating`'s count, rating text (drawn into the text box from the ROM's characters, so ligatures keep their one tile) and sound; then the credits. `GAME_TIMER_COUNTING_F` is cleared meanwhile. The cartridge saves and resets after the credits and Continue spawns at New Bark (`SPAWN_LANCE` → `SPAWN_NEW_BARK`, `MAPSETUP_WARP`, `JumpRoamMons`); the port has no title screen and continues there directly; its own save is the script's committed state, so a reload during the ceremony replays it from the Hall of Fame's entrance, counting the win once.
- `credits` (`RedCredits`) and the credits themselves (`CreditsMachine`): `CreditsScript`'s strings, scenes and waits from the ROM, the four banner Pokémon's frames, the scrolling borders and THE END, presented as VBlank_Credits does (the text a third of the screen per VBlank, eight banner tiles per VBlank, a palette change taking its whole VBlank, the bottom border scrolled one frame before the top). How many frames each group of commands takes on the cartridge depends on `_UpdateSound`'s work within VBlank, so the 46 groups' spills are recorded as measured. B shortens credits seen before (from a second League win, and after Red); A closes them after THE END. The port reads B pressed rather than held.
- `wait` (Script_wait: six frames, `n` times) and `disappear`/`appear` of the player (the sprite is gone until the map loads again) are ported. Battle texts now name a rival (RIVAL1, RIVAL2) by `wRivalName` alone, as `PlaceEnemysName` does: "??? wants to battle!" in Cherrygrove, "SILVER wants to battle!" later (the port printed "RIVAL ?").
- The tile-screen renderer reads the background line by line, wrapping at 256 pixels as hSCX and hSCY do, and gives rows their own hSCX (`rowScroll`, wLYOverrides).
- Reference: `tests/reference-credits.spec.ts` runs the cartridge's `InitDisplayForRedCredits` and `Credits` with interrupts after a boot and compares every frame (about 7,000, past THE END) with `CreditsMachine`: the displayed BG map, the banner's tiles, the palettes in CRAM, wLYOverrides and the parser where it rests; once without B and once with B held. `tests/reference-hall-of-fame-ceremony.spec.ts` compares `DisplayNewHallOfFamer` for every species and `HOF_AnimatePlayerPic`'s card for Chris and Kris (tilemap, displayed attributes, palette and tiles) with only frame waits, `HOF_AnimateFrontpic` and `ProfOaksPCRating` stubbed.
- Tests: `tests/league.test.ts` (Route 27's first step into Kanto, the gate's badge check, the ceremony's records without Eggs, the paused play time, the 200-win cap and 30 teams, B on the credits, the text-box decoder, the renderer's wrap and row scroll). The playthrough gains five stages: back to Ice Path for HM07, home to New Bark, Route 27, Tohjo Falls' waterfall, Route 26 and Victory Road, Indigo Plateau and the Elite Four, Lance and the Hall of Fame (the driver now fights carefully from here: accuracy-weighed moves, Full Heals for poison, paralysis and burns, healing below two thirds). Test saves: `indigo-plateau`, `hall-of-fame-new-bark`, `hall-of-fame-ceremony`.
- Not presented: `ANIM_MON_HOF` (pictures at rest, as in the PC), the credits' first 36 frames of setup are shown white without their exact frame count, the rating text appears whole rather than letter by letter. The Plateau's rival (after Mt. Moon) and Kanto are increments B and C.
## Native battles: current state
The battle core, ROM tables, encounter hooks, battle UI and whiteout hooks are present. Unit tests cover wins, escape, loss, experience, move learning and capture; reference tests compare damage, type effectiveness, stat calculation and experience curves. Browser tests drive a test-only wild encounter through the real UI: victory with level-up and move learning, escape, whiteout, catching with a nickname, keyboard and on-screen D-pad menu navigation, mid-battle backup restore, rollback of unsupported effects, switching through the party menu and a Potion from the Items pocket. Real Route 29 encounters now use the ROM's encounter tables. Every ball can be thrown; only the contest's Park Ball handling remains.
This is still not a complete new game. The Pokégear's radio, the Pokédex's area view, search and other modes, the League, Kanto and the postgame remain unfinished. The start menu opens the party menu and the pack, and Select uses the registered item, such as the Bicycle; the PCs store Pokémon, items and decorations. Surfing and terrain animation now have native implementations; Kanto's maps remain gated. Save slots, online Link, friends and real-world steps come later.
This is still not a complete new game. The Pokédex's area view, search and other modes, Kanto and the postgame remain unfinished. The start menu opens the party menu and the pack, and Select uses the registered item, such as the Bicycle; the PCs store Pokémon, items and decorations. Surfing and terrain animation now have native implementations; Kanto's maps remain gated. Save slots, online Link, friends and real-world steps come later.
## 1. Complete the overworld foundation