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:
1 parent
7d03f5c5ca
commit
e49bc6de9a
49 files changed
+6028
-88
No files matched your search
@@ -229,7 +229,7 @@ for (const table of ["SAVED_WRAM", "WRAM"]) {
|
||||
}
|
||||
}
|
||||
// BATTLE, OVERWORLD, PC, INTRO, STATS, MENU, POKEGEAR, MOM, TRAINER_CARD, POKEDEX, OPTIONS, JOHTO and AUDIO entries are keyed by their PRET labels.
|
||||
for (const table of ["BATTLE", "OVERWORLD", "PC", "INTRO", "STATS", "MENU", "POKEGEAR", "MOM", "TRAINER_CARD", "POKEDEX", "OPTIONS", "JOHTO", "AUDIO", "PHONE", "RADIO"]) {
|
||||
for (const table of ["BATTLE", "OVERWORLD", "PC", "INTRO", "STATS", "MENU", "POKEGEAR", "MOM", "TRAINER_CARD", "POKEDEX", "OPTIONS", "JOHTO", "AUDIO", "PHONE", "RADIO", "MAIL", "EGGS"]) {
|
||||
const block = new RegExp(`export const ${table} = \\{([\\s\\S]*?)\\} as const;`).exec(profile)?.[1];
|
||||
if (block === undefined) throw new Error(`${table} symbol table is missing.`);
|
||||
for (const [, quoted, bare, literal] of block.matchAll(/^\s+(?:"([^"]+)"|(\w+)):\s*(0x[0-9a-f]+),/gm)) {
|
||||
@@ -278,6 +278,7 @@ const eventNames = {
|
||||
bugCatchingContestant8A: "EVENT_BUG_CATCHING_CONTESTANT_8A",
|
||||
bugCatchingContestant9A: "EVENT_BUG_CATCHING_CONTESTANT_9A",
|
||||
bugCatchingContestant10A: "EVENT_BUG_CATCHING_CONTESTANT_10A",
|
||||
togepiHatched: "EVENT_TOGEPI_HATCHED",
|
||||
};
|
||||
for (const [key, name] of Object.entries(eventNames)) {
|
||||
const match = new RegExp(`\\b${key}:\\s*(\\d+)`).exec(profile);
|
||||
@@ -380,9 +381,13 @@ if (!profile.includes(`allFruitTrees: ${pretConstants.get("ENGINE_ALL_FRUIT_TREE
|
||||
if (!profile.includes(`bugContestTimer: ${pretConstants.get("ENGINE_BUG_CONTEST_TIMER")},`))
|
||||
throw new Error("ENGINE_BUG_CONTEST_TIMER does not match the reference.");
|
||||
for (const [key, name] of [
|
||||
["bikeShopCall", "ENGINE_BIKE_SHOP_CALL_ENABLED"],
|
||||
["rocketsInRadioTower", "ENGINE_ROCKETS_IN_RADIO_TOWER"],
|
||||
["rocketsInMahogany", "ENGINE_ROCKETS_IN_MAHOGANY"],
|
||||
["expnCard", "ENGINE_EXPN_CARD"],
|
||||
["dayCareManHasEgg", "ENGINE_DAY_CARE_MAN_HAS_EGG"],
|
||||
["dayCareManHasMon", "ENGINE_DAY_CARE_MAN_HAS_MON"],
|
||||
["dayCareLadyHasMon", "ENGINE_DAY_CARE_LADY_HAS_MON"],
|
||||
["rocketSignal", "ENGINE_ROCKET_SIGNAL_ON_CH20"],
|
||||
["fishSwarm", "ENGINE_QWILFISH_SWARM"],
|
||||
["buenasPassword", "ENGINE_BUENAS_PASSWORD"],
|
||||
|
||||
Reference in new issue
Block a user