Breed at the Day-Care, hatch Eggs, draw MAIL stationery and browse the Hall of Fame (Closes #29)

- Day-Care and breeding: deposits, withdrawal pricing and growth,
  compatibility, egg species, DVs and moves, DayCareStep, egg
  collection and the Odd Egg, compared with the cartridge's routines.
- CountStep: walking happiness, DoEggStep, DayCareStep and DoBikeStep
  in the original's order; HatchEggs with the ROM's hatch animation,
  compared frame by frame with the original.
- MAIL: all ten stationery types and the Portrait MAIL picture,
  compared with the cartridge's tilemaps, graphics and palettes.
- Printing: Bill's PC boxes, Pokedex PRNT, MAIL and the Photo Studio
  take the original's absent-printer path.
- Hall of Fame records (saved apart from the League flag, ready for the
  League to call) and the Hall of Fame PC, compared with the cartridge's
  _HallOfFamePC on 255 pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
kawaandClaude Opus 5.5 committed 2026-10-17 08:52:30 +02:00
1 parent 7d03f5c5ca
commit e49bc6de9a
49 files changed
+6028 -88

No files matched your search

+4 -4
View File
@@ -67,7 +67,7 @@ describe.skipIf(!existsSync(romPath))("Olivine and Cianwood side content with th
x: number,
y: number,
face: "up" | "down" | "left" | "right",
answers: number[] = [],
answers: (number | string)[] = [],
) => {
game.warpTo(map, x, y);
settle(game);
@@ -260,18 +260,18 @@ describe.skipIf(!existsSync(romPath))("Olivine and Cianwood side content with th
describe("the Photo Studio (PhotoStudio)", () => {
/** The photographer stands at (2, 3). */
const photo = (game: GameWorld, answers: number[]) =>
const photo = (game: GameWorld, answers: (number | string)[]) =>
talk(game, PHOTO_STUDIO, 2, 4, "up", answers);
it("finds no printer and takes no photo", () => {
const { game } = world();
game.state.party = [mon(game, 155, 20), mon(game, 175, 5, { egg: true })];
const shown = photo(game, [1, 0]);
const shown = photo(game, [1, 0, "b"]);
expect(shown).toContain("Which POKéMON\nshould I photo-\ngraph?");
expect(shown).toContain("Hold\nstill for a bit.");
// PrintPartymon's handshake reads $ff: PRINTER_ERROR_2.
expect(shown).toContain(
" Printer Error 2\n\nCheck the Game Boy\nPrinter Manual.\n\nPress B to Cancel",
" Printer Error 2\n\nCheck the Game Boy\nPrinter Manual.\nPress B to Cancel",
);
expect(shown).toContain("Oh, no picture?\nCome again, OK?");
expect(shown).not.toContain("Presto");