Add the TM/HM pocket, Egg screens and Violet's remaining scripts
Checks / web (push) Canceled after 0s

The pack's TM/HM pocket lists TMs and HMs with their moves, gives TMs and teaches either through the ABLE/NOT ABLE party menu, the compatibility and "already knows" checks and LearnMove; a TM is used up and makes the Pokémon happier. Eggs show no level or HP in the party menus, get the Egg stats page with its hatching hint, and are skipped by HealParty. Bug Catcher Wade's number registers (VAR_CALLERID and RandomPhoneMon).

The playthrough now runs through Falkner's ZEPHYRBADGE, the Togepi Egg, Kyle's Onix, Flash in Dark Cave, Wade's number and Earl's blackboard. With MAKE_TEST_SAVES it writes a Violet City backup for the manual checks.

Validated with 610 unit tests, 157 browser tests (including all 256 badge bytes against the original BadgeStatBoosts), native/reference builds and reference/vendor/release checks. Egg hatching (#29) and trainer calls (#30) remain on their cards.

Closes #31

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Sébastien QUEROLandClaude Opus 5.5 committed 2026-10-03 16:49:02 +02:00
1 parent 7909302db1
commit 73022b1505
13 files changed
+803 -31

No files matched your search

+4 -2
View File
@@ -607,15 +607,17 @@ test("native switch texts, healing, PP, happiness and CalcPlayerStats match the
text: () => ({}) as never,
});
const internals = battle as unknown as {
options: { party: { species: number; happiness: number }[] };
options: { party: { species: number; happiness: number; egg?: true }[] };
partyMenuCursor: number;
turn: number;
changeHappiness(index: number, action: number): void;
calcPlayerStats(): void;
};
happinessCases.forEach((input, index) => {
// An Egg is EGG in wPartySpecies and an egg flag here.
internals.options.party = Array.from({ length: 6 }, (_, slot) => ({
species: input.egg && slot === input.mon ? C.EGG : 155,
species: 155,
...(input.egg && slot === input.mon && { egg: true }),
happiness: input.happiness,
}));
internals.partyMenuCursor = input.cursor;