Open Route 31, Violet City and Sprout Tower (#31)
Enable Route 31 and its gate, Dark Cave's Violet entrance, Violet City with its buildings and Sprout Tower. Port the script commands they use: gettrainername, askforphonenumber (with AddPhoneNumber's room for Mom and Elm; addcellnum now reports failure as the original does), checkpokemail, loadmenu/_2dmenu/closewindow, giveegg and trade (NPCTrade, with wTradeFlags saved). Eggs keep their species with an egg flag, as wPartySpecies does. The pack's TM/HM counts receive, check and toss TMs and HMs, which are named TM01-HM07. The playthrough continues through Route 31 (with Mom's call), Violet City and Sprout Tower to Elder Li's Flash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ec3d1cd5c4
commit
7909302db1
16 files changed
+585
-63
No files matched your search
@@ -27,9 +27,29 @@ export interface PartyMon {
|
||||
stats: [number, number, number, number, number, number];
|
||||
/** sPartyMail's entry while the Pokémon holds MAIL. */
|
||||
mail?: Mail;
|
||||
/** An Egg: wPartySpecies holds EGG for this slot. `species` is what
|
||||
* hatches, `happiness` counts the remaining egg cycles and the nickname
|
||||
* is "EGG". */
|
||||
egg?: true;
|
||||
}
|
||||
|
||||
export const PARTY_LENGTH = 6;
|
||||
|
||||
const STATUS_NAMES: [number, string][] = [
|
||||
[0x08, " PSN"],
|
||||
[0x10, " BRN"],
|
||||
[0x20, " FRZ"],
|
||||
[0x40, " PAR"],
|
||||
];
|
||||
function statusName(status: number) {
|
||||
if (status & 7) return " SLP";
|
||||
return STATUS_NAMES.find(([bit]) => status & bit)?.[1] ?? "";
|
||||
}
|
||||
/** A party menu row's level, HP and status (or FNT); an Egg shows none. */
|
||||
export function partyMonDetails(mon: PartyMon): string {
|
||||
if (mon.egg) return "";
|
||||
return `:L${mon.level} HP ${mon.hp}/${mon.stats[0]}${mon.hp ? statusName(mon.status) : " FNT"}`;
|
||||
}
|
||||
/** Characters a nickname can hold: the naming screen's letters and
|
||||
* symbols, plus the digits and apostrophes of default species names. */
|
||||
export const NICKNAME_PATTERN = /^[A-Za-z0-9 ()":;[\]?!♂♀/.,×'é-]{1,10}$/u;
|
||||
@@ -215,7 +235,8 @@ export function validBoxFields(value: unknown): boolean {
|
||||
integer(mon.happiness, 0, 255) &&
|
||||
integer(mon.pokerus, 0, 255) &&
|
||||
integer(mon.caughtData, 0, 0xffff) &&
|
||||
integer(mon.level, 1, 100)
|
||||
integer(mon.level, 1, 100) &&
|
||||
(mon.egg === undefined || mon.egg === true)
|
||||
);
|
||||
} catch {
|
||||
return false;
|
||||
|
||||
Reference in new issue
Block a user