diff options
Diffstat (limited to 'engine')
63 files changed, 32323 insertions, 7239 deletions
diff --git a/engine/battle_start.asm b/engine/battle_start.asm index 0897b8a4a..845af9d2a 100644 --- a/engine/battle_start.asm +++ b/engine/battle_start.asm @@ -26,8 +26,8 @@ Predef_StartBattle: ; 8c20f ld a, $5 ld [rSVBK], a - ld hl, wMapPals - ld bc, $0040 + ld hl, UnknBGPals + ld bc, 8 palettes xor a call ByteFill @@ -84,7 +84,7 @@ endr Function8c2a0: ; 8c2a0 call LoadTrainerBattlePokeballTiles - ld hl, VBGMap0 + hlbgcoord 0, 0 call Function8c2cf ret ; 8c2aa @@ -308,9 +308,11 @@ StartTrainerBattle_Flash: ; 8c3ab (23:43ab) StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8) callba Function5602 - ld a, $5 + ld a, $5 ; BANK(LYOverrides) ld [rSVBK], a + call StartTrainerBattle_NextScene + ld a, $43 ld [hLCDStatCustom], a xor a @@ -342,8 +344,8 @@ StartTrainerBattle_SineWave: ; 8c408 (23:4408) ld d, [hl] add [hl] ld [hl], a - ld a, $90 - ld bc, wd100 + ld a, LYOverridesEnd - LYOverrides + ld bc, LYOverrides ld e, $0 .loop @@ -364,7 +366,7 @@ StartTrainerBattle_SineWave: ; 8c408 (23:4408) StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d) callba Function5602 - ld a, $5 + ld a, $5 ; BANK(LYOverrides) ld [rSVBK], a call StartTrainerBattle_NextScene xor a @@ -507,7 +509,7 @@ endr StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578) callba Function5602 - ld a, $5 + ld a, $5 ; BANK(LYOverrides) ld [rSVBK], a call StartTrainerBattle_NextScene ld a, $10 @@ -659,7 +661,7 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) ld [rSVBK], a call .copypals push hl - ld de, wMapPals + 8 * 7 + ld de, UnknBGPals + 8 * 7 ld bc, $8 call CopyBytes pop hl @@ -678,15 +680,15 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) ret .copypals: ; 8c677 (23:4677) - ld de, wMapPals + 8 * 7 + ld de, UnknBGPals + 8 * 7 call .copy ld de, BGPals + 8 * 7 call .copy - ld de, Unkn2Pals + 8 * 6 + ld de, UnknOBPals + 8 * 6 call .copy ld de, OBPals + 8 * 6 call .copy - ld de, Unkn2Pals + 8 * 7 + ld de, UnknOBPals + 8 * 7 call .copy ld de, OBPals + 8 * 7 @@ -739,10 +741,12 @@ WipeLYOverrides: ; 8c6d8 push af ld a, $5 ld [rSVBK], a + ld hl, LYOverrides call .wipe ld hl, LYOverridesBackup call .wipe + pop af ld [rSVBK], a ret diff --git a/engine/billspc.asm b/engine/billspc.asm index 03a7592ca..a4dd02876 100755 --- a/engine/billspc.asm +++ b/engine/billspc.asm @@ -1165,30 +1165,30 @@ endr cp $f jr z, .asm_e2bf5 ld b, a - call Functione3396 + call GetBoxPointer ld a, b call GetSRAMBank push hl - ld bc, $35 + ld bc, sBoxMon1Level - sBox add hl, bc - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonLevel], a pop hl push hl - ld bc, $17 + ld bc, sBoxMon1Item - sBox add hl, bc - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonItem], a pop hl - ld bc, $2b + ld bc, sBoxMon1DVs - sBox add hl, bc - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld de, TempMonDVs @@ -1201,19 +1201,19 @@ endr ret .asm_e2bc6 ld hl, PartyMon1Level - ld bc, $30 + ld bc, PARTYMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonLevel], a ld hl, PartyMon1Item - ld bc, $30 + ld bc, PARTYMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonItem], a ld hl, PartyMon1DVs - ld bc, $30 + ld bc, PARTYMON_STRUCT_LENGTH ld a, e call AddNTimes ld de, TempMonDVs @@ -1228,21 +1228,21 @@ endr ld a, BANK(sBox) call GetSRAMBank ld hl, sBoxMon1Level - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonLevel], a ld hl, sBoxMon1Item - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] ld [TempMonItem], a ld hl, sBoxMon1DVs - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld de, TempMonDVs @@ -1307,6 +1307,7 @@ Functione2c6e: ; e2c6e (38:6c6e) ld de, String_e2c67 call PlaceString ret + .asm_e2c7c inc de ld a, [de] @@ -1320,36 +1321,38 @@ Functione2c6e: ; e2c6e (38:6c6e) cp $f jr z, .asm_e2cf1 push hl - call Functione3396 + call GetBoxPointer ld a, b call GetSRAMBank push hl - ld bc, $16 + ld bc, sBoxMons - sBox add hl, bc - ld bc, $20 + ld bc, BOXMON_STRUCT_LENGTH ld a, e call AddNTimes ld a, [hl] pop hl and a jr z, .asm_e2cc2 - ld bc, $372 + ld bc, sBoxMonNicknames - sBox add hl, bc - ld bc, $b + ld bc, PKMN_NAME_LENGTH ld a, e call AddNTimes ld de, StringBuffer1 - ld bc, $b + ld bc, PKMN_NAME_LENGTH call CopyBytes call CloseSRAM pop hl ld de, StringBuffer1 call PlaceString ret + .asm_e2cc2 call CloseSRAM pop hl jr .asm_e2d23 + .asm_e2cc8 push hl ld hl, PartySpecies @@ -1359,19 +1362,21 @@ Functione2c6e: ; e2c6e (38:6c6e) and a jr z, .asm_e2cee ld hl, PartyMonNicknames - ld bc, $b + ld bc, PKMN_NAME_LENGTH ld a, e call AddNTimes ld de, StringBuffer1 - ld bc, $b + ld bc, PKMN_NAME_LENGTH call CopyBytes pop hl ld de, StringBuffer1 call PlaceString ret + .asm_e2cee pop hl jr .asm_e2d23 + .asm_e2cf1 push hl ld a, BANK(sBox) @@ -1394,6 +1399,7 @@ Functione2c6e: ; e2c6e (38:6c6e) ld de, StringBuffer1 call PlaceString ret + .asm_e2d1f call CloseSRAM pop hl @@ -1422,7 +1428,7 @@ Functione2d30: ; e2d30 (38:6d30) cp $f jr z, .asm_e2db7 ld b, a - call Functione3396 + call GetBoxPointer ld a, b call GetSRAMBank inc hl @@ -1447,6 +1453,7 @@ Functione2d30: ; e2d30 (38:6d30) inc a ld [wd004], a jr .asm_e2d57 + .asm_e2d79 call CloseSRAM ld a, $ff @@ -1455,6 +1462,7 @@ Functione2d30: ; e2d30 (38:6d30) inc a ld [wcb2c], a ret + .asm_e2d87 ld hl, PartySpecies .asm_e2d8a @@ -1478,6 +1486,7 @@ Functione2d30: ; e2d30 (38:6d30) inc a ld [wd004], a jr .asm_e2d8a + .asm_e2dac ld a, $ff ld [de], a @@ -1485,6 +1494,7 @@ Functione2d30: ; e2d30 (38:6d30) inc a ld [wcb2c], a ret + .asm_e2db7 ld a, BANK(sBox) call GetSRAMBank @@ -1510,6 +1520,7 @@ Functione2d30: ; e2d30 (38:6d30) inc a ld [wd004], a jr .asm_e2dbf + .asm_e2de1 call CloseSRAM ld a, $ff @@ -1538,10 +1549,11 @@ Functione2e01: ; e2e01 (38:6e01) jr nz, .asm_e2e0b call ClearSprites ret + .asm_e2e0b ld hl, Unknown_e2e2b ld de, Sprites -.done1 +.loop ld a, [hl] cp $ff ret z @@ -1561,7 +1573,7 @@ Functione2e01: ; e2e01 (38:6e01) ld a, [hli] ld [de], a inc de - jr .done1 + jr .loop ; e2e2b (38:6e2b) Unknown_e2e2b: ; e2e2b @@ -1795,11 +1807,11 @@ Functione2fd6: ; e2fd6 (38:6fd6) ld a, BANK(sBox) call GetSRAMBank ld hl, sBoxSpecies - call Functione3357 + call CopySpeciesToTemp ld hl, sBoxMonNicknames - call Functione3363 + call CopyNicknameToTemp ld hl, sBoxMonOT - call Functione3376 + call CopyOTNameToTemp ld hl, sBoxMons ld bc, BOXMON_STRUCT_LENGTH ld a, [CurPartyMon] @@ -1813,11 +1825,11 @@ Functione2fd6: ; e2fd6 (38:6fd6) .asm_e3020 ld hl, PartySpecies - call Functione3357 + call CopySpeciesToTemp ld hl, PartyMonNicknames - call Functione3363 + call CopyNicknameToTemp ld hl, PartyMonOT - call Functione3376 + call CopyOTNameToTemp ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) ld bc, PARTYMON_STRUCT_LENGTH ld a, [CurPartyMon] @@ -1829,27 +1841,27 @@ Functione2fd6: ; e2fd6 (38:6fd6) .asm_e3048 ld b, a - call Functione3396 + call GetBoxPointer ld a, b call GetSRAMBank push hl inc hl - call Functione3357 + call CopySpeciesToTemp pop hl push hl - ld bc, $372 + ld bc, sBoxMonNicknames - sBox add hl, bc - call Functione3363 + call CopyNicknameToTemp pop hl push hl - ld bc, $296 + ld bc, sBoxMonOT - sBox add hl, bc - call Functione3376 + call CopyOTNameToTemp pop hl - ld bc, $16 + ld bc, sBoxMons - sBox add hl, bc - ld bc, $20 - call Functione3389 + ld bc, BOXMON_STRUCT_LENGTH + call CopyMonToTemp call CloseSRAM callba Function5088b ret @@ -2141,7 +2153,7 @@ Functione32b0: ; e32b0 ld a, [wcb31] dec a ld e, a - callba Function14ac2 + callba MovePkmnWOMail_SaveGame ld a, [wcb30] ld hl, wcb2f add [hl] @@ -2149,14 +2161,14 @@ Functione32b0: ; e32b0 ld a, $1 call GetSRAMBank ld hl, sBoxSpecies - call Functione3357 + call CopySpeciesToTemp ld hl, sBoxMonNicknames - call Functione3363 + call CopyNicknameToTemp ld hl, sBoxMonOT - call Functione3376 + call CopyOTNameToTemp ld hl, sBoxMons ld bc, BOXMON_STRUCT_LENGTH - call Functione3389 + call CopyMonToTemp call CloseSRAM callba Function5088b ld a, PC_DEPOSIT @@ -2169,7 +2181,7 @@ Functione32fa: ; e32fa ld a, [wcb2e] dec a ld e, a - callba Function14ac2 + callba MovePkmnWOMail_SaveGame ld a, [wcb2b] ld hl, wcb2a add [hl] @@ -2184,14 +2196,14 @@ Functione3316: ; e3316 add [hl] ld [CurPartyMon], a ld hl, PartySpecies - call Functione3357 + call CopySpeciesToTemp ld hl, PartyMonNicknames - call Functione3363 + call CopyNicknameToTemp ld hl, PartyMonOT - call Functione3376 + call CopyOTNameToTemp ld hl, PartyMon1Species ld bc, PARTYMON_STRUCT_LENGTH - call Functione3389 + call CopyMonToTemp xor a ld [wPokemonWithdrawDepositParameter], a callba Functione039 @@ -2207,7 +2219,7 @@ Functione3346: ; e3346 ret ; e3357 -Functione3357: ; e3357 (38:7357) +CopySpeciesToTemp: ; e3357 (38:7357) ld a, [CurPartyMon] ld c, a ld b, $0 @@ -2216,36 +2228,36 @@ Functione3357: ; e3357 (38:7357) ld [CurPartySpecies], a ret -Functione3363: ; e3363 (38:7363) - ld bc, $b +CopyNicknameToTemp: ; e3363 (38:7363) + ld bc, PKMN_NAME_LENGTH ld a, [CurPartyMon] call AddNTimes ld de, wd002 - ld bc, $b + ld bc, PKMN_NAME_LENGTH call CopyBytes ret -Functione3376: ; e3376 (38:7376) - ld bc, $b +CopyOTNameToTemp: ; e3376 (38:7376) + ld bc, NAME_LENGTH ld a, [CurPartyMon] call AddNTimes ld de, wd00d - ld bc, $b + ld bc, NAME_LENGTH call CopyBytes ret -Functione3389: ; e3389 (38:7389) +CopyMonToTemp: ; e3389 (38:7389) ld a, [CurPartyMon] call AddNTimes - ld de, wd018 + ld de, wd018_Mon call CopyBytes ret -Functione3396: ; e3396 (38:7396) +GetBoxPointer: ; e3396 (38:7396) dec b ld c, b ld b, 0 - ld hl, Unknown_e33a6 + ld hl, .boxes rept 3 add hl, bc endr @@ -2257,7 +2269,7 @@ endr ret ; e33a6 (38:73a6) -Unknown_e33a6: ; e33a6 +.boxes: ; e33a6 ; bank, address dba sBox1 dba sBox2 @@ -2350,7 +2362,7 @@ _ChangeBox: ; e35aa (38:75aa) ld hl, _ChangeBox_menudataheader call CopyMenuDataHeader xor a - ld [wd0e4], a + ld [wMenuScrollPosition], a hlcoord 0, 4 lb bc, 8, 9 call TextBox @@ -2535,52 +2547,52 @@ String_e36f1: ; e36f1 ; e36f9 Functione36f9: ; e36f9 (38:76f9) - ld hl, MenuDataHeader_0xe377b + ld hl, .MenuDataHeader call LoadMenuDataHeader call InterpretMenu2 call ExitMenu ret c ld a, [MenuSelection2] cp $1 - jr z, .asm_e3734 + jr z, .Switch cp $2 - jr z, .asm_e3745 + jr z, .Name cp $3 - jr z, .asm_e3717 + jr z, .Print and a ret -.asm_e3717 +.Print call GetBoxCount and a - jr z, .asm_e372f + jr z, .EmptyBox ld e, l ld d, h ld a, [MenuSelection] dec a ld c, a - callba Function844bc + callba PrintPCBox call Functione35e2 and a ret -.asm_e372f +.EmptyBox call Functione37be and a ret -.asm_e3734 +.Switch ld a, [MenuSelection] dec a ld e, a ld a, [wCurBox] cp e ret z - callba Function14a83 + callba ChangeBoxSaveGame ret -.asm_e3745 - ld b, $4 +.Name + ld b, $4 ; box ld de, wd002 callba NamingScreen call ClearTileMap @@ -2604,15 +2616,15 @@ Functione36f9: ; e36f9 (38:76f9) hlcoord 11, 7 ; XXX -MenuDataHeader_0xe377b: ; 0xe377b +.MenuDataHeader: ; 0xe377b db $40 ; flags db 04, 11 ; start coords db 13, 19 ; end coords - dw MenuData2_0xe3783 + dw .MenuData2 db 1 ; default option ; 0xe3783 -MenuData2_0xe3783: ; 0xe3783 +.MenuData2: ; 0xe3783 db $80 ; flags db 4 ; items db "SWITCH@" diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm index 7c4d8ba62..ebf5e48d8 100755 --- a/engine/breeding/egg.asm +++ b/engine/breeding/egg.asm @@ -192,7 +192,7 @@ OverworldHatchEgg:: ; 16f5e call ResetWindow call LoadStandardMenuDataHeader call Function16f70 - call Function2b4d + call ExitAllMenus call RestartMapMusic jp LoadMoveSprites ; 16f70 @@ -219,7 +219,7 @@ Function16f7a: ; 16f7a (5:6f7a) push de - callba Function4dbb8 + callba SetEggMonCaughtData callba MobileFn_10608d ld a, [CurPartyMon] ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) @@ -650,7 +650,7 @@ Function1723c: ; 1723c (5:723c) ld hl, BattleMonDVs predef GetUnownLetter pop de - predef_jump Function5108b + predef_jump FrontpicPredef Function17254: ; 17254 (5:7254) push af @@ -775,7 +775,7 @@ Function1728f: ; 1728f (5:728f) Function17363: ; 17363 (5:7363) ld [PlayerHPPal], a - ld b, $b + ld b, SCGB_0B ld c, $0 jp GetSGBLayout @@ -792,8 +792,8 @@ Function1736d: ; 1736d (5:736d) add $4c ld d, a ld e, $58 - ld a, $19 - call Function3b2a + ld a, SPRITE_ANIM_INDEX_19 + call _InitSpriteAnimStruct ld hl, $3 add hl, bc ld [hl], $0 @@ -821,8 +821,8 @@ Function173b3: ; 173b3 (5:73b3) ld b, a push hl push bc - ld a, $1c - call Function3b2a + ld a, SPRITE_ANIM_INDEX_1C + call _InitSpriteAnimStruct ld hl, $3 add hl, bc ld [hl], $0 diff --git a/engine/buena_phone_scripts.asm b/engine/buena_phone_scripts.asm index 3c0717503..98a7b72a3 100644 --- a/engine/buena_phone_scripts.asm +++ b/engine/buena_phone_scripts.asm @@ -1,168 +1,170 @@ BuenaPhoneScript1: checkflag ENGINE_ROCKETS_IN_RADIO_TOWER - iftrue UnknownScript_0xa0b73 + iftrue BuenaPhoneScript_Rocket checkcode VAR_HOUR - if_greater_than 17, UnknownScript_0xa0b4b - scall UnknownScript_0xa0b32 - jump UnknownScript_0xa0c0e + if_greater_than 17, BuenaPhoneScript_AfterMidnight1 + scall BuenaPhoneScript_CheckTimeOfDay1 + jump BuenaPhoneScript_Random1 BuenaPhoneScript2: checkflag ENGINE_ROCKETS_IN_RADIO_TOWER - iftrue UnknownScript_0xa0b73 - scall UnknownScript_0xa0b4f - jump UnknownScript_0xa0b77 + iftrue BuenaPhoneScript_Rocket + scall BuenaPhoneScript_CheckTimeOfDay2 + jump BuenaPhoneScript_Random2 -UnknownScript_0xa0b32: +BuenaPhoneScript_CheckTimeOfDay1: checkmorn - iftrue UnknownScript_0xa0b41 + iftrue .morn checkday - iftrue UnknownScript_0xa0b46 + iftrue .day writetext UnknownText_0xa0d42 keeptextopen end -UnknownScript_0xa0b41: +.morn: writetext UnknownText_0xa0c28 keeptextopen end -UnknownScript_0xa0b46: +.day: writetext UnknownText_0xa0c72 keeptextopen end -UnknownScript_0xa0b4b: +BuenaPhoneScript_AfterMidnight1: writetext UnknownText_0xa0caf end -UnknownScript_0xa0b4f: +BuenaPhoneScript_CheckTimeOfDay2: checkcode VAR_HOUR - if_greater_than 17, UnknownScript_0xa0b6e + if_greater_than 17, BuenaPhoneScript_AfterMidnight2 checkmorn - iftrue UnknownScript_0xa0b64 + iftrue .morn checkday - iftrue UnknownScript_0xa0b69 + iftrue .day writetext UnknownText_0xa0e29 keeptextopen end -UnknownScript_0xa0b64: +.morn: writetext UnknownText_0xa0d96 keeptextopen end -UnknownScript_0xa0b69: +.day: writetext UnknownText_0xa0dcf keeptextopen end -UnknownScript_0xa0b6e: +BuenaPhoneScript_AfterMidnight2: writetext UnknownText_0xa0e01 keeptextopen end -UnknownScript_0xa0b73: +BuenaPhoneScript_Rocket: writetext UnknownText_0xa0e5e end -UnknownScript_0xa0b77: +BuenaPhoneScript_Random2: checkevent EVENT_BEAT_ELITE_FOUR - iftrue UnknownScript_0xa0b82 + iftrue .PostE4 random 11 - jump UnknownScript_0xa0b84 + jump .Jumptable -UnknownScript_0xa0b82: +.PostE4: random 14 -UnknownScript_0xa0b84: - if_equal 0, UnknownScript_0xa0bbc - if_equal 1, UnknownScript_0xa0bc2 - if_equal 2, UnknownScript_0xa0bc8 - if_equal 3, UnknownScript_0xa0bce - if_equal 4, UnknownScript_0xa0bd4 - if_equal 5, UnknownScript_0xa0bda - if_equal 6, UnknownScript_0xa0be0 - if_equal 7, UnknownScript_0xa0be6 - if_equal 8, UnknownScript_0xa0bec - if_equal 9, UnknownScript_0xa0bf2 - if_equal 10, UnknownScript_0xa0bf8 - if_equal 11, UnknownScript_0xa0bfe - if_equal 12, UnknownScript_0xa0c04 - if_equal 13, UnknownScript_0xa0c0a - -UnknownScript_0xa0bbc: +.Jumptable: + if_equal 0, .zero + if_equal 1, .one + if_equal 2, .two + if_equal 3, .three + if_equal 4, .four + if_equal 5, .five + if_equal 6, .six + if_equal 7, .seven + if_equal 8, .eight + if_equal 9, .nine + if_equal 10, .ten + if_equal 11, .eleven + if_equal 12, .twelve + if_equal 13, .thirteen + +.zero: writetext UnknownText_0xa0efb - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bc2: +.one: writetext UnknownText_0xa0fcf - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bc8: +.two: writetext UnknownText_0xa109d - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bce: +.three: writetext UnknownText_0xa1143 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bd4: +.four: writetext UnknownText_0xa1244 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bda: +.five: writetext UnknownText_0xa1318 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0be0: +.six: writetext UnknownText_0xa13d8 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0be6: +.seven: writetext UnknownText_0xa1488 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bec: +.eight: writetext UnknownText_0xa15de - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bf2: +.nine: writetext UnknownText_0xa1717 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bf8: +.ten: writetext UnknownText_0xa183d - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0bfe: +.eleven: writetext UnknownText_0xa19b1 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0c04: +.twelve: writetext UnknownText_0xa1ac0 - jump UnknownScript_0xa0c0d + jump .finish -UnknownScript_0xa0c0a: +.thirteen: writetext UnknownText_0xa1bed -UnknownScript_0xa0c0d: +.finish: end -UnknownScript_0xa0c0e: +BuenaPhoneScript_Random1: random 3 - if_equal 0, UnknownScript_0xa0c1c - if_equal 1, UnknownScript_0xa0c20 - if_equal 2, UnknownScript_0xa0c24 + if_equal 0, .zero + if_equal 1, .one + if_equal 2, .two -UnknownScript_0xa0c1c: +.zero: writetext UnknownText_0xa1c88 end -UnknownScript_0xa0c20: +.one: writetext UnknownText_0xa1d5f end -UnknownScript_0xa0c24: +.two: writetext UnknownText_0xa1e2f end ; a0c28 + +INCLUDE "text/phone/buena.asm" diff --git a/engine/card_flip.asm b/engine/card_flip.asm index 8ee1e5cd9..df9d895d1 100755 --- a/engine/card_flip.asm +++ b/engine/card_flip.asm @@ -1621,7 +1621,7 @@ Functione0c37: ; e0c37 (38:4c37) ld a, $5 ld [rSVBK], a ld hl, Palette_e0c93 - ld de, wMapPals + ld de, UnknBGPals ld bc, $48 call CopyBytes pop af @@ -1751,7 +1751,7 @@ Functione1190: ; e1190 ld a, $93 ld [rLCDC], a call WaitBGMap - ld b, $18 + ld b, SCGB_18 call GetSGBLayout ld a, $e4 call DmgToCgbBGPals diff --git a/engine/color.asm b/engine/color.asm index 8530c2181..7e7520816 100644 --- a/engine/color.asm +++ b/engine/color.asm @@ -1,4 +1,4 @@ - +PALPACKET_LENGTH EQU $10 INCLUDE "predef/sgb.asm" SHINY_ATK_BIT EQU 5 @@ -89,7 +89,7 @@ Function8aa4: ; 8aa4 push bc ld hl, PalPacket_9ce6 ld de, wcda9 - ld bc, PalPacket_9cf6 - PalPacket_9ce6 + ld bc, PALPACKET_LENGTH call CopyBytes pop bc pop de @@ -117,7 +117,7 @@ Function8ad1: ; 8ad1 ret ; 8ade -Function8ade: ; 8ade +Function8ade: ; 8ade SGB layout $fc ld hl, wcd9b ld a, [wcda9] ld e, a @@ -149,7 +149,7 @@ Function8b07: ; 8b07 call CheckCGB ret z ld hl, Palette8b2f - ld de, wMapPals + ld de, UnknBGPals ld bc, $0008 ld a, $5 call FarCopyWRAM @@ -200,7 +200,7 @@ Function8b4d: ; 8b4d jp Function9809 .asm_8b5c - ld de, Unkn2Pals + ld de, UnknOBPals ld a, $3b call GetAthPalletFromPalettes9df6 jp LoadHLPaletteIntoDE @@ -216,7 +216,7 @@ Function8b67: ; 8b67 jp Function9809 .asm_8b76 - ld de, Unkn2Pals + ld de, UnknOBPals ld a, $3c call GetAthPalletFromPalettes9df6 jp LoadHLPaletteIntoDE @@ -232,7 +232,7 @@ Function8b81: ; 8b81 push af ld hl, PalPacket_9ce6 ld de, wcda9 - ld bc, $0010 + ld bc, PALPACKET_LENGTH call CopyBytes pop af call Function9775 @@ -248,7 +248,7 @@ Function8b81: ; 8b81 jp Function9809 .asm_8bb2 - ld de, Unkn2Pals + ld de, UnknOBPals ld a, c call Function9775 call Function9643 @@ -275,7 +275,7 @@ endr asm_8bd7 push hl - ld hl, wMapPals + ld hl, UnknBGPals ld de, $0008 .asm_8bde and a @@ -318,8 +318,8 @@ Function8bec: ; 8bec lb bc, 6, 4 ld a, [EnemySafeguardCount] and $3 - call Function9663 - call LoadDETile + call FillBoxCGB + call LoadEDTile ret ; 8c1d @@ -338,7 +338,7 @@ Function8c1d: ; 8c1d call Function976b .asm_8c33 - ld de, wMapPals + ld de, UnknBGPals call Function9643 call Function9699 call Function96b3 @@ -394,7 +394,7 @@ endr .asm_8c82 lb bc, 2, 8 ld a, e - call Function9663 + call FillBoxCGB ret ; 8c8a @@ -412,11 +412,11 @@ endr ld a, $5 ld [rSVBK], a ld a, [hli] - ld [wMapPals], a - ld [wMapPals + 8 * 2], a + ld [UnknBGPals], a + ld [UnknBGPals + 8 * 2], a ld a, [hl] - ld [wMapPals + 1], a - ld [wMapPals + 8 * 2 + 1], a + ld [UnknBGPals + 1], a + ld [UnknBGPals + 8 * 2 + 1], a pop af ld [rSVBK], a call Function96a4 @@ -437,7 +437,7 @@ endr push hl ld hl, PalPacket_9ce6 ld de, wcda9 - ld bc, $0010 + ld bc, PALPACKET_LENGTH call CopyBytes pop hl rept 2 @@ -458,7 +458,7 @@ endr ret .asm_8cf0 - ld de, wMapPals + ld de, UnknBGPals ld bc, $0008 ld a, $5 call FarCopyWRAM @@ -525,7 +525,7 @@ INCLUDE "predef/cgb.asm" Function95f0: ; 95f0 ld hl, Palette_9608 - ld de, wMapPals + ld de, UnknBGPals ld bc, 8 ld a, $5 call FarCopyWRAM @@ -544,7 +544,7 @@ Palette_9608: ; 9608 CopyFourPalettes: ; 9610 - ld de, wMapPals + ld de, UnknBGPals ld c, $4 CopyPalettes: ; 9615 @@ -618,7 +618,7 @@ Function9643: ; 9643 ret ; 9663 -Function9663: ; 9663 +FillBoxCGB: ; 9663 .row push bc push hl @@ -644,9 +644,9 @@ Function9673: ; 9673 push af ld a, $5 ld [rSVBK], a - ld hl, wMapPals - ld c, $8 -.asm_9683 + ld hl, UnknBGPals + ld c, 8 +.loop ld a, $ff rept 4 ld [hli], a @@ -656,7 +656,7 @@ rept 4 ld [hli], a endr dec c - jr nz, .asm_9683 + jr nz, .loop pop af ld [rSVBK], a pop hl @@ -676,7 +676,7 @@ Function9699: ; 9699 ; 96a4 Function96a4: ; 96a4 - ld hl, wMapPals + ld hl, UnknBGPals ld de, BGPals ld bc, $0080 ld a, $5 @@ -702,7 +702,7 @@ Function96b3: ; 96b3 .asm_96d0 hlcoord 0, 0, AttrMap - ld de, VBGMap0 + debgcoord 0, 0 ld b, $12 ld a, $1 ld [rVBK], a @@ -728,7 +728,7 @@ Function96b3: ; 96b3 ret ; 96f3 -Function96f3: ; 96f3 +Function96f3: ; 96f3 CGB layout $fc ld hl, wcd9b ld a, [wcda9] ld e, a @@ -752,14 +752,14 @@ Function96f3: ; 96f3 .asm_9712 lb bc, 2, 8 ld a, e - call Function9663 + call FillBoxCGB ret ; 971a Function971a: ; 971a ld hl, Palettes_b681 - ld de, Unkn2Pals + ld de, UnknOBPals ld bc, $0010 ld a, $5 call FarCopyWRAM @@ -792,7 +792,7 @@ Function974b: ; 974b and a jp nz, Function97f9 ld a, [wPlayerSpriteSetupFlags] - bit 2, a + bit 2, a ; transformed to male jr nz, .male ld a, [PlayerGender] and a @@ -843,7 +843,7 @@ Function977a: ; 977a dec c jr nz, .asm_9787 ld hl, Palettes_979c - ld de, Unkn2Pals + 8 * 2 + ld de, UnknOBPals + 8 * 2 ld bc, $0010 ld a, $5 call FarCopyWRAM @@ -1047,7 +1047,7 @@ Function9890:: ; 9890 push af ld a, $5 ld [rSVBK], a - ld hl, wMapPals + ld hl, UnknBGPals call Function98df ld hl, BGPals call Function98df @@ -1058,13 +1058,13 @@ Function9890:: ; 9890 Function98df: ; 98df ld c, $40 -.asm_98e1 +.loop ld a, $ff ld [hli], a ld a, $7f ld [hli], a dec c - jr nz, .asm_98e1 + jr nz, .loop ret ; 98eb @@ -1212,7 +1212,7 @@ Function99d8: ; 99d8 ld a, $e4 ld [rBGP], a ld de, VTiles1 - ld bc, $0140 + ld bc, 20 tiles call CopyData ld b, $12 .asm_99ea @@ -1293,7 +1293,7 @@ ClearBytes: ; 0x9a5b DrawDefaultTiles: ; 0x9a64 ; Draw 240 tiles (2/3 of the screen) from tiles in VRAM - ld hl, VBGMap0 ; BG Map 0 + hlbgcoord 0, 0 ; BG Map 0 ld de, 32 - 20 ld a, $80 ; starting tile ld c, 12 + 1 @@ -1367,6 +1367,7 @@ BlkPacket_9b86: ; 9a86 ; 9b96 ; 9b96 + PalPacket_9b96: db $51, $48, $00, $49, $00, $4a, $00, $4b, $00, $00, $00, $00, $00, $00, $00, $00 PalPacket_9ba6: db $51, $2b, $00, $24, $00, $20, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 PalPacket_9bb6: db $51, $41, $00, $42, $00, $43, $00, $44, $00, $00, $00, $00, $00, $00, $00, $00 @@ -1973,7 +1974,7 @@ endr push af ld a, $5 ld [rSVBK], a - ld hl, wMapPals + ld hl, UnknBGPals ld b, $8 .asm_b210 ld a, [de] @@ -2009,9 +2010,9 @@ endr ld bc, $40 ld hl, MapObjectPals call AddNTimes - ld de, Unkn2Pals + ld de, UnknOBPals ld bc, $40 - ld a, $5 ; BANK(Unkn2Pals) + ld a, $5 ; BANK(UnknOBPals) call FarCopyWRAM ld a, [wPermission] @@ -2036,7 +2037,7 @@ rept 4 inc hl endr .asm_b26d - ld de, wMapPals + 8 * 6 + 2 + ld de, UnknBGPals + 8 * 6 + 2 ld bc, 4 ld a, $5 call FarCopyWRAM diff --git a/engine/compose_mail.asm b/engine/compose_mail.asm new file mode 100755 index 000000000..f02f99326 --- /dev/null +++ b/engine/compose_mail.asm @@ -0,0 +1,498 @@ +_ComposeMailMessage: ; 11e75 (mail?) + ld hl, wc6d0 + ld [hl], e + inc hl + ld [hl], d + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + call .InitBlankMail + call DelayFrame + +.loop + call .DoMailEntry + jr nc, .loop + + pop af + ld [hInMenu], a + pop af + ld [hMapAnims], a + ret + +.InitBlankMail: ; 11e9a (4:5e9a) + call ClearBGPalettes + call DisableLCD + call Function11c51 + ld de, VTiles0 tile $00 + ld hl, .MailIcon + ld bc, 8 tiles + ld a, BANK(.MailIcon) + call FarCopyBytes + xor a + ld hl, wc300 + ld [hli], a + ld [hl], a + + ; init mail icon + depixel 3, 2 + ld a, SPRITE_ANIM_INDEX_00 + call _InitSpriteAnimStruct + + ld hl, $2 + add hl, bc + ld [hl], $0 + call .InitCharset + ld a, $e3 + ld [rLCDC], a + call .initwc6d3 + ld b, SCGB_08 + call GetSGBLayout + call WaitBGMap + call WaitTop + ld a, %11100100 + call DmgToCgbBGPals + ld a, %11100100 + call Functioncf8 + call Function11be0 + ld hl, wc6d0 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $10 + add hl, de + ld [hl], $4e + ret +; 11ef4 (4:5ef4) + +.MailIcon: ; 11ef4 +INCBIN "gfx/icon/mail2.2bpp" +; 11f74 + +.initwc6d3: ; 11f74 (4:5f74) + ld a, $21 + ld [wc6d3], a + ret +; 11f7a (4:5f7a) + +.Dummy: ; dummied out + db "メールを かいてね@" +; 11f84 + +.InitCharset: ; 11f84 (4:5f84) + call WaitTop + hlcoord 0, 0 + ld bc, 6 * SCREEN_WIDTH + ld a, $60 ; border + call ByteFill + hlcoord 0, 6 + ld bc, 12 * SCREEN_WIDTH + ld a, " " + call ByteFill + hlcoord 1, 1 + lb bc, 4, SCREEN_WIDTH - 2 + call ClearBox + ld de, MailEntry_Uppercase + +.PlaceMailCharset: ; 11fa9 (4:5fa9) + hlcoord 1, 7 + ld b, 6 +.next + ld c, SCREEN_WIDTH - 1 +.loop_ + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .loop_ + push de + ld de, SCREEN_WIDTH + 1 + add hl, de + pop de + dec b + jr nz, .next + ret + +.DoMailEntry: ; 11fc0 (4:5fc0) + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .exit_mail + call .DoJumptable + callba Function8cf62 + call .Update + call DelayFrame + and a + ret +.exit_mail + callab Function8cf53 + call ClearSprites + xor a + ld [hSCX], a + ld [hSCY], a + scf + ret + +.Update: ; 11feb (4:5feb) + xor a + ld [hBGMapMode], a + hlcoord 1, 1 + lb bc, 4, 18 + call ClearBox + ld hl, wc6d0 + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 2, 2 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret + +.DoJumptable: ; 12008 (4:6008) + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .Jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.Jumptable: ; 12017 (4:6017) + dw .init_blinking_cursor + dw .process_joypad + + +.init_blinking_cursor: ; 1201b (4:601b) + depixel 9, 2 + ld a, SPRITE_ANIM_INDEX_09 + call _InitSpriteAnimStruct + ld a, c + ld [wc6d5], a + ld a, b + ld [wc6d6], a + ld hl, $1 + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + ld hl, wJumptableIndex + inc [hl] + ret + +.process_joypad: ; 1203a (4:603a) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and A_BUTTON + jr nz, .a + ld a, [hl] + and B_BUTTON + jr nz, .b + ld a, [hl] + and START + jr nz, .start + ld a, [hl] + and SELECT + jr nz, .select + ret + +.a + call Function12185 + cp $1 + jr z, .select + cp $2 + jr z, .b + cp $3 + jr z, .finished + call Function11c11 + call Function121ac + jr c, .start + ld hl, wc6d2 + ld a, [hl] + cp $10 + ret nz + inc [hl] + call Function11bd0 + ld [hl], $f2 + dec hl + ld [hl], $4e + ret + +.start + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $c + add hl, bc + ld [hl], $9 + ld hl, $d + add hl, bc + ld [hl], $5 + ret + +.b + call Function11bbc + ld hl, wc6d2 + ld a, [hl] + cp $10 + ret nz + dec [hl] + call Function11bd0 + ld [hl], $f2 + inc hl + ld [hl], $4e + ret + +.finished + call Function11bf7 + ld hl, wJumptableIndex + set 7, [hl] + ret + +.select + ld hl, wcf64 + ld a, [hl] + xor $1 + ld [hl], a + jr nz, .switch_to_lowercase + ld de, MailEntry_Uppercase + call .PlaceMailCharset + ret +.switch_to_lowercase + ld de, MailEntry_Lowercase + call .PlaceMailCharset + ret + +Function120c1: ; 120c1 (4:60c1) + call Function1210c + ld hl, SpriteAnim1Sprite0d - SpriteAnim1 + add hl, bc + ld a, [hl] + ld e, a + swap e + ld hl, SpriteAnim1YOffset - SpriteAnim1 + add hl, bc + ld [hl], e + cp $5 + ld de, Unknown_120f8 + ld a, $0 + jr nz, .asm_120df + ld de, Unknown_12102 + ld a, $1 +.asm_120df + ld hl, SpriteAnim1Sprite0e - SpriteAnim1 + add hl, bc + add [hl] + ld hl, SpriteAnim1Sprite01 - SpriteAnim1 + add hl, bc + ld [hl], a + ld hl, SpriteAnim1Sprite0c - SpriteAnim1 + add hl, bc + ld l, [hl] + ld h, SpriteAnim1Index - SpriteAnim1 + add hl, de + ld a, [hl] + ld hl, SpriteAnim1XOffset - SpriteAnim1 + add hl, bc + ld [hl], a + ret +; 120f8 (4:60f8) + +Unknown_120f8: ; 120f8 + db $00, $10, $20, $30, $40, $50, $60, $70, $80, $90 +Unknown_12102: ; 12102 + db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60 +; 1210c + +Function1210c: ; 1210c (4:610c) + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] + and D_RIGHT + jr nz, .right + ret +.right + call Function1218b + and a + jr nz, .asm_12138 + ld hl, $c + add hl, bc + ld a, [hl] + cp $9 + jr nc, .asm_12135 + inc [hl] + ret +.asm_12135 + ld [hl], $0 + ret +.asm_12138 + cp $3 + jr nz, .asm_1213d + xor a +.asm_1213d + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.left + call Function1218b + and a + jr nz, .asm_12159 + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_12156 + dec [hl] + ret +.asm_12156 + ld [hl], $9 + ret +.asm_12159 + cp $1 + jr nz, .asm_1215f + ld a, $4 +.asm_1215f +rept 2 + dec a +endr + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.down + ld hl, $d + add hl, bc + ld a, [hl] + cp $5 + jr nc, .asm_12175 + inc [hl] + ret +.asm_12175 + ld [hl], $0 + ret +.up + ld hl, $d + add hl, bc + ld a, [hl] + and a + jr z, .asm_12182 + dec [hl] + ret +.asm_12182 + ld [hl], $5 + ret + +Function12185: ; 12185 (4:6185) + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + +Function1218b: ; 1218b (4:618b) + ld hl, $d + add hl, bc + ld a, [hl] + cp $5 + jr nz, .asm_121aa + ld hl, $c + add hl, bc + ld a, [hl] + cp $3 + jr c, .asm_121a4 + cp $6 + jr c, .asm_121a7 + ld a, $3 + ret +.asm_121a4 + ld a, $1 + ret +.asm_121a7 + ld a, $2 + ret +.asm_121aa + xor a + ret + +Function121ac: ; 121ac (4:61ac) + ld a, [wc6d7] + jp Function11b17 +; 121b2 (4:61b2) + +Function121b2: ; unreferenced + ld a, [wc6d2] + and a + ret z + cp $11 + jr nz, .asm_121c3 + push hl + ld hl, wc6d2 +rept 2 + dec [hl] +endr + jr .asm_121c8 + +.asm_121c3 + push hl + ld hl, wc6d2 + dec [hl] + +.asm_121c8 + call Function11bd0 + ld c, [hl] + pop hl +.asm_121cd + ld a, [hli] + cp $ff + jp z, Function11b27 + cp c + jr z, .asm_121d9 + inc hl + jr .asm_121cd + +.asm_121d9 + ld a, [hl] + jp Function11b23 +; 121dd + +MailEntry_Uppercase: ; 122dd + db "A B C D E F G H I J" + db "K L M N O P Q R S T" + db "U V W X Y Z , ? !" + db "1 2 3 4 5 6 7 8 9 0" + db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×" + db "lower DEL END " +; 1224f + +MailEntry_Lowercase: ; 1224f + db "a b c d e f g h i j" + db "k l m n o p q r s t" + db "u v w x y z . - /" + db "'d 'l 'm 'r 's 't 'v & ( )" + db "<``> <''> [ ] ' : ; " + db "UPPER DEL END " +; 122c1 diff --git a/engine/credits.asm b/engine/credits.asm index 6b35fbe6a..6e2bef12d 100644 --- a/engine/credits.asm +++ b/engine/credits.asm @@ -637,10 +637,10 @@ GetCreditsPalette: ; 109b2c push af push hl - add wMapPals % $100 + add UnknBGPals % $100 ld e, a ld a, 0 - adc wMapPals / $100 + adc UnknBGPals / $100 ld d, a ld bc, 24 call CopyBytes diff --git a/engine/crystal_intro.asm b/engine/crystal_intro.asm new file mode 100755 index 000000000..69a068ff9 --- /dev/null +++ b/engine/crystal_intro.asm @@ -0,0 +1,2531 @@ +Functione455c: ; e455c + hlcoord 1, 1 + ld de, SCREEN_WIDTH + ld c, $10 +.asm_e4564 + ld [hl], $7f + add hl, de + dec c + jr nz, .asm_e4564 + hlcoord 1, 2 + ld bc, $28 + ld a, [wJumptableIndex] + call AddNTimes + ld [hl], $ed + ret +; e4579 + + +Functione4579: ; e4579 + ld de, MUSIC_NONE + call PlayMusic + call ClearBGPalettes + call ClearTileMap + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + xor a + ld [hBGMapAddress], a + ld [hJoyDown], a + ld [hSCX], a + ld [hSCY], a + ld a, $90 + ld [hWY], a + call WaitBGMap + ld b, SCGB_19 + call GetSGBLayout + call SetPalettes + ld c, 10 + call DelayFrames + callab Copyright + call WaitBGMap + ld c, 100 + call DelayFrames + call ClearTileMap + callba GBCOnlyScreen + call Functione45e8 +.joy_loop + call JoyTextDelay + ld a, [hJoyLast] + and BUTTONS + jr nz, .pressed_button + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finish + call PlaceGameFreakPresents + callba Function8cf69 + call DelayFrame + jr .joy_loop + +.pressed_button + call Functione465e + scf + ret + +.finish + call Functione465e + and a + ret +; e45e8 + +Functione45e8: ; e45e8 + ld de, GameFreakLogo + ld hl, VTiles2 + lb bc, BANK(GameFreakLogo), $1c + call Get1bpp + + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + ld hl, IntroLogoGFX + ld de, w6_d000 + ld a, BANK(IntroLogoGFX) + call FarDecompress + + ld hl, VTiles0 + ld de, w6_d000 + lb bc, 1, 8 tiles + call Request2bpp + + ld hl, VTiles1 + ld de, w6_d000 + $80 tiles + lb bc, 1, 8 tiles + call Request2bpp + + pop af + ld [rSVBK], a + + callba Function8cf53 + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_03 + call _InitSpriteAnimStruct + ld hl, $7 + add hl, bc + ld [hl], $a0 + ld hl, $c + add hl, bc + ld [hl], $60 + ld hl, $d + add hl, bc + ld [hl], $30 + xor a + ld [wJumptableIndex], a + ld [wcf64], a + ld [wcf65], a + ld [hSCX], a + ld [hSCY], a + ld a, $1 + ld [hBGMapMode], a + ld a, $90 + ld [hWY], a + ld de, $e4e4 + call DmgToCgbObjPals + ret +; e465e + +Functione465e: ; e465e + callba Function8cf53 + call ClearTileMap + call ClearSprites + ld c, 16 + call DelayFrames + ret +; e4670 + +PlaceGameFreakPresents: ; e4670 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e467f + +.jumptable: ; e467f + dw PlaceGameFreakPresents_0 + dw PlaceGameFreakPresents_1 + dw PlaceGameFreakPresents_2 + dw PlaceGameFreakPresents_3 +; e4687 + +PlaceGameFreakPresents_AdvanceIndex: ; e4687 + ld hl, wJumptableIndex + inc [hl] + ret +; e468c + +PlaceGameFreakPresents_0: ; e468c + ret +; e468d + +PlaceGameFreakPresents_1: ; e468d + ld hl, wcf65 + ld a, [hl] + cp $20 + jr nc, .PlaceGameFreak + inc [hl] + ret + +.PlaceGameFreak + ld [hl], 0 + ld hl, .GAME_FREAK + decoord 5, 10 + ld bc, .end - .GAME_FREAK + call CopyBytes + call PlaceGameFreakPresents_AdvanceIndex + ld de, SFX_GAME_FREAK_PRESENTS + call PlaySFX + ret +; e46af + +.GAME_FREAK + ; G A M E _ F R E A K + db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6 +.end + db "@" +; e46ba + +PlaceGameFreakPresents_2: ; e46ba + ld hl, wcf65 + ld a, [hl] + cp $40 + jr nc, .place_presents + inc [hl] + ret + +.place_presents + ld [hl], 0 + ld hl, .presents + decoord 7,11 + ld bc, .end - .presents + call CopyBytes + call PlaceGameFreakPresents_AdvanceIndex + ret +; e46d6 + +.presents + db 7, 8, 9, 10, 11, 12 +.end + db "@" +; e46dd + +PlaceGameFreakPresents_3: ; e46dd + ld hl, wcf65 + ld a, [hl] + cp $80 + jr nc, .finish + inc [hl] + ret + +.finish + ld hl, wJumptableIndex + set 7, [hl] + ret +; e46ed + + + +GameFreakLogoJumper: ; e46ed (39:46ed) + ld hl, $b + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, GameFreakLogoScenes +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +GameFreakLogoScenes: ; e46fd (39:46fd) + dw GameFreakLogoScene1 + dw GameFreakLogoScene2 + dw GameFreakLogoScene3 + dw GameFreakLogoScene4 + dw GameFreakLogoScene5 + + +GameFreakLogoScene1: ; e4707 (39:4707) + ld hl, $b + add hl, bc + inc [hl] + ret + +GameFreakLogoScene2: ; e470d (39:470d) + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_e4747 + ld d, a + ld hl, $d + add hl, bc + ld a, [hl] + and $3f + cp $20 + jr nc, .asm_e4723 + add $20 +.asm_e4723 + ld e, a + callba Functionce765 + ld hl, $7 + add hl, bc + ld [hl], e + ld hl, $d + add hl, bc + ld a, [hl] + dec [hl] + and $1f + ret nz + ld hl, $c + add hl, bc + ld a, [hl] + sub $30 + ld [hl], a + ld de, SFX_DITTO_BOUNCE + call PlaySFX + ret +.asm_e4747 + ld hl, $b + add hl, bc + inc [hl] + ld hl, $d + add hl, bc + ld [hl], $0 + ld de, SFX_DITTO_POP_UP + call PlaySFX + ret + +GameFreakLogoScene3: ; e4759 (39:4759) + ld hl, $d + add hl, bc + ld a, [hl] + cp $20 + jr nc, .asm_e4764 + inc [hl] + ret +.asm_e4764 + ld hl, $b + add hl, bc + inc [hl] + ld hl, $d + add hl, bc + ld [hl], $0 + ld de, SFX_DITTO_TRANSFORM + call PlaySFX + ret + +GameFreakLogoScene4: ; e4776 (39:4776) + ld hl, $d + add hl, bc + ld a, [hl] + cp $40 + jr z, .asm_e47a3 + inc [hl] + srl a + srl a + ld e, a + ld d, $0 + ld hl, GameFreakLogoPalettes +rept 2 + add hl, de +endr + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld a, [hli] + ld [OBPals + 12], a + ld a, [hli] + ld [OBPals + 13], a + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +.asm_e47a3 + ld hl, $b + add hl, bc + inc [hl] + call PlaceGameFreakPresents_AdvanceIndex + +GameFreakLogoScene5: ; e47ab (39:47ab) + ret +; e47ac (39:47ac) + +GameFreakLogoPalettes: ; e47ac +; Ditto's color as it turns into the Game Freak logo. +; Fade from pink to orange. +; One color per step. + RGB 23, 12, 28 + RGB 23, 12, 27 + RGB 23, 13, 26 + RGB 23, 13, 24 + RGB 24, 14, 22 + RGB 24, 14, 20 + RGB 24, 15, 18 + RGB 24, 15, 16 + RGB 25, 16, 14 + RGB 25, 16, 12 + RGB 25, 17, 10 + RGB 25, 17, 08 + RGB 26, 18, 06 + RGB 26, 18, 04 + RGB 26, 19, 02 + RGB 26, 19, 00 +;' e47cc + +GameFreakLogo: ; e47cc +INCBIN "gfx/splash/logo.1bpp" +; e48ac + +CrystalIntro: ; e48ac + ld a, [rSVBK] + push af + ld a, 5 + ld [rSVBK], a + ld a, [hInMenu] + push af + ld a, [hVBlank] + push af + call Functione4901 +.loop: ; e48bc + call JoyTextDelay + ld a, [hJoyLast] + and BUTTONS + jr nz, .ShutOffMusic + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done + call IntroSceneJumper + callba Function8cf69 + call DelayFrame + jp .loop + +.ShutOffMusic + ld de, MUSIC_NONE + call PlayMusic + +.done + call ClearBGPalettes + call ClearSprites + call ClearTileMap + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + pop af + ld [hVBlank], a + pop af + ld [hInMenu], a + pop af + ld [rSVBK], a + ret +; e4901 + +Functione4901: ; e4901 + xor a + ld [hVBlank], a + ld a, $1 + ld [hInMenu], a + xor a + ld [hMapAnims], a + ld [wJumptableIndex], a + ret +; e490f + +IntroSceneJumper: ; e490f + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, IntroScenes +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e491e + + +IntroScenes: ; e491e (39:491e) + dw IntroScene1 + dw IntroScene2 + dw IntroScene3 + dw IntroScene4 + dw IntroScene5 + dw IntroScene6 + dw IntroScene7 + dw IntroScene8 + dw IntroScene9 + dw IntroScene10 + dw IntroScene11 + dw IntroScene12 + dw IntroScene13 + dw IntroScene14 + dw IntroScene15 + dw IntroScene16 + dw IntroScene17 + dw IntroScene18 + dw IntroScene19 + dw IntroScene20 + dw IntroScene21 + dw IntroScene22 + dw IntroScene23 + dw IntroScene24 + dw IntroScene25 + dw IntroScene26 + dw IntroScene27 + dw IntroScene28 + + +NextIntroScene: ; e4956 (39:4956) + ld hl, wJumptableIndex + inc [hl] + ret + +IntroScene1: ; e495b (39:495b) +; Setup the next scene. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap001 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroUnownsGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroPulseGFX + ld de, VTiles0 tile $00 + call Functione54c2 + ld hl, IntroTilemap002 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_365ad + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_365ad + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + xor a + ld [wIntroSceneFrameCounter], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene2: ; e49d6 (39:49d6) +; First Unown (A) fades in, pulses, then fades out. + ld hl, wIntroSceneFrameCounter + ld a, [hl] + inc [hl] + cp $80 + jr nc, .endscene + cp $60 + jr nz, .DontPlaySound + push af + ld de, $5858 + call Functione51dc + ld de, SFX_INTRO_UNOWN_1 + call PlaySFX + pop af +.DontPlaySound + ld [wcf65], a + xor a + call Functione5223 + ret +.endscene + call NextIntroScene + ret + +IntroScene3: ; e49fd (39:49fd) +; More setup. Transition to the outdoor scene. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap003 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroBackgroundGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroTilemap004 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e5edd + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e5edd + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + call Functione5516 + call Functione549e + xor a + ld [wIntroSceneFrameCounter], a + call NextIntroScene + ret + +IntroScene4: ; e4a69 (39:4a69) +; Scroll the outdoor panorama for a bit. + call Functione552f + ld hl, wIntroSceneFrameCounter + ld a, [hl] + cp $80 + jr z, .endscene + inc [hl] + ret +.endscene + call NextIntroScene + ret + +IntroScene5: ; e4a7a (39:4a7a) +; Go back to the Unown. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld [hLCDStatCustom], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap005 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroUnownsGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroPulseGFX + ld de, VTiles0 tile $00 + call Functione54c2 + ld hl, IntroTilemap006 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_365ad + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_365ad + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene6: ; e4af7 (39:4af7) +; Two more Unown (I, H) fade in. + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $80 + jr nc, .endscene + cp $60 + jr z, .SecondUnown + cp $40 + jr nc, .StopUnown + cp $20 + jr z, .FirstUnown + jr .NoUnown +.FirstUnown + push af + ld de, $3878 + call Functione51dc + ld de, SFX_INTRO_UNOWN_2 + call PlaySFX + pop af +.NoUnown + ld [wcf65], a + xor a + call Functione5223 + ret +.SecondUnown + push af + ld de, $7030 + call Functione51dc + ld de, SFX_INTRO_UNOWN_1 + call PlaySFX + pop af +.StopUnown + ld [wcf65], a + ld a, $1 + call Functione5223 + ret +.endscene + call NextIntroScene + ret + +IntroScene7: ; e4b3f (39:4b3f) +; Back to the outdoor scene. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap003 + debgcoord 0, 0 + call Functione54fa + ld hl, IntroPichuWooperGFX + ld de, VTiles0 tile $00 + call Functione54c2 + ld a, $0 + ld [rVBK], a + ld hl, IntroSuicuneRunGFX + ld de, VTiles0 tile $00 + call Functione54de + ld hl, IntroBackgroundGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroTilemap004 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e5edd + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e5edd + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + call Functione5516 + callba Function8cf53 + depixel 13, 27, 4, 0 + ld a, SPRITE_ANIM_INDEX_26 + call _InitSpriteAnimStruct + ld a, $f0 + ld [wc3c0], a + call Functione549e + xor a + ld [wIntroSceneFrameCounter], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene8: ; e4bd3 (39:4bd3) +; Scroll the scene, then show Suicune running across the screen. + ld hl, wIntroSceneFrameCounter + ld a, [hl] + inc [hl] + cp $40 + jr z, .asm_e4be2 + jr nc, .asm_e4be8 + call Functione552f + ret +.asm_e4be2 + ld de, SFX_INTRO_SUICUNE_3 + call PlaySFX +.asm_e4be8 + ld a, [wc3c0] + and a + jr z, .asm_e4bf4 + sub $8 + ld [wc3c0], a + ret +.asm_e4bf4 + ld de, SFX_INTRO_SUICUNE_2 + call PlaySFX + callba Function8d03d + call NextIntroScene + ret + +IntroScene9: ; e4c04 (39:4c04) +; Set up the next scene (same bg). + xor a + ld [hLCDStatCustom], a + call ClearSprites + hlcoord 0, 0, AttrMap + ld bc, $f0 + ld a, $1 + call ByteFill + ld bc, $3c + ld a, $2 + call ByteFill + ld bc, $3c + ld a, $3 + call ByteFill + ld a, $2 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + ld a, $c + ld [hBGMapAddress], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ld [hBGMapMode], a + ld [hBGMapAddress], a + ld [wc3c0], a + xor a + ld [wcf64], a + call NextIntroScene + ret + +IntroScene10: ; e4c4f (39:4c4f) +; Wooper and Pichu enter. + call Functione546d + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $c0 + jr z, .done + cp $20 + jr z, .wooper + cp $40 + jr z, .pichu + ret + +.pichu + depixel 21, 16, 1, 0 + ld a, SPRITE_ANIM_INDEX_27 + call _InitSpriteAnimStruct + ld de, SFX_INTRO_PICHU + call PlaySFX + ret + +.wooper + depixel 22, 6 + ld a, SPRITE_ANIM_INDEX_28 + call _InitSpriteAnimStruct + ld de, SFX_INTRO_PICHU + call PlaySFX + ret +.done + call NextIntroScene + ret + +IntroScene11: ; e4c86 (39:4c86) +; Back to Unown again. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld [hLCDStatCustom], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap007 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroUnownsGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroTilemap008 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_365ad + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_365ad + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + xor a + ld [wIntroSceneFrameCounter], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene12: ; e4cfa (39:4cfa) +; Even more Unown. + call Functione4d36 + ld hl, wIntroSceneFrameCounter + ld a, [hl] + inc [hl] + cp $c0 + jr nc, .asm_e4d32 + cp $80 + jr nc, .asm_e4d1d + ld c, a + and $1f + sla a + ld [wcf65], a + ld a, c + and $e0 + srl a + swap a + call Functione5223 + ret +.asm_e4d1d + ld c, a + and $f + sla a + sla a + ld [wcf65], a + ld a, c + and $70 + or $40 + swap a + call Functione5223 + ret +.asm_e4d32 + call NextIntroScene + ret + +Functione4d36: ; e4d36 (39:4d36) + ld a, [wIntroSceneFrameCounter] + ld c, a + ld hl, .UnownSounds +.loop + ld a, [hli] + cp -1 + ret z + cp c + jr z, .playsound +rept 2 + inc hl +endr + jr .loop +.playsound + ld a, [hli] + ld d, [hl] + ld e, a + push de + call SFXChannelsOff + pop de + call PlaySFX + ret +; e4d54 (39:4d54) + +.UnownSounds: ; e4d54 + dbw $00, SFX_INTRO_UNOWN_3 + dbw $20, SFX_INTRO_UNOWN_2 + dbw $40, SFX_INTRO_UNOWN_1 + dbw $60, SFX_INTRO_UNOWN_2 + dbw $80, SFX_INTRO_UNOWN_3 + dbw $90, SFX_INTRO_UNOWN_2 + dbw $a0, SFX_INTRO_UNOWN_1 + dbw $b0, SFX_INTRO_UNOWN_2 + db $ff +; e4d6d + +IntroScene13: ; e4d6d (39:4d6d) +; Switch scenes again. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap003 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroSuicuneRunGFX + ld de, VTiles0 tile $00 + call Functione54de + ld hl, IntroBackgroundGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroTilemap004 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e5edd + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e5edd + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + depixel 13, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_26 + call _InitSpriteAnimStruct + ld de, MUSIC_CRYSTAL_OPENING + call PlayMusic + xor a + ld [wc3c0], a + call Functione549e + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene14: ; e4dfa (39:4dfa) +; Suicune runs then jumps. + ld a, [hSCX] + sub 10 + ld [hSCX], a + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $80 + jr z, .done + cp $60 + jr z, .jump + jr nc, .asm_e4e1a + cp $40 + jr nc, .asm_e4e33 + ret + +.jump + ld de, SFX_INTRO_SUICUNE_4 + call PlaySFX + +.asm_e4e1a + ld a, $1 + ld [wcf65], a + ld a, [wc3c0] + cp $88 + jr c, .asm_e4e2c + sub $8 + ld [wc3c0], a + ret + +.asm_e4e2c + callba Function8d03d + ret + +.asm_e4e33 + ld a, [wc3c0] + sub $2 + ld [wc3c0], a + ret + +.done + call NextIntroScene + ret + +IntroScene15: ; e4e40 (39:4e40) +; Transition to a new scene. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap009 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroSuicuneJumpGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroUnownBackGFX + ld de, VTiles0 tile $00 + call Functione54c2 + ld de, GFX_e7a5d + ld hl, VTiles1 tile $00 + lb bc, BANK(GFX_e7a5d), 1 + call Request2bpp + ld hl, IntroTilemap010 + debgcoord 0, 0 + call Functione54fa + call Functione541b + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e77dd + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e77dd + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld a, $90 + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + depixel 8, 5 + ld a, SPRITE_ANIM_INDEX_2A + call _InitSpriteAnimStruct + depixel 12, 0 + ld a, SPRITE_ANIM_INDEX_2B + call _InitSpriteAnimStruct + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene16: ; e4edc (39:4edc) +; Suicune shows its face. An Unown appears in front. + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $80 + jr nc, .done + call Functione5441 + ld a, [hSCY] + and a + ret z + add 8 + ld [hSCY], a + ret +.done + call NextIntroScene + ret + +IntroScene17: ; e4ef5 (39:4ef5) +; ... + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap011 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroSuicuneCloseGFX + ld de, VTiles1 tile $00 + call Functione54de + ld hl, IntroTilemap012 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e6d6d + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e6d6d + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene18: ; e4f67 (39:4f67) +; Suicune close up. + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $60 + jr nc, .done + ld a, [hSCX] + cp $60 + ret z + add 8 + ld [hSCX], a + ret +.done + call NextIntroScene + ret + +IntroScene19: ; e4f7e (39:4f7e) +; More setup. + call Functione54a3 + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap013 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroSuicuneBackGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroUnownsGFX + ld de, VTiles1 tile $00 + call Functione54c2 + ld de, GFX_e7a5d + ld hl, VTiles1 tile $7f + lb bc, BANK(GFX_e7a5d), 1 + call Request2bpp + ld hl, IntroTilemap014 + debgcoord 0, 0 + call Functione54fa + call Functione541b + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e77dd + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e77dd + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld a, $d8 + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + ld hl, wc300 + xor a + ld [hli], a + ld [hl], $7f + call Functione549e + depixel 12, 0 + ld a, SPRITE_ANIM_INDEX_2B + call _InitSpriteAnimStruct + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene20: ; e5019 (39:5019) +; Suicune running away. A bunch of Unown appear. + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $98 + jr nc, .asm_e5059 + cp $58 + ret nc + cp $40 + jr nc, .asm_e5032 + cp $28 + ret nc + ld a, [hSCY] + inc a + ld [hSCY], a + ret + +.asm_e5032 + sub $18 + ld c, a + and $3 + cp $3 + ret nz + ld a, c + and $1c + srl a + srl a + ld [wcf65], a + xor a + call Functione5348 + ret +; e5049 (39:5049) + + ld a, c + and $1c + srl a + srl a + ld [wcf65], a + ld a, 1 + call Functione5348 + ret + +.asm_e5059 + call NextIntroScene + ret + +IntroScene21: ; e505d (39:505d) +; Suicune gets more distant and turns black. + call Functione5451 + ld c, 3 + call DelayFrames + xor a + ld [hBGMapMode], a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene22: ; e5072 (39:5072) + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $8 + jr nc, .done + ret +.done + callba Function8d03d + call NextIntroScene + ret + +IntroScene23: ; e5086 (39:5086) + xor a + ld [wcf64], a + call NextIntroScene + ret + +IntroScene24: ; e508e (39:508e) +; Fade to white. + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $20 + jr nc, .done + + ld c, a + and $3 + ret nz + ld a, c + and $1c + sla a + call Functione5172 + ret + +.done + ld a, $40 + ld [wcf64], a + call NextIntroScene + ret + +IntroScene25: ; e50ad (39:50ad) +; Wait around a bit. + ld a, [wcf64] + dec a + jr z, .done + ld [wcf64], a + ret +.done + call NextIntroScene + ret + +IntroScene26: ; e50bb (39:50bb) +; Load the final scene. + call ClearBGPalettes + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld a, $1 + ld [rVBK], a + ld hl, IntroTilemap015 + debgcoord 0, 0 + call Functione54fa + ld a, $0 + ld [rVBK], a + ld hl, IntroCrystalUnownsGFX + ld de, VTiles2 tile $00 + call Functione54c2 + ld hl, IntroTilemap017 + debgcoord 0, 0 + call Functione54fa + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_e679d + ld de, UnknBGPals + ld bc, $80 + call CopyBytes + ld hl, Palette_e679d + ld de, BGPals + ld bc, $80 + call CopyBytes + pop af + ld [rSVBK], a + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function8cf53 + call Functione549e + xor a + ld [wcf64], a + ld [wcf65], a + call NextIntroScene + ret + +IntroScene27: ; e512d (39:512d) +; Spell out C R Y S T A L with Unown. + ld hl, wcf65 + inc [hl] + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp $80 + jr nc, .done + + ld c, a + and $f + ld [wcf65], a + ld a, c + and $70 + swap a + call Functione539d + ret + +.done + call NextIntroScene + ld a, $80 + ld [wcf64], a + ret + +IntroScene28: ; e5152 (39:5152) +; Cut out when the music ends, and lead into the title screen. + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + cp $18 + jr z, .clear + cp $8 + ret nz + + ld de, SFX_UNKNOWN_CB + call PlaySFX + ret + +.clear + call ClearBGPalettes + ret + +.done + ld hl, wJumptableIndex + set 7, [hl] + ret + + +Functione5172: ; e5172 (39:5172) + ld hl, Unknown_e519c + add l + ld l, a + ld a, $0 + adc h + ld h, a + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld de, BGPals + ld b, $8 +.asm_e5187 + push hl + ld c, $8 +.asm_e518a + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_e518a + pop hl + dec b + jr nz, .asm_e5187 + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; e519c (39:519c) + +Unknown_e519c: ; e519c +; Fade to white. + RGB 24, 12, 09 + RGB 31, 31, 31 + RGB 12, 00, 31 + RGB 00, 00, 00 + + RGB 31, 19, 05 + RGB 31, 31, 31 + RGB 15, 05, 31 + RGB 07, 07, 07 + + RGB 31, 21, 09 + RGB 31, 31, 31 + RGB 18, 09, 31 + RGB 11, 11, 11 + + RGB 31, 23, 13 + RGB 31, 31, 31 + RGB 21, 13, 31 + RGB 15, 15, 15 + + RGB 31, 25, 17 + RGB 31, 31, 31 + RGB 25, 17, 31 + RGB 19, 19, 19 + + RGB 31, 27, 21 + RGB 31, 31, 31 + RGB 27, 21, 31 + RGB 23, 23, 23 + + RGB 31, 29, 25 + RGB 31, 31, 31 + RGB 29, 26, 31 + RGB 27, 27, 27 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 +; e51dc + +Functione51dc: ; e51dc (39:51dc) + push de + ld a, SPRITE_ANIM_INDEX_29 + call _InitSpriteAnimStruct + ld hl, $c + add hl, bc + ld [hl], $8 + ld a, $3c + call Function3b3c + pop de + + push de + ld a, SPRITE_ANIM_INDEX_29 + call _InitSpriteAnimStruct + ld hl, $c + add hl, bc + ld [hl], $18 + ld a, $3b + call Function3b3c + pop de + + push de + ld a, SPRITE_ANIM_INDEX_29 + call _InitSpriteAnimStruct + ld hl, $c + add hl, bc + ld [hl], $28 + ld a, $39 + call Function3b3c + pop de + + ld a, SPRITE_ANIM_INDEX_29 + call _InitSpriteAnimStruct + ld hl, $c + add hl, bc + ld [hl], $38 + ld a, $3a + call Function3b3c + ret + +Functione5223: ; e5223 (39:5223) +rept 3 + add a +endr + ld e, a + ld d, $0 + ld hl, BGPals + add hl, de +rept 2 + inc hl +endr + ld a, [wcf65] + and $3f + cp $1f + jr z, .asm_e523e + jr c, .asm_e523e + ld c, a + ld a, $3f + sub c +.asm_e523e + ld c, a + ld b, $0 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + push hl + push bc + ld hl, BGPals + ld bc, $40 + xor a + call ByteFill + pop bc + pop hl + push hl + ld hl, Unknown_e5288 +rept 2 + add hl, bc +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + ld a, e + ld [hli], a + ld a, d + ld [hli], a + push hl + ld hl, Unknown_e52c8 +rept 2 + add hl, bc +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + ld a, e + ld [hli], a + ld a, d + ld [hli], a + push hl + ld hl, Unknown_e5308 +rept 2 + add hl, bc +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + ld a, e + ld [hli], a + ld a, d + ld [hli], a + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; e5288 (39:5288) + +Unknown_e5288: ; e5288 +; Fade between black and white. +hue = 0 +rept 32 + RGB hue, hue, hue +hue = hue + 1 +endr +; e52c8 + +Unknown_e52c8: ; e52c8 +; Fade between black and light blue. +hue = 0 +rept 32 + RGB 0, hue / 2, hue +hue = hue + 1 +endr +; e5308 + +Unknown_e5308: ; e5308 +; Fade between black and blue. +hue = 0 +rept 32 + RGB 0, 0, hue +hue = hue + 1 +endr +; e5348 + +Functione5348: ; e5348 (39:5348) + and a + jr nz, .asm_e5350 + ld hl, Palette_e538d + jr .asm_e5353 +.asm_e5350 + ld hl, Palette_e5395 +.asm_e5353 + ld a, [wcf65] + and $7 +rept 3 + add a +endr + ld c, a + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + push bc + ld de, BGPals + ld a, c + add e + ld e, a + ld a, $0 + adc d + ld d, a + ld bc, $8 + call CopyBytes + pop bc + ld de, UnknBGPals + ld a, c + add e + ld e, a + ld a, $0 + adc d + ld d, a + ld bc, $8 + call CopyBytes + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; e538d (39:538d) + +Palette_e538d: ; e538d + RGB 24, 12, 09 + RGB 31, 31, 31 + RGB 12, 00, 31 + RGB 00, 00, 00 +; e5395 + +Palette_e5395: ; e5395 + RGB 24, 12, 09 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 +; e539d + +Functione539d: ; e539d (39:539d) +rept 3 + add a +endr + ld e, a + ld d, $0 + ld hl, BGPals + add hl, de +rept 4 + inc hl +endr + ld a, [wcf65] + add a + ld c, a + ld b, $0 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + push hl + ld hl, Palette_e53db + add hl, bc + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + ld a, e + ld [hli], a + ld a, d + ld [hli], a + push hl + ld hl, Palette_e53fb + add hl, bc + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + ld a, e + ld [hli], a + ld a, d + ld [hli], a + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; e53db (39:53db) + +Palette_e53db: ; e53db +hue = 31 +rept 8 + RGB hue, hue, hue +hue = hue + -1 + RGB hue, hue, hue +hue = hue + -2 +endr +; e53fb + +Palette_e53fb: ; e53fb +hue = 31 +rept 16 + RGB hue, hue, hue +hue = hue + -1 +endr +; e541b + +Functione541b: ; e541b (39:541b) + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, w6_d000 + decoord 0, 0 + ld b, SCREEN_HEIGHT +.asm_e542a + ld c, SCREEN_WIDTH +.asm_e542c + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_e542c + ld a, $c + add l + ld l, a + ld a, $0 + adc h + ld h, a + dec b + jr nz, .asm_e542a + pop af + ld [rSVBK], a + ret + +Functione5441: ; e5441 (39:5441) + ld a, [wcf64] + and $3 + jr z, Functione5451 + cp $3 + jr z, .asm_e544d + ret +.asm_e544d + xor a + ld [hBGMapMode], a + ret + +Functione5451: ; e5451 (39:5451) + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +.asm_e5457 + ld a, [hl] + and a + jr z, .asm_e5462 + cp $80 + jr nc, .asm_e5462 + xor $8 + ld [hl], a +.asm_e5462 + inc hl + dec bc + ld a, c + or b + jr nz, .asm_e5457 + ld a, $1 + ld [hBGMapMode], a + ret + +Functione546d: ; e546d (39:546d) + ld a, [wcf64] + cp $24 + ret nc + and $c + srl a + ld e, a + ld d, $0 + ld hl, Unknown_e5496 + add hl, de + ld a, [hli] + ld [Requested2bppSource], a + ld a, [hli] + ld [Requested2bppSource + 1], a + ld a, (VTiles2 tile $09) % $100 + ld [Requested2bppDest], a + ld a, (VTiles2 tile $09) / $100 + ld [Requested2bppDest + 1], a + ld a, $4 + ld [Requested2bpp], a + ret +; e5496 (39:5496) + +Unknown_e5496: ; e5496 + dw GFX_e799d + dw GFX_e79dd + dw GFX_e7a1d + dw GFX_e79dd +; e549e + +Functione549e: ; e549e (39:549e) + ld a, $1 + ld [hCGBPalUpdate], a + ret + +Functione54a3: ; e54a3 (39:54a3) + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, BGPals + ld bc, $80 + xor a + call ByteFill + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + call DelayFrame + call DelayFrame + ret + +Functione54c2: ; e54c2 (39:54c2) + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + push de + ld de, w6_d000 + call Decompress + pop hl + ld de, w6_d000 + ld bc, $180 + call Request2bpp + pop af + ld [rSVBK], a + ret + +Functione54de: ; e54de (39:54de) + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + push de + ld de, w6_d000 + call Decompress + pop hl + ld de, w6_d000 + ld bc, $1ff + call Request2bpp + pop af + ld [rSVBK], a + ret + +Functione54fa: ; e54fa (39:54fa) + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + push de + ld de, w6_d000 + call Decompress + pop hl + ld de, w6_d000 + ld bc, $140 + call Request2bpp + pop af + ld [rSVBK], a + ret + +Functione5516: ; e5516 (39:5516) + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, LYOverrides + ld bc, $90 + xor a + call ByteFill + pop af + ld [rSVBK], a + ld a, $43 + ld [hLCDStatCustom], a + ret + +Functione552f: ; e552f (39:552f) + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld a, [wcf64] + and $1 + jr z, .asm_e5548 + ld hl, LYOverrides + ld a, [hl] + inc a + ld bc, $5f + call ByteFill +.asm_e5548 + ld hl, LYOverrides + $5f + ld a, [hl] +rept 2 + inc a +endr + ld bc, $31 + call ByteFill + ld a, [LYOverrides + 0] + ld [hSCX], a + pop af + ld [rSVBK], a + ret + +IntroSuicuneRunGFX: ; e555d +INCBIN "gfx/intro/suicune_run.2bpp.lz" +; e592d + +IntroPichuWooperGFX: ; e592d +INCBIN "gfx/intro/pichu_wooper.2bpp.lz" +; e5c7d + +IntroBackgroundGFX: ; e5c7d +INCBIN "gfx/intro/background.2bpp.lz" +; e5e6d + +IntroTilemap004: ; e5e6d +INCBIN "gfx/intro/004.tilemap.lz" +; e5ecd + +IntroTilemap003: ; e5ecd +INCBIN "gfx/intro/003.tilemap.lz" +; e5edd + +Palette_e5edd: ; e5edd + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 0, 4, 5 + RGB 1, 8, 5 + RGB 4, 12, 9 + RGB 24, 12, 9 + RGB 0, 4, 5 + RGB 9, 6, 8 + RGB 8, 16, 5 + RGB 5, 10, 4 + RGB 31, 31, 31 + RGB 9, 6, 8 + RGB 18, 9, 9 + RGB 13, 8, 9 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 2, 5, 22 + RGB 1, 5, 12 + RGB 31, 31, 31 + RGB 31, 10, 25 + RGB 31, 21, 0 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 21, 31 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + +IntroUnownsGFX: ; e5f5d +INCBIN "gfx/intro/unowns.2bpp.lz" +; e634d + +IntroPulseGFX: ; e634d +INCBIN "gfx/intro/pulse.2bpp.lz" +; e63dd + +IntroTilemap002: ; e63dd +INCBIN "gfx/intro/002.tilemap.lz" +; e641d + +IntroTilemap001: ; e641d +INCBIN "gfx/intro/001.tilemap.lz" +; e642d + +IntroTilemap006: ; e642d +INCBIN "gfx/intro/006.tilemap.lz" +; e647d + +IntroTilemap005: ; e647d +INCBIN "gfx/intro/005.tilemap.lz" +; e649d + +IntroTilemap008: ; e649d +INCBIN "gfx/intro/008.tilemap.lz" +; e655d + +IntroTilemap007: ; e655d +INCBIN "gfx/intro/007.tilemap.lz" +; e65ad + +Palette_365ad: ; e65ad + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 10, 0, 10 + RGB 19, 0, 19 + RGB 31, 0, 31 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + +IntroCrystalUnownsGFX: ; e662d +INCBIN "gfx/intro/crystal_unowns.2bpp.lz" +; e672d + +IntroTilemap017: ; e672d +INCBIN "gfx/intro/017.tilemap.lz" +; e676d + +IntroTilemap015: ; e676d +INCBIN "gfx/intro/015.tilemap.lz" +; e679d + +Palette_e679d: ; e679d + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + +IntroSuicuneCloseGFX: ; e681d +INCBIN "gfx/intro/suicune_close.2bpp.lz" +; e6c3d + +IntroTilemap012: ; e6c3d +INCBIN "gfx/intro/012.tilemap.lz" +; e6d0d + +IntroTilemap011: ; e6d0d +INCBIN "gfx/intro/011.tilemap.lz" +; e6d6d + +Palette_e6d6d: ; e6d6d + RGB 24, 12, 9 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 24, 12, 9 + RGB 31, 31, 31 + RGB 8, 9, 31 + RGB 0, 0, 0 + RGB 24, 12, 9 + RGB 12, 20, 31 + RGB 19, 8, 31 + RGB 0, 0, 0 + RGB 12, 20, 31 + RGB 8, 9, 31 + RGB 19, 8, 31 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 12, 20, 31 + RGB 8, 9, 31 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + +IntroSuicuneJumpGFX: ; e6ded +INCBIN "gfx/intro/suicune_jump.2bpp.lz" +; e72ad + +IntroSuicuneBackGFX: ; e72ad +INCBIN "gfx/intro/suicune_back.2bpp.lz" +; e764d + +IntroTilemap010: ; e764d +INCBIN "gfx/intro/010.tilemap.lz" +; e76ad + +IntroTilemap009: ; e76ad +INCBIN "gfx/intro/009.tilemap.lz" +; e76bd + +IntroTilemap014: ; e76bd +INCBIN "gfx/intro/014.tilemap.lz" +; e778d + +IntroTilemap013: ; e778d +INCBIN "gfx/intro/013.tilemap.lz" +; e77dd + +Palette_e77dd: ; e77dd + RGB 24, 12, 9 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 24, 12, 9 + RGB 31, 31, 31 + RGB 8, 9, 31 + RGB 0, 0, 0 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 24, 12, 9 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 12, 0, 31 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 21, 9, 0 + RGB 21, 9, 0 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 11, 11, 11 + RGB 0, 0, 0 + +IntroUnownBackGFX: ; e785d +INCBIN "gfx/intro/unown_back.2bpp.lz" +; e799d + +GFX_e799d: ; e799d +INCBIN "gfx/unknown/0e799d.2bpp" +GFX_e79dd: ; e79dd +INCBIN "gfx/unknown/0e79dd.2bpp" +GFX_e7a1d: ; e7a1d +INCBIN "gfx/unknown/0e7a1d.2bpp" + +GFX_e7a5d: ; e7a5d +INCBIN "gfx/unknown/0e7a5d.2bpp" + + diff --git a/engine/debug.asm b/engine/debug.asm new file mode 100755 index 000000000..0d2720990 --- /dev/null +++ b/engine/debug.asm @@ -0,0 +1,1517 @@ +ColorTest: ; 818ac +; A debug menu to test monster and trainer palettes at runtime. + + ld a, [hCGB] + and a + jr nz, .asm_818b5 + ld a, [hSGB] + and a + ret z + +.asm_818b5 + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + call DisableLCD + call Function81948 + call Function8197c + call Function819a7 + call Function818f4 + call EnableLCD + ld de, MUSIC_NONE + call PlayMusic + xor a + ld [wJumptableIndex], a + ld [wcf66], a + ld [wd003], a +.asm_818de + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_818f0 + call Function81a74 + call Function81f5e + call DelayFrame + jr .asm_818de + +.asm_818f0 + pop af + ld [hInMenu], a + ret +; 818f4 + +Function818f4: ; 818f4 + ld a, [wd002] + and a + jr nz, Function81911 + ld hl, PokemonPalettes + +Function818fd: ; 818fd + ld de, OverworldMap + ld c, NUM_POKEMON + 1 +.asm_81902 + push bc + push hl + call Function81928 + pop hl + ld bc, 8 + add hl, bc + pop bc + dec c + jr nz, .asm_81902 + ret + +Function81911: ; 81911 + ld hl, TrainerPalettes + ld de, OverworldMap + ld c, NUM_TRAINER_CLASSES +.asm_81919 + push bc + push hl + call Function81928 + pop hl + ld bc, 4 + add hl, bc + pop bc + dec c + jr nz, .asm_81919 + ret +; 81928 + +Function81928: ; 81928 + ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) + call GetFarByte + ld [de], a + inc de + inc hl + ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) + call GetFarByte + ld [de], a + inc de + inc hl + ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) + call GetFarByte + ld [de], a + inc de + inc hl + ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) + call GetFarByte + ld [de], a + inc de + ret +; 81948 + +Function81948: ; 81948 + ld a, $1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, sScratch - VTiles0 + xor a + call ByteFill + ld a, $0 + ld [rVBK], a + ld hl, VTiles0 + ld bc, sScratch - VTiles0 + xor a + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + call ClearSprites + ret +; 8197c + +Function8197c: ; 8197c + ld hl, DebugColorTestGFX + $10 + ld de, VTiles2 tile $6a + ld bc, $160 + call CopyBytes + ld hl, DebugColorTestGFX + ld de, VTiles0 + ld bc, $10 + call CopyBytes + call LoadStandardFont + ld hl, VTiles1 + lb bc, 8, 0 +.asm_8199d + ld a, [hl] + xor $ff + ld [hli], a + dec bc + ld a, c + or b + jr nz, .asm_8199d + ret +; 819a7 + +Function819a7: ; 819a7 + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, Palette_819f4 + ld de, BGPals + ld bc, $80 + call CopyBytes + ld a, $80 + ld [rBGPI], a + ld hl, Palette_819f4 + ld c, $40 + xor a +.asm_819c8 + ld [rBGPD], a + dec c + jr nz, .asm_819c8 + ld a, $80 + ld [rOBPI], a + ld hl, Palette_81a34 + ld c, $40 +.asm_819d6 + ld a, [hli] + ld [rOBPD], a + dec c + jr nz, .asm_819d6 + ld a, $94 + ld [wc608], a + ld a, $52 + ld [wc608 + 1], a + ld a, $4a + ld [wc608 + 2], a + ld a, $29 + ld [wc608 + 3], a + pop af + ld [rSVBK], a + ret +; 819f4 + +Palette_819f4: ; 819f4 + ; white + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + ; red + RGB 31, 00, 00 + RGB 31, 00, 00 + RGB 31, 00, 00 + RGB 00, 00, 00 + + ; green + RGB 00, 31, 00 + RGB 00, 31, 00 + RGB 00, 31, 00 + RGB 00, 00, 00 + + ; blue + RGB 00, 00, 31 + RGB 00, 00, 31 + RGB 00, 00, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + +Palette_81a34: ; 81a34 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 00, 00, 00 + + ; red + RGB 31, 31, 31 + RGB 31, 00, 00 + RGB 31, 00, 00 + RGB 00, 00, 00 + + ; green + RGB 31, 31, 31 + RGB 00, 31, 00 + RGB 00, 31, 00 + RGB 00, 00, 00 + + ; blue + RGB 31, 31, 31 + RGB 00, 00, 31 + RGB 00, 00, 31 + RGB 00, 00, 00 +; 81a74 + +Function81a74: ; 81a74 + call JoyTextDelay + ld a, [wJumptableIndex] + cp $4 + jr nc, .asm_81a8b + ld hl, hJoyLast + ld a, [hl] + and SELECT + jr nz, .asm_81a9a + ld a, [hl] + and START + jr nz, .asm_81aab + +.asm_81a8b + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_81acf +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.asm_81a9a + call Function81eca + call Function81ac3 + ld e, a + ld a, [wcf66] + inc a + cp e + jr c, .asm_81aba + xor a + jr .asm_81aba + +.asm_81aab + call Function81eca + ld a, [wcf66] + dec a + cp $ff + jr nz, .asm_81aba + call Function81ac3 + dec a + +.asm_81aba + ld [wcf66], a + ld a, $0 + ld [wJumptableIndex], a + ret +; 81ac3 + +Function81ac3: ; 81ac3 +; Looping back around the pic set. + ld a, [wd002] + and a + jr nz, .asm_81acc + ld a, NUM_POKEMON ; CELEBI + ret + +.asm_81acc + ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN + ret +; 81acf + +Jumptable_81acf: ; 81acf + dw Function81adb + dw Function81c18 + dw Function81c33 + dw Function81cc2 + dw Function81d8e + dw Function81daf +; 81adb + +Function81adb: ; 81adb + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $6f + call ByteFill + hlcoord 1, 3 + lb bc, 7, 18 + ld a, $6c + call Bank20_FillBoxWithByte + hlcoord 11, 0 + lb bc, 2, 3 + ld a, $6d + call Bank20_FillBoxWithByte + hlcoord 16, 0 + lb bc, 2, 3 + ld a, $6e + call Bank20_FillBoxWithByte + call Function81bc0 + call Function81bf4 + ld a, [wcf66] + inc a + ld [CurPartySpecies], a + ld [wd265], a + hlcoord 0, 1 + ld de, wd265 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + ld a, [wd002] + and a + jr nz, .asm_81b7a + ld a, $1 + ld [UnownLetter], a + call GetPokemonName + hlcoord 4, 1 + call PlaceString + xor a + ld [wc2c6], a + hlcoord 12, 3 + call _PrepMonFrontpic + ld de, VTiles2 tile $31 + predef GetBackpic + ld a, $31 + ld [hFillBox], a + hlcoord 2, 4 + lb bc, 6, 6 + predef FillBox + ld a, [wd003] + and a + jr z, .asm_81b66 + ld de, String_81baf + jr .asm_81b69 + +.asm_81b66 + ld de, String_81bb4 + +.asm_81b69 + hlcoord 7, 17 + call PlaceString + hlcoord 0, 17 + ld de, String_81bb9 + call PlaceString + jr .asm_81ba9 + +.asm_81b7a + ld a, [wd265] + ld [TrainerClass], a + callab Function3957b + ld de, StringBuffer1 + hlcoord 4, 1 + call PlaceString + ld de, VTiles2 + callab GetTrainerPic + xor a + ld [TempEnemyMonSpecies], a + ld [hFillBox], a + hlcoord 2, 3 + lb bc, 7, 7 + predef FillBox + +.asm_81ba9 + ld a, $1 + ld [wJumptableIndex], a + ret +; 81baf + +String_81baf: db "レア", $6f, $6f, "@" ; rare (shiny) +String_81bb4: db "ノーマル@" ; normal +String_81bb9: db $7a, "きりかえ▶@" ; (A) switches +; 81bc0 + +Function81bc0: ; 81bc0 + decoord 0, 11, AttrMap + hlcoord 2, 11 + ld a, $1 + call Function81bde + decoord 0, 13, AttrMap + hlcoord 2, 13 + ld a, $2 + call Function81bde + decoord 0, 15, AttrMap + hlcoord 2, 15 + ld a, $3 + +Function81bde: ; 81bde + push af + ld a, $6a + ld [hli], a + ld bc, $f + ld a, $6b + call ByteFill + ld l, e + ld h, d + pop af + ld bc, $28 + call ByteFill + ret +; 81bf4 + +Function81bf4: ; 81bf4 + ld a, [wcf66] + inc a + ld l, a + ld h, $0 +rept 2 + add hl, hl +endr + ld de, OverworldMap + add hl, de + ld de, wc608 + ld bc, 4 + call CopyBytes + xor a + ld [wcf64], a + ld [wcf65], a + ld de, wc608 + call Function81ea5 + ret +; 81c18 + +Function81c18: ; 81c18 + ld a, [hCGB] + and a + jr z, .asm_81c2a + ld a, $2 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + +.asm_81c2a + call WaitBGMap + ld a, $2 + ld [wJumptableIndex], a + ret +; 81c33 + +Function81c33: ; 81c33 + ld a, [hCGB] + and a + jr z, .asm_81c69 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, BGPals + ld de, wc608 + ld c, $1 + call Function81ee3 + hlcoord 10, 2 + ld de, wc608 + call Function81ca7 + hlcoord 15, 2 + ld de, wc608 + 2 + call Function81ca7 + ld a, $1 + ld [hCGBPalUpdate], a + ld a, $3 + ld [wJumptableIndex], a + pop af + ld [rSVBK], a + ret + +.asm_81c69 + ld hl, wcda9 + ld a, $1 + ld [hli], a + ld a, $ff + ld [hli], a + ld a, $7f + ld [hli], a + ld a, [wc608] + ld [hli], a + ld a, [wc608 + 1] + ld [hli], a + ld a, [wc608 + 2] + ld [hli], a + ld a, [wc608 + 3] + ld [hli], a + xor a +rept 2 + ld [hli], a +endr + ld [hl], a + ld hl, wcda9 + call Function81f0c + hlcoord 10, 2 + ld de, wc608 + call Function81ca7 + hlcoord 15, 2 + ld de, wc608 + 2 + call Function81ca7 + ld a, $3 + ld [wJumptableIndex], a + ret +; 81ca7 + +Function81ca7: ; 81ca7 +rept 3 + inc hl +endr + ld a, [de] + call Function81cbc + ld a, [de] + swap a + call Function81cbc + inc de + ld a, [de] + call Function81cbc + ld a, [de] + swap a + +Function81cbc: ; 81cbc + and $f + add $70 + ld [hld], a + ret +; 81cc2 + +Function81cc2: ; 81cc2 + ld a, [hJoyLast] + and B_BUTTON + jr nz, .asm_81cdf + ld a, [hJoyLast] + and A_BUTTON + jr nz, .asm_81ce5 + ld a, [wcf64] + and $3 + ld e, a + ld d, 0 + ld hl, Jumptable_81d02 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.asm_81cdf + ld a, $4 + ld [wJumptableIndex], a + ret + +.asm_81ce5 + ld a, [wd002] + and a + ret nz + ld a, [wd003] + xor $4 + ld [wd003], a + ld c, a + ld b, 0 + ld hl, PokemonPalettes + add hl, bc + call Function818fd + ld a, $0 + ld [wJumptableIndex], a + ret +; 81d02 + +Jumptable_81d02: ; 81d02 + dw Function81d0a + dw Function81d34 + dw Function81d46 + dw Function81d58 +; 81d0a + +Function81d0a: ; 81d0a + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function81d89 + ld a, [hl] + and D_LEFT + jr nz, .asm_81d1d + ld a, [hl] + and D_RIGHT + jr nz, .asm_81d28 + ret + +.asm_81d1d + xor a + ld [wcf65], a + ld de, wc608 + call Function81ea5 + ret + +.asm_81d28 + ld a, $1 + ld [wcf65], a + ld de, wc608 + 2 + call Function81ea5 + ret + +Function81d34: ; 81d34 + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function81d89 + ld a, [hl] + and D_UP + jr nz, Function81d84 + ld hl, wc608 + 10 + jr Function81d63 + +Function81d46: ; 81d46 + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function81d89 + ld a, [hl] + and D_UP + jr nz, Function81d84 + ld hl, wc608 + 11 + jr Function81d63 + +Function81d58: ; 81d58 + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, Function81d84 + ld hl, wc608 + 12 + +Function81d63: ; 81d63 + ld a, [hJoyLast] + and D_RIGHT + jr nz, Function81d70 + ld a, [hJoyLast] + and D_LEFT + jr nz, Function81d77 + ret + +Function81d70: ; 81d70 + ld a, [hl] + cp $1f + ret nc + inc [hl] + jr Function81d7b + +Function81d77: ; 81d77 + ld a, [hl] + and a + ret z + dec [hl] + +Function81d7b: ; 81d7b + call Function81e67 + ld a, $2 + ld [wJumptableIndex], a + ret + +Function81d84: ; 81d84 + ld hl, wcf64 + dec [hl] + ret + +Function81d89: ; 81d89 + ld hl, wcf64 + inc [hl] + ret +; 81d8e + +Function81d8e: ; 81d8e + hlcoord 0, 10 + ld bc, $a0 + ld a, $6f + call ByteFill + hlcoord 2, 12 + ld de, String_81fcd + call PlaceString + xor a + ld [wd004], a + call Function81df4 + ld a, $5 + ld [wJumptableIndex], a + ret +; 81daf + +Function81daf: ; 81daf + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .asm_81dbb + call Function81dc7 + ret + +.asm_81dbb + ld a, $0 + ld [wJumptableIndex], a + ret +; 81dc1 + +Function81dc1: ; 81dc1 + ld hl, wJumptableIndex + set 7, [hl] + ret +; 81dc7 + +Function81dc7: ; 81dc7 + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .asm_81dd5 + ld a, [hl] + and D_DOWN + jr nz, .asm_81de2 + ret + +.asm_81dd5 + ld a, [wd004] + cp $3b + jr z, .asm_81ddf + inc a + jr .asm_81ded + +.asm_81ddf + xor a + jr .asm_81ded + +.asm_81de2 + ld a, [wd004] + and a + jr z, .asm_81deb + dec a + jr .asm_81ded + +.asm_81deb + ld a, $3b + +.asm_81ded + ld [wd004], a + call Function81df4 + ret +; 81df4 + +Function81df4: ; 81df4 + hlcoord 10, 11 + call Function81e5e + hlcoord 10, 12 + call Function81e5e + hlcoord 10, 13 + call Function81e5e + hlcoord 10, 14 + call Function81e5e + ld a, [wd004] + inc a + ld [wd265], a + predef GetTMHMMove + ld a, [wd265] + ld [wd262], a + call GetMoveName + hlcoord 10, 12 + call PlaceString + ld a, [wd004] + call Function81e55 + ld [CurItem], a + predef CanLearnTMHMMove + ld a, c + and a + ld de, String_81e46 + jr nz, .asm_81e3f + ld de, String_81e4d + +.asm_81e3f + hlcoord 10, 14 + call PlaceString + ret +; 81e46 + +String_81e46: db "おぼえられる@" ; can be taught +String_81e4d: db "おぼえられない@" ; cannot be taught +; 81e55 + +Function81e55: ; 81e55 + cp $32 + jr c, .asm_81e5b +rept 2 + inc a +endr + +.asm_81e5b + add $bf + ret +; 81e5e + +Function81e5e: ; 81e5e + ld bc, $a + ld a, $6f + call ByteFill + ret +; 81e67 + +Function81e67: ; 81e67 + ld a, [wc608 + 10] + and $1f + ld e, a + ld a, [wc608 + 11] + and $7 + sla a + swap a + or e + ld e, a + ld a, [wc608 + 11] + and $18 + sla a + swap a + ld d, a + ld a, [wc608 + 12] + and $1f + sla a + sla a + or d + ld d, a + ld a, [wcf65] + and a + jr z, .asm_81e9c + ld a, e + ld [wc608 + 2], a + ld a, d + ld [wc608 + 3], a + ret + +.asm_81e9c + ld a, e + ld [wc608], a + ld a, d + ld [wc608 + 1], a + ret +; 81ea5 + +Function81ea5: ; 81ea5 + ld a, [de] + and $1f + ld [wc608 + 10], a + ld a, [de] + and $e0 + swap a + srl a + ld b, a + inc de + ld a, [de] + and $3 + swap a + srl a + or b + ld [wc608 + 11], a + ld a, [de] + and $7c + srl a + srl a + ld [wc608 + 12], a + ret +; 81eca + +Function81eca: ; 81eca + ld a, [wcf66] + inc a + ld l, a + ld h, $0 +rept 2 + add hl, hl +endr + ld de, OverworldMap + add hl, de + ld e, l + ld d, h + ld hl, wc608 + ld bc, 4 + call CopyBytes + ret +; 81ee3 + +Function81ee3: ; 81ee3 +.asm_81ee3 + ld a, $ff + ld [hli], a + ld a, $7f + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + xor a +rept 2 + ld [hli], a +endr + dec c + jr nz, .asm_81ee3 + ret +; 81efc + +Bank20_FillBoxWithByte: ; 81efc +; For some reason, we have another copy of FillBoxWithByte here +.row + push bc + push hl +.col + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret +; 81f0c + +Function81f0c: ; 81f0c + ld a, [wcfbe] + push af + set 7, a + ld [wcfbe], a + call Function81f1d + pop af + ld [wcfbe], a + ret +; 81f1d + +Function81f1d: ; 81f1d + ld a, [hl] + and $7 + ret z + ld b, a +.asm_81f22 + push bc + xor a + ld [rJOYP], a + ld a, $30 + ld [rJOYP], a + ld b, $10 +.asm_81f2c + ld e, $8 + ld a, [hli] + ld d, a +.asm_81f30 + bit 0, d + ld a, $10 + jr nz, .asm_81f38 + ld a, $20 + +.asm_81f38 + ld [rJOYP], a + ld a, $30 + ld [rJOYP], a + rr d + dec e + jr nz, .asm_81f30 + dec b + jr nz, .asm_81f2c + ld a, $20 + ld [rJOYP], a + ld a, $30 + ld [rJOYP], a + ld de, 7000 +.asm_81f51 + nop + nop + nop + dec de + ld a, d + or e + jr nz, .asm_81f51 + pop bc + dec b + jr nz, .asm_81f22 + ret +; 81f5e + +Function81f5e: ; 81f5e + ld a, $6f + hlcoord 10, 0 + ld [hl], a + hlcoord 15, 0 + ld [hl], a + hlcoord 1, 11 + ld [hl], a + hlcoord 1, 13 + ld [hl], a + hlcoord 1, 15 + ld [hl], a + ld a, [wJumptableIndex] + cp $3 + jr nz, .asm_81fc9 + ld a, [wcf64] + and a + jr z, .asm_81f8d + dec a + hlcoord 1, 11 + ld bc, 2 * SCREEN_WIDTH + call AddNTimes + ld [hl], $ed + +.asm_81f8d + ld a, [wcf65] + and a + jr z, .asm_81f98 + hlcoord 15, 0 + jr .asm_81f9b + +.asm_81f98 + hlcoord 10, 0 + +.asm_81f9b + ld [hl], $ed + ld b, $70 + ld c, $5 + ld hl, Sprites + ld de, wc608 + 10 + call .asm_81fb7 + ld de, wc608 + 11 + call .asm_81fb7 + ld de, wc608 + 12 + call .asm_81fb7 + ret + +.asm_81fb7 + ld a, b + ld [hli], a + ld a, [de] +rept 2 + add a +endr + add $18 + ld [hli], a + xor a + ld [hli], a + ld a, c + ld [hli], a + ld a, $10 + add b + ld b, a + inc c + ret + +.asm_81fc9 + call ClearSprites + ret +; 81fcd + +String_81fcd: ; 81fcd + db "おわりますか?" ; Are you finished? + next "はい", $f2, $f2, $f2, $7a ; YES (A) + next "いいえ", $f2, $f2, $7b ; NO (B) + db "@" +; 81fe3 + +DebugColorTestGFX: +INCBIN "gfx/debug/color_test.2bpp" + + +TilesetColorTest: + ret + xor a + ld [wJumptableIndex], a + ld [wcf64], a + ld [wcf65], a + ld [wcf66], a + ld [hMapAnims], a + call ClearSprites + call OverworldTextModeSwitch + call Function3200 + xor a + ld [hBGMapMode], a + ld de, DebugColorTestGFX + $10 + ld hl, VTiles2 tile $6a + lb bc, BANK(DebugColorTestGFX), $16 + call Request2bpp + ld de, DebugColorTestGFX + ld hl, VTiles1 + lb bc, BANK(DebugColorTestGFX), 1 + call Request2bpp + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $6f + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $7 + call ByteFill + ld de, $15 + ld a, $6c + call Function821d2 + ld de, $1a + ld a, $6d + call Function821d2 + ld de, $1f + ld a, $6e + call Function821d2 + ld de, $24 + ld a, $6f + call Function821d2 + call Function821f4 + call Function8220f + call Function3200 + ld [wJumptableIndex], a + ld a, $40 + ld [hWY], a + ret +; 821d2 + +Function821d2: ; 821d2 + hlcoord 0, 0 + call Function821de + +Function821d8: ; 821d8 + ld a, [wcf64] + hlcoord 0, 0, AttrMap + +Function821de: ; 821de + add hl, de +rept 4 + ld [hli], a +endr + ld bc, $10 + add hl, bc +rept 4 + ld [hli], a +endr + ld bc, $10 + add hl, bc +rept 4 + ld [hli], a +endr + ret +; 821f4 + +Function821f4: ; 821f4 + hlcoord 2, 4 + call Function82203 + hlcoord 2, 6 + call Function82203 + hlcoord 2, 8 + +Function82203: ; 82203 + ld a, $6a + ld [hli], a + ld bc, $10 - 1 + ld a, $6b + call ByteFill + ret +; 8220f + +Function8220f: ; 8220f + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld a, [wcf64] + ld l, a + ld h, $0 +rept 3 + add hl, hl +endr + ld de, UnknBGPals + add hl, de + ld de, wc608 + ld bc, 8 + call CopyBytes + ld de, wc608 + call Function81ea5 + pop af + ld [rSVBK], a + ret +; 82236 + + +Function82236: ; 82236 + ld hl, hJoyLast + ld a, [hl] + and SELECT + jr nz, .loop7 + ld a, [hl] + and B_BUTTON + jr nz, .asm_82299 + call Function822f0 + ret + +.loop7 + ld hl, wcf64 + ld a, [hl] + inc a + and $7 + cp $7 + jr nz, .asm_82253 + xor a + +.asm_82253 + ld [hl], a + ld de, $15 + call Function821d8 + ld de, $1a + call Function821d8 + ld de, $1f + call Function821d8 + ld de, $24 + call Function821d8 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, BGPals + ld a, [wcf64] + ld bc, 8 + call AddNTimes + ld de, wc608 + ld bc, 8 + call CopyBytes + pop af + ld [rSVBK], a + ld a, $2 + ld [hBGMapMode], a + ld c, 3 + call DelayFrames + ld a, $1 + ld [hBGMapMode], a + ret + +.asm_82299 + call ClearSprites + ld a, [hWY] + xor $d0 + ld [hWY], a + ret +; 822a3 + +Function822a3: ; 822a3 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, BGPals + ld a, [wcf64] + ld bc, 8 + call AddNTimes + ld e, l + ld d, h + ld hl, wc608 + ld bc, 8 + call CopyBytes + hlcoord 1, 0 + ld de, wc608 + call Function81ca7 + hlcoord 6, 0 + ld de, wc608 + 2 + call Function81ca7 + hlcoord 11, 0 + ld de, wc608 + 4 + call Function81ca7 + hlcoord 16, 0 + ld de, wc608 + 6 + call Function81ca7 + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + call DelayFrame + ret +; 822f0 + +Function822f0: ; 822f0 + ld a, [wcf65] + and 3 + ld e, a + ld d, 0 + ld hl, .jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 82301 + +.jumptable: ; 82301 + dw Function82309 + dw Function82339 + dw Function8234b + dw Function8235d +; 82309 + +Function82309: ; 82309 + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function8238c + ld a, [hl] + and D_LEFT + jr nz, .asm_8231c + ld a, [hl] + and D_RIGHT + jr nz, .asm_82322 + ret + +.asm_8231c + ld a, [wcf66] + dec a + jr .asm_82326 + +.asm_82322 + ld a, [wcf66] + inc a + +.asm_82326 + and $3 + ld [wcf66], a + ld e, a + ld d, $0 + ld hl, wc608 +rept 2 + add hl, de +endr + ld e, l + ld d, h + call Function81ea5 + ret + +Function82339: ; 82338 + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function8238c + ld a, [hl] + and D_UP + jr nz, Function82387 + ld hl, wc608 + 10 + jr Function82368 + +Function8234b: ; 8234b + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, Function8238c + ld a, [hl] + and D_UP + jr nz, Function82387 + ld hl, wc608 + 11 + jr Function82368 + +Function8235d: ; 8235d + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, Function82387 + ld hl, wc608 + 12 + +Function82368: ; 82368 + ld a, [hJoyLast] + and D_RIGHT + jr nz, .asm_82375 + ld a, [hJoyLast] + and D_LEFT + jr nz, .asm_8237c + ret + +.asm_82375 + ld a, [hl] + cp $1f + ret nc + inc [hl] + jr .asm_82380 + +.asm_8237c + ld a, [hl] + and a + ret z + dec [hl] + +.asm_82380 + call Function82391 + call Function822a3 + ret + +Function82387: ; 82387 + ld hl, wcf65 + dec [hl] + ret + +Function8238c: ; 8238c + ld hl, wcf65 + inc [hl] + ret +; 82391 + +Function82391: ; 82391 + ld a, [wc608 + 10] + and $1f + ld e, a + ld a, [wc608 + 11] + and $7 + sla a + swap a + or e + ld e, a + ld a, [wc608 + 11] + and $18 + sla a + swap a + ld d, a + ld a, [wc608 + 12] + and $1f + sla a + sla a + or d + ld d, a + ld a, [wcf66] + ld c, a + ld b, $0 + ld hl, wc608 +rept 2 + add hl, bc +endr + ld a, e + ld [hli], a + ld [hl], d + ret +; 823c6 + +Function823c6: ; 823c6 + ret + +Function823c7: ; 823c7 + ret +; 823c8 diff --git a/engine/decorations.asm b/engine/decorations.asm new file mode 100755 index 000000000..1fa5cac7e --- /dev/null +++ b/engine/decorations.asm @@ -0,0 +1,1438 @@ +InitDecorations: ; 26751 (9:6751) + ld a, DECO_FEATHERY_BED + ld [Bed], a + ld a, DECO_TOWN_MAP + ld [Poster], a + ret + +_KrisDecorationMenu: ; 0x2675c + ld a, [wcf76] + push af + ld hl, .MenuDataHeader + call LoadMenuDataHeader + xor a + ld [wd1ee], a + ld a, $1 + ld [wd1ef], a +.top_loop + ld a, [wd1ef] + ld [wMenuCursorBuffer], a + call .FindCategoriesWithOwnedDecos + call DoNthMenu + ld a, [MenuSelection2] + ld [wd1ef], a + jr c, .exit_menu + ld a, [MenuSelection] + ld hl, .pointers + call MenuJumptable + jr nc, .top_loop + +.exit_menu + call ExitMenu + pop af + ld [wcf76], a + ld a, [wd1ee] + ld c, a + ret +; 0x2679a + +.MenuDataHeader: ; 0x2679a + db $40 ; flags + db 00, 05 ; start coords + db 17, 19 ; end coords + dw .MenuData2 + db 1 ; default option +; 0x267a2 + +.MenuData2: ; 0x267a2 + db $a0 ; flags + db 0 ; items + dw wd002 + dw PlaceNthMenuStrings + dw .pointers +; 0x267aa + +.pointers: ; 267aa + dw DecoBedMenu, .bed + dw DecoCarpetMenu, .carpet + dw DecoPlantMenu, .plant + dw DecoPosterMenu, .poster + dw DecoConsoleMenu, .game + dw DecoOrnamentMenu, .ornament + dw DecoBigDollMenu, .big_doll + dw DecoExitMenu, .exit + +.bed db "BED@" +.carpet db "CARPET@" +.plant db "PLANT@" +.poster db "POSTER@" +.game db "GAME CONSOLE@" +.ornament db "ORNAMENT@" +.big_doll db "BIG DOLL@" +.exit db "EXIT@" +; 26806 + +.FindCategoriesWithOwnedDecos: ; 26806 + xor a + ld [wcf76], a + call .ClearStringBuffer2 + call .FindOwndDecos + ld a, 7 + call .AppendToStringBuffer2 + ld hl, StringBuffer2 + ld de, wd002 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + ret + +.ClearStringBuffer2: ; 26822 (9:6822) + ld hl, StringBuffer2 + xor a + ld [hli], a + ld bc, ITEM_NAME_LENGTH - 1 + ld a, -1 + call ByteFill + ret + +.AppendToStringBuffer2: ; 26830 (9:6830) + ld hl, StringBuffer2 + inc [hl] + ld e, [hl] + ld d, 0 + add hl, de + ld [hl], a + ret + +.FindOwndDecos: ; 2683a (9:683a) + ld hl, .jumptable +.loop + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + or e + jr z, .done + push hl + call _de_ + pop hl + jr nc, .next + ld a, [hl] + push hl + call .AppendToStringBuffer2 + pop hl +.next + inc hl + jr .loop +.done + ret +; 26855 (9:6855) + +.jumptable: ; 26855 + dwb FindOwnedBeds, 0 ; bed + dwb FindOwnedCarpets, 1 ; carpet + dwb FindOwnedPlants, 2 ; plant + dwb FindOwnedPosters, 3 ; poster + dwb FindOwnedConsoles, 4 ; game console + dwb FindOwnedOrnaments, 5 ; ornament + dwb FindOwnedBigDolls, 6 ; big doll + dw 0 ; end +; 2686c + +Deco_FillTempWithMinusOne: ; 2686c + xor a + ld hl, wd002 + ld [hli], a + ld a, -1 + ld bc, $10 + call ByteFill + ret +; 2687a + +CheckAllDecorationFlags: ; 2687a +.loop + ld a, [hli] + cp -1 + jr z, .done + push hl + push af + ld b, CHECK_FLAG + call DecorationFlagAction + ld a, c + and a + pop bc + ld a, b + call nz, AppendDecoIndex + pop hl + jr .loop + +.done + ret +; 26891 + +AppendDecoIndex: ; 26891 + ld hl, wd002 + inc [hl] + ld e, [hl] + ld d, $0 + add hl, de + ld [hl], a + ret +; 2689b + +FindOwnedDecosInCategory: ; 2689b + push bc + push hl + call Deco_FillTempWithMinusOne + pop hl + call CheckAllDecorationFlags + pop bc + ld a, [wd002] + and a + ret z + + ld a, c + call AppendDecoIndex + ld a, 0 + call AppendDecoIndex + scf + ret +; 268b5 + +DecoBedMenu: ; 268b5 + call FindOwnedBeds + call PopulateDecoCategoryMenu + xor a + ret +; 268bd + +FindOwnedBeds: ; 268bd + ld hl, .beds + ld c, DECO_BEDS + jp FindOwnedDecosInCategory +; 268c5 + +.beds: ; 268c5 + db DECO_FEATHERY_BED ; 2 + db DECO_PINK_BED ; 3 + db DECO_POLKADOT_BED ; 4 + db DECO_PIKACHU_BED ; 5 + db -1 +; 268ca + +DecoCarpetMenu: ; 268ca + call FindOwnedCarpets + call PopulateDecoCategoryMenu + xor a + ret +; 268d2 + +FindOwnedCarpets: ; 268d2 + ld hl, .carpets + ld c, DECO_CARPETS + jp FindOwnedDecosInCategory +; 268da + +.carpets: ; 268da + db DECO_RED_CARPET ; 7 + db DECO_BLUE_CARPET ; 8 + db DECO_YELLOW_CARPET ; 9 + db DECO_GREEN_CARPET ; a + db -1 +; 268df + +DecoPlantMenu: ; 268df + call FindOwnedPlants + call PopulateDecoCategoryMenu + xor a + ret +; 268e7 + +FindOwnedPlants: ; 268e7 + ld hl, .plants + ld c, DECO_0B + jp FindOwnedDecosInCategory +; 268ef + +.plants: ; 268ef + db DECO_MAGNAPLANT ; c + db DECO_TROPICPLANT ; d + db DECO_JUMBOPLANT ; e + db -1 +; 268f3 + +DecoPosterMenu: ; 268f3 + call FindOwnedPosters + call PopulateDecoCategoryMenu + xor a + ret +; 268fb + +FindOwnedPosters: ; 268fb + ld hl, .posters + ld c, DECO_POSTERS + jp FindOwnedDecosInCategory +; 26903 + +.posters: ; 26903 + db DECO_TOWN_MAP ; 10 + db DECO_PIKACHU_POSTER ; 11 + db DECO_CLEFAIRY_POSTER ; 12 + db DECO_JIGGLYPUFF_POSTER ; 13 + db -1 +; 26908 + +DecoConsoleMenu: ; 26908 + call FindOwnedConsoles + call PopulateDecoCategoryMenu + xor a + ret +; 26910 + +FindOwnedConsoles: ; 26910 + ld hl, .consoles + ld c, DECO_CONSOLES + jp FindOwnedDecosInCategory +; 26918 + +.consoles: ; 26918 + db DECO_FAMICOM ; 15 + db DECO_SNES ; 16 + db DECO_N64 ; 17 + db DECO_VIRTUAL_BOY ; 18 + db -1 +; 2691d + +DecoOrnamentMenu: ; 2691d + call FindOwnedOrnaments + call PopulateDecoCategoryMenu + xor a + ret +; 26925 + +FindOwnedOrnaments: ; 26925 + ld hl, .ornaments + ld c, DECO_DOLLS + jp FindOwnedDecosInCategory +; 2692d + +.ornaments: ; 2692d + db DECO_PIKACHU_DOLL ; 1e + db DECO_SURF_PIKACHU_DOLL ; 1f + db DECO_CLEFAIRY_DOLL ; 20 + db DECO_JIGGLYPUFF_DOLL ; 21 + db DECO_BULBASAUR_DOLL ; 22 + db DECO_CHARMANDER_DOLL ; 23 + db DECO_SQUIRTLE_DOLL ; 24 + db DECO_POLIWAG_DOLL ; 25 + db DECO_DIGLETT_DOLL ; 26 + db DECO_STARMIE_DOLL ; 27 + db DECO_MAGIKARP_DOLL ; 28 + db DECO_ODDISH_DOLL ; 29 + db DECO_GENGAR_DOLL ; 2a + db DECO_SHELLDER_DOLL ; 2b + db DECO_GRIMER_DOLL ; 2c + db DECO_VOLTORB_DOLL ; 2d + db DECO_WEEDLE_DOLL ; 2e + db DECO_UNOWN_DOLL ; 2f + db DECO_GEODUDE_DOLL ; 30 + db DECO_MACHOP_DOLL ; 31 + db DECO_TENTACOOL_DOLL ; 32 + db DECO_GOLD_TROPHY_DOLL ; 33 + db DECO_SILVER_TROPHY_DOLL ; 34 + db -1 +; 26945 + +DecoBigDollMenu: ; 26945 + call FindOwnedBigDolls + call PopulateDecoCategoryMenu + xor a + ret +; 2694d + +FindOwnedBigDolls: ; 2694d + ld hl, .big_dolls + ld c, DECO_BIG_DOLLS + jp FindOwnedDecosInCategory +; 26955 + +.big_dolls: ; 26955 + db DECO_BIG_SNORLAX_DOLL ; 1a + db DECO_BIG_ONIX_DOLL ; 1b + db DECO_BIG_LAPRAS_DOLL ; 1c + db -1 +; 26959 + +DecoExitMenu: ; 26959 + scf + ret +; 2695b + +PopulateDecoCategoryMenu: ; 2695b + ld a, [wd002] + and a + jr z, .empty + cp 8 + jr nc, .beyond_eight + xor a + ld [wcf76], a + ld hl, .NonscrollingMenuDataHeader + call LoadMenuDataHeader + call DoNthMenu + jr c, .no_action_1 + call DoDecorationAction2 + +.no_action_1 + call ExitMenu + ret + +.beyond_eight + ld hl, wd002 + ld e, [hl] + dec [hl] + ld d, 0 + add hl, de + ld [hl], -1 + call LoadStandardMenuDataHeader + ld hl, .ScrollingMenuDataHeader + call CopyMenuDataHeader + xor a + ld [hBGMapMode], a + call InitScrollingMenu + xor a + ld [wMenuScrollPosition], a + call HandleScrollingMenu + ld a, [wcf73] + cp 2 + jr z, .no_action_2 + call DoDecorationAction2 + +.no_action_2 + call ExitMenu + ret + +.empty + ld hl, .Text_nothing_to_choose + call MenuTextBoxBackup + ret +; 269b0 + +.Text_nothing_to_choose: ; 0x269b0 + ; There's nothing to choose. + text_jump UnknownText_0x1bc471 + db "@" +; 0x269b5 + +.NonscrollingMenuDataHeader: ; 0x269b5 + db $40 ; flags + db 00, 00 ; start coords + db 17, 19 ; end coords + dw .NonscrollingMenuData2 + db 1 ; default option +; 0x269bd + +.NonscrollingMenuData2: ; 0x269bd + db $a0 ; flags + db 0 ; items + dw wd002 + dw DecorationMenuFunction + dw DecorationAttributes +; 0x269c5 + +.ScrollingMenuDataHeader: ; 0x269c5 + db $40 ; flags + db 01, 01 ; start coords + db 16, 18 ; end coords + dw .ScrollingMenuData2 + db 1 ; default option +; 0x269cd + +.ScrollingMenuData2: ; 0x269cd + db $10 ; flags + db 8, 0 ; rows, columns + db 1 ; horizontal spacing + dbw 0, wd002 ; text pointer + dba DecorationMenuFunction + dbw 0, 0 + dbw 0, 0 +; 269dd + + +GetDecorationData: ; 269dd + ld hl, DecorationAttributes + ld bc, 6 + call AddNTimes + ret +; 269e7 + +GetDecorationName: ; 269e7 + push hl + call GetDecorationData + call GetDecoName + pop hl + call CopyName2 + ret +; 269f3 + +DecorationMenuFunction: ; 269f3 + ld a, [MenuSelection] + push de + call GetDecorationData + call GetDecoName + pop hl + call PlaceString + ret +; 26a02 + +DoDecorationAction2: ; 26a02 + ld a, [MenuSelection] + call GetDecorationData + ld de, 2 ; function 2 + add hl, de + ld a, [hl] + ld hl, .DecoActions + rst JumpTable + ret +; 26a12 + +.DecoActions: ; 26a12 + dw DecoAction_nothing + dw DecoAction_setupbed + dw DecoAction_putawaybed + dw DecoAction_setupcarpet + dw DecoAction_putawaycarpet + dw DecoAction_setupplant + dw DecoAction_putawayplant + dw DecoAction_setupposter + dw DecoAction_putawayposter + dw DecoAction_setupconsole + dw DecoAction_putawayconsole + dw DecoAction_setupbigdoll + dw DecoAction_putawaybigdoll + dw DecoAction_setupornament + dw DecoAction_putawayornament +; 26a30 + + +GetDecorationFlag: ; 26a30 + call GetDecorationData + ld de, 3 ; event flag + add hl, de + ld a, [hli] + ld d, [hl] + ld e, a + ret +; 26a3b + +DecorationFlagAction: ; 26a3b + push bc + call GetDecorationFlag + pop bc + call EventFlagAction + ret +; 26a44 + +GetDecorationSprite: ; 26a44 + ld a, c + call GetDecorationData + ld de, 5 ; sprite + add hl, de + ld a, [hl] + ld c, a + ret +; 26a4f + +decoration: MACRO + ; type, name, command, event flag, tile/sprite + db \1, \2, \3 + dw \4 + db \5 +ENDM + +DecorationAttributes: ; 26a4f + decoration DECO_PLANT, $00, $0, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_BED, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_BED, FEATHERY_BED, SET_UP_BED, EVENT_DECO_BED_1, $1b + decoration DECO_BED, PINK_BED, SET_UP_BED, EVENT_DECO_BED_2, $1c + decoration DECO_BED, POLKADOT_BED, SET_UP_BED, EVENT_DECO_BED_3, $1d + decoration DECO_BED, PIKACHU_BED, SET_UP_BED, EVENT_DECO_BED_4, $1e + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_CARPET, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_CARPET, RED_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_1, $08 + decoration DECO_CARPET, BLUE_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_2, $0b + decoration DECO_CARPET, YELLOW_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_3, $0e + decoration DECO_CARPET, GREEN_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_4, $11 + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_PLANT, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_PLANT, MAGNAPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_1, $20 + decoration DECO_PLANT, TROPICPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_2, $21 + decoration DECO_PLANT, JUMBOPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_3, $22 + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_POSTER, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_PLANT, TOWN_MAP_D, SET_UP_POSTER, EVENT_DECO_PLANT_4, $1f + decoration DECO_POSTER, PIKACHU, SET_UP_POSTER, EVENT_DECO_POSTER_1, $23 + decoration DECO_POSTER, CLEFAIRY, SET_UP_POSTER, EVENT_DECO_POSTER_2, $24 + decoration DECO_POSTER, JIGGLYPUFF, SET_UP_POSTER, EVENT_DECO_POSTER_3, $25 + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_CONSOLE, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_PLANT, FAMICOM, SET_UP_CONSOLE, EVENT_DECO_FAMICOM, SPRITE_FAMICOM + decoration DECO_PLANT, SUPER_NES, SET_UP_CONSOLE, EVENT_DECO_SNES, SPRITE_SNES + decoration DECO_PLANT, NINTENDO_64, SET_UP_CONSOLE, EVENT_DECO_N64, SPRITE_N64 + decoration DECO_PLANT, VIRTUAL_BOY, SET_UP_CONSOLE, EVENT_DECO_VIRTUAL_BOY, SPRITE_VIRTUAL_BOY + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_BIG_DOLL, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_BIGDOLL, SNORLAX, SET_UP_BIG_DOLL, EVENT_DECO_BIG_SNORLAX_DOLL, SPRITE_BIG_SNORLAX + decoration DECO_BIGDOLL, ONIX, SET_UP_BIG_DOLL, EVENT_DECO_BIG_ONIX_DOLL, SPRITE_BIG_ONIX + decoration DECO_BIGDOLL, LAPRAS, SET_UP_BIG_DOLL, EVENT_DECO_BIG_LAPRAS_DOLL, SPRITE_BIG_LAPRAS + decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_DOLL, EVENT_GAVE_KURT_APRICORNS, $00 + decoration DECO_DOLL, PIKACHU, SET_UP_DOLL, EVENT_DECO_PIKACHU_DOLL, SPRITE_PIKACHU + decoration DECO_PLANT, SURF_PIKA_DOLL, SET_UP_DOLL, EVENT_DECO_SURFING_PIKACHU_DOLL, SPRITE_SURFING_PIKACHU + decoration DECO_DOLL, CLEFAIRY, SET_UP_DOLL, EVENT_DECO_CLEFAIRY_DOLL, SPRITE_CLEFAIRY + decoration DECO_DOLL, JIGGLYPUFF, SET_UP_DOLL, EVENT_DECO_JIGGLYPUFF_DOLL, SPRITE_JIGGLYPUFF + decoration DECO_DOLL, BULBASAUR, SET_UP_DOLL, EVENT_DECO_BULBASAUR_DOLL, SPRITE_BULBASAUR + decoration DECO_DOLL, CHARMANDER, SET_UP_DOLL, EVENT_DECO_CHARMANDER_DOLL, SPRITE_CHARMANDER + decoration DECO_DOLL, SQUIRTLE, SET_UP_DOLL, EVENT_DECO_SQUIRTLE_DOLL, SPRITE_SQUIRTLE + decoration DECO_DOLL, POLIWAG, SET_UP_DOLL, EVENT_DECO_POLIWAG_DOLL, SPRITE_POLIWAG + decoration DECO_DOLL, DIGLETT, SET_UP_DOLL, EVENT_DECO_DIGLETT_DOLL, SPRITE_DIGLETT + decoration DECO_DOLL, STARYU, SET_UP_DOLL, EVENT_DECO_STARMIE_DOLL, SPRITE_STARMIE + decoration DECO_DOLL, MAGIKARP, SET_UP_DOLL, EVENT_DECO_MAGIKARP_DOLL, SPRITE_MAGIKARP + decoration DECO_DOLL, ODDISH, SET_UP_DOLL, EVENT_DECO_ODDISH_DOLL, SPRITE_ODDISH + decoration DECO_DOLL, GENGAR, SET_UP_DOLL, EVENT_DECO_GENGAR_DOLL, SPRITE_GENGAR + decoration DECO_DOLL, SHELLDER, SET_UP_DOLL, EVENT_DECO_SHELLDER_DOLL, SPRITE_SHELLDER + decoration DECO_DOLL, GRIMER, SET_UP_DOLL, EVENT_DECO_GRIMER_DOLL, SPRITE_GRIMER + decoration DECO_DOLL, VOLTORB, SET_UP_DOLL, EVENT_DECO_VOLTORB_DOLL, SPRITE_VOLTORB + decoration DECO_DOLL, WEEDLE, SET_UP_DOLL, EVENT_DECO_WEEDLE_DOLL, SPRITE_WEEDLE + decoration DECO_DOLL, UNOWN, SET_UP_DOLL, EVENT_DECO_UNOWN_DOLL, SPRITE_UNOWN + decoration DECO_DOLL, GEODUDE, SET_UP_DOLL, EVENT_DECO_GEODUDE_DOLL, SPRITE_GEODUDE + decoration DECO_DOLL, MACHOP, SET_UP_DOLL, EVENT_DECO_MACHOP_DOLL, SPRITE_MACHOP + decoration DECO_DOLL, TENTACOOL, SET_UP_DOLL, EVENT_DECO_TENTACOOL_DOLL, SPRITE_TENTACOOL + decoration DECO_PLANT, GOLD_TROPHY, SET_UP_DOLL, EVENT_DECO_GOLD_TROPHY, SPRITE_GOLD_TROPHY + decoration DECO_PLANT, SILVER_TROPHY, SET_UP_DOLL, EVENT_DECO_SILVER_TROPHY, SPRITE_SILVER_TROPHY +; 26b8d + + +DecorationNames: ; 26b8d + db "CANCEL@" + db "PUT IT AWAY@" + db "MAGNAPLANT@" + db "TROPICPLANT@" + db "JUMBOPLANT@" + db "TOWN MAP@" + db "NES@" + db "SUPER NES@" + db "NINTENDO 64@" + db "VIRTUAL BOY@" + db "GOLD TROPHY@" + db "SILVER TROPHY@" + db "SURF PIKACHU DOLL@" + db " BED@" + db " CARPET@" + db " POSTER@" + db " DOLL@" + db "BIG @" + db "FEATHERY@" + db "PIKACHU@" + db "PINK@" + db "POLKADOT@" + db "RED@" + db "BLUE@" + db "YELLOW@" + db "GREEN@" +; 26c72 + +GetDecoName: ; 26c72 + ld a, [hli] + ld e, [hl] + ld bc, StringBuffer2 + push bc + ld hl, .NameFunctions + rst JumpTable + pop de + ret +; 26c7e + +.NameFunctions: ; 26c7e + dw .invalid + dw .plant + dw .bed + dw .carpet + dw .poster + dw .doll + dw .bigdoll +; 26c8c + + +.invalid: ; 26c8c + ret +; 26c8d + +.plant: ; 26c8d + ld a, e + jr .getdeconame + +.bed: ; 26c90 + call .plant + ld a, _BED + jr .getdeconame + +.carpet: ; 26c97 + call .plant + ld a, _CARPET + jr .getdeconame + +.poster: ; 26c9e + ld a, e + call .getpokename + ld a, _POSTER + jr .getdeconame + +.doll: ; 26ca6 + ld a, e + call .getpokename + ld a, _DOLL + jr .getdeconame + +.bigdoll: ; 26cae + push de + ld a, BIG_ + call .getdeconame + pop de + ld a, e + jr .getpokename + +.unused: ; 26cb8 + push de + call .getdeconame + pop de + ld a, e + jr .getdeconame + +.getpokename: ; 26cc0 + push bc + ld [wd265], a + call GetPokemonName + pop bc + jr .copy + +.getdeconame: ; 26cca + call ._getdeconame + jr .copy + +._getdeconame: ; 26ccf + push bc + ld hl, DecorationNames + call GetNthString + ld d, h + ld e, l + pop bc + ret + +.copy: ; 26cda + ld h, b + ld l, c + call CopyName2 + dec hl + ld b, h + ld c, l + ret +; 26ce3 + +DecoAction_nothing: ; 26ce3 + scf + ret +; 26ce5 + +DecoAction_setupbed: ; 26ce5 + ld hl, Bed + jp DecoAction_TrySetItUp +; 26ceb + +DecoAction_putawaybed: ; 26ceb + ld hl, Bed + jp DecoAction_TryPutItAway +; 26cf1 + +DecoAction_setupcarpet: ; 26cf1 + ld hl, Carpet + jp DecoAction_TrySetItUp +; 26cf7 + +DecoAction_putawaycarpet: ; 26cf7 + ld hl, Carpet + jp DecoAction_TryPutItAway +; 26cfd + +DecoAction_setupplant: ; 26cfd + ld hl, Plant + jp DecoAction_TrySetItUp +; 26d03 + +DecoAction_putawayplant: ; 26d03 + ld hl, Plant + jp DecoAction_TryPutItAway +; 26d09 + +DecoAction_setupposter: ; 26d09 + ld hl, Poster + jp DecoAction_TrySetItUp +; 26d0f + +DecoAction_putawayposter: ; 26d0f + ld hl, Poster + jp DecoAction_TryPutItAway +; 26d15 + +DecoAction_setupconsole: ; 26d15 + ld hl, Console + jp DecoAction_TrySetItUp +; 26d1b + +DecoAction_putawayconsole: ; 26d1b + ld hl, Console + jp DecoAction_TryPutItAway +; 26d21 + +DecoAction_setupbigdoll: ; 26d21 + ld hl, BigDoll + jp DecoAction_TrySetItUp +; 26d27 + +DecoAction_putawaybigdoll: ; 26d27 + ld hl, BigDoll + jp DecoAction_TryPutItAway +; 26d2d + +DecoAction_TrySetItUp: ; 26d2d + ld a, [hl] + ld [Buffer1], a + push hl + call DecoAction_SetItUp + jr c, .failed + ld a, 1 + ld [wd1ee], a + pop hl + ld a, [MenuSelection] + ld [hl], a + xor a + ret + +.failed + pop hl + xor a + ret +; 26d46 + +DecoAction_SetItUp: ; 26d46 +; See if there's anything of the same type already out + ld a, [Buffer1] + and a + jr z, .nothingthere +; See if that item is already out + ld b, a + ld a, [MenuSelection] + cp b + jr z, .alreadythere +; Put away the item that's already out, and set up the new one + ld a, [MenuSelection] + ld hl, StringBuffer4 + call GetDecorationName + ld a, [Buffer1] + ld hl, StringBuffer3 + call GetDecorationName + ld hl, DecoText_PutAwayAndSetUp + call MenuTextBoxBackup + xor a + ret + +.nothingthere + ld a, [MenuSelection] + ld hl, StringBuffer3 + call GetDecorationName + ld hl, DecoText_SetUpTheDeco + call MenuTextBoxBackup + xor a + ret + +.alreadythere + ld hl, DecoText_AlreadySetUp + call MenuTextBoxBackup + scf + ret +; 26d86 + +DecoAction_TryPutItAway: ; 26d86 +; If there is no item of that type already set, there is nothing to put away. + ld a, [hl] + ld [Buffer1], a + xor a + ld [hl], a + ld a, [Buffer1] + and a + jr z, .nothingthere +; Put it away. + ld a, $1 + ld [wd1ee], a + ld a, [Buffer1] + ld [MenuSelection], a + ld hl, StringBuffer3 + call GetDecorationName + ld hl, DecoText_PutAwayTheDeco + call MenuTextBoxBackup + xor a + ret + +.nothingthere + ld hl, DecoText_NothingToPutAway + call MenuTextBoxBackup + xor a + ret +; 26db3 + +DecoAction_setupornament: ; 26db3 + ld hl, UnknownText_0x26e41 + call DecoAction_AskWhichSide + jr c, .cancel + call DecoAction_SetItUp_Ornament + jr c, .cancel + ld a, $1 + ld [wd1ee], a + jr DecoAction_FinishUp_Ornament + +.cancel + xor a + ret + +DecoAction_putawayornament: ; 26dc9 + ld hl, DecoText_WhichSide + call DecoAction_AskWhichSide + jr nc, .incave + xor a + ret + +.incave + call DecoAction_PutItAway_Ornament + +DecoAction_FinishUp_Ornament: ; 26dd6 + call QueryWhichSide + ld a, [wd1ec] + ld [hl], a + ld a, [wd1ed] + ld [de], a + xor a + ret +; 26de3 + +DecoAction_SetItUp_Ornament: ; 26de3 + ld a, [wd1ec] + and a + jr z, .nothingthere + ld b, a + ld a, [MenuSelection] + cp b + jr z, .failed + ld a, b + ld hl, StringBuffer3 + call GetDecorationName + ld a, [MenuSelection] + ld hl, StringBuffer4 + call GetDecorationName + ld a, [MenuSelection] + ld [wd1ec], a + call .getwhichside + ld hl, DecoText_PutAwayAndSetUp + call MenuTextBoxBackup + xor a + ret + +.nothingthere + ld a, [MenuSelection] + ld [wd1ec], a + call .getwhichside + ld a, [MenuSelection] + ld hl, StringBuffer3 + call GetDecorationName + ld hl, DecoText_SetUpTheDeco + call MenuTextBoxBackup + xor a + ret + +.failed + ld hl, DecoText_AlreadySetUp + call MenuTextBoxBackup + scf + ret +; 26e33 + +.getwhichside: ; 26e33 + ld a, [MenuSelection] + ld b, a + ld a, [wd1ed] + cp b + ret nz + xor a + ld [wd1ed], a + ret +; 26e41 + +UnknownText_0x26e41: ; 0x26e41 + ; Which side do you want to put it on? + text_jump UnknownText_0x1bc48c + db "@" +; 0x26e46 + +DecoAction_PutItAway_Ornament: ; 26e46 + ld a, [wd1ec] + and a + jr z, .nothingthere + ld hl, StringBuffer3 + call GetDecorationName + ld a, $1 + ld [wd1ee], a + xor a + ld [wd1ec], a + ld hl, DecoText_PutAwayTheDeco + call MenuTextBoxBackup + xor a + ret + +.nothingthere + ld hl, DecoText_NothingToPutAway + call MenuTextBoxBackup + xor a + ret +; 26e6b + +DecoText_WhichSide: ; 0x26e6b + ; Which side do you want to put away? + text_jump UnknownText_0x1bc4b2 + db "@" +; 0x26e70 + +DecoAction_AskWhichSide: ; 26e70 + call MenuTextBox + ld hl, MenuDataHeader_0x26eab + call GetMenu2 + call ExitMenu + call CopyMenuData2 + jr c, .nope + ld a, [MenuSelection2] + cp 3 + jr z, .nope + ld [Buffer2], a + call QueryWhichSide + ld a, [hl] + ld [wd1ec], a + ld a, [de] + ld [wd1ed], a + xor a + ret + +.nope + scf + ret +; 26e9a + +QueryWhichSide: ; 26e9a + ld hl, RightOrnament + ld de, LeftOrnament + ld a, [Buffer2] + cp 1 + ret z + push hl + ld h, d + ld l, e + pop de + ret +; 26eab + +MenuDataHeader_0x26eab: ; 0x26eab + db $40 ; flags + db 00, 00 ; start coords + db 07, 13 ; end coords + dw MenuData2_0x26eb3 + db 1 ; default option +; 0x26eb3 + +MenuData2_0x26eb3: ; 0x26eb3 + db $80 ; flags + db 3 ; items + db "RIGHT SIDE@" + db "LEFT SIDE@" + db "CANCEL@" +; 0x26ed1 + +DecoText_PutAwayTheDeco: ; 0x26ed1 + ; Put away the @ . + text_jump UnknownText_0x1bc4d7 + db "@" +; 0x26ed6 + +DecoText_NothingToPutAway: ; 0x26ed6 + ; There's nothing to put away. + text_jump UnknownText_0x1bc4ec + db "@" +; 0x26edb + +DecoText_SetUpTheDeco: ; 0x26edb + ; Set up the @ . + text_jump UnknownText_0x1bc509 + db "@" +; 0x26ee0 + +DecoText_PutAwayAndSetUp: ; 0x26ee0 + ; Put away the @ and set up the @ . + text_jump UnknownText_0x1bc51c + db "@" +; 0x26ee5 + +DecoText_AlreadySetUp: ; 0x26ee5 + ; That's already set up. + text_jump UnknownText_0x1bc546 + db "@" +; 0x26eea + +GetDecorationName_c_de: ; 26eea + ld a, c + ld h, d + ld l, e + call GetDecorationName + ret +; 26ef1 + +DecorationFlagAction_c: ; 26ef1 + ld a, c + jp DecorationFlagAction +; 26ef5 + + +GetDecorationName_c: ; 26ef5 (9:6ef5) + ld a, c + call GetDecorationID + ld hl, StringBuffer1 + push hl + call GetDecorationName + pop de + ret + + +SetSpecificDecorationFlag: ; 26f02 + ld a, c + call GetDecorationID + ld b, SET_FLAG + call DecorationFlagAction + ret +; 26f0c + +GetDecorationID: ; 26f0c + push hl + push de + ld e, a + ld d, 0 + ld hl, DecorationIDs + add hl, de + ld a, [hl] + pop de + pop hl + ret +; 26f19 + +SetAllDecorationFlags: ; 26f19 + ld hl, DecorationIDs +.loop + ld a, [hli] + cp -1 + jr z, .done + push hl + ld b, SET_FLAG + call DecorationFlagAction + pop hl + jr .loop + +.done + ret +; 26f2b + +DecorationIDs: ; 26f2b + db DECO_FEATHERY_BED ; 2 + db DECO_PINK_BED ; 3 + db DECO_POLKADOT_BED ; 4 + db DECO_PIKACHU_BED ; 5 + + db DECO_RED_CARPET ; 7 + db DECO_BLUE_CARPET ; 8 + db DECO_YELLOW_CARPET ; 9 + db DECO_GREEN_CARPET ; a + + db DECO_MAGNAPLANT ; c + db DECO_TROPICPLANT ; d + db DECO_JUMBOPLANT ; e + + db DECO_TOWN_MAP ; 10 + db DECO_PIKACHU_POSTER ; 11 + db DECO_CLEFAIRY_POSTER ; 12 + db DECO_JIGGLYPUFF_POSTER ; 13 + + db DECO_FAMICOM ; 15 + db DECO_SNES ; 16 + db DECO_N64 ; 17 + db DECO_VIRTUAL_BOY ; 18 + + db DECO_PIKACHU_DOLL ; 1e + db DECO_SURF_PIKACHU_DOLL ; 1f + db DECO_CLEFAIRY_DOLL ; 20 + db DECO_JIGGLYPUFF_DOLL ; 21 + db DECO_BULBASAUR_DOLL ; 22 + db DECO_CHARMANDER_DOLL ; 23 + db DECO_SQUIRTLE_DOLL ; 24 + db DECO_POLIWAG_DOLL ; 25 + db DECO_DIGLETT_DOLL ; 26 + db DECO_STARMIE_DOLL ; 27 + db DECO_MAGIKARP_DOLL ; 28 + db DECO_ODDISH_DOLL ; 29 + db DECO_GENGAR_DOLL ; 2a + db DECO_SHELLDER_DOLL ; 2b + db DECO_GRIMER_DOLL ; 2c + db DECO_VOLTORB_DOLL ; 2d + db DECO_WEEDLE_DOLL ; 2e + db DECO_UNOWN_DOLL ; 2f + db DECO_GEODUDE_DOLL ; 30 + db DECO_MACHOP_DOLL ; 31 + db DECO_TENTACOOL_DOLL ; 32 + db DECO_BIG_SNORLAX_DOLL ; 1a + db DECO_BIG_ONIX_DOLL ; 1b + db DECO_BIG_LAPRAS_DOLL ; 1c +Trophys: + db DECO_GOLD_TROPHY_DOLL ; 33 + db DECO_SILVER_TROPHY_DOLL ; 34 + db -1 +; 26f59 + +DescribeDecoration:: ; 26f59 + ld a, b + ld hl, JumpTable_DecorationDesc + rst JumpTable + ret +; 26f5f + +JumpTable_DecorationDesc: ; 26f5f + dw DecorationDesc_Poster + dw DecorationDesc_LeftOrnament + dw DecorationDesc_RightOrnament + dw DecorationDesc_GiantOrnament + dw DecorationDesc_Console +; 26f69 + +DecorationDesc_Poster: ; 26f69 + ld a, [Poster] + ld hl, DecorationDesc_PosterPointers + ld de, 3 + call IsInArray + jr c, .nope + ld de, DecorationDesc_NullPoster + ld b, BANK(DecorationDesc_NullPoster) + ret + +.nope + ld b, BANK(DecorationDesc_TownMapPoster) + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + ret +; 26f84 + +DecorationDesc_PosterPointers: ; 26f84 + dbw DECO_TOWN_MAP, DecorationDesc_TownMapPoster + dbw DECO_PIKACHU_POSTER, DecorationDesc_PikachuPoster + dbw DECO_CLEFAIRY_POSTER, DecorationDesc_ClefairyPoster + dbw DECO_JIGGLYPUFF_POSTER, DecorationDesc_JigglypuffPoster + db -1 +; 26f91 + +DecorationDesc_TownMapPoster: ; 0x26f91 + loadfont + writetext .TownMapText + closetext + special Special_TownMap + loadmovesprites + end +; 0x26f9b + +.TownMapText: ; 0x26f9b + ; It's the TOWN MAP. + text_jump UnknownText_0x1bc55d + db "@" +; 0x26fa0 + +DecorationDesc_PikachuPoster: ; 0x26fa0 + jumptext .PikaPosterText +; 0x26fa3 + +.PikaPosterText: ; 0x26fa3 + ; It's a poster of a cute PIKACHU. + text_jump UnknownText_0x1bc570 + db "@" +; 0x26fa8 + +DecorationDesc_ClefairyPoster: ; 0x26fa8 + jumptext .ClefairyPosterText +; 0x26fab + +.ClefairyPosterText: ; 0x26fab + ; It's a poster of a cute CLEFAIRY. + text_jump UnknownText_0x1bc591 + db "@" +; 0x26fb0 + +DecorationDesc_JigglypuffPoster: ; 0x26fb0 + jumptext .JigglypuffPosterText +; 0x26fb3 + +.JigglypuffPosterText: ; 0x26fb3 + ; It's a poster of a cute JIGGLYPUFF. + text_jump UnknownText_0x1bc5b3 + db "@" +; 0x26fb8 + +DecorationDesc_NullPoster: ; 26fb8 + end +; 26fb9 + +DecorationDesc_LeftOrnament: ; 26fb9 + ld a, [LeftOrnament] + jr DecorationDesc_OrnamentOrConsole + +DecorationDesc_RightOrnament: ; 26fbe + ld a, [RightOrnament] + jr DecorationDesc_OrnamentOrConsole + +DecorationDesc_Console: ; 26fc3 + ld a, [Console] + jr DecorationDesc_OrnamentOrConsole + +DecorationDesc_OrnamentOrConsole: ; 26fc8 + ld c, a + ld de, StringBuffer3 + call GetDecorationName_c_de + ld b, BANK(.OrnamentConsoleScript) + ld de, .OrnamentConsoleScript + ret +; 26fd5 + +.OrnamentConsoleScript: ; 26fd5 + jumptext .OrnamentConsoleText +; 26fd8 + +.OrnamentConsoleText: ; 0x26fd8 + ; It's an adorable @ . + text_jump UnknownText_0x1bc5d7 + db "@" +; 0x26fdd + +DecorationDesc_GiantOrnament: ; 26fdd + ld b, BANK(.BigDollScript) + ld de, .BigDollScript + ret +; 26fe3 + +.BigDollScript: ; 26fe3 + jumptext .BigDollText +; 26fe6 + +.BigDollText: ; 0x26fe6 + ; A giant doll! It's fluffy and cuddly. + text_jump UnknownText_0x1bc5ef + db "@" +; 0x26feb + +ToggleMaptileDecorations: ; 26feb + lb de, 0, 4 + ld a, [Bed] + call SetDecorationTile + lb de, 7, 4 + ld a, [Plant] + call SetDecorationTile + lb de, 6, 0 + ld a, [Poster] + call SetDecorationTile + call SetPosterVisibility + lb de, 0, 0 + call PadCoords_de + ld a, [Carpet] + and a + ret z + call _GetDecorationSprite + ld [hl], a + push af + lb de, 0, 2 + call PadCoords_de + pop af + inc a + ld [hli], a + inc a + ld [hli], a + dec a + ld [hl], a + ret +; 27027 + +SetPosterVisibility: ; 27027 + ld b, SET_FLAG + ld a, [Poster] + and a + jr nz, .ok + ld b, RESET_FLAG + +.ok + ld de, EVENT_KRISS_ROOM_POSTER + jp EventFlagAction +; 27037 + +SetDecorationTile: ; 27037 + push af + call PadCoords_de + pop af + and a + ret z + call _GetDecorationSprite + ld [hl], a + ret +; 27043 + +ToggleDecorationsVisibility: ; 27043 + ld de, EVENT_KRISS_HOUSE_2F_CONSOLE + ld hl, VariableSprites + SPRITE_CONSOLE - SPRITE_VARS + ld a, [Console] + call ToggleDecorationVisibility + ld de, EVENT_KRISS_HOUSE_2F_DOLL_1 + ld hl, VariableSprites + SPRITE_DOLL_1 - SPRITE_VARS + ld a, [LeftOrnament] + call ToggleDecorationVisibility + ld de, EVENT_KRISS_HOUSE_2F_DOLL_2 + ld hl, VariableSprites + SPRITE_DOLL_2 - SPRITE_VARS + ld a, [RightOrnament] + call ToggleDecorationVisibility + ld de, EVENT_KRISS_HOUSE_2F_BIG_DOLL + ld hl, VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS + ld a, [BigDoll] + call ToggleDecorationVisibility + ret +; 27074 + +ToggleDecorationVisibility: ; 27074 + and a + jr z, .hide + call _GetDecorationSprite + ld [hl], a + ld b, RESET_FLAG + jp EventFlagAction + +.hide + ld b, SET_FLAG + jp EventFlagAction +; 27085 + +_GetDecorationSprite: ; 27085 + ld c, a + push de + push hl + callba GetDecorationSprite + pop hl + pop de + ld a, c + ret +; 27092 diff --git a/engine/diploma.asm b/engine/diploma.asm index 7699cf930..8f8ef9e99 100644 --- a/engine/diploma.asm +++ b/engine/diploma.asm @@ -1,5 +1,5 @@ -Function1dd702: ; 1dd702 +_Diploma: ; 1dd702 call Function1dd709 call WaitPressAorB_BlinkCursor ret @@ -31,7 +31,7 @@ Function1dd709: ; 1dd709 call PlaceString call EnableLCD call WaitBGMap - ld b, $8 + ld b, SCGB_08 call GetSGBLayout call SetPalettes call DelayFrame diff --git a/engine/dummy_game.asm b/engine/dummy_game.asm index 86d505e0e..4e8dad1a3 100755 --- a/engine/dummy_game.asm +++ b/engine/dummy_game.asm @@ -8,7 +8,7 @@ _DummyGame: ; e1e5b (38:5e5b) Functione1e67: ; e1e67 (38:5e67) call DisableLCD - ld b, $8 + ld b, SCGB_08 call GetSGBLayout callab Function8cf53 ld hl, LZ_e2221 @@ -123,7 +123,7 @@ Functione1f1c: ; e1f1c .asm_e1f30 ld de, $341c ld a, $c - call Function3b2a + call _InitSpriteAnimStruct ld a, $5 ld [wc702], a ld hl, wJumptableIndex diff --git a/engine/engine_flags.asm b/engine/engine_flags.asm index 5baa52cc4..74113b4a5 100644 --- a/engine/engine_flags.asm +++ b/engine/engine_flags.asm @@ -1,3 +1,90 @@ +EngineFlagAction:: ; 80430 +; Do action b on engine flag de +; +; b = 0: reset flag +; = 1: set flag +; > 1: check flag, result in c +; +; Setting/resetting does not return a result. + + +; 16-bit flag ids are considered invalid, but it's nice +; to know that the infrastructure is there. + + ld a, d + cp 0 + jr z, .ceiling + jr c, .read ; cp 0 can't set carry! + jr .invalid + +; There are only $a2 engine flags, so +; anything beyond that is invalid too. + +.ceiling + ld a, e + cp NUM_ENGINE_FLAGS + jr c, .read + +; Invalid flags are treated as flag 00. + +.invalid + xor a + ld e, a + ld d, a + +; Get this flag's location. + +.read + ld hl, EngineFlags +; location +rept 2 + add hl, de +endr +; bit + add hl, de + +; location + ld e, [hl] + inc hl + ld d, [hl] + inc hl +; bit + ld c, [hl] + +; What are we doing with this flag? + + ld a, b + cp 1 + jr c, .reset ; b = 0 + jr z, .set ; b = 1 + +; Return the given flag in c. +.check + ld a, [de] + and c + ld c, a + ret + +; Set the given flag. +.set + ld a, [de] + or c + ld [de], a + ret + +; Reset the given flag. +.reset + ld a, c + cpl ; AND all bits except the one in question + ld c, a + ld a, [de] + and c + ld [de], a + ret +; 80462 + + +EngineFlags: ; 80462 ; All locations are in WRAM bank 1. engine_flag: MACRO dwb \1, 1 << \2 @@ -22,7 +109,7 @@ ENDM engine_flag wMomSavingMoney, 0 ; mom saving money ; $8 engine_flag wMomSavingMoney, 7 ; dst - engine_flag wdc39, 0 + engine_flag wdc39, 0 ; unused, possibly related to a 2-day timer engine_flag StatusFlags, 0 ; pokedex engine_flag StatusFlags, 1 ; unown dex @@ -31,7 +118,7 @@ ENDM engine_flag StatusFlags, 6 ; credits skip engine_flag StatusFlags, 7 ; bug contest on ; $10 engine_flag StatusFlags2, 2 ; bug contest timer - engine_flag StatusFlags2, 1 + engine_flag StatusFlags2, 1 ; ??? engine_flag StatusFlags2, 0 ; rockets in radio tower engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd) engine_flag StatusFlags2, 5 ; give pokerus @@ -71,14 +158,14 @@ ENDM engine_flag UnlockedUnowns, 7 ; 8 ; fly - engine_flag VisitedSpawns, 0 ; your house - engine_flag VisitedSpawns, 1 ; viridian pokecenter - engine_flag VisitedSpawns, 2 ; pallet - engine_flag VisitedSpawns, 3 ; viridian - engine_flag VisitedSpawns, 4 ; pewter - engine_flag VisitedSpawns, 5 ; cerulean ; $38 - engine_flag VisitedSpawns, 6 ; rock tunnel - engine_flag VisitedSpawns, 7 ; vermilion + engine_flag VisitedSpawns, 0 ; your house + engine_flag VisitedSpawns, 1 ; viridian pokecenter + engine_flag VisitedSpawns, 2 ; pallet + engine_flag VisitedSpawns, 3 ; viridian + engine_flag VisitedSpawns, 4 ; pewter + engine_flag VisitedSpawns, 5 ; cerulean ; $38 + engine_flag VisitedSpawns, 6 ; rock tunnel + engine_flag VisitedSpawns, 7 ; vermilion engine_flag VisitedSpawns + 1, 0 ; lavender engine_flag VisitedSpawns + 1, 1 ; saffron engine_flag VisitedSpawns + 1, 2 ; celadon @@ -88,6 +175,7 @@ ENDM engine_flag VisitedSpawns + 1, 6 ; new bark engine_flag VisitedSpawns + 1, 7 ; cherrygrove engine_flag VisitedSpawns + 2, 0 ; violet + ; union cave engine_flag VisitedSpawns + 2, 2 ; azalea engine_flag VisitedSpawns + 2, 3 ; cianwood engine_flag VisitedSpawns + 2, 4 ; goldenrod @@ -97,6 +185,7 @@ ENDM engine_flag VisitedSpawns + 3, 0 ; lake of rage engine_flag VisitedSpawns + 3, 1 ; blackthorn engine_flag VisitedSpawns + 3, 2 ; silver cave + ; fast ship engine_flag VisitedSpawns + 3, 4 ; unused engine_flag wLuckyNumberShowFlag, 0 ; lucky number show @@ -157,7 +246,7 @@ ENDM engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece - engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see bittable1 $032b-e) + engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see EVENT_WADE_HAS_*** in constants/event_flags.asm) engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone ; $80 engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone @@ -165,7 +254,7 @@ ENDM engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow - engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see bittable1 $032f-31) + engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see EVENT_WILTON_HAS_*** in constants/event_flags.asm) engine_flag wDailyPhoneTimeOfDayFlags, 0 engine_flag wDailyPhoneTimeOfDayFlags, 1 ; $88 diff --git a/engine/events.asm b/engine/events.asm index bd26afffd..40e863cdc 100644 --- a/engine/events.asm +++ b/engine/events.asm @@ -24,13 +24,13 @@ OverworldLoop:: ; 966b0 ; 966cb -ClearAllScriptFlags3: ; 966cb +DisableEvents: ; 966cb xor a ld [ScriptFlags3], a ret ; 966d0 -SetAll_ScriptFlags3:: ; 966d0 +EnableEvents:: ; 966d0 ld a, $ff ld [ScriptFlags3], a ret @@ -42,73 +42,73 @@ CheckBit5_ScriptFlags3: ; 966d6 ret ; 966dc -ResetBit2_ScriptFlags3: ; 966dc +DisableWarpsConnxns: ; 966dc ld hl, ScriptFlags3 res 2, [hl] ret ; 966e2 -ResetBit1_ScriptFlags3: ; 966e2 +DisableCoordEvents: ; 966e2 ld hl, ScriptFlags3 res 1, [hl] ret ; 966e8 -ResetBit0_ScriptFlags3: ; 966e8 +DisableStepCount: ; 966e8 ld hl, ScriptFlags3 res 0, [hl] ret ; 966ee -ResetBit4_ScriptFlags3: ; 966ee +DisableWildEncounters: ; 966ee ld hl, ScriptFlags3 res 4, [hl] ret ; 966f4 -SetBit2_ScriptFlags3: ; 966f4 +EnableWarpsConnxns: ; 966f4 ld hl, ScriptFlags3 set 2, [hl] ret ; 966fa -SetBit1_ScriptFlags3: ; 966fa +EnableCoordEvents: ; 966fa ld hl, ScriptFlags3 set 1, [hl] ret ; 96700 -SetBit0_ScriptFlags3: ; 96700 +EnableStepCount: ; 96700 ld hl, ScriptFlags3 set 0, [hl] ret ; 96706 -SetBit4_ScriptFlags3: ; 96706 +EnableWildEncounters: ; 96706 ld hl, ScriptFlags3 set 4, [hl] ret ; 9670c -CheckBit2_ScriptFlags3: ; 9670c +CheckWarpConnxnScriptFlag: ; 9670c ld hl, ScriptFlags3 bit 2, [hl] ret ; 96712 -CheckBit1_ScriptFlags3: ; 96712 +CheckCoordEventScriptFlag: ; 96712 ld hl, ScriptFlags3 bit 1, [hl] ret ; 96718 -CheckBit0_ScriptFlags3: ; 96718 +CheckStepCountScriptFlag: ; 96718 ld hl, ScriptFlags3 bit 0, [hl] ret ; 9671e -CheckBit4_ScriptFlags3: ; 9671e +CheckWildEncountersScriptFlag: ; 9671e ld hl, ScriptFlags3 bit 4, [hl] ret @@ -135,13 +135,13 @@ EnterMap: ; 9673e ld [wd454], a call SetUpFiveStepWildEncounterCooldown callba RunMapSetupScript - call ClearAllScriptFlags3 + call DisableEvents ld a, [hMapEntryMethod] cp MAPSETUP_CONNECTION - jr nz, .dontset - call SetAll_ScriptFlags3 -.dontset + jr nz, .dont_enable + call EnableEvents +.dont_enable ld a, [hMapEntryMethod] cp MAPSETUP_RELOADMAP @@ -168,7 +168,7 @@ Function9676d: ; 9676d HandleMap: ; 96773 call ResetOverworldDelay call Function967c1 - callba Function97e08 + callba HandleCmdQueue ; no need to farcall call MapEvents ; Not immediately entering a connected map will cause problems. @@ -197,7 +197,7 @@ MapEvents: ; 96795 .events ; 967a1 call PlayerEvents - call ClearAllScriptFlags3 + call DisableEvents callba ScriptEvents ret ; 967ae @@ -238,28 +238,28 @@ Function967c1: ; 967c1 ; 967d1 Function967d1: ; 967d1 - callba Function576a + callba Function576a ; engine/map_objects.asm callba Functiond497 call Function96812 ret ; 967e1 Function967e1: ; 967e1 - callba RefreshMapAppearDisappear + callba _UpdateSprites callba Functiond4d2 callba PlaceMapNameSign ret ; 967f4 Function967f4: ; 967f4 - ld a, [wd150] + ld a, [wPlayerStepFlags] bit 5, a jr z, .events bit 6, a jr z, .noevents bit 4, a jr nz, .noevents - call SetAll_ScriptFlags3 + call EnableEvents .events ld a, 0 ; events @@ -273,7 +273,7 @@ Function967f4: ; 967f4 ; 96812 Function96812: ; 96812 - ld hl, wd150 + ld hl, wPlayerStepFlags bit 6, [hl] ret z @@ -355,8 +355,8 @@ CheckTrainerBattle3: ; 96867 CheckTileEvent: ; 96874 ; Check for warps, tile triggers or wild battles. - call CheckBit2_ScriptFlags3 - jr z, .bit2 + call CheckWarpConnxnScriptFlag + jr z, .connections_disabled callba CheckMovingOffEdgeOfMap jr c, .map_connection @@ -364,22 +364,22 @@ CheckTileEvent: ; 96874 call CheckWarpTile jr c, .warp_tile -.bit2 - call CheckBit1_ScriptFlags3 - jr z, .bit1 +.connections_disabled + call CheckCoordEventScriptFlag + jr z, .coord_events_disabled - call CheckCurrentMapXYTriggers - jr c, .movement + call CheckCurrentNextMapXYTriggers + jr c, .coord_event -.bit1 - call CheckBit0_ScriptFlags3 - jr z, .bit0 +.coord_events_disabled + call CheckStepCountScriptFlag + jr z, .step_count_disabled call CountStep ret c -.bit0 - call CheckBit4_ScriptFlags3 +.step_count_disabled + call CheckWildEncountersScriptFlag jr z, .ok call RandomEncounter @@ -396,7 +396,7 @@ CheckTileEvent: ; 96874 ret .warp_tile - ld a, [PlayerStandingTile] + ld a, [PlayerNextTile] call CheckPitTile jr nz, .not_pit ld a, PLAYEREVENT_FALL @@ -408,8 +408,8 @@ CheckTileEvent: ; 96874 scf ret -.movement - ld hl, MovementAnimation +.coord_event + ld hl, EngineBuffer5 ld a, [hli] ld h, [hl] ld l, a @@ -511,7 +511,7 @@ CheckTimeEvents: ; 9693a jr nz, .nothing ld hl, StatusFlags2 - bit 2, [hl] + bit 2, [hl] ; bug contest jr z, .do_daily callba CheckBugContestTimer @@ -552,7 +552,7 @@ OWPlayerInput: ; 96974 jr nz, .NoAction ; Can't perform button actions while sliding on ice. - callba Function80404 + callba CheckStandingOnIce jr c, .NoAction call CheckAPressOW @@ -635,21 +635,23 @@ TryObjectEvent: ; 969b5 jp [hl] .nope_bugged + ; pop bc xor a ret .pointers - dbw 0, .zero - dbw 1, .one - dbw 2, .two - dbw 3, .three - dbw 4, .four - dbw 5, .five - dbw 6, .six + dbw PERSONTYPE_SCRIPT, .script + dbw PERSONTYPE_ITEMFRAGMENT, .itemfragment + dbw PERSONTYPE_TRAINER, .trainer + ; the remaining four are dummy events + dbw PERSONTYPE_3, .three + dbw PERSONTYPE_4, .four + dbw PERSONTYPE_5, .five + dbw PERSONTYPE_6, .six db -1 ; 96a04 -.zero ; 96a04 +.script ; 96a04 ld hl, MAPOBJECT_SCRIPT_POINTER add hl, bc ld a, [hli] @@ -657,11 +659,10 @@ TryObjectEvent: ; 969b5 ld l, a call GetMapScriptHeaderBank call CallScript -; ld a, -1 ret ; 96a12 -.one ; 96a12 +.itemfragment ; 96a12 ld hl, MAPOBJECT_SCRIPT_POINTER add hl, bc ld a, [hli] @@ -671,14 +672,14 @@ TryObjectEvent: ; 969b5 ld de, EngineBuffer1 ld bc, 2 call FarCopyBytes - ld a, 3 + ld a, PLAYEREVENT_ITEMBALL scf ret ; 96a29 -.two ; 96a29 - call Function3674 - ld a, 2 +.trainer ; 96a29 + call TalkToTrainer + ld a, PLAYEREVENT_TALKTOTRAINER scf ret ; 96a30 @@ -729,16 +730,16 @@ TryReadSign: ; 96a38 ; 96a59 .up - ld b, UP << 2 + ld b, OW_UP jr .checkdir .down - ld b, DOWN << 2 + ld b, OW_DOWN jr .checkdir .right - ld b, RIGHT << 2 + ld b, OW_RIGHT jr .checkdir .left - ld b, LEFT << 2 + ld b, OW_LEFT jr .checkdir .checkdir @@ -1077,12 +1078,12 @@ PlayerEventScriptPointers: ; 96c0c dba SeenByTrainerScript ; 1 dba TalkToTrainerScript ; 2 dba FindItemInBallScript ; 3 - dba UnknownScript_0x96c4d ; 4 + dba EdgeWarpScript ; 4 dba WarpToNewMapScript ; 5 dba FallIntoMapScript ; 6 dba Script_OverworldWhiteout ; 7 dba HatchEggScript ; 8 - dba UnknownScript_0x96c4f ; 9 + dba ChangeDirectionScript ; 9 dba Invalid_0x96c2d ; 10 ; 96c2d @@ -1124,13 +1125,13 @@ LandAfterPitfallScript: ; 96c4a end ; 96c4d -UnknownScript_0x96c4d: ; 4 +EdgeWarpScript: ; 4 reloadandreturn MAPSETUP_CONNECTION ; 96c4f -UnknownScript_0x96c4f: ; 9 - deactivatefacing $3 - callasm SetBit4_ScriptFlags3 +ChangeDirectionScript: ; 9 + deactivatefacing 3 + callasm EnableWildEncounters end ; 96c56 diff --git a/engine/events_2.asm b/engine/events_2.asm index 9dd604a47..c9b673e81 100644 --- a/engine/events_2.asm +++ b/engine/events_2.asm @@ -3,8 +3,8 @@ WarpToSpawnPoint:: ; 97c28 ld hl, StatusFlags2 - res 1, [hl] - res 2, [hl] + res 1, [hl] ; ?? + res 2, [hl] ; bug contest ret ; 97c30 @@ -161,7 +161,7 @@ CanUseSweetScent:: ; 97cfd jr nc, .no .ice_check - ld a, [PlayerStandingTile] + ld a, [PlayerNextTile] call CheckIceTile jr z, .no scf @@ -235,7 +235,7 @@ ChooseWildEncounter_BugContest:: ; 97d31 ; 97d64 TryWildEncounter_BugContest: ; 97d64 - ld a, [PlayerStandingTile] + ld a, [PlayerNextTile] call CheckSuperTallGrassTile ld b, 40 percent jr z, .ok @@ -275,7 +275,7 @@ DoBikeStep:: ; 97db3 ; if we've already gotten the call, we don't have to ; be here. ld hl, StatusFlags2 - bit 4, [hl] + bit 4, [hl] ; bike shop call jr z, .NoCall ; If we're not on the bike, we don't have to be here. @@ -326,7 +326,7 @@ DoBikeStep:: ; 97db3 xor a ld [wSpecialPhoneCallID + 1], a ld hl, StatusFlags2 - res 4, [hl] + res 4, [hl] ; bike shop call scf ret @@ -335,8 +335,8 @@ DoBikeStep:: ; 97db3 ret ; 97df9 -Function97df9:: ; 97df9 - ld hl, wd6de +ClearCmdQueue:: ; 97df9 + ld hl, wCmdQueue ld de, 6 ld c, 4 xor a @@ -348,8 +348,8 @@ Function97df9:: ; 97df9 ret ; 97e08 -Function97e08:: ; 97e08 - ld hl, wd6de +HandleCmdQueue:: ; 97e08 + ld hl, wCmdQueue xor a .loop ld [hMapObjectIndexBuffer], a @@ -359,106 +359,106 @@ Function97e08:: ; 97e08 push hl ld b, h ld c, l - call Function97e79 + call HandleQueuedCommand pop hl .skip - ld de, $0006 + ld de, CMDQUEUE_ENTRY_SIZE add hl, de ld a, [hMapObjectIndexBuffer] inc a - cp $4 + cp CMDQUEUE_CAPACITY jr nz, .loop ret ; 97e25 -Function97e25: ; 97e25 - ld hl, wd6de - ld bc, 6 +GetNthCmdQueueEntry: ; 97e25 unreferenced + ld hl, wCmdQueue + ld bc, CMDQUEUE_ENTRY_SIZE call AddNTimes ld b, h ld c, l ret ; 97e31 -Function97e31:: ; 97e31 +WriteCmdQueue:: ; 97e31 push bc push de - call Function97e45 + call .GetNextEmptyEntry ld d, h ld e, l pop hl pop bc ret c ld a, b - ld bc, $0005 + ld bc, CMDQUEUE_ENTRY_SIZE - 1 call FarCopyBytes xor a ld [hl], a ret ; 97e45 -Function97e45: ; 97e45 - ld hl, wd6de - ld de, $0006 - ld c, $4 -.asm_97e4d +.GetNextEmptyEntry: ; 97e45 + ld hl, wCmdQueue + ld de, CMDQUEUE_ENTRY_SIZE + ld c, CMDQUEUE_CAPACITY +.loop ld a, [hl] and a - jr z, .asm_97e57 + jr z, .done add hl, de dec c - jr nz, .asm_97e4d + jr nz, .loop scf ret -.asm_97e57 - ld a, $4 +.done + ld a, CMDQUEUE_CAPACITY sub c and a ret ; 97e5c -Function97e5c:: ; 97e5c - ld hl, wd6de - ld de, $0006 - ld c, $4 -.asm_97e64 +DelCmdQueue:: ; 97e5c + ld hl, wCmdQueue + ld de, CMDQUEUE_ENTRY_SIZE + ld c, CMDQUEUE_CAPACITY +.loop ld a, [hl] cp b - jr z, .asm_97e6e + jr z, .done add hl, de dec c - jr nz, .asm_97e64 + jr nz, .loop and a ret -.asm_97e6e +.done xor a ld [hl], a scf ret ; 97e72 -Function97e72: ; 97e72 - ld hl, 0 +_DelCmdQueue: ; 97e72 + ld hl, CMDQUEUE_TYPE add hl, bc ld [hl], 0 ret ; 97e79 -Function97e79: ; 97e79 - ld hl, 0 +HandleQueuedCommand: ; 97e79 + ld hl, CMDQUEUE_TYPE add hl, bc ld a, [hl] cp 5 - jr c, .asm_97e83 + jr c, .okay xor a -.asm_97e83 +.okay ld e, a ld d, 0 - ld hl, Table97e94 + ld hl, .Jumptable_ba rept 3 add hl, de endr @@ -472,16 +472,16 @@ endr ret ; 97e94 -Table97e94: ; 97e94 - dba Function97eb7 - dba Function97eb8 - dba Function97f42 - dba Function97ef9 - dba Function97ebc +.Jumptable_ba: ; 97e94 + dba CmdQueue_Null + dba CmdQueue_Null2 + dba CmdQueue_StoneTable + dba CmdQueue_Type3 + dba CmdQueue_Type4 ; 97ea3 -Function97ea3: ; 97ea3 - ld hl, $0005 +CmdQueueAnonymousJumptable: ; 97ea3 + ld hl, CMDQUEUE_05 add hl, bc ld a, [hl] pop hl @@ -489,45 +489,44 @@ Function97ea3: ; 97ea3 ret ; 97eab -Function97eab: ; 97eab - ld hl, $0005 +CmdQueueAnonJT_Increment: ; 97eab + ld hl, CMDQUEUE_05 add hl, bc inc [hl] ret ; 97eb1 -Function97eb1: ; 97eb1 - ld hl, $0005 +CmdQueueAnonJT_Decrement: ; 97eb1 + ld hl, CMDQUEUE_05 add hl, bc dec [hl] ret ; 97eb7 -Function97eb7: ; 97eb7 +CmdQueue_Null: ; 97eb7 ret ; 97eb8 -Function97eb8: ; 97eb8 +CmdQueue_Null2: ; 97eb8 call ret_2f3e ret ; 97ebc -Function97ebc: ; 97ebc - call Function97ea3 - dw Function97ec3 - dw Function97ecd +CmdQueue_Type4: ; 97ebc + call CmdQueueAnonymousJumptable + ; anonymous jumptable + dw .zero + dw .one ; 97ec3 -Function97ec3: ; 97ec3 +.zero: ; 97ec3 ld a, [hSCY] - ld hl, $0004 + ld hl, 4 add hl, bc ld [hl], a - call Function97eab -; 97ecd - -Function97ecd: ; 97ecd - ld hl, $0001 + call CmdQueueAnonJT_Increment +.one: ; 97ecd + ld hl, 1 add hl, bc ld a, [hl] dec a @@ -535,7 +534,7 @@ Function97ecd: ; 97ecd jr z, .asm_97eee and $1 jr z, .asm_97ee4 - ld hl, $0002 + ld hl, 2 add hl, bc ld a, [hSCY] sub [hl] @@ -543,7 +542,7 @@ Function97ecd: ; 97ecd ret .asm_97ee4 - ld hl, $0002 + ld hl, 2 add hl, bc ld a, [hSCY] add [hl] @@ -551,61 +550,60 @@ Function97ecd: ; 97ecd ret .asm_97eee - ld hl, $0004 + ld hl, 4 add hl, bc ld a, [hl] ld [hSCY], a - call Function97e72 + call _DelCmdQueue ret ; 97ef9 -Function97ef9: ; 97ef9 - call Function97ea3 - dw Function97f02 - dw Function97f0a - dw Function97f1b +CmdQueue_Type3: ; 97ef9 + call CmdQueueAnonymousJumptable + ; anonymous jumptable + dw .zero + dw .one + dw .two ; 97f02 -Function97f02: ; 97f02 - call Function97f38 - jr z, Function97f2c - call Function97eab -; 97f0a - -Function97f0a: ; 97f0a - call Function97f38 - jr z, Function97f2c - call Function97eab +.zero: ; 97f02 + call .IsPlayerFacingDown + jr z, .PlayerNotFacingDown + call CmdQueueAnonJT_Increment +.one: ; 97f0a + call .IsPlayerFacingDown + jr z, .PlayerNotFacingDown + call CmdQueueAnonJT_Increment - ld hl, $0002 + ld hl, 2 add hl, bc ld a, [hl] ld [wd173], a ret ; 97f1b -Function97f1b: ; 97f1b - call Function97f38 - jr z, Function97f2c - call Function97eb1 +.two: ; 97f1b + call .IsPlayerFacingDown + jr z, .PlayerNotFacingDown + call CmdQueueAnonJT_Decrement - ld hl, $0003 + ld hl, 3 add hl, bc ld a, [hl] ld [wd173], a ret ; 97f2c -Function97f2c: ; 97f2c +.PlayerNotFacingDown: ; 97f2c ld a, $7f ld [wd173], a - ld hl, $0005 + ld hl, 5 add hl, bc ld [hl], 0 ret ; 97f38 -Function97f38: ; 97f38 +.IsPlayerFacingDown: ; 97f38 push bc ld bc, PlayerStruct call GetSpriteDirection @@ -614,50 +612,50 @@ Function97f38: ; 97f38 ret ; 97f42 -Function97f42: ; 97f42 +CmdQueue_StoneTable: ; 97f42 ld de, PlayerStruct - ld a, $d -.asm_97f47 + ld a, NUM_OBJECT_STRUCTS +.loop push af - ld hl, 0 + ld hl, OBJECT_SPRITE add hl, de ld a, [hl] and a - jr z, .asm_97f71 + jr z, .next - ld hl, $0003 + ld hl, OBJECT_MOVEMENTTYPE add hl, de ld a, [hl] - cp $19 - jr nz, .asm_97f71 + cp STEP_TYPE_19 + jr nz, .next - ld hl, $000e + ld hl, OBJECT_NEXT_TILE add hl, de ld a, [hl] call CheckPitTile - jr nz, .asm_97f71 + jr nz, .next - ld hl, $0007 + ld hl, OBJECT_DIRECTION_WALKING add hl, de ld a, [hl] - cp $ff - jr nz, .asm_97f71 - call Function3567 - jr c, .asm_97f7c + cp STANDING + jr nz, .next + call HandleStoneQueue + jr c, .fall_down_hole -.asm_97f71 - ld hl, $0028 +.next + ld hl, OBJECT_STRUCT_LENGTH add hl, de ld d, h ld e, l pop af dec a - jr nz, .asm_97f47 + jr nz, .loop ret -.asm_97f7c +.fall_down_hole pop af ret ; 97f7e diff --git a/engine/evolution_animation.asm b/engine/evolution_animation.asm index 69e7aec4c..835db8b52 100755 --- a/engine/evolution_animation.asm +++ b/engine/evolution_animation.asm @@ -52,11 +52,11 @@ _EvolutionAnimation: ; 4e607 ld [PlayerHPPal], a ld c, $0 - call Function4e703 + call .GetSGBLayout ld a, [Buffer1] ld [CurPartySpecies], a ld [CurSpecies], a - call Function4e708 + call .PlaceFrontpic ld de, VTiles2 ld hl, VTiles2 tile $31 @@ -65,11 +65,11 @@ _EvolutionAnimation: ; 4e607 ld a, $31 ld [wd1ec], a - call Evolution_FlashFrontpics + call .ReplaceFrontpic ld a, [Buffer2] ld [CurPartySpecies], a ld [CurSpecies], a - call Function4e711 + call .LoadFrontpic ld a, [Buffer1] ld [CurPartySpecies], a ld [CurSpecies], a @@ -90,14 +90,14 @@ _EvolutionAnimation: ; 4e607 call DelayFrames ld c, $1 - call Function4e703 - call Function4e726 - jr c, .pressed_b + call .GetSGBLayout + call .AnimationSequence + jr c, .cancel_evo - ld a, $cf + ld a, -7 * 7 ld [wd1ec], a - call Evolution_FlashFrontpics + call .ReplaceFrontpic xor a ld [wd1ed], a @@ -105,7 +105,7 @@ _EvolutionAnimation: ; 4e607 ld [PlayerHPPal], a ld c, $0 - call Function4e703 + call .GetSGBLayout call Function4e7a6 callba Function8cf53 call Function4e794 @@ -134,7 +134,7 @@ _EvolutionAnimation: ; 4e607 .asm_4e6de ret -.pressed_b +.cancel_evo ld a, $1 ld [wd1ed], a @@ -142,7 +142,7 @@ _EvolutionAnimation: ; 4e607 ld [PlayerHPPal], a ld c, $0 - call Function4e703 + call .GetSGBLayout call Function4e7a6 callba Function8cf53 call Function4e794 @@ -153,38 +153,38 @@ _EvolutionAnimation: ; 4e607 ret ; 4e703 -Function4e703: ; 4e703 - ld b, $b +.GetSGBLayout: ; 4e703 + ld b, SCGB_0B jp GetSGBLayout ; 4e708 -Function4e708: ; 4e708 +.PlaceFrontpic: ; 4e708 call GetBaseData hlcoord 7, 2 jp PrepMonFrontpic ; 4e711 -Function4e711: ; 4e711 +.LoadFrontpic: ; 4e711 call GetBaseData ld a, $1 ld [wc2c6], a ld de, VTiles2 - predef Function5108b + predef FrontpicPredef xor a ld [wc2c6], a ret ; 4e726 -Function4e726: ; 4e726 +.AnimationSequence: ; 4e726 call ClearJoypad - lb bc, 1, 14 + lb bc, 1, 2 * 7 ; flash b times, wait c frames in between .loop push bc - call Evolution_CheckPressedB + call .WaitFrames_CheckPressedB pop bc - jr c, .pressed_b + jr c, .exit_sequence push bc - call Evolution_NextFrame + call .Flash pop bc inc b rept 2 @@ -194,31 +194,30 @@ endr and a ret -.pressed_b +.exit_sequence scf ret ; 4e741 -Evolution_NextFrame: ; 4e741 -.loop - ld a, -49 +.Flash: ; 4e741 + ld a, -7 * 7 ; new stage ld [wd1ec], a - call Evolution_FlashFrontpics - ld a, 49 + call .ReplaceFrontpic + ld a, 7 * 7 ; previous stage ld [wd1ec], a - call Evolution_FlashFrontpics + call .ReplaceFrontpic dec b - jr nz, .loop + jr nz, .Flash ret ; 4e755 -Evolution_FlashFrontpics: ; 4e755 +.ReplaceFrontpic: ; 4e755 push bc xor a ld [hBGMapMode], a hlcoord 7, 2 lb bc, 7, 7 - ld de, $d + ld de, SCREEN_WIDTH - 7 .loop1 push bc .loop2 @@ -238,8 +237,7 @@ Evolution_FlashFrontpics: ; 4e755 ret ; 4e779 -Evolution_CheckPressedB: ; 4e779 -.loop +.WaitFrames_CheckPressedB: ; 4e779 call DelayFrame push bc call JoyTextDelay @@ -247,16 +245,16 @@ Evolution_CheckPressedB: ; 4e779 pop bc and B_BUTTON jr nz, .pressed_b -.loop2 +.loop3 dec c - jr nz, .loop + jr nz, .WaitFrames_CheckPressedB and a ret .pressed_b ld a, [wd1e9] and a - jr nz, .loop2 + jr nz, .loop3 scf ret ; 4e794 @@ -281,18 +279,18 @@ Function4e7a6: ; 4e7a6 ld a, [hl] push af ld [hl], $0 -.asm_4e7b8 +.loop call Function4e7cf - jr nc, .asm_4e7c2 + jr nc, .done call Function4e80c - jr .asm_4e7b8 + jr .loop -.asm_4e7c2 +.done ld c, $20 -.asm_4e7c4 +.loop2 call Function4e80c dec c - jr nz, .asm_4e7c4 + jr nz, .loop2 pop af ld [wJumptableIndex], a ret @@ -319,9 +317,9 @@ Function4e7cf: ; 4e7cf Function4e7e8: ; 4e7e8 push de - ld de, $4858 + lb de, $48, $58 ld a, $13 - call Function3b2a + call _InitSpriteAnimStruct ld hl, $b add hl, bc ld a, [wJumptableIndex] @@ -342,6 +340,7 @@ Function4e7e8: ; 4e7e8 Function4e80c: ; 4e80c push bc callab Function8cf69 + ; a = (([hVBlankCounter] + 4) / 2) % NUM_PALETTES ld a, [hVBlankCounter] and $e srl a @@ -350,9 +349,9 @@ rept 2 endr and $7 ld b, a - ld hl, Sprites + 3 - ld c, $28 -.asm_4e823 + ld hl, Sprites + 3 ; attributes + ld c, 40 +.loop ld a, [hl] or b ld [hli], a @@ -360,7 +359,7 @@ rept 3 inc hl endr dec c - jr nz, .asm_4e823 + jr nz, .loop pop bc call DelayFrame ret @@ -378,7 +377,7 @@ Function4e881: ; 4e881 call DisableLCD call LoadStandardFont call LoadFontsBattleExtra - ld hl, VBGMap0 + hlbgcoord 0, 0 ld bc, VBGMap1 - VBGMap0 ld a, " " call ByteFill @@ -411,7 +410,7 @@ Function4e8c2: ; 4e8c2 call DisableLCD call LoadStandardFont call LoadFontsBattleExtra - ld hl, VBGMap0 + hlbgcoord 0, 0 ld bc, VBGMap1 - VBGMap0 ld a, " " call ByteFill @@ -446,7 +445,7 @@ Function4e906: ; 4e906 ld bc, w6_d400 - w6_d000 ld a, " " call ByteFill - ld hl, VBGMap0 + hlbgcoord 0, 0 ld de, w6_d000 ld b, $0 ld c, $40 diff --git a/engine/evolve.asm b/engine/evolve.asm new file mode 100755 index 000000000..6772db932 --- /dev/null +++ b/engine/evolve.asm @@ -0,0 +1,682 @@ +EvolvePokemon: ; 421d8 + ld hl, EvolvableFlags + xor a + ld [hl], a + ld a, [CurPartyMon] + ld c, a + ld b, SET_FLAG + call EvoFlagAction + +EvolveAfterBattle: ; 421e6 + xor a + ld [wMonTriedToEvolve], a + dec a + ld [CurPartyMon], a + push hl + push bc + push de + ld hl, PartyCount + + push hl + +CheckForEvolvablePokemon: ; 421f5 + ld hl, CurPartyMon + inc [hl] + + pop hl + + inc hl + ld a, [hl] + cp $ff + jp z, Evolution_ReturnToMap + + ld [Buffer1], a + + push hl + ld a, [CurPartyMon] + ld c, a + ld hl, EvolvableFlags + ld b, CHECK_FLAG + call EvoFlagAction + ld a, c + and a + jp z, CheckForEvolvablePokemon + + ld a, [Buffer1] + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + + push hl + xor a + ld [MonType], a + predef CopyPkmnToTempMon + pop hl + +.loop + ld a, [hli] + and a + jr z, CheckForEvolvablePokemon + + ld b, a + + cp EVOLVE_TRADE + jr z, .trade + + ld a, [wLinkMode] + and a + jp nz, .dont_evolve_2 + + ld a, b + cp EVOLVE_ITEM + jp z, .item + + ld a, [wd1e9] + and a + jp nz, .dont_evolve_2 + + ld a, b + cp EVOLVE_LEVEL + jp z, .level + + cp EVOLVE_HAPPINESS + jr z, .happiness + + +; EVOLVE_STAT + ld a, [TempMonLevel] + cp [hl] + jp c, .dont_evolve_1 + + call IsMonHoldingEverstone + jp z, .dont_evolve_1 + + push hl + ld de, TempMonAttack + ld hl, TempMonDefense + ld c, 2 + call StringCmp + ld a, ATK_EQ_DEF + jr z, .got_tyrogue_evo + ld a, ATK_LT_DEF + jr c, .got_tyrogue_evo + ld a, ATK_GT_DEF +.got_tyrogue_evo + pop hl + + inc hl + cp [hl] + jp nz, .dont_evolve_2 + + inc hl + jr .proceed + + +.happiness + ld a, [TempMonHappiness] + cp 220 + jp c, .dont_evolve_2 + + call IsMonHoldingEverstone + jp z, .dont_evolve_2 + + ld a, [hli] + cp TR_ANYTIME + jr z, .proceed + cp TR_MORNDAY + jr z, .happiness_daylight + +; TR_NITE + ld a, [TimeOfDay] + cp NITE + jp nz, .dont_evolve_3 + jr .proceed + +.happiness_daylight + ld a, [TimeOfDay] + cp NITE + jp z, .dont_evolve_3 + jr .proceed + + +.trade + ld a, [wLinkMode] + and a + jp z, .dont_evolve_2 + + call IsMonHoldingEverstone + jp z, .dont_evolve_2 + + ld a, [hli] + ld b, a + inc a + jr z, .proceed + + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jp z, .dont_evolve_3 + + ld a, [TempMonItem] + cp b + jp nz, .dont_evolve_3 + + xor a + ld [TempMonItem], a + jr .proceed + + +.item + ld a, [hli] + ld b, a + ld a, [CurItem] + cp b + jp nz, .dont_evolve_3 + + ld a, [wd1e9] + and a + jp z, .dont_evolve_3 + ld a, [wLinkMode] + and a + jp nz, .dont_evolve_3 + jr .proceed + + +.level + ld a, [hli] + ld b, a + ld a, [TempMonLevel] + cp b + jp c, .dont_evolve_3 + call IsMonHoldingEverstone + jp z, .dont_evolve_3 + +.proceed + ld a, [TempMonLevel] + ld [CurPartyLevel], a + ld a, $1 + ld [wMonTriedToEvolve], a + + push hl + + ld a, [hl] + ld [Buffer2], a + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + call GetNick + call CopyName1 + ld hl, Text_WhatEvolving + call PrintText + + ld c, 50 + call DelayFrames + + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + lb bc, 12, 20 + call ClearBox + + ld a, $1 + ld [hBGMapMode], a + call ClearSprites + + callba EvolutionAnimation + + push af + call ClearSprites + pop af + jp c, CancelEvolution + + ld hl, Text_CongratulationsYourPokemon + call PrintText + + pop hl + + ld a, [hl] + ld [CurSpecies], a + ld [TempMonSpecies], a + ld [Buffer2], a + ld [wd265], a + call GetPokemonName + + push hl + ld hl, Text_EvolvedIntoPKMN + call PrintTextBoxText + callba MobileFn_106094 + + ld de, MUSIC_NONE + call PlayMusic + ld de, SFX_CAUGHT_MON + call PlaySFX + call WaitSFX + + ld c, 40 + call DelayFrames + + call ClearTileMap + call UpdateSpeciesNameIfNotNicknamed + call GetBaseData + + ld hl, TempMonExp + 2 + ld de, TempMonMaxHP + ld b, $1 + predef CalcPkmnStats + + ld a, [CurPartyMon] + ld hl, PartyMons + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld e, l + ld d, h + ld bc, MON_MAXHP + add hl, bc + ld a, [hli] + ld b, a + ld c, [hl] + ld hl, TempMonMaxHP + 1 + ld a, [hld] + sub c + ld c, a + ld a, [hl] + sbc b + ld b, a + ld hl, TempMonHP + 1 + ld a, [hl] + add c + ld [hld], a + ld a, [hl] + adc b + ld [hl], a + + ld hl, TempMonSpecies + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + + ld a, [CurSpecies] + ld [wd265], a + xor a + ld [MonType], a + call LearnLevelMoves + ld a, [wd265] + dec a + call SetSeenAndCaughtMon + + ld a, [wd265] + cp UNOWN + jr nz, .skip_unown + + ld hl, TempMonDVs + predef GetUnownLetter + callab UpdateUnownDex + +.skip_unown + pop de + pop hl + ld a, [TempMonSpecies] + ld [hl], a + push hl + ld l, e + ld h, d + jp CheckForEvolvablePokemon +; 423f8 + +.dont_evolve_1 + inc hl +.dont_evolve_2 + inc hl +.dont_evolve_3 + inc hl + jp .loop +; 423fe + +; dummy pop + pop hl + +Evolution_ReturnToMap: ; 423ff + pop de + pop bc + pop hl + ld a, [wLinkMode] + and a + ret nz + ld a, [wBattleMode] + and a + ret nz + ld a, [wMonTriedToEvolve] + and a + call nz, RestartMapMusic + ret +; 42414 + +UpdateSpeciesNameIfNotNicknamed: ; 42414 + ld a, [CurSpecies] + push af + ld a, [BaseDexNo] + ld [wd265], a + call GetPokemonName + pop af + ld [CurSpecies], a + ld hl, StringBuffer1 + ld de, StringBuffer2 +.loop + ld a, [de] + inc de + cp [hl] + inc hl + ret nz + cp "@" + jr nz, .loop + + ld a, [CurPartyMon] + ld bc, PKMN_NAME_LENGTH + ld hl, PartyMonNicknames + call AddNTimes + push hl + ld a, [CurSpecies] + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + pop de + ld bc, PKMN_NAME_LENGTH + jp CopyBytes +; 42454 + +CancelEvolution: ; 42454 + ld hl, Text_StoppedEvolving + call PrintText + call ClearTileMap + pop hl + jp CheckForEvolvablePokemon +; 42461 + +IsMonHoldingEverstone: ; 42461 + push hl + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + cp EVERSTONE + pop hl + ret +; 42473 + +Text_CongratulationsYourPokemon: ; 0x42473 + ; Congratulations! Your @ @ + text_jump UnknownText_0x1c4b92 + db "@" +; 0x42478 + +Text_EvolvedIntoPKMN: ; 0x42478 + ; evolved into @ ! + text_jump UnknownText_0x1c4baf + db "@" +; 0x4247d + +Text_StoppedEvolving: ; 0x4247d + ; Huh? @ stopped evolving! + text_jump UnknownText_0x1c4bc5 + db "@" +; 0x42482 + +Text_WhatEvolving: ; 0x42482 + ; What? @ is evolving! + text_jump UnknownText_0x1c4be3 + db "@" +; 0x42487 + + +LearnLevelMoves: ; 42487 + ld a, [wd265] + ld [CurPartySpecies], a + dec a + ld b, 0 + ld c, a + ld hl, EvosAttacksPointers +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + +.skip_evos + ld a, [hli] + and a + jr nz, .skip_evos + +.find_move + ld a, [hli] + and a + jr z, .done + + ld b, a + ld a, [CurPartyLevel] + cp b + ld a, [hli] + jr nz, .find_move + + push hl + ld d, a + ld hl, PartyMon1Moves + ld a, [CurPartyMon] + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + + ld b, NUM_MOVES +.check_move + ld a, [hli] + cp d + jr z, .has_move + dec b + jr nz, .check_move + jr .learn +.has_move + + pop hl + jr .find_move + +.learn + ld a, d + ld [wd262], a + ld [wd265], a + call GetMoveName + call CopyName1 + predef LearnMove + pop hl + jr .find_move + +.done + ld a, [CurPartySpecies] + ld [wd265], a + ret +; 424e1 + + +FillMoves: ; 424e1 +; Fill in moves at de for CurPartySpecies at CurPartyLevel + + push hl + push de + push bc + ld hl, EvosAttacksPointers + ld b, 0 + ld a, [CurPartySpecies] + dec a + add a + rl b + ld c, a + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.GoToAttacks + ld a, [hli] + and a + jr nz, .GoToAttacks + jr .GetLevel + +.NextMove + pop de +.GetMove + inc hl +.GetLevel + ld a, [hli] + and a + jp z, .done + ld b, a + ld a, [CurPartyLevel] + cp b + jp c, .done + ld a, [Buffer1] + and a + jr z, .CheckMove + ld a, [wd002] + cp b + jr nc, .GetMove + +.CheckMove + push de + ld c, NUM_MOVES +.CheckRepeat + ld a, [de] + inc de + cp [hl] + jr z, .NextMove + dec c + jr nz, .CheckRepeat + pop de + push de + ld c, NUM_MOVES +.CheckSlot + ld a, [de] + and a + jr z, .LearnMove + inc de + dec c + jr nz, .CheckSlot + pop de + push de + push hl + ld h, d + ld l, e + call ShiftMoves + ld a, [Buffer1] + and a + jr z, .ShiftedMove + push de + ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES - 1) + add hl, bc + ld d, h + ld e, l + call ShiftMoves + pop de + +.ShiftedMove + pop hl + +.LearnMove + ld a, [hl] + ld [de], a + ld a, [Buffer1] + and a + jr z, .NextMove + push hl + ld a, [hl] + ld hl, MON_PP - MON_MOVES + add hl, de + push hl + dec a + ld hl, Moves + MOVE_PP + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + pop hl + ld [hl], a + pop hl + jr .NextMove + +.done + pop bc + pop de + pop hl + ret +; 4256e + +ShiftMoves: ; 4256e + ld c, NUM_MOVES - 1 +.loop + inc de + ld a, [de] + ld [hli], a + dec c + jr nz, .loop + ret +; 42577 + + +EvoFlagAction: ; 42577 + push de + ld d, $0 + predef FlagPredef + pop de + ret +; 42581 + +GetPreEvolution: ; 42581 +; Find the first mon to evolve into CurPartySpecies. + +; Return carry and the new species in CurPartySpecies +; if a pre-evolution is found. + + ld c, 0 +.loop ; For each Pokemon... + ld hl, EvosAttacksPointers + ld b, 0 +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a +.loop2 ; For each evolution... + ld a, [hli] + and a + jr z, .no_evolve ; If we jump, this Pokemon does not evolve into CurPartySpecies. + cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison. + jr nz, .not_tyrogue + inc hl + +.not_tyrogue + inc hl + ld a, [CurPartySpecies] + cp [hl] + jr z, .found_preevo + inc hl + ld a, [hl] + and a + jr nz, .loop2 + +.no_evolve + inc c + ld a, c + cp NUM_POKEMON + jr c, .loop + and a + ret + +.found_preevo + inc c + ld a, c + ld [CurPartySpecies], a + scf + ret +; 425b1 diff --git a/engine/facings.asm b/engine/facings.asm index 47e6fd352..f807e77f8 100644 --- a/engine/facings.asm +++ b/engine/facings.asm @@ -50,7 +50,7 @@ BEHIND_BG EQU 1 << OAM_PRIORITY Facing00: Facing02: Facing24: -Facing26: ; 408b +Facing26: ; standing down db 4 ; # db 0, 0, 0, $00 db 0, 8, 0, $01 @@ -58,7 +58,7 @@ Facing26: ; 408b db 8, 8, 2, $03 ; 409c -Facing01: ; 409c +Facing01: ; walking down 1 db 4 ; # db 0, 0, 0, $80 db 0, 8, 0, $81 @@ -66,7 +66,7 @@ Facing01: ; 409c db 8, 8, 2, $83 ; 40ad -Facing03: ; 40ad +Facing03: ; walking down 2 db 4 ; # db 0, 8, X_FLIP, $80 db 0, 0, X_FLIP, $81 @@ -75,7 +75,7 @@ Facing03: ; 40ad ; 40be Facing04: -Facing06: ; 40be +Facing06: ; standing up db 4 ; # db 0, 0, 0, $04 db 0, 8, 0, $05 @@ -83,7 +83,7 @@ Facing06: ; 40be db 8, 8, 2, $07 ; 40cf -Facing05: ; 40cf +Facing05: ; walking up 1 db 4 ; # db 0, 0, 0, $84 db 0, 8, 0, $85 @@ -91,7 +91,7 @@ Facing05: ; 40cf db 8, 8, 2, $87 ; 40e0 -Facing07: ; 40e0 +Facing07: ; walking up 2 db 4 ; # db 0, 8, X_FLIP, $84 db 0, 0, X_FLIP, $85 @@ -100,7 +100,7 @@ Facing07: ; 40e0 ; 40f1 Facing08: -Facing10: ; 40f1 +Facing10: ; standing left db 4 ; # db 0, 0, 0, $08 db 0, 8, 0, $09 @@ -109,7 +109,7 @@ Facing10: ; 40f1 ; 4102 Facing12: -Facing14: ; 4102 +Facing14: ; standing right db 4 ; # db 0, 8, X_FLIP, $08 db 0, 0, X_FLIP, $09 @@ -118,7 +118,7 @@ Facing14: ; 4102 ; 4113 Facing09: -Facing11: ; 4113 +Facing11: ; walking left db 4 ; # db 0, 0, 0, $88 db 0, 8, 0, $89 @@ -127,7 +127,7 @@ Facing11: ; 4113 ; 4124 Facing13: -Facing15: ; 4124 +Facing15: ; walking right db 4 ; # db 0, 8, X_FLIP, $88 db 0, 0, X_FLIP, $89 @@ -135,7 +135,7 @@ Facing15: ; 4124 db 8, 0, 2 | X_FLIP, $8b ; 4135 -Facing16: ; 4135 +Facing16: ; fishing down db 5 ; # db 0, 0, 0, $00 db 0, 8, 0, $01 @@ -144,7 +144,7 @@ Facing16: ; 4135 db 16, 0, 4, $fc ; 414a -Facing17: ; 414a +Facing17: ; fishing up db 5 ; # db 0, 0, 0, $04 db 0, 8, 0, $05 @@ -153,7 +153,7 @@ Facing17: ; 414a db -8, 0, 4, $fc ; 415f -Facing18: ; 415f +Facing18: ; fishing left db 5 ; # db 0, 0, 0, $08 db 0, 8, 0, $09 @@ -162,7 +162,7 @@ Facing18: ; 415f db 5, -8, 4 | X_FLIP, $fd ; 4174 -Facing19: ; 4174 +Facing19: ; fishing right db 5 ; # db 0, 8, X_FLIP, $08 db 0, 0, X_FLIP, $09 @@ -171,7 +171,7 @@ Facing19: ; 4174 db 5, 16, 4, $fd ; 4189 -Facing20: ; 4189 +Facing20: ; emote db 4 ; # db 0, 0, 4, $f8 db 0, 8, 4, $f9 @@ -179,13 +179,13 @@ Facing20: ; 4189 db 8, 8, 4, $fb ; 419a -Facing21: ; 419a +Facing21: ; shadow db 2 ; # db 0, 0, 4, $fc db 0, 8, 4 | X_FLIP, $fc ; 41a3 -Facing23: ; 41a3 +Facing23: ; big snorlax or lapras doll db 16 ; # db 0, 0, 0, $00 db 0, 8, 0, $01 @@ -221,7 +221,7 @@ Facing27: ; 41f5 db 8, 0, X_FLIP, $07 ; 4206 -Facing22: ; 4206 +Facing22: ; big doll other than snorlax or lapras db 14 ; # db 0, 0, 0, $00 db 0, 8, 0, $01 @@ -239,7 +239,7 @@ Facing22: ; 4206 db 24, 16, 0, $0b ; 423f -Facing28: ; 423f +Facing28: ; boulder dust 1 db 4 ; # db 0, 0, 4, $fe db 0, 8, 4, $fe @@ -247,7 +247,7 @@ Facing28: ; 423f db 8, 8, 4, $fe ; 4250 -Facing29: ; 4250 +Facing29: ; boulder dust 2 db 4 ; # db 0, 0, 4, $ff db 0, 8, 4, $ff diff --git a/engine/flypoints.asm b/engine/flypoints.asm deleted file mode 100755 index 7f6d384aa..000000000 --- a/engine/flypoints.asm +++ /dev/null @@ -1,916 +0,0 @@ -_FlyMap: ; 91af3 - call ClearBGPalettes - call ClearTileMap - call ClearSprites - ld hl, hInMenu - ld a, [hl] - push af - ld [hl], $1 - xor a - ld [hBGMapMode], a - callba Function8cf53 - call Function91ff2 - ld de, GFX_922e1 - ld hl, VTiles2 tile $30 - lb bc, BANK(GFX_922e1), 6 - call Request1bpp - call FlyMap - call Function91c8f - ld b, $2 - call GetSGBLayout - call SetPalettes -.loop - call JoyTextDelay - ld hl, hJoyPressed - ld a, [hl] - and B_BUTTON - jr nz, .pressedB - ld a, [hl] - and A_BUTTON - jr nz, .pressedA - call FlyMapScroll - call GetMapCursorCoordinates - callba Function8cf69 - call DelayFrame - jr .loop - -.pressedB - ld a, -1 - jr .exit - -.pressedA - ld a, [wd002] - ld l, a - ld h, 0 - add hl, hl - ld de, Flypoints + 1 - add hl, de - ld a, [hl] - -.exit - ld [wd002], a - pop af - ld [hInMenu], a - call ClearBGPalettes - ld a, $90 - ld [hWY], a - xor a - ld [hBGMapAddress], a - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - ld a, [wd002] - ld e, a - ret -; 91b73 - -FlyMapScroll: ; 91b73 - ld a, [StartFlypoint] - ld e, a - ld a, [EndFlypoint] - ld d, a - ld hl, hJoyLast - ld a, [hl] - and D_UP - jr nz, .ScrollNext - ld a, [hl] - and D_DOWN - jr nz, .ScrollPrev - ret - -.ScrollNext - ld hl, wd002 - ld a, [hl] - cp d - jr nz, .NotAtEndYet - ld a, e - dec a - ld [hl], a - -.NotAtEndYet - inc [hl] - call CheckIfVisitedFlypoint - jr z, .ScrollNext - jr .Finally - -.ScrollPrev - ld hl, wd002 - ld a, [hl] - cp e - jr nz, .NotAtStartYet - ld a, d - inc a - ld [hl], a - -.NotAtStartYet - dec [hl] - call CheckIfVisitedFlypoint - jr z, .ScrollPrev - -.Finally - call TownMapBubble - call WaitBGMap - xor a - ld [hBGMapMode], a - ret -; 91bb5 - -TownMapBubble: ; 91bb5 -; Draw the bubble containing the location text in the town map HUD - -; Top-left corner - hlcoord 1, 0 - ld a, $30 - ld [hli], a - -; Top row - ld bc, 16 - ld a, " " - call ByteFill - -; Top-right corner - ld a, $31 - ld [hl], a - hlcoord 1, 1 - - -; Middle row - ld bc, 18 - ld a, " " - call ByteFill - - -; Bottom-left corner - hlcoord 1, 2 - ld a, $32 - ld [hli], a - -; Bottom row - ld bc, 16 - ld a, " " - call ByteFill - -; Bottom-right corner - ld a, $33 - ld [hl], a - - -; Print "Where?" - hlcoord 2, 0 - ld de, .Where - call PlaceString - -; Print the name of the default flypoint - call .Name - -; Up/down arrows - hlcoord 18, 1 - ld [hl], $34 - ret - -.Where - db "Where?@" - -.Name -; We need the map location of the default flypoint - ld a, [wd002] - ld l, a - ld h, 0 - add hl, hl ; two bytes per flypoint - ld de, Flypoints - add hl, de - ld e, [hl] - - callba GetLandmarkName - - hlcoord 2, 1 - ld de, StringBuffer1 - call PlaceString - ret -; 91c17 - -GetMapCursorCoordinates: ; 91c17 - ld a, [wd002] - ld l, a - ld h, $0 - add hl, hl - ld de, Flypoints - add hl, de - ld e, [hl] - callba GetLandmarkCoords - ld a, [wd003] - ld c, a - ld a, [wd004] - ld b, a - ld hl, $4 - add hl, bc - ld [hl], e - ld hl, $5 - add hl, bc - ld [hl], d - ret -; 91c3c - -CheckIfVisitedFlypoint: ; 91c3c -; Check if the flypoint loaded in [hl] has been visited yet. - push bc - push de - push hl - ld l, [hl] - ld h, 0 - add hl, hl - ld de, Flypoints + 1 - add hl, de - ld c, [hl] - call HasVisitedSpawn - pop hl - pop de - pop bc - and a - ret -; 91c50 - -HasVisitedSpawn: ; 91c50 -; Check if spawn point c has been visited. - ld hl, VisitedSpawns - ld b, CHECK_FLAG - ld d, 0 - predef FlagPredef - ld a, c - ret -; 91c5e - -Flypoints: ; 91c5e -; landmark, spawn point - - const_def - -flypoint: MACRO -; \1\@FLY EQUS "FLY_\1" -; \1\@SPAWN EQUS "SPAWN_\1" - ; const \1\@FLY - ; db \2, \1\@SPAWN - const FLY_\1 - db \2, SPAWN_\1 -ENDM - -; Johto - flypoint NEW_BARK, NEW_BARK_TOWN - flypoint CHERRYGROVE, CHERRYGROVE_CITY - flypoint VIOLET, VIOLET_CITY - flypoint AZALEA, AZALEA_TOWN - flypoint GOLDENROD, GOLDENROD_CITY - flypoint ECRUTEAK, ECRUTEAK_CITY - flypoint OLIVINE, OLIVINE_CITY - flypoint CIANWOOD, CIANWOOD_CITY - flypoint MAHOGANY, MAHOGANY_TOWN - flypoint LAKE, LAKE_OF_RAGE - flypoint BLACKTHORN, BLACKTHORN_CITY - flypoint MT_SILVER, SILVER_CAVE - -; Kanto -KANTO_FLYPOINT EQU const_value - - flypoint PALLET, PALLET_TOWN - flypoint VIRIDIAN, VIRIDIAN_CITY - flypoint PEWTER, PEWTER_CITY - flypoint CERULEAN, CERULEAN_CITY - flypoint VERMILION, VERMILION_CITY - flypoint ROCK_TUNNEL, ROCK_TUNNEL - flypoint LAVENDER, LAVENDER_TOWN - flypoint CELADON, CELADON_CITY - flypoint SAFFRON, SAFFRON_CITY - flypoint FUCHSIA, FUCHSIA_CITY - flypoint CINNABAR, CINNABAR_ISLAND - flypoint INDIGO, INDIGO_PLATEAU - - db -1 -; 91c8f - -Function91c8f: ; 91c8f - ret -; 91c90 - -FlyMap: ; 91c90 - - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - call GetWorldMapLocation - -; If we're not in a valid location, i.e. Pokecenter floor 2F, -; the backup map information is used - - cp SPECIAL_MAP - jr nz, .CheckRegion - - ld a, [BackupMapGroup] - ld b, a - ld a, [BackupMapNumber] - ld c, a - call GetWorldMapLocation - -.CheckRegion -; The first 46 locations are part of Johto. The rest are in Kanto - cp KANTO_LANDMARK - jr nc, .KantoFlyMap - -.JohtoFlyMap -; Note that .NoKanto should be modified in tandem with this branch - - push af - -; Start from New Bark Town - ld a, FLY_NEW_BARK - ld [wd002], a - -; Flypoints begin at New Bark Town... - ld [StartFlypoint], a -; ..and end at Silver Cave - ld a, FLY_MT_SILVER - ld [EndFlypoint], a - -; Fill out the map - call FillJohtoMap - call .MapHud - pop af - call TownMapPlayerIcon - ret - -.KantoFlyMap - -; The event that there are no flypoints enabled in a map is not -; accounted for. As a result, if you attempt to select a flypoint -; when there are none enabled, the game will crash. Additionally, -; the flypoint selection has a default starting point that -; can be flown to even if none are enabled - -; To prevent both of these things from happening when the player -; enters Kanto, fly access is restricted until Indigo Plateau is -; visited and its flypoint enabled - - push af - ld c, SPAWN_INDIGO - call HasVisitedSpawn - and a - jr z, .NoKanto - -; Kanto's map is only loaded if we've visited Indigo Plateau - -; Flypoints begin at Pallet Town... - ld a, FLY_PALLET - ld [StartFlypoint], a -; ...and end at Indigo Plateau - ld a, FLY_INDIGO - ld [EndFlypoint], a - -; Because Indigo Plateau is the first flypoint the player -; visits, it's made the default flypoint - ld [wd002], a - -; Fill out the map - call FillKantoMap - call .MapHud - pop af - call TownMapPlayerIcon - ret - -.NoKanto -; If Indigo Plateau hasn't been visited, we use Johto's map instead - -; Start from New Bark Town - ld a, FLY_NEW_BARK - ld [wd002], a - -; Flypoints begin at New Bark Town... - ld [StartFlypoint], a -; ..and end at Silver Cave - ld a, FLY_MT_SILVER - ld [EndFlypoint], a - - call FillJohtoMap - - pop af - -.MapHud - call TownMapBubble - call TownMapPals - - ld hl, VBGMap0 ; BG Map 0 - call TownMapBGUpdate - - call TownMapMon - ld a, c - ld [wd003], a - ld a, b - ld [wd004], a - ret -; 91d11 - -Function91d11: ; 91d11 - ld a, [wd002] - push af - ld a, [wd003] - push af - ld a, e - ld [wd002], a - call ClearSprites - xor a - ld [hBGMapMode], a - ld a, $1 - ld [hInMenu], a - ld de, GFX_922d1 - ld hl, VTiles0 tile $7f - lb bc, BANK(GFX_922d1), 1 - call Request2bpp ; actually 1bpp - call Function91ed0 - ld hl, VTiles0 tile $78 - ld c, $4 - call Request2bpp - call Function91ff2 - call FillKantoMap - call Function91de9 - call TownMapPals - ld hl, VBGMap1 - call TownMapBGUpdate - call FillJohtoMap - call Function91de9 - call TownMapPals - ld hl, VBGMap0 - call TownMapBGUpdate - ld b, $2 - call GetSGBLayout - call SetPalettes - xor a - ld [hBGMapMode], a - xor a - call Function91e1e -.asm_91d6e - call JoyTextDelay - ld hl, hJoyPressed - ld a, [hl] - and A_BUTTON | B_BUTTON - jr nz, .asm_91d8f - ld a, [hJoypadDown] - and SELECT - jr nz, .asm_91d87 - call Function91d9b - call Function91dcd - jr .asm_91d8a - -.asm_91d87 - call Function91e5a - -.asm_91d8a - call DelayFrame - jr .asm_91d6e - -.asm_91d8f - call ClearSprites - pop af - ld [wd003], a - pop af - ld [wd002], a - ret -; 91d9b - -Function91d9b: ; 91d9b - ld a, [hl] - and $20 - jr nz, .asm_91da6 - ld a, [hl] - and $10 - jr nz, .asm_91db7 - ret - -.asm_91da6 - ld a, [hWY] - cp $90 - ret z - call ClearSprites - ld a, $90 - ld [hWY], a - xor a - call Function91e1e - ret - -.asm_91db7 - ld a, [StatusFlags] - bit 6, a - ret z - ld a, [hWY] - and a - ret z - call ClearSprites - xor a - ld [hWY], a - ld a, $1 - call Function91e1e - ret -; 91dcd - -Function91dcd: ; 91dcd - ld a, [hVBlankCounter] - ld e, a - and $f - ret nz - ld a, e - and $10 - jr nz, .asm_91ddc - call ClearSprites - ret - -.asm_91ddc - hlcoord 0, 0 - ld de, Sprites - ld bc, $a0 - call CopyBytes - ret -; 91de9 - -Function91de9: ; 91de9 - hlcoord 0, 0 - ld bc, SCREEN_WIDTH - ld a, $7f - call ByteFill - hlcoord 0, 1 - ld a, $6 - ld [hli], a - ld bc, SCREEN_HEIGHT - ld a, $7 - call ByteFill - ld [hl], $17 - call GetPokemonName - hlcoord 2, 0 - call PlaceString - ld h, b - ld l, c - ld de, String_91e16 - call PlaceString - ret -; 91e16 - -String_91e16: - db "'S NEST@" -; 91e1e - -Function91e1e: ; 91e1e - ld [wd003], a - ld e, a - callba Function2a01f - decoord 0, 0 - ld hl, Sprites -.asm_91e2e - ld a, [de] - and a - jr z, .asm_91e4d - push de - ld e, a - push hl - callba GetLandmarkCoords - pop hl - ld a, d - sub $4 - ld [hli], a - ld a, e - sub $4 - ld [hli], a - ld a, $7f - ld [hli], a - xor a - ld [hli], a - pop de - inc de - jr .asm_91e2e - -.asm_91e4d - ld hl, Sprites - decoord 0, 0 - ld bc, $a0 - call CopyBytes - ret -; 91e5a - -Function91e5a: ; 91e5a - call Function91ea9 - ret c - - ld a, [wd002] - ld e, a - callba GetLandmarkCoords - ld c, e - ld b, d - ld de, Unknown_91e9c - ld hl, Sprites -.asm_91e70 - ld a, [de] - cp $80 - jr z, .asm_91e91 - - add b - ld [hli], a - inc de - - ld a, [de] - add c - ld [hli], a - inc de - - ld a, [de] - add $78 - ld [hli], a - inc de - - push bc - ld c, 0 - ld a, [PlayerGender] - bit 0, a - jr z, .asm_91e8c - inc c -.asm_91e8c - ld a, c - ld [hli], a - pop bc - - jr .asm_91e70 - -.asm_91e91 - ld hl, Sprites + $10 - ld bc, SpritesEnd - (Sprites + $10) - xor a - call ByteFill - ret -; 91e9c - -Unknown_91e9c: ; 91e9c - db -8, -8, 0 - db -8, 0, 1 - db 0, -8, 2 - db 0, 0, 3 - db $80 ; terminator -; 91ea9 - -Function91ea9: ; 91ea9 - ld a, [wd002] - cp FAST_SHIP - jr z, .johto - cp KANTO_LANDMARK - jr c, .johto - -.kanto - ld a, [wd003] - and a - jr z, .clear - jr .ok - -.johto - ld a, [wd003] - and a - jr nz, .clear - -.ok - and a - ret - -.clear - ld hl, Sprites - ld bc, SpritesEnd - Sprites - xor a - call ByteFill - scf - ret -; 91ed0 - -Function91ed0: ; 91ed0 - ld a, [wd002] - cp FAST_SHIP - jr z, .asm_91ede - callba GetPlayerIcon - ret - -.asm_91ede - ld de, FastShipGFX - ld b, BANK(FastShipGFX) - ret -; 91ee4 - -TownMapBGUpdate: ; 91ee4 -; Update BG Map tiles and attributes - -; BG Map address - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - -; Only update palettes on CGB - ld a, [hCGB] - and a - jr z, .tiles - -; BG Map mode 2 (palettes) - ld a, 2 - ld [hBGMapMode], a - -; The BG Map is updated in thirds, so we wait -; 3 frames to update the whole screen's palettes. - ld c, 3 - call DelayFrames - -.tiles -; Update BG Map tiles - call WaitBGMap - -; Turn off BG Map update - xor a - ld [hBGMapMode], a - ret -; 91eff - -FillJohtoMap: ; 91eff - ld de, JohtoMap - jr FillTownMap - -FillKantoMap: ; 91f04 - ld de, KantoMap - -FillTownMap: ; 91f07 - hlcoord 0, 0 -.loop - ld a, [de] - cp $ff - ret z - ld a, [de] - ld [hli], a - inc de - jr .loop -; 91f13 - -TownMapPals: ; 91f13 -; Assign palettes based on tile ids - - hlcoord 0, 0 - decoord 0, 0, AttrMap - ld bc, 360 -.loop -; Current tile - ld a, [hli] - push hl - -; HP/borders use palette 0 - cp $60 - jr nc, .pal0 - -; The palette data is condensed to nybbles, -; least-significant first. - ld hl, TownMapPalMap - srl a - jr c, .odd - -; Even-numbered tile ids take the bottom nybble... - add l - ld l, a - ld a, h - adc 0 - ld h, a - ld a, [hl] - and %111 - jr .update - -.odd -; ...and odd ids take the top. - add l - ld l, a - ld a, h - adc 0 - ld h, a - ld a, [hl] - swap a - and %111 - jr .update - -.pal0 - xor a - -.update - pop hl - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .loop - ret - -TownMapPalMap: - db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00 - db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00 - db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33 - db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00 -; 91f7b - -TownMapMon: ; 91f7b -; Draw the FlyMon icon at town map location in - -; Get FlyMon species - ld a, [CurPartyMon] - ld hl, PartySpecies - ld e, a - ld d, $0 - add hl, de - ld a, [hl] - ld [wd265], a - -; Get FlyMon icon - ld e, 8 ; starting tile in VRAM - callba GetSpeciesIcon - -; Animation/palette - ld de, 0 - ld a, $0 - call Function3b2a - - ld hl, 3 - add hl, bc - ld [hl], 8 - ld hl, 2 - add hl, bc - ld [hl], 0 - ret -; 91fa6 - -TownMapPlayerIcon: ; 91fa6 -; Draw the player icon at town map location in a - push af - - callba GetPlayerIcon - -; Standing icon - ld hl, VTiles0 tile $10 - ld c, 4 ; # tiles - call Request2bpp - -; Walking icon - ld hl, $c0 - add hl, de - ld d, h - ld e, l - ld hl, VTiles0 tile $14 - ld c, 4 ; # tiles - ld a, BANK(ChrisSpriteGFX) ; does nothing - call Request2bpp - -; Animation/palette - ld de, 0 - ld b, $0a ; Male - ld a, [PlayerGender] - bit 0, a - jr z, .asm_91fd3 - ld b, $1e ; Female -.asm_91fd3 - ld a, b - call Function3b2a - - ld hl, $3 - add hl, bc - ld [hl], $10 - - pop af - ld e, a - push bc - callba GetLandmarkCoords - pop bc - - ld hl, 4 - add hl, bc - ld [hl], e - ld hl, 5 - add hl, bc - ld [hl], d - ret -; 0x91ff2 - -Function91ff2: ; 91ff2 - ld hl, TownMapGFX - ld de, VTiles2 - lb bc, BANK(TownMapGFX), $30 - call DecompressRequest2bpp - ret -; 91fff - - -JohtoMap: ; 91fff -INCBIN "gfx/misc/johto.bin" -; 92168 - -KantoMap: ; 92168 -INCBIN "gfx/misc/kanto.bin" -; 922d1 - - -GFX_922d1: ; 922d1 -INCBIN "gfx/unknown/0922d1.2bpp" -GFX_922e1: ; 922e1 -INCBIN "gfx/unknown/0922e1.2bpp" -GFX_92301: ; 92301 -INCBIN "gfx/unknown/092301.2bpp" diff --git a/engine/intro_menu.asm b/engine/intro_menu.asm new file mode 100755 index 000000000..cf5bcf8a0 --- /dev/null +++ b/engine/intro_menu.asm @@ -0,0 +1,1427 @@ +_MainMenu: ; 5ae8 + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld de, MUSIC_MAIN_MENU + ld a, e + ld [wMapMusic], a + call PlayMusic + callba MainMenu + jp Function6219 +; 5b04 + +; unreferenced + ret +; 5b05 + +PrintDayOfWeek: ; 5b05 + push de + ld hl, .Days + ld a, b + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + ret +; 5b1c + +.Days ; 5b1c + db "SUN@" + db "MON@" + db "TUES@" + db "WEDNES@" + db "THURS@" + db "FRI@" + db "SATUR@" +; 5b40 + +.Day ; 5b40 + db "DAY@" +; 5b44 + +NewGame_ClearTileMapEtc: ; 5b44 + xor a + ld [hMapAnims], a + call ClearTileMap + call LoadFontsExtra + call LoadStandardFont + call ResetTextRelatedRAM + ret +; 5b54 + +MysteryGift: ; 5b54 + call UpdateTime + callba DoMysteryGiftIfDayHasPassed + callba DoMysteryGift + ret +; 5b64 + +OptionsMenu: ; 5b64 + callba _OptionsMenu + ret +; 5b6b + +NewGame: ; 5b6b + xor a + ld [wc2cc], a + call ResetWRAM + call NewGame_ClearTileMapEtc + call AreYouABoyOrAreYouAGirl + call OakSpeech + call InitializeWorld + ld a, 1 + ld [wPreviousLandmark], a + + ld a, SPAWN_HOME + ld [DefaultSpawnpoint], a + + ld a, MAPSETUP_WARP + ld [hMapEntryMethod], a + jp FinishContinueFunction +; 5b8f + +AreYouABoyOrAreYouAGirl: ; 5b8f + callba Function10632f ; some mobile stuff + jr c, .ok + callba InitGender + ret + +.ok + ld c, 0 + callba InitMobileProfile ; mobile + ret +; 5ba7 + +ResetWRAM: ; 5ba7 + xor a + ld [hBGMapMode], a + call _ResetWRAM + ret +; 5bae + +_ResetWRAM: ; 5bae + + ld hl, Sprites + ld bc, Options - Sprites + xor a + call ByteFill + + ld hl, wd000 + ld bc, wGameData - wd000 + xor a + call ByteFill + + ld hl, wGameData + ld bc, wGameDataEnd - wGameData + xor a + call ByteFill + + ld a, [rLY] + ld [hSecondsBackup], a + call DelayFrame + ld a, [hRandomSub] + ld [PlayerID], a + + ld a, [rLY] + ld [hSecondsBackup], a + call DelayFrame + ld a, [hRandomAdd] + ld [PlayerID + 1], a + + call Random + ld [wSecretID], a + call DelayFrame + call Random + ld [wSecretID + 1], a + + ld hl, PartyCount + call InitList + + xor a + ld [wCurBox], a + ld [wSavedAtLeastOnce], a + + call SetDefaultBoxNames + + ld a, BANK(sBoxCount) + call GetSRAMBank + ld hl, sBoxCount + call InitList + call CloseSRAM + + ld hl, NumItems + call InitList + + ld hl, NumKeyItems + call InitList + + ld hl, NumBalls + call InitList + + ld hl, PCItems + call InitList + + xor a + ld [wRoamMon1Species], a + ld [wRoamMon2Species], a + ld [wRoamMon3Species], a + ld a, -1 + ld [wRoamMon1MapGroup], a + ld [wRoamMon2MapGroup], a + ld [wRoamMon3MapGroup], a + ld [wRoamMon1MapNumber], a + ld [wRoamMon2MapNumber], a + ld [wRoamMon3MapNumber], a + + ld a, BANK(sMysteryGiftItem) + call GetSRAMBank + ld hl, sMysteryGiftItem + xor a + ld [hli], a + dec a + ld [hl], a + call CloseSRAM + + call LoadOrRegenerateLuckyIDNumber + call InitializeMagikarpHouse + + xor a + ld [MonType], a + + ld [JohtoBadges], a + ld [KantoBadges], a + + ld [Coins], a + ld [Coins + 1], a + +START_MONEY EQU 3000 + +IF START_MONEY / $10000 + ld a, START_MONEY / $10000 +ENDC + ld [Money], a + ld a, START_MONEY / $100 % $100 + ld [Money + 1], a + ld a, START_MONEY % $100 + ld [Money + 2], a + + xor a + ld [wdc17], a + + ld hl, wdc19 + ld [hl], 2300 / $10000 + inc hl + ld [hl], 2300 / $100 % $100 + inc hl + ld [hl], 2300 % $100 + + call InitializeNPCNames + + callba InitDecorations + + callba DeletePartyMonMail + + callba DeleteMobileEventIndex + + call ResetGameTime + ret +; 5ca1 + +InitList: ; 5ca1 +; Loads 0 in the count and -1 in the first item or mon slot. + xor a + ld [hli], a + dec a + ld [hl], a + ret +; 5ca6 + +SetDefaultBoxNames: ; 5ca6 + ld hl, wBoxNames + ld c, 0 +.loop + push hl + ld de, .Box + call CopyName2 + dec hl + ld a, c + inc a + cp 10 + jr c, .less + sub 10 + ld [hl], "1" + inc hl + +.less + add "0" + ld [hli], a + ld [hl], "@" + pop hl + ld de, 9 + add hl, de + inc c + ld a, c + cp NUM_BOXES + jr c, .loop + ret + +.Box + db "BOX@" +; 5cd3 + +InitializeMagikarpHouse: ; 5cd3 + ld hl, wBestMagikarpLengthFeet + ld a, $3 + ld [hli], a + ld a, $6 + ld [hli], a + ld de, .Ralph + call CopyName2 + ret +; 5ce3 + +.Ralph ; 5ce3 + db "RALPH@" +; 5ce9 + +InitializeNPCNames: ; 5ce9 + ld hl, .Rival + ld de, RivalName + call .Copy + + ld hl, .Mom + ld de, MomsName + call .Copy + + ld hl, .Red + ld de, RedsName + call .Copy + + ld hl, .Green + ld de, GreensName + +.Copy + ld bc, NAME_LENGTH + call CopyBytes + ret + +.Rival db "???@" +.Red db "RED@" +.Green db "GREEN@" +.Mom db "MOM@" +; 5d23 + +InitializeWorld: ; 5d23 + call ShrinkPlayer + callba GetSpawnCoord + callba _InitializeStartDay + ret +; 5d33 + +LoadOrRegenerateLuckyIDNumber: ; 5d33 + ld a, BANK(sLuckyIDNumber) + call GetSRAMBank + ld a, [CurDay] + inc a + ld b, a + ld a, [sLuckyNumberDay] + cp b + ld a, [sLuckyIDNumber + 1] + ld c, a + ld a, [sLuckyIDNumber] + jr z, .skip + ld a, b + ld [sLuckyNumberDay], a + call Random + ld c, a + call Random + +.skip + ld [wLuckyIDNumber], a + ld [sLuckyIDNumber], a + ld a, c + ld [wLuckyIDNumber + 1], a + ld [sLuckyIDNumber + 1], a + jp CloseSRAM +; 5d65 + +Continue: ; 5d65 + callba TryLoadSaveFile + jr c, .FailToLoad + callba Function150b9 + call LoadStandardMenuDataHeader + call DisplaySaveInfoOnContinue + ld a, $1 + ld [hBGMapMode], a + ld c, 20 + call DelayFrames + call ConfirmContinue + jr nc, .Check1Pass + call WriteBackup + jr .FailToLoad + +.Check1Pass + call Continue_CheckRTC_RestartClock + jr nc, .Check2Pass + call WriteBackup + jr .FailToLoad + +.Check2Pass + ld a, $8 + ld [MusicFade], a + ld a, MUSIC_NONE % $100 + ld [MusicFadeIDLo], a + ld a, MUSIC_NONE / $100 + ld [MusicFadeIDHi], a + call ClearBGPalettes + call Continue_MobileAdapterMenu + call WriteBackup + call ClearTileMap + ld c, 20 + call DelayFrames + callba JumpRoamMons + callba Function105091 ; Mystery Gift + callba Function140ae ; time-related + ld a, [wSpawnAfterChampion] + cp SPAWN_LANCE + jr z, .SpawnAfterE4 + ld a, MAPSETUP_CONTINUE + ld [hMapEntryMethod], a + jp FinishContinueFunction + +.FailToLoad + ret + +.SpawnAfterE4 + ld a, SPAWN_NEW_BARK + ld [wd001], a + call PostCreditsSpawn + jp FinishContinueFunction +; 5de2 + +SpawnAfterRed: ; 5de2 + ld a, SPAWN_MT_SILVER + ld [wd001], a +; 5de7 + +PostCreditsSpawn: ; 5de7 + xor a + ld [wSpawnAfterChampion], a + ld a, MAPSETUP_WARP + ld [hMapEntryMethod], a + ret +; 5df0 + +Continue_MobileAdapterMenu: ; 5df0 + callba Function10632f ; mobile check + ret nc + ld hl, wd479 + bit 1, [hl] + ret nz + ld a, 5 + ld [MusicFade], a + ld a, MUSIC_MOBILE_ADAPTER_MENU % $100 + ld [MusicFadeIDLo], a + ld a, MUSIC_MOBILE_ADAPTER_MENU / $100 + ld [MusicFadeIDHi], a + ld c, 20 + call DelayFrames + ld c, $1 + callba InitMobileProfile ; mobile + callba _SaveData + ld a, 8 + ld [MusicFade], a + ld a, MUSIC_NONE % $100 + ld [MusicFadeIDLo], a + ld a, MUSIC_NONE / $100 + ld [MusicFadeIDHi], a + ld c, 35 + call DelayFrames + ret +; 5e34 + +ConfirmContinue: ; 5e34 +.loop + call DelayFrame + call GetJoypad + ld hl, hJoyPressed + bit 0, [hl] + jr nz, .PressA + bit 1, [hl] + jr z, .loop + scf + ret + +.PressA + ret +; 5e48 + +Continue_CheckRTC_RestartClock: ; 5e48 + call CheckRTCStatus + and %10000000 ; Day count exceeded 16383 + jr z, .pass + callba RestartClock + ld a, c + and a + jr z, .pass + scf + ret + +.pass + xor a + ret +; 5e5d + +FinishContinueFunction: ; 5e5d +.loop + xor a + ld [wc2c1], a + ld [wLinkMode], a + ld hl, GameTimerPause + set 0, [hl] + res 7, [hl] + ld hl, wEnteredMapFromContinue + set 1, [hl] + callba OverworldLoop + ld a, [wSpawnAfterChampion] + cp SPAWN_RED + jr z, .AfterRed + jp Reset + +.AfterRed + call SpawnAfterRed + jr .loop +; 5e85 + +DisplaySaveInfoOnContinue: ; 5e85 + call CheckRTCStatus + and %10000000 + jr z, .clock_ok + lb de, 4, 8 + call DisplayContinueDataWithRTCError + ret + +.clock_ok + lb de, 4, 8 + call DisplayNormalContinueData + ret +; 5e9a + +DisplaySaveInfoOnSave: ; 5e9a + lb de, 4, 0 + jr DisplayNormalContinueData +; 5e9f + +DisplayNormalContinueData: ; 5e9f + call Continue_LoadMenuHeader + call Continue_DisplayBadgesDexPlayerName + call Continue_PrintGameTime + call LoadFontsExtra + call UpdateSprites + ret +; 5eaf + +DisplayContinueDataWithRTCError: ; 5eaf + call Continue_LoadMenuHeader + call Continue_DisplayBadgesDexPlayerName + call Continue_UnknownGameTime + call LoadFontsExtra + call UpdateSprites + ret +; 5ebf + +Continue_LoadMenuHeader: ; 5ebf + xor a + ld [hBGMapMode], a + ld hl, .MenuDataHeader_Dex + ld a, [StatusFlags] + bit 0, a ; pokedex + jr nz, .pokedex_header + ld hl, .MenuDataHeader_NoDex + +.pokedex_header + call Function1e35 + call MenuBox + call Function1c89 + ret +; 5ed9 + +.MenuDataHeader_Dex: ; 5ed9 + db $40 ; flags + db 00, 00 ; start coords + db 09, 15 ; end coords + dw .MenuData2_Dex + db 1 ; default option +; 5ee1 + +.MenuData2_Dex: ; 5ee1 + db $00 ; flags + db 4 ; items + db "PLAYER@" + db "BADGES@" + db "#DEX@" + db "TIME@" +; 5efb + +.MenuDataHeader_NoDex: ; 5efb + db $40 ; flags + db 00, 00 ; start coords + db 09, 15 ; end coords + dw .MenuData2_NoDex + db 1 ; default option +; 5f03 + +.MenuData2_NoDex: ; 5f03 + db $00 ; flags + db 4 ; items + db "PLAYER <PLAYER>@" + db "BADGES@" + db " @" + db "TIME@" +; 5f1c + + +Continue_DisplayBadgesDexPlayerName: ; 5f1c + call MenuBoxCoord2Tile + push hl + decoord 13, 4, 0 + add hl, de + call Continue_DisplayBadgeCount + pop hl + push hl + decoord 12, 6, 0 + add hl, de + call Continue_DisplayPokedexNumCaught + pop hl + push hl + decoord 8, 2, 0 + add hl, de + ld de, .Player + call PlaceString + pop hl + ret + +.Player + db "<PLAYER>@" +; 5f40 + +Continue_PrintGameTime: ; 5f40 + decoord 9, 8, 0 + add hl, de + call Continue_DisplayGameTime + ret +; 5f48 + +Continue_UnknownGameTime: ; 5f48 + decoord 9, 8, 0 + add hl, de + ld de, .three_question_marks + call PlaceString + ret + +.three_question_marks + db " ???@" +; 5f58 + +Continue_DisplayBadgeCount: ; 5f58 + push hl + ld hl, JohtoBadges + ld b, 2 + call CountSetBits + pop hl + ld de, wd265 + lb bc, 1, 2 + jp PrintNum +; 5f6b + +Continue_DisplayPokedexNumCaught: ; 5f6b + ld a, [StatusFlags] + bit 0, a + ret z + push hl + ld hl, PokedexCaught +IF NUM_POKEMON % 8 + ld b, NUM_POKEMON / 8 + 1 +ELSE + ld b, NUM_POKEMON / 8 +ENDC + call CountSetBits + pop hl + ld de, wd265 + lb bc, 1, 3 + jp PrintNum +; 5f84 + +Continue_DisplayGameTime: ; 5f84 + ld de, GameTimeHours + lb bc, 2, 3 + call PrintNum + ld [hl], "<COLON>" + inc hl + ld de, GameTimeMinutes + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + jp PrintNum +; 5f99 + + +OakSpeech: ; 0x5f99 + callba InitClock + call RotateFourPalettesLeft + call ClearTileMap + + ld de, MUSIC_ROUTE_30 + call PlayMusic + + call RotateFourPalettesRight + call RotateThreePalettesRight + xor a + ld [CurPartySpecies], a + ld a, POKEMON_PROF + ld [TrainerClass], a + call Intro_PrepTrainerPic + + ld b, SCGB_1C + call GetSGBLayout + call Intro_RotatePalettesLeftFrontpic + + ld hl, OakText1 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + + ld a, WOOPER + ld [CurSpecies], a + ld [CurPartySpecies], a + call GetBaseData + + hlcoord 6, 4 + call PrepMonFrontpic + + xor a + ld [TempMonDVs], a + ld [TempMonDVs + 1], a + + ld b, SCGB_1C + call GetSGBLayout + call Intro_WipeInFrontpic + + ld hl, OakText2 + call PrintText + ld hl, OakText4 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + + xor a + ld [CurPartySpecies], a + ld a, POKEMON_PROF + ld [TrainerClass], a + call Intro_PrepTrainerPic + + ld b, SCGB_1C + call GetSGBLayout + call Intro_RotatePalettesLeftFrontpic + + ld hl, OakText5 + call PrintText + call RotateThreePalettesRight + call ClearTileMap + + xor a + ld [CurPartySpecies], a + callba DrawIntroPlayerPic + + ld b, SCGB_1C + call GetSGBLayout + call Intro_RotatePalettesLeftFrontpic + + ld hl, OakText6 + call PrintText + call NamePlayer + ld hl, OakText7 + call PrintText + ret + +OakText1: ; 0x6045 + text_jump _OakText1 + db "@" + +OakText2: ; 0x604a + text_jump _OakText2 + start_asm + ld a, WOOPER + call PlayCry + call WaitSFX + ld hl, OakText3 + ret + +OakText3: ; 0x605b + text_jump _OakText3 + db "@" + +OakText4: ; 0x6060 + text_jump _OakText4 + db "@" + +OakText5: ; 0x6065 + text_jump _OakText5 + db "@" + +OakText6: ; 0x606a + text_jump _OakText6 + db "@" + +OakText7: ; 0x606f + text_jump _OakText7 + db "@" + +NamePlayer: ; 0x6074 + callba MovePlayerPicRight + callba ShowPlayerNamingChoices + ld a, [MenuSelection2] + dec a + jr z, .NewName + call StorePlayerName + callba Function8c1d + callba MovePlayerPicLeft + ret + +.NewName + ld b, 1 + ld de, PlayerName + callba NamingScreen + + call RotateThreePalettesRight + call ClearTileMap + + call LoadFontsExtra + call WaitBGMap + + xor a + ld [CurPartySpecies], a + callba DrawIntroPlayerPic + + ld b, SCGB_1C + call GetSGBLayout + call RotateThreePalettesLeft + + ld hl, PlayerName + ld de, .Chris + ld a, [PlayerGender] + bit 0, a + jr z, .Male + ld de, .Kris +.Male + call InitName + ret + +.Chris + db "CHRIS@@@@@@" +.Kris + db "KRIS@@@@@@@" +; 60e9 + +Function60e9: ; Unreferenced + call LoadMenuDataHeader + call InterpretMenu2 + ld a, [MenuSelection2] + dec a + call CopyNameFromMenu + call WriteBackup + ret +; 60fa + +StorePlayerName: ; 60fa + ld a, "@" + ld bc, NAME_LENGTH + ld hl, PlayerName + call ByteFill + ld hl, PlayerName + ld de, StringBuffer2 + call CopyName2 + ret +; 610f + +ShrinkPlayer: ; 610f + + ld a, [hROMBank] + push af + + ld a, 0 << 7 | 32 ; fade out + ld [MusicFade], a + ld de, MUSIC_NONE + ld a, e + ld [MusicFadeIDLo], a + ld a, d + ld [MusicFadeIDHi], a + + ld de, SFX_ESCAPE_ROPE + call PlaySFX + pop af + rst Bankswitch + + ld c, 8 + call DelayFrames + + ld hl, Shrink1Pic + ld b, BANK(Shrink1Pic) + call ShrinkFrame + + ld c, 8 + call DelayFrames + + ld hl, Shrink2Pic + ld b, BANK(Shrink2Pic) + call ShrinkFrame + + ld c, 8 + call DelayFrames + + hlcoord 6, 5 + ld b, 7 + ld c, 7 + call ClearBox + + ld c, 3 + call DelayFrames + + call Intro_PlacePlayerSprite + call LoadFontsExtra + + ld c, 50 + call DelayFrames + + call RotateThreePalettesRight + call ClearTileMap + ret +; 616a + +Intro_RotatePalettesLeftFrontpic: ; 616a + ld hl, IntroFadePalettes + ld b, IntroFadePalettesEnd - IntroFadePalettes +.loop + ld a, [hli] + call DmgToCgbBGPals + ld c, 10 + call DelayFrames + dec b + jr nz, .loop + ret +; 617c + +IntroFadePalettes: ; 0x617c + db %01010100 + db %10101000 + db %11111100 + db %11111000 + db %11110100 + db %11100100 +IntroFadePalettesEnd +; 6182 + +Intro_WipeInFrontpic: ; 6182 + ld a, $77 + ld [hWX], a + call DelayFrame + ld a, %11100100 + call DmgToCgbBGPals +.loop + call DelayFrame + ld a, [hWX] + sub $8 + cp -1 + ret z + ld [hWX], a + jr .loop +; 619c + +Intro_PrepTrainerPic: ; 619c + ld de, VTiles2 + callba GetTrainerPic + xor a + ld [hFillBox], a + hlcoord 6, 4 + lb bc, 7, 7 + predef FillBox + ret +; 61b4 + +ShrinkFrame: ; 61b4 + ld de, VTiles2 + ld c, $31 + predef DecompressPredef + xor a + ld [hFillBox], a + hlcoord 6, 4 + lb bc, 7, 7 + predef FillBox + ret +; 61cd + +Intro_PlacePlayerSprite: ; 61cd + + callba GetPlayerIcon + ld c, $c + ld hl, VTiles0 + call Request2bpp + + ld hl, Sprites + ld de, .sprites + ld a, [de] + inc de + + ld c, a +.loop + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + + ld b, 0 + ld a, [PlayerGender] + bit 0, a + jr z, .male + ld b, 1 +.male + ld a, b + + ld [hli], a + dec c + jr nz, .loop + ret +; 61fe + +.sprites ; 61fe + db 4 + db $4c, $48, 0 + db $4c, $50, 1 + db $54, $48, 2 + db $54, $50, 3 +; 620b + + +Function620b: ; 620b + callab Functione4579 + jr c, Function6219 + callba CrystalIntro + +Function6219: ; 6219 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + call .TitleScreen + call DelayFrame +.loop + call Function627b + jr nc, .loop + + call ClearSprites + call ClearBGPalettes + + pop af + ld [rSVBK], a + + ld hl, rLCDC + res 2, [hl] + call ClearScreen + call Function3200 + xor a + ld [hLCDStatCustom], a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + ld b, SCGB_08 + call GetSGBLayout + call UpdateTimePals + ld a, [wcf64] + cp $5 + jr c, .ok + xor a +.ok + ld e, a + ld d, 0 + ld hl, .jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 626a + +.jumptable + dw _MainMenu + dw Function6389 + dw Function620b + dw Function620b + dw ResetClock +; 6274 + + +.TitleScreen: ; 6274 + callba _TitleScreen + ret +; 627b + +Function627b: ; 627b + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done_title + call TitleScreenScene + callba SuicuneFrameIterator + call DelayFrame + and a + ret + +.done_title + scf + ret +; 6292 + +Function6292: ; 6292 ; unreferenced + ld a, [hVBlankCounter] + and $7 + ret nz + ld hl, LYOverrides + $5f + ld a, [hl] + dec a + ld bc, 2 * SCREEN_WIDTH + call ByteFill + ret +; 62a3 + +TitleScreenScene: ; 62a3 + ld e, a + ld d, 0 + ld hl, .scenes +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 62af + +.scenes + dw TitleScreenEntrance + dw TitleScreenTimer + dw TitleScreenMain + dw TitleScreenEnd +; 62b7 + +Function62b7: ; Unreferenced + ld hl, wJumptableIndex + inc [hl] + ret +; 62bc + + +TitleScreenEntrance: ; 62bc + +; Animate the logo: +; Move each line by 4 pixels until our count hits 0. + ld a, [hSCX] + and a + jr z, .done + sub 4 + ld [hSCX], a + +; Lay out a base (all lines scrolling together). + ld e, a + ld hl, LYOverrides + ld bc, 8 * 10 ; logo height + call ByteFill + +; Reversed signage for every other line's position. +; This is responsible for the interlaced effect. + ld a, e + xor -1 + inc a + + ld b, 8 * 10 / 2 ; logo height / 2 + ld hl, LYOverrides + 1 +.loop + ld [hli], a + inc hl + dec b + jr nz, .loop + + callba AnimateTitleCrystal + ret + +.done +; Next scene + ld hl, wJumptableIndex + inc [hl] + xor a + ld [hLCDStatCustom], a + +; Play the title screen music. + ld de, MUSIC_TITLE + call PlayMusic + + ld a, $88 + ld [hWY], a + ret +; 62f6 + + +TitleScreenTimer: ; 62f6 + +; Next scene + ld hl, wJumptableIndex + inc [hl] + +; Start a timer + ld hl, wcf65 + ld de, $1140 ; 73.6 seconds + ld [hl], e + inc hl + ld [hl], d + ret +; 6304 + +TitleScreenMain: ; 6304 + +; Run the timer down. + ld hl, wcf65 + ld e, [hl] + inc hl + ld d, [hl] + ld a, e + or d + jr z, .end + + dec de + ld [hl], d + dec hl + ld [hl], e + +; Save data can be deleted by pressing Up + B + Select. + call GetJoypad + ld hl, hJoyDown + ld a, [hl] + and D_UP + B_BUTTON + SELECT + cp D_UP + B_BUTTON + SELECT + jr z, .delete_save_data + +; To bring up the clock reset dialog: + +; Hold Down + B + Select to initiate the sequence. + ld a, [$ffeb] + cp $34 + jr z, .check_clock_reset + + ld a, [hl] + and D_DOWN + B_BUTTON + SELECT + cp D_DOWN + B_BUTTON + SELECT + jr nz, .check_start + + ld a, $34 + ld [$ffeb], a + jr .check_start + +; Keep Select pressed, and hold Left + Up. +; Then let go of Select. +.check_clock_reset + bit 2, [hl] ; SELECT + jr nz, .check_start + + xor a + ld [$ffeb], a + + ld a, [hl] + and D_LEFT + D_UP + cp D_LEFT + D_UP + jr z, .clock_reset + +; Press Start or A to start the game. +.check_start + ld a, [hl] + and START | A_BUTTON + jr nz, .incave + ret + +.incave + ld a, 0 + jr .done + +.delete_save_data + ld a, 1 + +.done + ld [wcf64], a + +; Return to the intro sequence. + ld hl, wJumptableIndex + set 7, [hl] + ret + +.end +; Next scene + ld hl, wJumptableIndex + inc [hl] + +; Fade out the title screen music + xor a + ld [MusicFadeIDLo], a + ld [MusicFadeIDHi], a + ld hl, MusicFade + ld [hl], 8 ; 1 second + + ld hl, wcf65 + inc [hl] + ret + +.clock_reset + ld a, 4 + ld [wcf64], a + +; Return to the intro sequence. + ld hl, wJumptableIndex + set 7, [hl] + ret +; 6375 + +TitleScreenEnd: ; 6375 + +; Wait until the music is done fading. + + ld hl, wcf65 + inc [hl] + + ld a, [MusicFade] + and a + ret nz + + ld a, 2 + ld [wcf64], a + +; Back to the intro. + ld hl, wJumptableIndex + set 7, [hl] + ret +; 6389 + +Function6389: ; 6389 + callba Function4d54c + jp Init +; 6392 + +ResetClock: ; 6392 + callba _ResetClock + jp Init +; 639b + +Function639b: ; unreferenced + ; If bit 0 or 1 of [wcf65] is set, we don't need to be here. + ld a, [wcf65] + and $3 + ret nz + ld bc, SpriteAnim10 + ld hl, SpriteAnim10FrameIndex - SpriteAnim10 + add hl, bc ; over-the-top compicated way to load wc3ae into hl + ld l, [hl] + ld h, 0 +rept 2 + add hl, hl +endr + ld de, Data63ca + add hl, de + ; If bit 2 of [wcf65] is set, get the second dw; else, get the first dw + ld a, [wcf65] + and %00000100 +rept 2 + srl a +endr + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + and a + ret z + ld e, a + ld d, [hl] + ld a, SPRITE_ANIM_INDEX_01 + call _InitSpriteAnimStruct + ret +; 63ca + +Data63ca: ; 63ca +; frame 0 y, x; frame 1 y, x + db $5c, $50, $00, $00 + db $5c, $68, $5c, $58 + db $5c, $68, $5c, $78 + db $5c, $88, $5c, $78 + db $00, $00, $5c, $78 + db $00, $00, $5c, $58 +; 63e2 + +Copyright: ; 63e2 + call ClearTileMap + call LoadFontsExtra + ld de, CopyrightGFX + ld hl, VTiles2 tile $60 + lb bc, BANK(CopyrightGFX), $1d + call Request2bpp + hlcoord 2, 7 + ld de, CopyrightString + jp PlaceString +; 63fd + +CopyrightString: ; 63fd + ; ©1995-2001 Nintendo + db $60, $61, $62, $63, $64, $65, $66 + db $67, $68, $69, $6a, $6b, $6c + + db $4e + + ; ©1995-2001 Creatures inc. + db $60, $61, $62, $63, $64, $65, $66, $6d + db $6e, $6f, $70, $71, $72, $7a, $7b, $7c + + db $4e + + ; ©1995-2001 GAME FREAK inc. + db $60, $61, $62, $63, $64, $65, $66, $73, $74 + db $75, $76, $77, $78, $79, $7a, $7b, $7c + + db "@" +; 642e + +GameInit:: ; 642e + callba TryLoadSaveData + call ResetTextRelatedRAM + call ClearBGPalettes + call ClearTileMap + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + xor a + ld [hBGMapAddress], a + ld [hJoyDown], a + ld [hSCX], a + ld [hSCY], a + ld a, $90 + ld [hWY], a + call WaitBGMap + jp Function620b +; 6454 diff --git a/engine/link.asm b/engine/link.asm index a1fa0661b..8ba1702e9 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -40,7 +40,7 @@ Function2805d: ; 2805d call Function28499 call Function28434 xor a - ld [wcf56], a + ld [wPlayerLinkAction], a call Function87d ld a, [hLinkPlayerNumber] cp $2 @@ -83,8 +83,8 @@ Function2805d: ; 2805d ld a, $fe ld [de], a ld hl, wc608 - ld de, wc6d0 - ld bc, $c8 + ld de, wPlayerTrademonSpecies + ld bc, wPlayerTrademonSpecies - wc608 call Function75f xor a ld [rIF], a @@ -105,7 +105,7 @@ Function2805d: ; 2805d ld de, OverworldMap ld bc, $1a2 call Function2879e - ld de, wc6d0 + ld de, wPlayerTrademonSpecies ld hl, wc813 ld c, $2 .asm_280fe @@ -226,7 +226,7 @@ Function28177: ; 28177 ld a, $fe ld [de], a ld hl, wc608 - ld de, wc6d0 + ld de, wPlayerTrademonSpecies ld bc, $c8 call Function75f ld a, [wLinkMode] @@ -250,7 +250,7 @@ Function28177: ; 28177 ld de, OverworldMap ld bc, $1b9 call Function2879e - ld de, wc6d0 + ld de, wPlayerTrademonSpecies ld hl, wc813 ld c, $2 .asm_28224 @@ -363,23 +363,23 @@ Function28177: ; 28177 .asm_282cc push bc push de - callba Function1de5c8 + callba IsMailEuropean ld a, c or a - jr z, .asm_282ee + jr z, .next sub $3 - jr nc, .asm_282e4 - callba Function1df203 - jr .asm_282ee + jr nc, .skip + callba DeutenEnglischenPost + jr .next -.asm_282e4 +.skip cp $2 - jr nc, .asm_282ee - callba Function1df220 + jr nc, .next + callba HandleSpanishItalianMail -.asm_282ee +.next pop de - ld hl, $2f + ld hl, MAIL_STRUCT_LENGTH add hl, de ld d, h ld e, l @@ -474,7 +474,7 @@ Function283b2: ; 283b2 ld b, $a .asm_283b7 call DelayFrame - call Function908 + call LinkCommunicationsSignalDataReceived dec b jr nz, .asm_283b7 xor a @@ -493,9 +493,9 @@ Function283b2: ; 283b2 pop hl bccoord 1, 14 call PlaceWholeStringInBoxAtOnce - call FadeToWhite + call RotateThreePalettesRight call ClearScreen - ld b, $8 + ld b, SCGB_08 call GetSGBLayout call Function3200 ret @@ -802,105 +802,120 @@ Function284f6: ; 284f6 ; 28595 Function28595: ; 28595 - ld de, OverworldMap - ld a, $fd - ld b, $6 + ld de, wc800 + ld a, EGG + ld b, PARTY_LENGTH .loop1 ld [de], a inc de dec b jr nz, .loop1 + ; de = $c806 ld hl, PlayerName ld bc, NAME_LENGTH call CopyBytes + ; de = $c811 ld hl, PartyCount - ld bc, 8 + ld bc, 1 + PARTY_LENGTH + 1 call CopyBytes + ; de = $c819 ld hl, PlayerID ld bc, 2 call CopyBytes + ; de = $c81b ld hl, PartyMon1Species - ld bc, $120 + ld bc, PARTY_LENGTH * PARTYMON_STRUCT_LENGTH call CopyBytes + ; de = $c93b ld hl, PartyMonOT - ld bc, $42 + ld bc, PARTY_LENGTH * NAME_LENGTH call CopyBytes + ; de = $c97d ld hl, PartyMonNicknames - ld bc, $42 + ld bc, PARTY_LENGTH * PKMN_NAME_LENGTH call CopyBytes + ; de = $c9bf + +; Okay, we did all that. Now, are we in the trade center? ld a, [wLinkMode] cp LINK_TRADECENTER ret nz + +; Fill 5 bytes at wc9f4 with $20 ld de, wc9f4 ld a, $20 call Function28682 - ld a, BANK(sPartyScratch1) + +; Copy all the mail messages to wc9f9 + ld a, BANK(sPartyMail) call GetSRAMBank - ld hl, sPartyScratch1 + ld hl, sPartyMail ld b, PARTY_LENGTH .loop2 push bc - ld bc, $21 + ld bc, MAIL_MSG_LENGTH + 1 call CopyBytes - ld bc, $e + ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor add hl, bc pop bc dec b jr nz, .loop2 - ld hl, sPartyScratch1 +; Copy the mail metadata to wcabf + ld hl, sPartyMail ld b, PARTY_LENGTH .loop3 push bc - ld bc, $21 + ld bc, MAIL_MSG_LENGTH + 1 add hl, bc - ld bc, $e + ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor call CopyBytes pop bc dec b jr nz, .loop3 + ld b, PARTY_LENGTH - ld de, sPartyScratch1 + ld de, sPartyMail ld hl, wc9f9 .loop4 push bc push hl push de push hl - callba Function1de5c8 + callba IsMailEuropean pop de ld a, c or a jr z, .next sub $3 - jr nc, .skip - callba Function1df1e6 + jr nc, .italian_spanish + callba HandleFrenchGermanMail jr .next -.skip +.italian_spanish cp $2 jr nc, .next - callba Function1df220 + callba HandleSpanishItalianMail .next pop de - ld hl, SCRATCHMON_STRUCT_LENGTH + ld hl, MAIL_STRUCT_LENGTH add hl, de ld d, h ld e, l pop hl - ld bc, $21 + ld bc, sPartyMon1MailAuthor - sPartyMon1Mail add hl, bc pop bc dec b jr nz, .loop4 call CloseSRAM ld hl, wc9f9 - ld bc, $c6 + ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail) .loop5 ld a, [hl] cp $fe jr nz, .skip2 - ld [hl], $21 + ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail .skip2 inc hl @@ -910,7 +925,7 @@ Function28595: ; 28595 jr nz, .loop5 ld hl, wcabf ld de, wcb13 - ld b, $54 + ld b, PARTY_LENGTH * (sPartyMon1MailEnd - sPartyMon1MailAuthor) ld c, $0 .loop6 inc c @@ -1198,7 +1213,7 @@ Function287e3: ; 287e3 call Function28ef8 callba Function16d673 xor a - ld hl, wcf51 + ld hl, wOtherPlayerLinkMode rept 3 ld [hli], a endr @@ -1206,7 +1221,7 @@ endr ld a, $1 ld [MenuSelection2], a inc a - ld [wcf56], a + ld [wPlayerLinkAction], a jp Function2888b ; 28803 @@ -1363,7 +1378,7 @@ Function28926: ; 28926 hlcoord 0, 15 ld b, $1 ld c, $12 - call Function28eef + call Predef_LinkTextbox hlcoord 2, 16 ld de, String28ab4 call PlaceString @@ -1453,9 +1468,9 @@ Function28926: ; 28926 ld [MenuSelection2], a dec a ld [wd002], a - ld [wcf56], a + ld [wPlayerLinkAction], a callba Function16d6ce - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] cp $f jp z, Function287e3 ld [wd003], a @@ -1468,11 +1483,11 @@ Function28926: ; 28926 jp nc, Function28b87 xor a ld [wcf57], a - ld [wcf52], a + ld [wOtherPlayerLinkAction], a hlcoord 0, 12 ld b, $4 ld c, $12 - call Function28eef + call Predef_LinkTextbox callba Function4d354 ld hl, UnknownText_0x28aaf bccoord 1, 14 @@ -1482,7 +1497,7 @@ Function28926: ; 28926 .asm_28a58 xor a ld [wcf57], a - ld [wcf52], a + ld [wOtherPlayerLinkAction], a ld a, [wd003] ld hl, OTPartySpecies ld c, a @@ -1494,7 +1509,7 @@ Function28926: ; 28926 hlcoord 0, 12 ld b, $4 ld c, $12 - call Function28eef + call Predef_LinkTextbox callba Function4d354 ld hl, UnknownText_0x28ac4 bccoord 1, 14 @@ -1504,12 +1519,12 @@ Function28926: ; 28926 hlcoord 0, 12 ld b, $4 ld c, $12 - call Function28eef + call Predef_LinkTextbox hlcoord 1, 14 ld de, String28ece call PlaceString ld a, $1 - ld [wcf56], a + ld [wPlayerLinkAction], a callba Function16d6ce ld c, $64 call DelayFrames @@ -1576,16 +1591,16 @@ Function28ade: ; 28ade ld a, $ec ldcoord_a 9, 17 ld a, $f - ld [wcf56], a + ld [wPlayerLinkAction], a callba Function16d6ce - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] cp $f jr nz, .asm_28ade Function28b22: ; 28b22 - call FadeToWhite + call RotateThreePalettesRight call ClearScreen - ld b, $8 + ld b, SCGB_08 call GetSGBLayout call Function3200 xor a @@ -1619,7 +1634,7 @@ String_28b61: ; 28b61 ; 28b68 Function28b68: ; 28b68 - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] hlcoord 6, 9 ld bc, SCREEN_WIDTH call AddNTimes @@ -1647,11 +1662,11 @@ Function28b77: ; 28b77 Function28b87: ; 28b87 xor a ld [wcf57], a - ld [wcf52], a + ld [wOtherPlayerLinkAction], a hlcoord 0, 12 ld b, $4 ld c, $12 - call Function28eef + call Predef_LinkTextbox callba Function4d354 ld a, [wd002] ld hl, PartySpecies @@ -1680,7 +1695,7 @@ Function28b87: ; 28b87 hlcoord 10, 7 ld b, $3 ld c, $7 - call Function28eef + call Predef_LinkTextbox ld de, String28eab hlcoord 12, 8 call PlaceString @@ -1716,11 +1731,11 @@ Function28b87: ; 28b87 .asm_28c33 ld a, $1 - ld [wcf56], a + ld [wPlayerLinkAction], a hlcoord 0, 12 ld b, 4 ld c, 18 - call Function28eef + call Predef_LinkTextbox hlcoord 1, 14 ld de, String28ece call PlaceString @@ -1729,30 +1744,30 @@ Function28b87: ; 28b87 .asm_28c54 ld a, $2 - ld [wcf56], a + ld [wPlayerLinkAction], a callba Function16d6ce - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] dec a jr nz, .asm_28c7b hlcoord 0, 12 ld b, 4 ld c, 18 - call Function28eef + call Predef_LinkTextbox hlcoord 1, 14 ld de, String28ece call PlaceString jp Function28ea3 .asm_28c7b - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [wd002] - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank ld d, h ld e, l - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH add hl, bc ld a, [wd002] ld c, a @@ -1762,28 +1777,28 @@ Function28b87: ; 28b87 cp $6 jr z, .asm_28ca6 push bc - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes pop bc jr .asm_28c96 .asm_28ca6 - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [PartyCount] dec a - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes push hl ld hl, wc9f4 ld a, [wd003] - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes pop de - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes call CloseSRAM ld hl, PlayerName - ld de, wc6e7 + ld de, wPlayerTrademonSenderName ld bc, NAME_LENGTH call CopyBytes ld a, [wd002] @@ -1792,28 +1807,28 @@ Function28b87: ; 28b87 ld c, a add hl, bc ld a, [hl] - ld [wc6d0], a + ld [wPlayerTrademonSpecies], a push af ld a, [wd002] ld hl, PartyMonOT call SkipNames - ld de, wc6f2 + ld de, wPlayerTrademonOTName ld bc, NAME_LENGTH call CopyBytes ld hl, PartyMon1ID ld a, [wd002] call GetPartyLocation ld a, [hli] - ld [PlayerScreens], a + ld [wPlayerTrademonID], a ld a, [hl] - ld [EnemyScreens], a + ld [wPlayerTrademonID + 1], a ld hl, PartyMon1DVs ld a, [wd002] call GetPartyLocation ld a, [hli] - ld [wc6fd], a + ld [wPlayerTrademonDVs], a ld a, [hl] - ld [wPlayerMinimized], a + ld [wPlayerTrademonDVs + 1], a ld a, [wd002] ld hl, PartyMon1Species call GetPartyLocation @@ -1821,9 +1836,9 @@ Function28b87: ; 28b87 ld c, l callba GetCaughtGender ld a, c - ld [wc701], a + ld [wPlayerTrademonCaughtData], a ld hl, wd26b - ld de, wc719 + ld de, wOTTrademonSenderName ld bc, NAME_LENGTH call CopyBytes ld a, [wd003] @@ -1832,27 +1847,27 @@ Function28b87: ; 28b87 ld c, a add hl, bc ld a, [hl] - ld [wc702], a + ld [wOTTrademonSpecies], a ld a, [wd003] ld hl, OTPartyMonOT call SkipNames - ld de, wc724 + ld de, wOTTrademonOTName ld bc, NAME_LENGTH call CopyBytes ld hl, OTPartyMon1ID ld a, [wd003] call GetPartyLocation ld a, [hli] - ld [wEnemyWrapCount], a + ld [wOTTrademonID], a ld a, [hl] - ld [wPlayerCharging], a + ld [wOTTrademonID + 1], a ld hl, OTPartyMon1DVs ld a, [wd003] call GetPartyLocation ld a, [hli] - ld [wEnemyTrappingMove], a + ld [wOTTrademonDVs], a ld a, [hl] - ld [wPlayerWrapCount], a + ld [wOTTrademonDVs + 1], a ld a, [wd003] ld hl, OTPartyMon1Species call GetPartyLocation @@ -1860,7 +1875,7 @@ Function28b87: ; 28b87 ld c, l callba GetCaughtGender ld a, c - ld [wEnemyCharging], a + ld [wOTTrademonCaughtData], a ld a, [wd002] ld [CurPartyMon], a ld hl, PartySpecies @@ -1889,18 +1904,18 @@ Function28b87: ; 28b87 call DelayFrames call ClearTileMap call LoadFontsBattleExtra - ld b, $8 + ld b, SCGB_08 call GetSGBLayout ld a, [hLinkPlayerNumber] cp $1 - jr z, .asm_28de4 - predef Function28f24 - jr .asm_28de9 + jr z, .player_2 + predef TradeAnimation + jr .done_animation -.asm_28de4 - predef Function28f63 +.player_2 + predef TradeAnimationPlayer2 -.asm_28de9 +.done_animation pop af ld c, a ld [CurPartyMon], a @@ -1916,11 +1931,11 @@ Function28b87: ; 28b87 ld de, TempMonSpecies ld bc, PARTYMON_STRUCT_LENGTH call CopyBytes - predef Functionda96 + predef AddTempmonToParty ld a, [PartyCount] dec a ld [CurPartyMon], a - callab Function421d8 + callab EvolvePokemon call ClearScreen call Function28ef8 call Function28eff @@ -1944,7 +1959,7 @@ Function28b87: ; 28b87 .asm_28e49 ld a, b - ld [wcf56], a + ld [wPlayerLinkAction], a push bc call Function862 pop bc @@ -1954,7 +1969,7 @@ Function28b87: ; 28b87 ld a, b and a jr z, .asm_28e63 - ld a, [wcf52] + ld a, [wOtherPlayerLinkAction] cp b jr nz, .asm_28e49 @@ -1967,7 +1982,7 @@ Function28b87: ; 28b87 hlcoord 0, 12 ld b, 4 ld c, 18 - call Function28eef + call Predef_LinkTextbox hlcoord 1, 14 ld de, String28ebd call PlaceString @@ -2004,10 +2019,10 @@ String28ece: ; 28ece next "was canceled!@" -Function28eef: ; 28eef +Predef_LinkTextbox: ; 28eef ld d, h ld e, l - callba Function16d6ca + callba LinkTextbox ret ; 28ef8 @@ -2026,1551 +2041,16 @@ Function28f09: ; 28f09 hlcoord 0, 0 ld b, 6 ld c, 18 - call Function28eef + call Predef_LinkTextbox hlcoord 0, 8 ld b, 6 ld c, 18 - call Function28eef + call Predef_LinkTextbox callba Functionfb60d ret ; 28f24 -Function28f24: ; 28f24 - xor a - ld [wcf66], a - ld hl, wc6e7 - ld de, wc719 - call Function297ff - ld hl, wc6d0 - ld de, wc702 - call Function29814 - ld de, .data_28f3f - jr Function28fa1 - -.data_28f3f - db $1b - db $1 - db $1c - db $21 - db $2d - db $27 - db $23 - db $3 - db $25 - db $28 - db $25 - db $1e - db $29 - db $6 - db $16 - db $1f - db $19 - db $17 - db $22 - db $1f - db $2a - db $e - db $3 - db $24 - db $5 - db $25 - db $2 - db $27 - db $25 - db $1d - db $2c - db $2e - db $1e - db $18 - db $1f - db $2b - -Function28f63: ; 28f63 - xor a - ld [wcf66], a - ld hl, wc719 - ld de, wc6e7 - call Function297ff - ld hl, wc702 - ld de, wc6d0 - call Function29814 - ld de, .data_28f7e - jr Function28fa1 - -.data_28f7e - db $1a - db $17 - db $22 - db $1f - db $2a - db $6 - db $3 - db $24 - db $5 - db $25 - db $2 - db $27 - db $25 - db $1d - db $2c - db $2f - db $1e - db $18 - db $1f - db $1b - db $1 - db $1c - db $22 - db $27 - db $23 - db $3 - db $25 - db $28 - db $25 - db $1e - db $29 - db $e - db $16 - db $1f - db $2b - -Function28fa1: ; 28fa1 - ld hl, BattleEnded - ld [hl], e - inc hl - ld [hl], d - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a - ld hl, VramState - ld a, [hl] - push af - res 0, [hl] - ld hl, Options - ld a, [hl] - push af - set 4, [hl] - call Function28fdb - ld a, [wcf66] - and a - jr nz, .asm_28fca - ld de, MUSIC_EVOLUTION - call PlayMusic2 -.asm_28fca - call Function29082 - jr nc, .asm_28fca - pop af - ld [Options], a - pop af - ld [VramState], a - pop af - ld [hMapAnims], a - ret -; 28fdb - -Function28fdb: ; 28fdb - xor a - ld [wJumptableIndex], a - call ClearBGPalettes - call ClearSprites - call ClearTileMap - call DisableLCD - call LoadFontsBattleExtra - callab Function8cf53 - ld a, [hCGB] - and a - jr z, .asm_2900b - ld a, $1 - ld [rVBK], a - ld hl, VTiles0 - ld bc, sScratch - VTiles0 - xor a - call ByteFill - ld a, $0 - ld [rVBK], a - -.asm_2900b - ld hl, VBGMap0 - ld bc, sScratch - VBGMap0 - ld a, " " - call ByteFill - ld hl, TradeGameBoyLZ - ld de, VTiles2 tile $31 - call Decompress - ld hl, TradeArrowGFX - ld de, VTiles1 tile $6d - ld bc, $10 - ld a, BANK(TradeArrowGFX) - call FarCopyBytes - ld hl, TradeArrowGFX + $10 - ld de, VTiles1 tile $6e - ld bc, $10 - ld a, BANK(TradeArrowGFX) - call FarCopyBytes - xor a - ld [hSCX], a - ld [hSCY], a - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - callba Function4d7fd - call EnableLCD - call Function2982b - ld a, [wc6d0] - ld hl, wc6fd - ld de, VTiles0 - call Function29491 - ld a, [wc702] - ld hl, wEnemyTrappingMove - ld de, VTiles0 tile $31 - call Function29491 - ld a, [wc6d0] - ld de, wc6d1 - call Function294a9 - ld a, [wc702] - ld de, wc703 - call Function294a9 - call Function297ed - ret -; 29082 - -Function29082: ; 29082 - ld a, [wJumptableIndex] - bit 7, a - jr nz, .asm_2909b - call Function290a0 - callab Function8cf69 - ld hl, wcf65 - inc [hl] - call DelayFrame - and a - ret - -.asm_2909b - call LoadStandardFont - scf - ret -; 290a0 - -Function290a0: ; 290a0 - ld a, [wJumptableIndex] - ld e, a - ld d, 0 - ld hl, JumpTable290af -rept 2 - add hl, de -endr - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 290af - -JumpTable290af: ; 290af - dw Function29114 - dw Function2942e - dw Function29461 - dw Function29348 - dw Function2937e - dw Function29391 - dw Function29129 - dw Function291af - dw Function291c4 - dw Function291d9 - dw Function2925d - dw Function29220 - dw Function2925d - dw Function29229 - dw Function2913c - dw Function2925d - dw Function291e8 - dw Function291fd - dw Function29211 - dw Function29220 - dw Function2925d - dw Function29229 - dw Function29701 - dw Function2973c - dw Function2975c - dw Function2977f - dw Function297a4 - dw Function293a6 - dw Function293b6 - dw Function293d2 - dw Function293de - dw Function293ea - dw Function2940c - dw Function294e7 - dw Function294f0 - dw Function2961b - dw Function2962c - dw Function29879 - dw Function29886 - dw Function29649 - dw Function29660 - dw Function2926d - dw Function29277 - dw Function29123 - dw Function29487 - dw Function294f9 - dw Function29502 - dw Function2950c -; 2910f - -Function2910f: ; 2910f - ld hl, wJumptableIndex - inc [hl] - ret -; 29114 - -Function29114: ; 29114 - ld hl, BattleEnded - ld e, [hl] - inc hl - ld d, [hl] - ld a, [de] - ld [wJumptableIndex], a - inc de - ld [hl], d - dec hl - ld [hl], e - ret -; 29123 - -Function29123: ; 29123 - ld hl, wJumptableIndex - set 7, [hl] - ret -; 29129 - -Function29129: ; 29129 - ld a, $ed - call Function292f6 - ld a, [wc74c] - ld [wd265], a - xor a - ld de, $2c58 - ld b, $0 - jr Function2914e - -Function2913c: ; 2913c - ld a, $ee - call Function292f6 - ld a, [wc74d] - ld [wd265], a - ld a, $2 - lb de, $4c, $94 - ld b, $4 - -Function2914e: ; 2914e - push bc - push de - push bc - push de - push af - call DisableLCD - callab Function8cf53 - ld hl, $9874 - ld bc, $c - ld a, $60 - call ByteFill - pop af - call Function29281 - xor a - ld [hSCX], a - ld a, $7 - ld [hWX], a - ld a, $70 - ld [hWY], a - call EnableLCD - call Function2985a - pop de - ld a, $11 - call Function3b2a - ld hl, $b - add hl, bc - pop bc - ld [hl], b - pop de - ld a, $12 - call Function3b2a - ld hl, $b - add hl, bc - pop bc - ld [hl], b - call WaitBGMap - ld b, $1b - call GetSGBLayout - ld a, $e4 - call DmgToCgbBGPals - ld a, $d0 - call Functioncf8 - call Function2910f - ld a, $5c - ld [wcf64], a - ret -; 291af - -Function291af: ; 291af - call Function2981d - ld a, [hSCX] - add $2 - ld [hSCX], a - cp $50 - ret nz - ld a, $1 - call Function29281 - call Function2910f - ret -; 291c4 - -Function291c4: ; 291c4 - call Function2981d - ld a, [hSCX] - add $2 - ld [hSCX], a - cp $a0 - ret nz - ld a, $2 - call Function29281 - call Function2910f - ret -; 291d9 - -Function291d9: ; 291d9 - call Function2981d - ld a, [hSCX] - add $2 - ld [hSCX], a - and a - ret nz - call Function2910f - ret -; 291e8 - -Function291e8: ; 291e8 - call Function2981d - ld a, [hSCX] - sub $2 - ld [hSCX], a - cp $b0 - ret nz - ld a, $1 - call Function29281 - call Function2910f - ret -; 291fd - -Function291fd: ; 291fd - call Function2981d - ld a, [hSCX] - sub $2 - ld [hSCX], a - cp $60 - ret nz - xor a - call Function29281 - call Function2910f - ret -; 29211 - -Function29211: ; 29211 - call Function2981d - ld a, [hSCX] - sub $2 - ld [hSCX], a - and a - ret nz - call Function2910f - ret -; 29220 - -Function29220: ; 29220 - ld a, $80 - ld [wcf64], a - call Function2910f - ret -; 29229 - -Function29229: ; 29229 - call ClearBGPalettes - call ClearTileMap - call ClearSprites - call DisableLCD - callab Function8cf53 - ld hl, VBGMap0 - ld bc, sScratch - VBGMap0 - ld a, " " - call ByteFill - xor a - ld [hSCX], a - ld a, $90 - ld [hWY], a - call EnableLCD - call Function2982b - call WaitBGMap - call Function297ed - call Function29114 - ret -; 2925d - -Function2925d: ; 2925d - call Function2981d - ld hl, wcf64 - ld a, [hl] - and a - jr z, .asm_29269 - dec [hl] - ret - -.asm_29269 - call Function2910f - ret -; 2926d - -Function2926d: ; 2926d - call Function29114 - ld de, SFX_GIVE_TRADEMON - call PlaySFX - ret -; 29277 - -Function29277: ; 29277 - call Function29114 - ld de, SFX_GET_TRADEMON - call PlaySFX - ret -; 29281 - -Function29281: ; 29281 - and 3 - ld e, a - ld d, 0 - ld hl, Jumptable_2928f -rept 2 - add hl, de -endr - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 2928f - -Jumptable_2928f: ; 2928f - dw Function29297 - dw Function292af - dw Function292be - dw Function29297 -; 29297 - -Function29297: ; 29297 - call Function297cf - hlcoord 9, 3 - ld [hl], $5b - inc hl - ld bc, $a - ld a, $60 - call ByteFill - hlcoord 3, 2 - call Function292ec - ret -; 292af - -Function292af: ; 292af - call Function297cf - hlcoord 0, 3 - ld bc, SCREEN_WIDTH - ld a, $60 - call ByteFill - ret -; 292be - -Function292be: ; 292be - call Function297cf - hlcoord 0, 3 - ld bc, $11 - ld a, $60 - call ByteFill - hlcoord 17, 3 - ld a, $5d - ld [hl], a - ld a, $61 - ld de, SCREEN_WIDTH - ld c, $3 -.asm_292d9 - add hl, de - ld [hl], a - dec c - jr nz, .asm_292d9 - add hl, de - ld a, $5f - ld [hld], a - ld a, $5b - ld [hl], a - hlcoord 10, 6 - call Function292ec - ret -; 292ec - -Function292ec: ; 292ec - ld de, TradeGameBoyTilemap - lb bc, 8, 6 - call Function297db - ret -; 292f6 - -Function292f6: ; 292f6 - push af - call ClearBGPalettes - call WaitTop - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - hlcoord 0, 0 - ld bc, SCREEN_WIDTH - ld a, "─" - call ByteFill - hlcoord 0, 1 - ld de, wc736 - call PlaceString - ld hl, wc741 - ld de, 0 -.asm_2931e - ld a, [hli] - cp "@" - jr z, .asm_29326 - dec de - jr .asm_2931e - -.asm_29326 - hlcoord 0, 4 - add hl, de - ld de, wc741 - call PlaceString - hlcoord 7, 2 - ld bc, 6 - pop af - call ByteFill - call WaitBGMap - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - ret -; 29348 - -Function29348: ; 29348 - call ClearTileMap - call WaitTop - ld a, $a0 - ld [hSCX], a - call DelayFrame - hlcoord 8, 2 - ld de, Tilemap_298f7 - lb bc, 3, 12 - call Function297db - call WaitBGMap - ld b, $1b - call GetSGBLayout - ld a, $e4 - call DmgToCgbBGPals - ld de, $e4e4 - call DmgToCgbObjPals - ld de, SFX_POTION - call PlaySFX - call Function2910f - ret -; 2937e - -Function2937e: ; 2937e - ld a, [hSCX] - and a - jr z, .asm_29388 - add $4 - ld [hSCX], a - ret - -.asm_29388 - ld c, $50 - call DelayFrames - call Function29114 - ret -; 29391 - -Function29391: ; 29391 - ld a, [hSCX] - cp $a0 - jr z, .asm_2939c - sub $4 - ld [hSCX], a - ret - -.asm_2939c - call ClearTileMap - xor a - ld [hSCX], a - call Function29114 - ret -; 293a6 - -Function293a6: ; 293a6 - ld a, $8f - ld [hWX], a - ld a, $88 - ld [hSCX], a - ld a, $50 - ld [hWY], a - call Function29114 - ret -; 293b6 - -Function293b6: ; 293b6 - ld a, [hWX] - cp $7 - jr z, .asm_293c7 - sub $4 - ld [hWX], a - ld a, [hSCX] - sub $4 - ld [hSCX], a - ret - -.asm_293c7 - ld a, $7 - ld [hWX], a - xor a - ld [hSCX], a - call Function29114 - ret -; 293d2 - -Function293d2: ; 293d2 - ld a, $7 - ld [hWX], a - ld a, $50 - ld [hWY], a - call Function29114 - ret -; 293de - -Function293de: ; 293de - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - call Function29114 - ret -; 293ea - -Function293ea: ; 293ea - call WaitTop - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call WaitBGMap - ld a, $7 - ld [hWX], a - xor a - ld [hWY], a - call DelayFrame - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - call Function2910f - ret -; 2940c - -Function2940c: ; 2940c - ld a, [hWX] - cp $a1 - jr nc, .asm_29417 - add $4 - ld [hWX], a - ret - -.asm_29417 - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call WaitBGMap - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call Function29114 - ret -; 2942e - -Function2942e: ; 2942e - call Function2951f - ld a, [wc6d0] - ld [CurPartySpecies], a - ld a, [wc6fd] - ld [TempMonDVs], a - ld a, [wPlayerMinimized] - ld [TempMonDVs + 1], a - ld b, $1a - call GetSGBLayout - ld a, $e4 - call DmgToCgbBGPals - call Function294bb - - ld a, [wc6d0] - call GetCryIndex - jr c, .asm_2945d - ld e, c - ld d, b - call PlayCryHeader -.asm_2945d - - call Function29114 - ret -; 29461 - -Function29461: ; 29461 - call Function29549 - ld a, [wc702] - ld [CurPartySpecies], a - ld a, [wEnemyTrappingMove] - ld [TempMonDVs], a - ld a, [wPlayerWrapCount] - ld [TempMonDVs + 1], a - ld b, $1a - call GetSGBLayout - ld a, $e4 - call DmgToCgbBGPals - call Function294c0 - call Function29114 - ret -; 29487 - -Function29487: ; 29487 - callba Function4d81e - call Function29114 - ret -; 29491 - -Function29491: ; 29491 - push de - push af - predef GetUnownLetter - pop af - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - pop de - predef GetFrontpic - ret -; 294a9 - -Function294a9: ; 294a9 - push de - ld [wd265], a - call GetPokemonName - ld hl, StringBuffer1 - pop de - ld bc, NAME_LENGTH - call CopyBytes - ret -; 294bb - -Function294bb: ; 294bb - ld de, VTiles0 - jr Function294c3 - -Function294c0: ; 294c0 - ld de, VTiles0 tile $31 - -Function294c3: ; 294c3 - call DelayFrame - ld hl, VTiles2 - ld bc, $a31 - call Request2bpp - call WaitTop - call Function297cf - hlcoord 7, 2 - xor a - ld [hFillBox], a - lb bc, 7, 7 - predef FillBox - call WaitBGMap - ret -; 294e7 - -Function294e7: ; 294e7 - ld c, $50 - call DelayFrames - call Function29114 - ret -; 294f0 - -Function294f0: ; 294f0 - ld c, $28 - call DelayFrames - call Function29114 - ret -; 294f9 - -Function294f9: ; 294f9 - ld c, $60 - call DelayFrames - call Function29114 - ret -; 29502 - -Function29502: ; 29502 - call Function29516 - ret nz - ld c, $50 - call DelayFrames - ret -; 2950c - -Function2950c: ; 2950c - call Function29516 - ret nz - ld c, $b4 - call DelayFrames - ret -; 29516 - -Function29516: ; 29516 - call Function29114 - ld a, [wc702] - cp $fd - ret -; 2951f - -Function2951f: ; 2951f - ld de, wc6d0 - ld a, [de] - cp $fd - jr z, Function295a1 - call Function29573 - ld de, wc6d0 - call Function295e3 - ld de, wc6d1 - call Function295ef - ld a, [wc701] - ld de, wc6f2 - call Function295f6 - ld de, PlayerScreens - call Function29611 - call Function295d8 - ret -; 29549 - -Function29549: ; 29549 - ld de, wc702 - ld a, [de] - cp $fd - jr z, Function295a1 - call Function29573 - ld de, wc702 - call Function295e3 - ld de, wc703 - call Function295ef - ld a, [wEnemyCharging] - ld de, wc724 - call Function295f6 - ld de, wEnemyWrapCount - call Function29611 - call Function295d8 - ret -; 29573 - -Function29573: ; 29573 - call WaitTop - call Function297cf - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - hlcoord 3, 0 - ld b, $6 - ld c, $d - call TextBox - hlcoord 4, 0 - ld de, String29591 - call PlaceString - ret -; 29591 - -String29591: ; 29591 - db "─── №." - next "" - next "OT/" - next $73, "№.@" -; 295a1 - -Function295a1: ; 295a1 - call WaitTop - call Function297cf - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - hlcoord 3, 0 - ld b, $6 - ld c, $d - call TextBox - hlcoord 4, 2 - ld de, String295c2 - call PlaceString - call Function295d8 - ret -; 295c2 - -String295c2: ; 295c2 - db "EGG" - next "OT/?????" - next $73, "№.?????@" -; 295d8 - -Function295d8: ; 295d8 - call WaitBGMap - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - ret -; 295e3 - -Function295e3: ; 295e3 - hlcoord 10, 0 - lb bc, PRINTNUM_LEADINGZEROS | 1, 3 - call PrintNum - ld [hl], $7f - ret -; 295ef - -Function295ef: ; 295ef - hlcoord 4, 2 - call PlaceString - ret -; 295f6 - -Function295f6: ; 295f6 - cp 3 - jr c, .asm_295fb - xor a - -.asm_295fb - push af - hlcoord 7, 4 - call PlaceString - inc bc - pop af - ld hl, Unknown_2960e - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - ld [bc], a - ret -; 2960e - -Unknown_2960e: ; 2960e - db " ", "♂", "♀" -; 29611 - -Function29611: ; 29611 - hlcoord 7, 6 - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - ret -; 2961b - -Function2961b: ; 2961b - lb de, $54, $58 - ld a, $e - call Function3b2a - call Function29114 - ld a, $20 - ld [wcf64], a - ret -; 2962c - -Function2962c: ; 2962c - lb de, $54, $58 - ld a, $e - call Function3b2a - ld hl, $b - add hl, bc - ld [hl], $1 - ld hl, $7 - add hl, bc - ld [hl], $dc - call Function29114 - ld a, $38 - ld [wcf64], a - ret -; 29649 - -Function29649: ; 29649 - lb de, $54, $58 - ld a, $f - call Function3b2a - call Function29114 - ld a, $10 - ld [wcf64], a - ld de, SFX_BALL_POOF - call PlaySFX - ret -; 29660 - -Function29660: ; 29660 - ld a, $e4 - call Functioncf8 - lb de, $28, $58 - ld a, $10 - call Function3b2a - call Function29114 - ld a, $40 - ld [wcf64], a - ret -; 29676 - -Function29676: ; 29676 (a:5676) - ld hl, $b - add hl, bc - ld e, [hl] - ld d, 0 - ld hl, Jumptable_29686 -rept 2 - add hl, de -endr - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 29686 - -Jumptable_29686: ; 29686 (a:5686) - dw Function2969a - dw Function296a4 - dw Function296af - dw Function296bd - dw Function296cf - dw Function296dd - dw Function296f2 -; 2969a - -Function29694: ; 29694 (a:5694) - ld hl, $b - add hl, bc - inc [hl] - ret - -Function2969a: ; 2969a (a:569a) - call Function29694 - ld hl, $c - add hl, bc - ld [hl], $80 - ret - -Function296a4: ; 296a4 (a:56a4) - ld hl, $c - add hl, bc - ld a, [hl] - dec [hl] - and a - ret nz - call Function29694 - -Function296af: ; 296af (a:56af) - ld hl, $4 - add hl, bc - ld a, [hl] - cp $94 - jr nc, .asm_296ba - inc [hl] - ret -.asm_296ba - call Function29694 - -Function296bd: ; 296bd (a:56bd) - ld hl, $5 - add hl, bc - ld a, [hl] - cp $4c - jr nc, .asm_296c8 - inc [hl] - ret -.asm_296c8 - ld hl, $ - add hl, bc - ld [hl], $0 - ret - -Function296cf: ; 296cf (a:56cf) - ld hl, $5 - add hl, bc - ld a, [hl] - cp $2c - jr z, .asm_296da - dec [hl] - ret -.asm_296da - call Function29694 - -Function296dd: ; 296dd (a:56dd) - ld hl, $4 - add hl, bc - ld a, [hl] - cp $58 - jr z, .asm_296e8 - dec [hl] - ret -.asm_296e8 - call Function29694 - ld hl, $c - add hl, bc - ld [hl], $80 - ret - -Function296f2: ; 296f2 (a:56f2) - ld hl, $c - add hl, bc - ld a, [hl] - dec [hl] - and a - ret nz - ld hl, $ - add hl, bc - ld [hl], $0 - ret -; 29701 (a:5701) - -Function29701: ; 29701 - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jr z, .asm_29725 - ld hl, UnknownText_0x29737 - call PrintText - ld c, $bd - call DelayFrames - ld hl, UnknownText_0x29732 - call PrintText - call Function297c9 - ld c, $80 - call DelayFrames - call Function29114 - ret - -.asm_29725 - ld hl, UnknownText_0x29732 - call PrintText - call Function297c9 - call Function29114 - ret -; 29732 - -UnknownText_0x29732: ; 0x29732 - ; was sent to @ . - text_jump UnknownText_0x1bc6e9 - db "@" -; 0x29737 - -UnknownText_0x29737: ; 0x29737 - ; - text_jump UnknownText_0x1bc701 - db "@" -; 0x2973c - -Function2973c: ; 2973c - ld hl, UnknownText_0x29752 - call PrintText - call Function297c9 - ld hl, UnknownText_0x29757 - call PrintText - call Function297c9 - call Function29114 - ret -; 29752 - -UnknownText_0x29752: ; 0x29752 - ; bids farewell to - text_jump UnknownText_0x1bc703 - db "@" -; 0x29757 - -UnknownText_0x29757: ; 0x29757 - ; . - text_jump UnknownText_0x1bc719 - db "@" -; 0x2975c - -Function2975c: ; 2975c - call WaitTop - hlcoord 0, 10 - ld bc, 8 * SCREEN_WIDTH - ld a, " " - call ByteFill - call WaitBGMap - ld hl, UnknownText_0x2977a - call PrintText - call Function297c9 - call Function29114 - ret -; 2977a - -UnknownText_0x2977a: ; 0x2977a - ; Take good care of @ . - text_jump UnknownText_0x1bc71f - db "@" -; 0x2977f - -Function2977f: ; 2977f - ld hl, UnknownText_0x2979a - call PrintText - call Function297c9 - ld hl, UnknownText_0x2979f - call PrintText - call Function297c9 - ld c, $e - call DelayFrames - call Function29114 - ret -; 2979a - -UnknownText_0x2979a: ; 0x2979a - ; For @ 's @ , - text_jump UnknownText_0x1bc739 - db "@" -; 0x2979f - -UnknownText_0x2979f: ; 0x2979f - ; sends @ . - text_jump UnknownText_0x1bc74c - db "@" -; 0x297a4 - -Function297a4: ; 297a4 - ld hl, UnknownText_0x297bf - call PrintText - call Function297c9 - ld hl, UnknownText_0x297c4 - call PrintText - call Function297c9 - ld c, $e - call DelayFrames - call Function29114 - ret -; 297bf - -UnknownText_0x297bf: ; 0x297bf - ; will trade @ @ - text_jump UnknownText_0x1bc75e - db "@" -; 0x297c4 - -UnknownText_0x297c4: ; 0x297c4 - ; for @ 's @ . - text_jump UnknownText_0x1bc774 - db "@" -; 0x297c9 - -Function297c9: ; 297c9 - ld c, $50 - call DelayFrames - ret -; 297cf - -Function297cf: ; 297cf - hlcoord 0, 0 - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, " " - call ByteFill - ret -; 297db - -Function297db: ; 297db -.asm_297db - push bc - push hl -.asm_297dd - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .asm_297dd - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .asm_297db - ret -; 297ed - -Function297ed: ; 297ed - ld a, [hSGB] - and a - ld a, $e4 - jr z, .asm_297f6 - ld a, $f0 - -.asm_297f6 - call Functioncf8 - ld a, $e4 - call DmgToCgbBGPals - ret -; 297ff - -Function297ff: ; 297ff - push de - ld de, wc736 - ld bc, NAME_LENGTH - call CopyBytes - pop hl - ld de, wc741 - ld bc, NAME_LENGTH - call CopyBytes - ret -; 29814 - -Function29814: ; 29814 - ld a, [hl] - ld [wc74c], a - ld a, [de] - ld [wc74d], a - ret -; 2981d - -Function2981d: ; 2981d - ld a, [wcf65] - and $7 - ret nz - ld a, [rBGP] - xor $3c - call DmgToCgbBGPals - ret -; 2982b - -Function2982b: ; 2982b - call DelayFrame - ld de, TradeBallGFX - ld hl, VTiles0 tile $62 - lb bc, BANK(TradeBallGFX), $6 - call Request2bpp - ld de, TradePoofGFX - ld hl, VTiles0 tile $68 - lb bc, BANK(TradePoofGFX), $c - call Request2bpp - ld de, TradeCableGFX - ld hl, VTiles0 tile $74 - lb bc, BANK(TradeCableGFX), $4 - call Request2bpp - xor a - ld hl, wc300 - ld [hli], a - ld [hl], $62 - ret -; 2985a - -Function2985a: ; 2985a - call DelayFrame - ld e, $3 - callab Function8e83f - ld de, TradeBubbleGFX - ld hl, VTiles0 tile $72 - lb bc, BANK(TradeBubbleGFX), $4 - call Request2bpp - xor a - ld hl, wc300 - ld [hli], a - ld [hl], $62 - ret -; 29879 - -Function29879: ; 29879 - ld hl, wcf64 - ld a, [hl] - and a - jr z, .asm_29882 - dec [hl] - ret - -.asm_29882 - call Function29114 - ret -; 29886 - -Function29886: ; 29886 - ld hl, wcf64 - ld a, [hl] - and a - jr z, .asm_2988f - dec [hl] - ret - -.asm_2988f - call Function29114 - ret -; 29893 - - -Function29893: ; 29893 -; This function is unreferenced. -; It was meant for use in Japanese versions, so the -; constant used for copy length was changed by accident. - - ld hl, Unknown_298b5 - - ld a, [hli] - ld [wc6d0], a - ld de, wc6e7 - ld c, 13 ; jp: 8 -.asm_2989f - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_2989f - - ld a, [hli] - ld [wc702], a - ld de, wc719 - ld c, 13 ; jp: 8 -.asm_298ae - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_298ae - ret -; 298b5 - -Unknown_298b5: ; 298b5 - db $03, "ゲーフり@@", $23, $01 ; GAME FREAK - db $06, "クりーチャ@", $56, $04 ; Creatures Inc. -; 298c7 - - -TradeGameBoyTilemap: ; 298c7 -; 6x8 - db $31, $32, $32, $32, $32, $33 - db $34, $35, $36, $36, $37, $38 - db $34, $39, $3a, $3a, $3b, $38 - db $3c, $3d, $3e, $3e, $3f, $40 - db $41, $42, $43, $43, $44, $45 - db $46, $47, $43, $48, $49, $4a - db $41, $43, $4b, $4c, $4d, $4e - db $4f, $50, $50, $50, $51, $52 -; 297f7 - -Tilemap_298f7: ; 297f7 -; 12x3 - db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53 - db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54 - db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43 -; 2991b - -TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp" -TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" -TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" -TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz" -TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" -TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" +INCLUDE "engine/trade/animation.asm" Special_CheckTimeCapsuleCompatibility: ; 29bfb ; Checks to see if your Party is compatible with the generation 1 games. Returns the following in ScriptVar: @@ -3668,11 +2148,11 @@ Function29c67: ; 29c67 ; 29c7b Special_EnterTimeCapsule: ; 29c7b - ld c, $a + ld c, 10 call DelayFrames ld a, $4 call Function29f17 - ld c, $28 + ld c, 40 call DelayFrames xor a ld [hVBlank], a @@ -3730,15 +2210,15 @@ Special_AbortLink: ; 29c92 ; 29ce8 Special_SetBitsForLinkTradeRequest: ; 29ce8 - ld a, $1 - ld [wcf56], a + ld a, LINK_TRADECENTER - 1 + ld [wPlayerLinkAction], a ld [wd265], a ret ; 29cf1 Special_SetBitsForBattleRequest: ; 29cf1 - ld a, $2 - ld [wcf56], a + ld a, LINK_COLOSSEUM - 1 + ld [wPlayerLinkAction], a ld [wd265], a ret ; 29cfa @@ -3752,14 +2232,14 @@ Special_SetBitsForTimeCapsuleRequest: ; 29cfa ld [rSC], a ld a, $80 ld [rSC], a - xor a - ld [wcf56], a + xor a ; LINK_TIMECAPSULE - 1 + ld [wPlayerLinkAction], a ld [wd265], a ret ; 29d11 Special_WaitForLinkedFriend: ; 29d11 - ld a, [wcf56] + ld a, [wPlayerLinkAction] and a jr z, .asm_29d2f ld a, $2 @@ -3815,9 +2295,9 @@ Special_WaitForLinkedFriend: ; 29d11 jr .asm_29d39 .asm_29d79 - call Function908 + call LinkCommunicationsSignalDataReceived call DelayFrame - call Function908 + call LinkCommunicationsSignalDataReceived ld c, $32 call DelayFrames ld a, $1 @@ -3832,7 +2312,7 @@ Special_WaitForLinkedFriend: ; 29d11 Special_CheckLinkTimeout: ; 29d92 ld a, $1 - ld [wcf56], a + ld [wPlayerLinkAction], a ld hl, wcf5b ld a, $3 ld [hli], a @@ -3854,7 +2334,7 @@ Special_CheckLinkTimeout: ; 29d92 Function29dba: ; 29dba ld a, $5 - ld [wcf56], a + ld [wPlayerLinkAction], a ld hl, wcf5b ld a, $3 ld [hli], a @@ -3875,17 +2355,17 @@ Function29dba: ; 29dba ld a, b or c jr nz, .asm_29de0 - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] cp $5 jr nz, .asm_29e03 ld a, $6 - ld [wcf56], a + ld [wPlayerLinkAction], a ld hl, wcf5b ld a, $1 ld [hli], a ld [hl], $32 call Function29e0c - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] cp $6 jr z, .asm_29e08 @@ -3946,7 +2426,7 @@ Function29e47: ; 29e47 ld b, $a .asm_29e49 call DelayFrame - call Function908 + call LinkCommunicationsSignalDataReceived dec b jr nz, .asm_29e49 ret @@ -3969,7 +2449,7 @@ Function29e53: ; 29e53 Special_TryQuickSave: ; 29e66 ld a, [wd265] push af - callba Function14ab2 + callba Link_SaveGame ld a, $1 jr nc, .asm_29e75 xor a @@ -3987,14 +2467,14 @@ Special_CheckBothSelectedSameRoom: ; 29e82 ld a, [wd265] call Function29f17 push af - call Function908 + call LinkCommunicationsSignalDataReceived call DelayFrame - call Function908 + call LinkCommunicationsSignalDataReceived pop af ld b, a ld a, [wd265] cp b - jr nz, .asm_29eaa + jr nz, .fail ld a, [wd265] inc a ld [wLinkMode], a @@ -4004,7 +2484,7 @@ Special_CheckBothSelectedSameRoom: ; 29e82 ld [ScriptVar], a ret -.asm_29eaa +.fail xor a ld [ScriptVar], a ret @@ -4052,14 +2532,14 @@ Special_CloseLink: ; 29eee ; 29efa Special_FailedLinkToPast: ; 29efa - ld c, $28 + ld c, 40 call DelayFrames ld a, $e jp Function29f17 ; 29f04 Function29f04: ; 29f04 - ld c, $3 + ld c, 3 call DelayFrames ld a, -1 ld [hLinkPlayerNumber], a @@ -4073,26 +2553,26 @@ Function29f04: ; 29f04 Function29f17: ; 29f17 add $d0 - ld [wcf56], a + ld [wPlayerLinkAction], a ld [wcf57], a ld a, $2 ld [hVBlank], a call DelayFrame call DelayFrame -.asm_29f29 +.receive_loop call Function83b - ld a, [wcf51] + ld a, [wOtherPlayerLinkMode] ld b, a and $f0 cp $d0 - jr z, .asm_29f40 - ld a, [wcf52] + jr z, .done + ld a, [wOtherPlayerLinkAction] ld b, a and $f0 cp $d0 - jr nz, .asm_29f29 + jr nz, .receive_loop -.asm_29f40 +.done xor a ld [hVBlank], a ld a, b diff --git a/engine/mail.asm b/engine/mail.asm new file mode 100755 index 000000000..82d27d4be --- /dev/null +++ b/engine/mail.asm @@ -0,0 +1,589 @@ +SendMailToPC: ; 4456e + ld a, MON_ITEM + call GetPartyParamLocation + ld d, [hl] + callba ItemIsMail + jr nc, .full + call GetMailboxCount + cp MAILBOX_CAPACITY + jr nc, .full + ld bc, MAIL_STRUCT_LENGTH + ld hl, sMailbox + call AddNTimes + ld d, h + ld e, l + ld a, [CurPartyMon] + ld bc, MAIL_STRUCT_LENGTH + ld hl, sPartyMail + call AddNTimes + push hl + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop hl + xor a + ld bc, MAIL_STRUCT_LENGTH + call ByteFill + ld a, MON_ITEM + call GetPartyParamLocation + ld [hl], $0 + ld hl, sMailboxCount + inc [hl] + call CloseSRAM + xor a + ret + +.full + scf + ret +; 445c0 + +DeleteMailFromPC: ; 445c0 (11:45c0) +; Shift all mail messages in the mailbox + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld a, b + push bc + ld hl, sMailbox + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + push hl + add hl, bc + pop de + pop bc +.loop + ld a, b + cp MAILBOX_CAPACITY - 1 + jr z, .done + push bc + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop bc + inc b + jr .loop +.done + ld h, d + ld l, e + xor a + ld bc, MAIL_STRUCT_LENGTH + call ByteFill + ld hl, sMailboxCount + dec [hl] + jp CloseSRAM +; 445f4 (11:45f4) + +ReadMailMessage: ; 445f4 + ld a, b + ld hl, sMailbox + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + callba ReadAnyMail + ret + +MoveMailFromPCToParty: ; 44607 + ld a, BANK(sMailboxCount) + call GetSRAMBank + push bc + ld a, b + ld bc, MAIL_STRUCT_LENGTH + ld hl, sMailbox + call AddNTimes + push hl + ld a, [CurPartyMon] + ld bc, MAIL_STRUCT_LENGTH + ld hl, sPartyMail + call AddNTimes + ld d, h + ld e, l + pop hl + push hl + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop hl + ld de, PARTYMON_STRUCT_LENGTH - MON_MOVES + add hl, de + ld d, [hl] + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld [hl], d + call CloseSRAM + pop bc + jp DeleteMailFromPC +; 44648 (11:4648) + +GetMailboxCount: ; 44648 + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld a, [sMailboxCount] + ld c, a + jp CloseSRAM +; 44654 + +CheckPokeItem:: ; 44654 + push bc + push de + callba SelectMonFromParty + ld a, $2 + jr c, .pop_return + + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld d, [hl] + callba ItemIsMail + ld a, $3 + jr nc, .pop_return + + ld a, BANK(sPartyMail) + call GetSRAMBank + ld a, [CurPartyMon] + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + pop hl + pop bc + +; Compare the mail message, byte for byte, with the expected message. + ld a, MAIL_MSG_LENGTH + ld [wd265], a +.loop + ld a, [de] + ld c, a + ld a, b + call GetFarByte + cp "@" + jr z, .done + cp c + ld a, $0 + jr nz, .close_sram_return + inc hl + inc de + ld a, [wd265] + dec a + ld [wd265], a + jr nz, .loop + +.done + callba CheckCurPartyMonFainted + ld a, $4 + jr c, .close_sram_return + xor a + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ld a, $1 + +.close_sram_return + call CloseSRAM + jr .return + +.pop_return + pop de + pop bc + +.return + ld [ScriptVar], a + ret +; 446cc + + +GivePokeItem:: ; 446cc + ld a, [PartyCount] + dec a + push af + push bc + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + ld [hl], b + pop af + push bc + push af + ld hl, sPartyMail + ld bc, $2f + call AddNTimes + ld d, h + ld e, l + ld hl, wd002 + ld bc, $21 + ld a, BANK(sPartyMail) + call GetSRAMBank + call CopyBytes + pop af + push af + ld hl, PartyMonOT + ld bc, NAME_LENGTH + call AddNTimes + ld bc, $a + call CopyBytes + pop af + ld hl, PartyMon1ID + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld a, [CurPartySpecies] + ld [de], a + inc de + pop bc + ld a, b + ld [de], a + jp CloseSRAM +; 44725 + + +BackupPartyMonMail: ; 44725 + ld a, BANK(sPartyMail) + call GetSRAMBank + ld hl, sPartyMail + ld de, sPartyMailBackup + ld bc, 6 * MAIL_STRUCT_LENGTH + call CopyBytes + ld hl, sMailboxCount + ld de, sMailboxCountBackup + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH + call CopyBytes + jp CloseSRAM +; 44745 + +RestorePartyMonMail: ; 44745 (11:4745) + ld a, BANK(sPartyMail) + call GetSRAMBank + ld hl, sPartyMailBackup + ld de, sPartyMail + ld bc, 6 * MAIL_STRUCT_LENGTH + call CopyBytes + ld hl, sMailboxCountBackup + ld de, sMailboxCount + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH + call CopyBytes + jp CloseSRAM + +DeletePartyMonMail: ; 44765 (11:4765) + ld a, BANK(sPartyMail) + call GetSRAMBank + xor a + ld hl, sPartyMail + ld bc, 6 * MAIL_STRUCT_LENGTH + call ByteFill + xor a + ld hl, sMailboxCount + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH + call ByteFill + jp CloseSRAM +; 44781 (11:4781) + + +IsAnyMonHoldingMail: ; 44781 + ld a, [PartyCount] + and a + jr z, .no_mons + ld e, a + ld hl, PartyMon1Item +.loop + ld d, [hl] + push hl + push de + callba ItemIsMail + pop de + pop hl + ret c + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + dec e + jr nz, .loop + +.no_mons + and a + ret +; 447a0 + +_KrisMailBoxMenu: ; 0x447a0 + call InitMail + jr z, .nomail + call LoadStandardMenuDataHeader + call MailboxPC + jp WriteBackup + +.nomail + ld hl, .EmptyMailboxText + jp MenuTextBoxBackup +; 0x447b4 + +.EmptyMailboxText ; 0x447b4 + text_jump _EmptyMailboxText + db "@" + +InitMail: ; 0x447b9 +; initialize wMailboxCount and beyond with incrementing values, one per mail +; set z if no mail + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld a, [sMailboxCount] + call CloseSRAM + ld hl, wMailboxCount + ld [hli], a + and a + + jr z, .done ; if no mail, we're done + + ; load values in memory with incrementing values starting at wMailboxCount + ld b, a + ld a, 1 +.loop + ld [hli], a + inc a + dec b + jr nz, .loop +.done + ld [hl], -1 ; terminate + + ld a, [wMailboxCount] + and a + ret +; 0x447da + +Function447da: ; 0x447da + dec a + ld hl, sMailbox1Author + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld de, StringBuffer2 + push de + ld bc, NAME_LENGTH - 1 + call CopyBytes + ld a, "@" + ld [de], a + call CloseSRAM + pop de + ret +; 0x447fb + +Function447fb: ; 0x447fb + push de + ld a, [MenuSelection] + call Function447da + pop hl + jp PlaceString +; 0x44806 + +MailboxPC: ; 0x44806 + xor a + ld [OBPals + 8 * 6], a + ld a, $1 + ld [wCurMessageIndex], a +.loop + call InitMail + ld hl, MenuData4494c + call CopyMenuDataHeader + xor a + ld [hBGMapMode], a + call InitScrollingMenu + call UpdateSprites + + ld a, [wCurMessageIndex] + ld [wMenuCursorBuffer], a + ld a, [OBPals + 8 * 6] + ld [wMenuScrollPosition], a + call HandleScrollingMenu + ld a, [wMenuScrollPosition] + ld [OBPals + 8 * 6], a + ld a, [MenuSelection2] + ld [wCurMessageIndex], a + + ld a, [wcf73] + cp $2 + jr z, .exit + call Function4484a + jr .loop + +.exit + xor a + ret +; 0x4484a + +Function4484a: ; 0x4484a + ld hl, MenuData44964 + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + jr c, .exit + ld a, [MenuSelection2] + dec a + ld hl, .JumpTable + rst JumpTable + +.exit + ret +; 0x44861 + +.JumpTable + dw .ReadMail + dw .PutInPack + dw .AttachMail + dw .Cancel + +.ReadMail ; 0x44869 + call FadeToMenu + ld a, [MenuSelection] + dec a + ld b, a + call ReadMailMessage + jp ReturnToCallingMenu +; 0x44877 + +.PutInPack ; 0x44877 + ld hl, .MessageLostText + call MenuTextBox + call YesNoBox + call ExitMenu + ret c + ld a, [MenuSelection] + dec a + call .GetMailType + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + call ReceiveItem + jr c, .put_in_bag + ld hl, .PackFullText + jp MenuTextBoxBackup + +.put_in_bag + ld a, [MenuSelection] + dec a + ld b, a + call DeleteMailFromPC + ld hl, .PutAwayText + jp MenuTextBoxBackup +; 0x448ac + +.PutAwayText ; 0x448ac + text_jump ClearedMailPutAwayText + db "@" + +.PackFullText ; 0x448b1 + text_jump MailPackFullText + db "@" + +.MessageLostText ; 0x448b6 + text_jump MailMessageLostText + db "@" + +.GetMailType: ; 0x448bb + push af + ld a, BANK(sMailboxCount) + call GetSRAMBank + pop af + ld hl, sMailbox1Type + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + ld [CurItem], a + jp CloseSRAM +; 0x448d2 + +.AttachMail ; 0x448d2 + call FadeToMenu + xor a + ld [PartyMenuActionText], a + call ClearBGPalettes +.try_again + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call SetPalettes + call DelayFrame + callba PartyMenuSelect + jr c, .exit2 + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + ld a, MON_ITEM + call GetPartyParamLocation + ld a, [hl] + and a + jr z, .attach_mail + ld hl, .HoldingMailText + call PrintText + jr .try_again + +.egg + ld hl, .EggText + call PrintText + jr .try_again + +.attach_mail + ld a, [MenuSelection] + dec a + ld b, a + call MoveMailFromPCToParty + ld hl, .MailMovedText + call PrintText + +.exit2 + jp ReturnToCallingMenu +; 0x4493c + +.HoldingMailText ; 0x4493c + text_jump MailAlreadyHoldingItemText + db "@" + +.EggText ; 0x44941 + text_jump MailEggText + db "@" + +.MailMovedText ; 0x44946 + text_jump MailMovedFromBoxText + db "@" + +.Cancel + ret + +MenuData4494c: ; 0x4494c + db %01000000 ; flags + db 1, 8 ; start coords + db 10, 18 ; end coords + dw .MenuData2 + db 1 ; default option + +.MenuData2 + db %00010000 ; flags + db 4, 0 ; rows/columns? + db 1 ; horizontal spacing? + dbw 0, wMailboxCount ; text pointer + dba Function447fb + dbw 0,0 + dbw 0,0 + +MenuData44964: ; 0x44964 + db %01000000 ; flags + db 0, 0 ; start coords + db 9, $d ; end coords + dw .MenuData2 + db 1 ; default option + +.MenuData2 + db %10000000 ; flags + db 4 ; items + db "READ MAIL@" + db "PUT IN PACK@" + db "ATTACH MAIL@" + db "CANCEL@" diff --git a/engine/main_menu.asm b/engine/main_menu.asm new file mode 100755 index 000000000..efab46cda --- /dev/null +++ b/engine/main_menu.asm @@ -0,0 +1,1242 @@ +GFX_49c0c: ; 49c0c +INCBIN "gfx/unknown/049c0c.2bpp" +; 49cdc + +MainMenu: ; 49cdc + xor a + ld [wc2d7], a + call Function49ed0 + ld b, SCGB_08 + call GetSGBLayout + call SetPalettes + ld hl, GameTimerPause + res 0, [hl] + call Function49da4 + ld [wcf76], a + call Function49e09 + ld hl, MenuDataHeader_0x49d14 + call LoadMenuDataHeader + call Function49de4 + call WriteBackup + jr c, .quit + call ClearTileMap + ld a, [MenuSelection] + ld hl, Jumptable_49d60 + rst JumpTable + jr MainMenu + +.quit + ret +; 49d14 + +MenuDataHeader_0x49d14: ; 49d14 + db $40 ; flags + db 00, 00 ; start coords + db 07, 16 ; end coords + dw MenuData2_0x49d1c + db 1 ; default option +; 49d1c + +MenuData2_0x49d1c: ; 49d1c + db $80 ; flags + db 0 ; items + dw MainMenuItems + dw Function1f79 + dw MainMenuText +; 49d20 + +MainMenuText: ; 49d24 + db "CONTINUE@" + db "NEW GAME@" + db "OPTION@" + db "MYSTERY GIFT@" + db "MOBILE@" + db "MOBILE STUDIUM@" + +Jumptable_49d60: ; 0x49d60 + dw MainMenu_Continue + dw MainMenu_NewGame + dw MainMenu_Options + dw MainMenu_MysteryGift + dw MainMenu_Mobile + dw MainMenu_MobileStudium +; 0x49d6c + +CONTINUE EQU 0 +NEW_GAME EQU 1 +OPTION EQU 2 +MYSTERY_GIFT EQU 3 +MOBILE EQU 4 +MOBILE_STUDIUM EQU 5 + +MainMenuItems: + +NewGameMenu: ; 0x49d6c + db 2 + db NEW_GAME + db OPTION + db $ff + +ContinueMenu: ; 0x49d70 + db 3 + db CONTINUE + db NEW_GAME + db OPTION + db $ff + +MobileMysteryMenu: ; 0x49d75 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE + db $ff + +MobileMenu: ; 0x49d7c + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE + db $ff + +MobileStudiumMenu: ; 0x49d82 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE + db MOBILE_STUDIUM + db $ff + +MysteryMobileStudiumMenu: ; 0x49d89 + db 6 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE + db MOBILE_STUDIUM + db $ff + +MysteryMenu: ; 0x49d91 + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db $ff + +MysteryStudiumMenu: ; 0x49d97 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE_STUDIUM + db $ff + +StudiumMenu: ; 0x49d9e + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE_STUDIUM + db $ff + + +Function49da4: ; 49da4 + nop + nop + nop + ld a, [wSaveFileExists] + and a + jr nz, .next + ld a, $0 + ret + +.next + ld a, [hCGB] + cp $1 + ld a, $1 + ret nz + ld a, BANK(sNumDailyMysteryGiftPartnerIDs) + call GetSRAMBank + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp $ff + call CloseSRAM + jr nz, .done + ld a, [StatusFlags] + bit 7, a + ld a, $1 + jr z, .ok + jr .ok + +.ok + jr .ok2 + +.ok2 + ld a, $1 + ret + +.done + ld a, [StatusFlags] + bit 7, a + jr z, .ok3 + jr .ok3 + +.ok3 + jr .ok4 + +.ok4 + ld a, $6 + ret +; 49de4 + +Function49de4: ; 49de4 + call SetUpMenu +.asm_49de7 + call Function49e09 + ld a, [wcfa5] + set 5, a + ld [wcfa5], a + call Function1f1a + ld a, [wcf73] + cp $2 + jr z, .asm_49e07 + cp $1 + jr z, .asm_49e02 + jr .asm_49de7 + +.asm_49e02 + call PlayClickSFX + and a + ret + +.asm_49e07 + scf + ret +; 49e09 + +Function49e09: ; 49e09 + ld a, [wSaveFileExists] + and a + ret z + xor a + ld [hBGMapMode], a + call Function49e27 + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call Function49e3d + pop af + ld [Options], a + ld a, $1 + ld [hBGMapMode], a + ret +; 49e27 + + +Function49e27: ; 49e27 + call CheckRTCStatus + and $80 + jr nz, .asm_49e39 + hlcoord 0, 14 + ld b, $2 + ld c, $12 + call TextBox + ret + +.asm_49e39 + call SpeechTextBox + ret +; 49e3d + + +Function49e3d: ; 49e3d + ld a, [wSaveFileExists] + and a + ret z + call CheckRTCStatus + and $80 + jp nz, Function49e75 + call UpdateTime + call GetWeekday + ld b, a + decoord 1, 15 + call Function49e91 + decoord 4, 16 + ld a, [hHours] + ld c, a + callba PrintHour + ld [hl], ":" + inc hl + ld de, hMinutes + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ret +; 49e70 + +; 49e70 + db "min.@" +; 49e75 + +Function49e75: ; 49e75 + hlcoord 1, 14 + ld de, .TimeNotSet + call PlaceString + ret +; 49e7f + +.TimeNotSet ; 49e7f + db "TIME NOT SET@" +; 49e8c + +UnknownText_0x49e8c: ; 49e8c + text_jump UnknownText_0x1c5182 + db "@" +; 49e91 + +Function49e91: ; 49e91 + push de + ld hl, .Days + ld a, b + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + ret +; 49ea8 + +.Days + db "SUN@" + db "MON@" + db "TUES@" + db "WEDNES@" + db "THURS@" + db "FRI@" + db "SATUR@" +.Day + db "DAY@" +; 49ed0 + +Function49ed0: ; 49ed0 + xor a + ld [hMapAnims], a + call ClearTileMap + call LoadFontsExtra + call LoadStandardFont + call ResetTextRelatedRAM + ret +; 49ee0 + + +MainMenu_NewGame: ; 49ee0 + callba NewGame + ret +; 49ee7 + +MainMenu_Options: ; 49ee7 + callba OptionsMenu + ret +; 49eee + +MainMenu_Continue: ; 49eee + callba Continue + ret +; 49ef5 + +MainMenu_MysteryGift: ; 49ef5 + callba MysteryGift + ret +; 49efc + +MainMenu_Mobile: ; 49efc + call ClearBGPalettes + ld a, MUSIC_MOBILE_ADAPTER_MENU + ld [wMapMusic], a + ld de, MUSIC_MOBILE_ADAPTER_MENU + call Function4a6c5 +Function49f0a: ; 49f0a + call ClearBGPalettes + call Function4a3a7 + call Function4a492 + call ClearBGPalettes +Function49f16: ; 49f16 + call Function4a071 + ld c, 12 + call DelayFrames + hlcoord 4, 0 + ld b, $a + ld c, $a + call Function48cdc + hlcoord 6, 2 + ld de, MobileString1 + call PlaceString + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call TextBox + xor a + ld de, String_0x49fe9 + hlcoord 1, 14 + call PlaceString + call Function3200 + call SetPalettes + call Function1bc9 + ld hl, MenuSelection2 + ld b, [hl] + push bc + jr .asm_49f5d + +.asm_49f55 + call Function1bd3 + ld hl, MenuSelection2 + ld b, [hl] + push bc + +.asm_49f5d + bit 0, a + jr nz, .asm_49f67 + bit 1, a + jr nz, .asm_49f84 + jr .asm_49f97 + +.asm_49f67 + ld hl, MenuSelection2 + ld a, [hl] + cp $1 + jp z, Function4a098 + cp $2 + jp z, Function4a0b9 + cp $3 + jp z, Function4a0c2 + cp $4 + jp z, Function4a100 + ld a, $1 + call Function1ff8 + +.asm_49f84 + pop bc + call ClearBGPalettes + call ClearTileMap + ld a, MUSIC_MAIN_MENU + ld [wMapMusic], a + ld de, MUSIC_MAIN_MENU + call Function4a6c5 + ret + +.asm_49f97 + ld hl, MenuSelection2 + ld a, [hl] + dec a + ld hl, MobileStrings2 + call GetNthString + ld d, h + ld e, l + hlcoord 1, 13 + ld b, $4 + ld c, $12 + call ClearBox + hlcoord 1, 14 + call PlaceString + jp .asm_49fb7 + +.asm_49fb7 + call Function4a071 + pop bc + ld hl, MenuSelection2 + ld [hl], b + ld b, $a + ld c, $1 + hlcoord 5, 1 + call ClearBox + jp .asm_49f55 +; 49fcc + + +MobileString1: ; 49fcc + db "めいしフ,ルダー" + next "あいさつ" + next "プロフィール" + next "せ", $1e, "い" + next "もどる" + db "@" +; 49fe9 + + +MobileStrings2: + +String_0x49fe9: ; 49fe9 + db "めいし¯つくったり" + next "ほぞんしておける フ,ルダーです@" +; 4a004 + +String_0x4a004: ; 4a004 + db "モバイルたいせんや じぶんのめいしで" + next "つかう あいさつ¯つくります@" +; 4a026 + +String_0x4a026: ; 4a026 + db "あなた%じゅうしょや ねんれいの" + next "せ", $1e, "い¯かえられます@" +; 4a042 + +String_0x4a042: ; 4a042 + db "モバイルセンター", $1d, "せつぞくするとき" + next "ひつような こと¯きめます@" +; 4a062 + +String_0x4a062: ; 4a062 + db "まえ%がめん ", $1d, "もどります" + next "@" +; 4a071 + +Function4a071: ; 4a071 (12:6071) + ld hl, wcfa1 + ld a, $2 + ld [hli], a + ld a, $5 + ld [hli], a + ld a, $5 + ld [hli], a + ld a, $1 + ld [hli], a + ld [hl], $0 + set 5, [hl] + inc hl + xor a + ld [hli], a + ld a, $20 + ld [hli], a + ld a, $1 + add $40 + add $80 + add $2 + ld [hli], a + ld a, $1 +rept 2 + ld [hli], a +endr + ret + +Function4a098: ; 4a098 (12:6098) + ld a, $2 + call Function1ff8 + call Function1bee + call WaitBGMap + call LoadStandardMenuDataHeader + callba Function89de0 + call Call_ExitMenu + call Function49351 + call Function4a485 + pop bc + jp Function49f16 + +Function4a0b9: ; 4a0b9 (12:60b9) + ld a, $2 + call Function1ff8 + pop bc + jp Function4a4c4 + +Function4a0c2: ; 4a0c2 (12:60c2) + ld a, $2 + call Function1ff8 + ld a, BANK(sPlayerData) + call GetSRAMBank + ld hl, sPlayerData + PlayerName - wPlayerData + ld de, PlayerName + ld bc, $6 + call CopyBytes + call CloseSRAM + callba Function150b9 + ld c, 2 + call DelayFrames + ld c, $1 + call InitMobileProfile + push af + call ClearBGPalettes + pop af + and a + jr nz, .asm_4a0f9 + callba _SaveData +.asm_4a0f9 + ld c, 5 + call DelayFrames + jr asm_4a111 + +Function4a100: ; 4a100 (12:6100) + ld a, $2 + call Function1ff8 + call ClearBGPalettes + call Function4a13b + call ClearBGPalettes + call ClearTileMap + +asm_4a111: ; 4a111 (12:6111) + pop bc + call LoadFontsExtra + jp Function49f0a + +Function4a118: ; 4a118 (12:6118) + ld hl, wcfa1 + ld a, $1 + ld [hli], a + ld a, $d + ld [hli], a + ld a, $3 + ld [hli], a + ld a, $1 + ld [hli], a + ld [hl], $0 + set 5, [hl] + inc hl + xor a + ld [hli], a + ld a, $20 + ld [hli], a + ld a, $1 + add $2 + ld [hli], a + ld a, $1 +rept 2 + ld [hli], a +endr + ret + +Function4a13b: ; 4a13b (12:613b) + call Function4a3a7 + call Function4a492 + call Function4a373 + ld c, 10 + call DelayFrames + +Function4a149: ; 4a149 (12:6149) + hlcoord 1, 2 + ld b, $6 + ld c, $10 + call Function48cdc + hlcoord 3, 4 + ld de, String_4a1ef + call PlaceString + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call TextBox + ld a, [MenuSelection2] + dec a + ld hl, Strings_4a23d + call GetNthString + ld d, h + ld e, l + hlcoord 1, 13 + ld b, $4 + ld c, $12 + call ClearBox + hlcoord 1, 14 + call PlaceString + callba Function104148 + call SetPalettes + call Function1bc9 + ld hl, MenuSelection2 + ld b, [hl] + push bc + jr asm_4a19d + +Function4a195: ; 4a195 (12:6195) + call Function1bd3 + ld hl, MenuSelection2 + ld b, [hl] + push bc + +asm_4a19d: ; 4a19d (12:619d) + bit 0, a + jr nz, .asm_4a1a7 + bit 1, a + jr nz, .asm_4a1ba + jr .asm_4a1bc +.asm_4a1a7 + ld hl, MenuSelection2 + ld a, [hl] + cp $1 + jp z, Function4a20e + cp $2 + jp z, Function4a221 + ld a, $1 + call Function1ff8 +.asm_4a1ba + pop bc + ret +.asm_4a1bc + ld hl, MenuSelection2 + ld a, [hl] + dec a + ld hl, Strings_4a23d + call GetNthString + ld d, h + ld e, l + hlcoord 1, 13 + ld b, $4 + ld c, $12 + call ClearBox + hlcoord 1, 14 + call PlaceString + jr .asm_4a1db +.asm_4a1db + call Function4a373 + pop bc + ld hl, MenuSelection2 + ld [hl], b + lb bc, 6, 1 + hlcoord 2, 3 + call ClearBox + jp Function4a195 +; 4a1ef (12:61ef) + +String_4a1ef: ; 4a1ef + db "モバイルセンター¯えらぶ" + next "ログインパスワード¯いれる" + next "もどる@" +; 4a20e + +Function4a20e: ; 4a20e (12:620e) + ld a, $1 + call Function1ff8 + callba Function1719c8 + call ClearBGPalettes + call DelayFrame + jr Function4a239 + +Function4a221: ; 4a221 (12:6221) + ld a, $1 + call Function1ff8 + call Function4a28a + jr c, Function4a239 + call Function4a373 + ld a, $2 + ld [MenuSelection2], a + jr .asm_4a235 +.asm_4a235 + pop bc + jp Function4a149 + +Function4a239: ; 4a239 (12:6239) + pop bc + jp Function4a13b +; 4a23d (12:623d) + +Strings_4a23d: ; 4a23d + db "いつも せつぞく¯する" + next "モバイルセンター¯えらびます@" + + db "モバイルセンター", $1d, "せつぞくするとき" + next "つかうパスワード¯ほぞんできます@" + + db "まえ%がめん ", $1d, "もどります@" + + db "@" +; 4a28a + +Function4a28a: ; 4a28a (12:628a) + hlcoord 2, 3 + lb bc, 6, 1 + ld a, " " + call Function4a6d8 + call Function1bee + call WaitBGMap + call LoadStandardMenuDataHeader + ld a, $5 + call GetSRAMBank + ld a, [$aa4b] + call CloseSRAM + and a + jr z, .asm_4a2df + hlcoord 12, 0 + ld b, $5 + ld c, $6 + call Function48cdc + hlcoord 14, 1 + ld de, String_4a34b + call PlaceString + callba Function104148 + call Function4a118 + call Function1bd3 + push af + call PlayClickSFX + pop af + bit 1, a + jr nz, .asm_4a33b + ld a, [MenuSelection2] + cp $2 + jr z, .asm_4a2f0 + cp $3 + jr z, .asm_4a33b +.asm_4a2df + callba Function11765d + call ClearBGPalettes + call Call_ExitMenu + call LoadFontsExtra + scf + ret +.asm_4a2f0 + call Function1bee + ld hl, UnknownText_0x4a358 + call PrintText + hlcoord 14, 7 + ld b, $3 + ld c, $4 + call TextBox + callba Function104148 + ld hl, MenuDataHeader_0x4a362 + call LoadMenuDataHeader + call InterpretMenu2 + bit 1, a + jr nz, .asm_4a338 + ld a, [MenuSelection2] + cp $2 + jr z, .asm_4a338 + ld a, $5 + call GetSRAMBank + ld hl, $aa4b + xor a + ld bc, $11 + call ByteFill + call CloseSRAM + ld hl, UnknownText_0x4a35d + call PrintText + call JoyWaitAorB +.asm_4a338 + call ExitMenu +.asm_4a33b + call Call_ExitMenu + callba Function104148 + xor a + ret +; 4a346 (12:6346) + +MenuDataHeader_0x4a346: ; 0x4a346 + db $40 ; flags + db 00, 12 ; start coords + db 06, 19 ; end coords + +String_4a34b: ; 4a34b + db "いれなおす" + next "けす" + next "もどる@" +; 4a358 + +UnknownText_0x4a358: ; 0x4a358 + ; Delete the saved LOG-IN PASSWORD? + text_jump UnknownText_0x1c5196 + db "@" +; 0x4a35d + +UnknownText_0x4a35d: ; 0x4a35d + ; Deleted the LOG-IN PASSWORD. + text_jump UnknownText_0x1c51b9 + db "@" +; 0x4a362 + +MenuDataHeader_0x4a362: ; 0x4a362 + db $40 ; flags + db 07, 14 ; start coords + db 11, 19 ; end coords + dw MenuData2_0x4a36a + db 2 ; default option +; 0x4a36a + +MenuData2_0x4a36a: ; 0x4a36a + db $e0 ; flags + db 2 ; items + db "はい@" + db "いいえ@" +; 0x4a373 + +Function4a373: ; 4a373 (12:6373) + ld hl, wcfa1 + ld a, $4 + ld [hli], a + ld a, $2 + ld [hli], a + ld a, $3 + ld [hli], a + ld a, $1 + ld [hli], a + ld [hl], $0 + set 5, [hl] + inc hl + xor a + ld [hli], a + ld a, $20 + ld [hli], a + ld a, $1 + add $40 + add $80 + add $2 + ld [hli], a + ld a, $1 +rept 2 + ld [hli], a +endr + ret +; 4a39a (12:639a) + +Function4a39a: ; 4a39a + call Function4a485 + call Function4a492 + call Function4a3aa + call SetPalettes + ret +; 4a3a7 + +Function4a3a7: ; 4a3a7 (12:63a7) + call Function4a485 +Function4a3aa: ; 4a3aa + hlcoord 0, 0 + lb bc, 3, 1 + xor a + call Function4a6d8 + lb bc, 1, 1 + ld a, $1 + call Function4a6d8 + lb bc, 1, 1 + xor a + call Function4a6d8 + lb bc, 1, 1 + ld a, $1 + call Function4a6d8 + lb bc, 4, 1 + ld a, $2 + call Function4a6d8 + lb bc, 1, 1 + ld a, $3 + call Function4a6d8 + lb bc, 1, 1 + ld a, " " + call Function4a6d8 + hlcoord 1, 0 + ld a, $1 + lb bc, 3, 18 + call Function4a6d8 + lb bc, 1, 18 + ld a, $0 + call Function4a6d8 + lb bc, 1, 18 + ld a, $1 + call Function4a6d8 + lb bc, 1, 18 + ld a, $2 + call Function4a6d8 + lb bc, 11, 18 + ld a, " " + call Function4a6d8 + hlcoord 19, 0 + lb bc, 3, 1 + ld a, $0 + call Function4a6d8 + lb bc, 1, 1 + ld a, $1 + call Function4a6d8 + lb bc, 1, 1 + xor a + call Function4a6d8 + lb bc, 1, 1 + ld a, $1 + call Function4a6d8 + lb bc, 4, 1 + ld a, $2 + call Function4a6d8 + lb bc, 1, 1 + ld a, $3 + call Function4a6d8 + lb bc, 1, 1 + ld a, " " + call Function4a6d8 + ret +; 4a449 (12:6449) + +Function4a449: ; 4a449 + ld bc, 3 * SCREEN_WIDTH + ld a, $0 + hlcoord 0, 0 + call ByteFill + ld bc, 2 * SCREEN_WIDTH + ld a, $1 + call ByteFill + ld bc, 2 * SCREEN_WIDTH + ld a, $0 + call ByteFill + ld bc, 2 * SCREEN_WIDTH + ld a, $1 + call ByteFill + ld bc, SCREEN_WIDTH + ld a, $2 + call ByteFill + ld bc, SCREEN_WIDTH + ld a, $3 + call ByteFill + ld bc, SCREEN_WIDTH + ld a, " " + call ByteFill + ret +; 4a485 + +Function4a485: ; 4a485 (12:6485) + ld de, GFX_49c0c + ld hl, VTiles2 tile $00 + lb bc, BANK(GFX_49c0c), $d + call Get2bpp + ret + +Function4a492: ; 4a492 (12:6492) + call Function4936e + ret + + +MainMenu_MobileStudium: ; 4a496 + ld a, [StartDay] + ld b, a + ld a, [StartHour] + ld c, a + ld a, [StartMinute] + ld d, a + ld a, [StartSecond] + ld e, a + push bc + push de + callba MobileStudium + call ClearBGPalettes + pop de + pop bc + ld a, b + ld [StartDay], a + ld a, c + ld [StartHour], a + ld a, d + ld [StartMinute], a + ld a, e + ld [StartSecond], a + ret +; 4a4c4 + + +Function4a4c4: ; 4a4c4 (12:64c4) + call ClearBGPalettes + call Function4a3a7 + call Function4a492 + call Function4a680 + call ClearBGPalettes + ld c, 20 + call DelayFrames + hlcoord 2, 0 + ld b, $a + ld c, $e + call Function48cdc + hlcoord 4, 2 + ld de, String_4a5c5 + call PlaceString + hlcoord 4, 4 + ld de, String_4a5cd + call PlaceString + hlcoord 4, 6 + ld de, String_4a5da + call PlaceString + hlcoord 4, 8 + ld de, String_4a5e6 + call PlaceString + hlcoord 4, 10 + ld de, String_4a5f2 + call PlaceString + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call TextBox + xor a + ld hl, Strings_4a5f6 + ld d, h + ld e, l + hlcoord 1, 14 + call PlaceString + ld a, $1 + ld hl, Strings_4a5f6 + call GetNthString + ld d, h + ld e, l + hlcoord 1, 16 + call PlaceString + call Function3200 + call SetPalettes + call Function1bc9 + ld hl, MenuSelection2 + ld b, [hl] + push bc + jr asm_4a54d + +Function4a545: ; 4a545 (12:6545) + call Function1bd3 + ld hl, MenuSelection2 + ld b, [hl] + push bc + +asm_4a54d: ; 4a54d (12:654d) + bit 0, a + jr nz, .asm_4a557 + bit 1, a + jr nz, .asm_4a574 + jr .asm_4a57e +.asm_4a557 + ld hl, MenuSelection2 + ld a, [hl] + cp $1 + jp z, Function4a6ab + cp $2 + jp z, Function4a6ab + cp $3 + jp z, Function4a6ab + cp $4 + jp z, Function4a6ab + ld a, $1 + call Function1ff8 +.asm_4a574 + pop bc + call ClearBGPalettes + call ClearTileMap + jp Function49f0a +.asm_4a57e + ld hl, MenuSelection2 + ld a, [hl] + dec a + add a + push af + ld hl, Strings_4a5f6 + call GetNthString + ld d, h + ld e, l + hlcoord 1, 13 + ld b, $4 + ld c, $12 + call ClearBox + hlcoord 1, 14 + call PlaceString + pop af + inc a + ld hl, Strings_4a5f6 + call GetNthString + ld d, h + ld e, l + hlcoord 1, 16 + call PlaceString + jp Function4a5b0 + +Function4a5b0: ; 4a5b0 (12:65b0) + call Function4a680 + pop bc + ld hl, MenuSelection2 + ld [hl], b + ld b, $a + ld c, $1 + hlcoord 3, 1 + call ClearBox + jp Function4a545 +; 4a5c5 (12:65c5) + +String_4a5c5: ; 4a5c5 + db "じこしょうかい@" +String_4a5cd: ; 4a5cd + db "たいせん ", $4a, "はじまるとき@" +String_4a5da: ; 4a5da + db "たいせん ", $1d, "かったとき@" +String_4a5e6: ; 4a5e6 + db "たいせん ", $1d, "まけたとき@" +String_4a5f2: ; 4a5f2 + db "もどる@" +; 4a5f6 + +Strings_4a5f6: ; 4a5f6 + db "めいし や ニュース ", $1d, "のせる@" + db "あなた%あいさつです@" + db "モバイル たいせん", $4a, "はじまるとき@" + db "あいて", $1d, "みえる あいさつです@" + db "モバイル たいせんで かったとき@" + db "あいて", $1d, "みえる あいさつです@" + db "モバイル たいせんで まけたとき@" + db "あいて", $1d, "みえる あいさつです@" + db "まえ%がめん ", $1d, "もどります@" + db "@" +; 4a680 + +Function4a680: ; 4a680 (12:6680) + ld hl, wcfa1 + ld a, $2 + ld [hli], a + ld a, $3 + ld [hli], a + ld a, $5 + ld [hli], a + ld a, $1 + ld [hli], a + ld [hl], $0 + set 5, [hl] + inc hl + xor a + ld [hli], a + ld a, $20 + ld [hli], a + ld a, $1 + add $40 + add $80 + add $2 + ld [hli], a + ld a, $1 +rept 2 + ld [hli], a +endr + xor a +rept 3 + ld [hli], a +endr + ret + +Function4a6ab: ; 4a6ab (12:66ab) + ld a, $2 + call Function1ff8 + call ClearBGPalettes + ld b, SCGB_08 + call GetSGBLayout + callba Function11c1ab + pop bc + call LoadFontsExtra + jp Function4a4c4 + +Function4a6c5: ; 4a6c5 (12:66c5) + ld a, $5 + ld [MusicFade], a + ld a, e + ld [MusicFadeIDLo], a + ld a, d + ld [MusicFadeIDHi], a + ld c, 22 + call DelayFrames + ret + +Function4a6d8: ; 4a6d8 (12:66d8) + push bc + push hl +.asm_4a6da + ld [hli], a + dec c + jr nz, .asm_4a6da + pop hl + ld bc, $14 + add hl, bc + pop bc + dec b + jr nz, Function4a6d8 + ret diff --git a/engine/map_objects.asm b/engine/map_objects.asm index 4c2adc9aa..13e4f73bf 100644 --- a/engine/map_objects.asm +++ b/engine/map_objects.asm @@ -2,45 +2,50 @@ INCLUDE "engine/facings.asm" SpriteMovementData:: ; 4273 - ; function, facing, ?, ?, ?, ? - db SPRITEMOVEFN_00, DOWN, $01, $02, $00, $00 ; 00 - db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 01 - db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $00 ; 02 - db SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 03 - db SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, $01, $00, $00, $00 ; 04 - db SPRITEMOVEFN_RANDOM_WALK_X, DOWN, $01, $00, $00, $00 ; 05 - db SPRITEMOVEFN_STANDING, DOWN, $01, $00, $00, $00 ; 06 - db SPRITEMOVEFN_STANDING, UP, $01, $00, $00, $00 ; 07 - db SPRITEMOVEFN_STANDING, LEFT, $01, $00, $00, $00 ; 08 - db SPRITEMOVEFN_STANDING, RIGHT, $01, $00, $00, $00 ; 09 - db SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 0a - db SPRITEMOVEFN_OBEY_DPAD, DOWN, $01, $02, $00, $00 ; 0b - db SPRITEMOVEFN_08, DOWN, $01, $00, $00, $00 ; 0c - db SPRITEMOVEFN_09, DOWN, $01, $00, $00, $00 ; 0d - db SPRITEMOVEFN_0A, DOWN, $01, $00, $00, $00 ; 0e - db SPRITEMOVEFN_0B, DOWN, $01, $00, $00, $00 ; 0f - db SPRITEMOVEFN_0C, DOWN, $01, $00, $00, $00 ; 10 - db SPRITEMOVEFN_0D, DOWN, $01, $00, $00, $00 ; 11 - db SPRITEMOVEFN_0E, DOWN, $01, $00, $00, $00 ; 12 - db SPRITEMOVEFN_FOLLOW, DOWN, $01, $02, $00, $00 ; 13 - db SPRITEMOVEFN_SCRIPTED, DOWN, $01, $02, $00, $00 ; 14 - db SPRITEMOVEFN_BIG_SNORLAX, DOWN, $09, $2e, $01, $c0 ; 15 - db SPRITEMOVEFN_BOUNCE, DOWN, $0a, $2e, $00, $00 ; 16 - db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 17 - db SPRITEMOVEFN_STANDING, DOWN, $01, $2e, $10, $00 ; 18 - db SPRITEMOVEFN_STRENGTH, DOWN, $01, $2e, $00, $40 ; 19 - db SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, $01, $02, $00, $00 ; 1a - db SPRITEMOVEFN_13, DOWN, $00, $8e, $01, $00 ; 1b - db SPRITEMOVEFN_14, DOWN, $08, $8e, $02, $00 ; 1c - db SPRITEMOVEFN_17, DOWN, $00, $82, $00, $00 ; 1d - db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, $01, $00, $00, $00 ; 1e - db SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, $01, $00, $00, $00 ; 1f - db SPRITEMOVEFN_STRENGTH, DOWN, $0c, $2e, $01, $c0 ; 20 - db SPRITEMOVEFN_STRENGTH, DOWN, $0d, $2e, $01, $c0 ; 21 - db SPRITEMOVEFN_1A, DOWN, $0e, $8e, $01, $00 ; 22 - db SPRITEMOVEFN_1B, DOWN, $0f, $8e, $02, $00 ; 23 - db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $20 ; 24 - db SPRITEMOVEFN_00, DOWN, $01, $00, $00, $00 ; 25 + +sprite_movement_data: macro + db \1, \2, \3, \4, \5 + dn \6, 0 + endm + ; function, facing, action, flags1, flags2, palette flags + sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 02 + sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 03 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 04 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 05 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 06 + sprite_movement_data SPRITEMOVEFN_STANDING, UP, PERSON_ACTION_STAND, $00, $00, %0000 ; 07 + sprite_movement_data SPRITEMOVEFN_STANDING, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 08 + sprite_movement_data SPRITEMOVEFN_STANDING, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 09 + sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0a + sprite_movement_data SPRITEMOVEFN_OBEY_DPAD, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 0b + sprite_movement_data SPRITEMOVEFN_08, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0c + sprite_movement_data SPRITEMOVEFN_09, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0d + sprite_movement_data SPRITEMOVEFN_0A, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0e + sprite_movement_data SPRITEMOVEFN_0B, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0f + sprite_movement_data SPRITEMOVEFN_0C, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 10 + sprite_movement_data SPRITEMOVEFN_0D, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 11 + sprite_movement_data SPRITEMOVEFN_0E, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 12 + sprite_movement_data SPRITEMOVEFN_FOLLOW, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 13 + sprite_movement_data SPRITEMOVEFN_SCRIPTED, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 14 + sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX, DOWN, PERSON_ACTION_09, $2e, $01, %1100 ; 15 + sprite_movement_data SPRITEMOVEFN_BOUNCE, DOWN, PERSON_ACTION_0A, $2e, $00, %0000 ; 16 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 17 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $2e, $10, %0000 ; 18 + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_STAND, $2e, $00, %0100 ; 19 + sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 1a + sprite_movement_data SPRITEMOVEFN_SHADOW, DOWN, PERSON_ACTION_00, $8e, $01, %0000 ; 1b + sprite_movement_data SPRITEMOVEFN_EMOTE, DOWN, PERSON_ACTION_EMOTE, $8e, $02, %0000 ; 1c + sprite_movement_data SPRITEMOVEFN_SCREENSHAKE, DOWN, PERSON_ACTION_00, $82, $00, %0000 ; 1d + sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1e + sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1f + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0C, $2e, $01, %1100 ; 20 + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0D, $2e, $01, %1100 ; 21 + sprite_movement_data SPRITEMOVEFN_BOULDERDUST, DOWN, PERSON_ACTION_0E, $8e, $01, %0000 ; 22 + sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_0F, $8e, $02, %0000 ; 23 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24 + sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25 ; 4357 @@ -84,7 +89,7 @@ Function4386: ; 4386 res 6, [hl] ld a, [XCoord] ld e, a - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] add 1 @@ -94,7 +99,7 @@ Function4386: ; 4386 jr nc, .ok ld a, [YCoord] ld e, a - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [hl] add 1 @@ -110,7 +115,7 @@ Function4386: ; 4386 set 6, [hl] ld a, [XCoord] ld e, a - ld hl, OBJECT_20 + ld hl, OBJECT_INIT_X add hl, bc ld a, [hl] add 1 @@ -120,7 +125,7 @@ Function4386: ; 4386 jr nc, .ok2 ld a, [YCoord] ld e, a - ld hl, OBJECT_21 + ld hl, OBJECT_INIT_Y add hl, bc ld a, [hl] add 1 @@ -151,16 +156,18 @@ Function4386: ; 4386 ; 43f3 Function43f3: ; 43f3 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc ld a, [hl] and a jr z, .zero + ld hl, OBJECT_FLAGS2 add hl, bc bit 5, [hl] jr nz, .bit5 - cp 1 + + cp STEP_TYPE_STANDING jr z, .one jr .ok @@ -173,12 +180,13 @@ Function43f3: ; 43f3 .one call Function47dd - ld hl, OBJECT_09 + + ld hl, OBJECT_STEP_TYPE add hl, bc ld a, [hl] and a ret z - cp 1 + cp STEP_TYPE_STANDING ret z .ok @@ -193,13 +201,13 @@ Function43f3: ; 43f3 Function4427: ; 4427 ld hl, OBJECT_FLAGS1 add hl, bc - bit 0, [hl] - jr nz, Function44a3 + bit INVISIBLE, [hl] + jr nz, SetFacingStanding ld hl, OBJECT_FLAGS2 add hl, bc bit 6, [hl] - jr nz, Function44a3 + jr nz, SetFacingStanding bit 5, [hl] jr nz, Function4448 @@ -211,18 +219,16 @@ Function4427: ; 4427 Function4440: ; 4440 ld hl, OBJECT_FLAGS1 add hl, bc - bit 0, [hl] - jr nz, Function44a3 - ; fallthrough -; 4448 - + bit INVISIBLE, [hl] + jr nz, SetFacingStanding Function4448: ; 4448 ld de, Pointers445f + 2 jr Function444d ; 444d Function444d: ; 444d - ld hl, OBJECT_11 +; call [4 * ObjectStructs[ObjInd, OBJECT_ACTION] + de] + ld hl, OBJECT_ACTION add hl, bc ld a, [hl] ld l, a @@ -239,52 +245,35 @@ endr ; 445f Pointers445f: ; 445f - dw Function44a3 ; 00 - dw Function44a3 ; 01 - dw Function44b5 ; 02 - dw Function44aa ; 03 - dw Function44c1 ; 04 - dw Function44aa ; 05 - dw Function4508 ; 06 - dw Function44aa ; 07 - dw Function4529 ; 08 - dw Function44aa ; 09 - dw Function4539 ; 0a - dw Function44a3 ; 0b - dw Function456e ; 0c - dw Function456e ; 0d - dw Function457b ; 0e - dw Function44a3 ; 0f - dw Function4582 ; 10 - dw Function4582 ; 11 - dw Function4589 ; 12 - dw Function4589 ; 13 - dw Function4590 ; 14 - dw Function45a4 ; 15 - dw Function45ab ; 16 - dw Function44aa ; 17 - dw Function45be ; 18 - dw Function45be ; 19 - dw Function45c5 ; 1a - dw Function45c5 ; 1b - dw Function45da ; 1c - dw Function44a3 ; 1d - dw Function45ed ; 1e - dw Function44a3 ; 1f - dw Function44e4 ; 20 - dw Function44aa ; 21 + dw SetFacingStanding, SetFacingStanding ; 00 + dw Function44b5, SetFacingCurrent ; 01 standing? + dw Function44c1, SetFacingCurrent ; 02 walking? + dw Function4508, SetFacingCurrent ; 03 bumping? + dw Function4529, SetFacingCurrent ; 04 + dw Function4539, SetFacingStanding ; 05 + dw Function456e, Function456e ; 06 + dw Function457b, SetFacingStanding ; 07 + dw Function4582, Function4582 ; 08 + dw Function4589, Function4589 ; 09 + dw Function4590, Function45a4 ; 0a + dw Function45ab, SetFacingCurrent ; 0c + dw Function45be, Function45be ; 0b + dw Function45c5, Function45c5 ; 0d + dw Function45da, SetFacingStanding ; 0e + dw Function45ed, SetFacingStanding ; 0f + dw Function44e4, SetFacingCurrent ; 10 ; 44a3 -Function44a3: ; 44a3 +SetFacingStanding: ; 44a3 ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], -1 + ld [hl], STANDING ret ; 44aa -Function44aa: ; 44aa +SetFacingCurrent: ; 44aa call GetSpriteDirection - or 0 + or 0 ; useless ld hl, OBJECT_FACING_STEP add hl, bc ld [hl], a @@ -297,26 +286,29 @@ Function44b5: ; 44b5 ld a, [hl] and 1 jr nz, Function44c1 - jp Function44aa + jp SetFacingCurrent ; 44c1 Function44c1: ; 44c1 ld hl, OBJECT_FLAGS1 add hl, bc - bit 3, [hl] - jp nz, Function44aa - ld hl, OBJECT_12 + bit SLIDING, [hl] + jp nz, SetFacingCurrent + + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] inc a and %00001111 ld [hl], a + rrca rrca and %00000011 ld d, a + call GetSpriteDirection - or 0 + or 0 ; useless or d ld hl, OBJECT_FACING_STEP add hl, bc @@ -327,20 +319,23 @@ Function44c1: ; 44c1 Function44e4: ; 44e4 ld hl, OBJECT_FLAGS1 add hl, bc - bit 3, [hl] - jp nz, Function44aa - ld hl, OBJECT_12 + bit SLIDING, [hl] + jp nz, SetFacingCurrent + + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] add 2 and %00001111 ld [hl], a + rrca rrca and %00000011 ld d, a + call GetSpriteDirection - or 0 + or 0 ; useless or d ld hl, OBJECT_FACING_STEP add hl, bc @@ -351,19 +346,22 @@ Function44e4: ; 44e4 Function4508: ; 4508 ld hl, OBJECT_FLAGS1 add hl, bc - bit 3, [hl] - jp nz, Function44aa - ld hl, OBJECT_12 + bit SLIDING, [hl] + jp nz, SetFacingCurrent + + ld hl, OBJECT_STEP_FRAME add hl, bc inc [hl] + ld a, [hl] rrca rrca rrca and %00000011 ld d, a + call GetSpriteDirection - or 0 + or 0 ; useless or d ld hl, OBJECT_FACING_STEP add hl, bc @@ -376,7 +374,7 @@ Function4529: ; 4529 ld hl, OBJECT_FACING add hl, bc ld a, [hl] - or 0 + or 0 ; useless ld hl, OBJECT_FACING_STEP add hl, bc ld [hl], a @@ -385,21 +383,23 @@ Function4529: ; 4529 Function4539: ; 4539 call Function453f - jp Function44a3 + jp SetFacingStanding ; 453f Function453f: ; 453f - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] and %11110000 ld e, a + ld a, [hl] inc a and %00001111 ld d, a cp 4 jr c, .ok + ld d, 0 ld a, e add $10 @@ -410,6 +410,7 @@ Function453f: ; 453f ld a, d or e ld [hl], a + swap e ld d, 0 ld hl, .Directions @@ -422,7 +423,7 @@ Function453f: ; 453f ; 456a .Directions ; 456a - db DOWN << 2, RIGHT << 2, UP << 2, LEFT << 2 + db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT ; 456e Function456e: ; 456e @@ -439,26 +440,26 @@ Function456e: ; 456e Function457b: ; 457b ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], $15 + ld [hl], FACING_15 ret ; 4582 -Function4582: ; 4582 +Function4582: ; 4582 emote ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], $14 + ld [hl], FACING_EMOTE ret ; 4589 Function4589: ; 4589 ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], $17 + ld [hl], FACING_17 ret ; 4590 Function4590: ; 4590 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] inc a @@ -468,7 +469,7 @@ Function4590: ; 4590 jr z, Function45a4 ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], $4 + ld [hl], FACING_04 ret ; 45a4 @@ -480,7 +481,7 @@ Function45a4: ; 45a4 ; 45ab Function45ab: ; 45ab - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] inc a @@ -498,18 +499,18 @@ Function45ab: ; 45ab Function45be: ; 45be ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], $16 + ld [hl], FACING_16 ret ; 45c5 Function45c5: ; 45c5 ld a, [VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS] - ld d, $17 + ld d, FACING_17 cp SPRITE_BIG_SNORLAX jr z, .ok cp SPRITE_BIG_LAPRAS jr z, .ok - ld d, $16 + ld d, FACING_16 .ok ld hl, OBJECT_FACING_STEP @@ -519,7 +520,7 @@ Function45c5: ; 45c5 ; 45da Function45da: ; 45da - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc inc [hl] ld a, [hl] @@ -527,25 +528,25 @@ Function45da: ; 45da ld hl, OBJECT_FACING_STEP add hl, bc and 2 - ld a, $1c + ld a, FACING_1C jr z, .ok - inc a + inc a ; FACING_1D .ok ld [hl], a ret ; 45ed Function45ed: ; 45ed - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc inc [hl] ld a, [hl] ld hl, OBJECT_FACING_STEP add hl, bc and 4 - ld a, $1e + ld a, FACING_1E jr z, .ok - inc a + inc a ; FACING_1F .ok ld [hl], a @@ -554,49 +555,49 @@ Function45ed: ; 45ed Function4600: ; 4600 - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld a, [hl] - ld hl, OBJECT_NEXT_MAP_X + ld hl, OBJECT_MAP_X add hl, bc ld [hl], a - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld a, [hl] - ld hl, OBJECT_NEXT_MAP_Y + ld hl, OBJECT_MAP_Y add hl, bc ld [hl], a - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] - ld hl, OBJECT_NEXT_TILE + ld hl, OBJECT_STANDING_TILE add hl, bc ld [hl], a - call Function4661 - ld hl, OBJECT_STANDING_TILE + call SetTallGrassFlags + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] - call Function4679 + call UselessAndA ret ; 462a Function462a: ; 462a - ld hl, OBJECT_NEXT_MAP_X + ld hl, OBJECT_MAP_X add hl, bc ld a, [hl] - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld [hl], a - ld hl, OBJECT_NEXT_MAP_Y + ld hl, OBJECT_MAP_Y add hl, bc ld a, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld [hl], a @@ -606,30 +607,30 @@ Function462a: ; 462a Function463f: ; 463f ld hl, OBJECT_FLAGS2 add hl, bc - bit 3, [hl] + bit 3, [hl] ; is current tile grass? jr z, .ok - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] - call Function4661 + call SetTallGrassFlags .ok - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] - call Function4679 - ret c - ld hl, OBJECT_NEXT_TILE + call UselessAndA + ret c ; never happens + ld hl, OBJECT_STANDING_TILE add hl, bc ld a, [hl] - call Function4679 + call UselessAndA ret ; 4661 -Function4661: ; 4661 +SetTallGrassFlags: ; 4661 call CheckSuperTallGrassTile jr z, .set - call Function1875 + call CheckGrassTile jr c, .reset .set @@ -645,14 +646,14 @@ Function4661: ; 4661 ret ; 4679 -Function4679: ; 4679 +UselessAndA: ; 4679 and a ret ; 467b Function467b: ; 467b xor a - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], a ld hl, OBJECT_MOVEMENT_BYTE_INDEX @@ -660,7 +661,7 @@ Function467b: ; 467b rept 3 ld [hli], a endr - ld [hl], a + ld [hl], a ; OBJECT_30 ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING @@ -673,8 +674,8 @@ Function4690: ; 4690 ld [hl], a ld hl, OBJECT_FLAGS1 add hl, bc - bit 2, [hl] - jr nz, .ok + bit FIXED_FACING, [hl] + jr nz, GetNextTile rept 2 add a @@ -684,12 +685,7 @@ endr add hl, bc ld [hl], a -.ok - ; fallthrough -; 46a6 - -Function46a6: ; 46a6 - +GetNextTile: ; 46a6 call GetStepVector ld hl, OBJECT_STEP_DURATION @@ -697,37 +693,37 @@ Function46a6: ; 46a6 ld [hl], a ld a, d - call Function4730 - ld hl, OBJECT_NEXT_MAP_X + call GetStepVectorSign + ld hl, OBJECT_MAP_X add hl, bc add [hl] - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld [hl], a ld d, a ld a, e - call Function4730 - ld hl, OBJECT_NEXT_MAP_Y + call GetStepVectorSign + ld hl, OBJECT_MAP_Y add hl, bc add [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld [hl], a ld e, a push bc - call Function2a3c + call GetCoordTile pop bc - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld [hl], a ret ; 46d7 -Function46d7: ; 46d7 +AddStepVector: ; 46d7 call GetStepVector @@ -787,13 +783,15 @@ StepVectors: ; 4700 db 4, 0, 4, 4 ; 4730 -Function4730: ; 4730 +GetStepVectorSign: ; 4730 add a - ret z + ret z ; 0 or 128 + ld a, 1 - ret nc + ret nc ; 1 - 127 + ld a, -1 - ret + ret ; 129 - 255 ; 4738 Function4738: ; 4738 @@ -801,15 +799,15 @@ Function4738: ; 4738 add hl, bc ld a, [hl] and %00000011 - ld [wd151], a - call Function46d7 - ld a, [wd14e] + ld [wPlayerStepDirection], a + call AddStepVector + ld a, [wPlayerStepVectorX] add d - ld [wd14e], a - ld a, [wd14f] + ld [wPlayerStepVectorX], a + ld a, [wPlayerStepVectorY] add e - ld [wd14f], a - ld hl, wd150 + ld [wPlayerStepVectorY], a + ld hl, wPlayerStepFlags set 5, [hl] ret ; 4759 @@ -847,28 +845,28 @@ RestoreDefaultMovement: ; 4769 ret ; 4780 -ClearObjectStructField27: ; 4780 +ClearObjectMovementByteIndex: ; 4780 ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld [hl], 0 ret ; 4787 -IncrementObjectStructField27: ; 4787 +IncrementObjectMovementByteIndex: ; 4787 ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc inc [hl] ret ; 478d -DecrementObjectStructField27: ; 478d +DecrementObjectMovementByteIndex: ; 478d ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc dec [hl] ret ; 4793 -JumptoObjectStructField27: ; 4793 +MovementAnonymousJumptable: ; 4793 ld hl, OBJECT_MOVEMENT_BYTE_INDEX add hl, bc ld a, [hl] @@ -891,7 +889,8 @@ IncrementObjectStructField28: ; 47a2 ret ; 47a8 -JumptoObjectStructField28: ; 47a8 +Object28AnonymousJumptable: ; 47a8 +; anonymous jumptable ld hl, OBJECT_28 add hl, bc ld a, [hl] @@ -915,23 +914,23 @@ SetValueObjectStructField28: ; 47b6 ; 47bc Function47bc: ; 47bc - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] push bc - call Function2a3c + call GetCoordTile pop bc - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld [hl], a call Function4600 call Function467b - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 47dd @@ -964,15 +963,15 @@ Function47dd: ; 47dd dw .Script ; 10 dw .Strength ; 11 dw .FollowNotExact ; 12 - dw .Movement13 ; 13 - dw .Movement14 ; 14 + dw .MovementShadow ; 13 + dw .MovementEmote ; 14 dw .MovementBigStanding ; 15 dw .MovementBouncing ; 16 - dw .Movement17 ; 17 + dw .MovementScreenShake ; 17 dw .MovementSpinClockwise ; 18 dw .MovementSpinCounterclockwise ; 19 - dw .Movement1a ; 1a - dw .Movement1b ; 1b + dw .MovementBoulderDust ; 1a + dw .MovementShakingGrass ; 1b ; 4821 .Null_00: ; 4821 @@ -1008,7 +1007,7 @@ Function47dd: ; 47dd ld hl, OBJECT_FACING add hl, bc ld [hl], a - jp Function4b1d + jp RandomStepDuration_Slow ; 4851 .RandomSpin2: ; 4851 @@ -1026,18 +1025,18 @@ Function47dd: ; 47dd .keep ld [hl], a - jp Function4b26 + jp RandomStepDuration_Fast ; 4869 .Standing: ; 4869 call Function462a call Function467b - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 1 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_STAND + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 5 + ld [hl], STEP_TYPE_05 ret ; 487c @@ -1088,13 +1087,13 @@ Function47dd: ; 47dd ; 48ac .Strength: ; 48ac - call JumptoObjectStructField27 + call MovementAnonymousJumptable dw .Strength_Start dw .Strength_Stop ; 48b3 .Strength_Start: ; 48b3 - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] call CheckPitTile @@ -1106,7 +1105,7 @@ Function47dd: ; 47dd res 2, [hl] jr z, .ok - ld hl, OBJECT_32 + ld hl, OBJECT_RANGE add hl, bc ld a, [hl] and %00000011 @@ -1117,11 +1116,11 @@ Function47dd: ; 47dd ld de, SFX_STRENGTH call PlaySFX - call Function5538 + call SpawnStrengthBoulderDust call Function463f - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $f + ld [hl], STEP_TYPE_0F ret .ok2 @@ -1134,9 +1133,7 @@ Function47dd: ; 47dd ret .on_pit - call IncrementObjectStructField27 - ; fallthrough -; 48f8 + call IncrementObjectMovementByteIndex .Strength_Stop: ; 48f8 ld hl, OBJECT_DIRECTION_WALKING @@ -1146,15 +1143,15 @@ Function47dd: ; 47dd ; 48ff .FollowNotExact: ; 48ff - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] - ld hl, OBJECT_32 + ld hl, OBJECT_RANGE add hl, bc ld a, [hl] @@ -1166,7 +1163,7 @@ Function47dd: ; 47dd cp STANDING jr z, .standing - ld hl, OBJECT_NEXT_MAP_X + ld hl, OBJECT_MAP_X add hl, bc ld a, [hl] cp d @@ -1180,7 +1177,7 @@ Function47dd: ; 47dd jr .done .equal - ld hl, OBJECT_NEXT_MAP_Y + ld hl, OBJECT_MAP_Y add hl, bc ld a, [hl] cp e @@ -1207,9 +1204,9 @@ Function47dd: ; 47dd ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 1 + ld [hl], PERSON_ACTION_STAND ret ; 4958 @@ -1218,12 +1215,12 @@ Function47dd: ; 47dd ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 9 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 4 + ld [hl], STEP_TYPE_04 ret ; 496e @@ -1232,24 +1229,24 @@ Function47dd: ; 47dd ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 10 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_0A + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 4 + ld [hl], STEP_TYPE_04 ret ; 4984 .MovementSpinCounterclockwise: ; 4984 - call JumptoObjectStructField27 + call MovementAnonymousJumptable dw .MovementSpinInit dw .MovementSpinRepeat dw .MovementSpinTurnLeft ; 498d .MovementSpinClockwise: ; 498d - call JumptoObjectStructField27 + call MovementAnonymousJumptable dw .MovementSpinInit dw .MovementSpinRepeat dw .MovementSpinTurnRight @@ -1257,25 +1254,22 @@ Function47dd: ; 47dd .MovementSpinInit: ; 4996 call Function467b - call IncrementObjectStructField27 - ; fallthrough -; 499c - + call IncrementObjectMovementByteIndex .MovementSpinRepeat: ; 499c - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 1 - ld hl, OBJECT_32 + ld [hl], PERSON_ACTION_STAND + ld hl, OBJECT_RANGE add hl, bc ld a, [hl] ld a, $10 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 3 - call IncrementObjectStructField27 + ld [hl], STEP_TYPE_03 + call IncrementObjectMovementByteIndex ret ; 49b8 @@ -1286,7 +1280,7 @@ Function47dd: ; 47dd ; 49c0 .DirectionData_Counterclockwise ; 49c0 - db RIGHT << 2, LEFT << 2, DOWN << 2, UP << 2 + db OW_RIGHT, OW_LEFT, OW_DOWN, OW_UP ; 49c4 .MovementSpinTurnRight: ; 49c4 @@ -1296,7 +1290,7 @@ Function47dd: ; 47dd ; 49cc .DirectionData_Clockwise ; 49cc - db LEFT << 2, RIGHT << 2, UP << 2, DOWN << 2 + db OW_LEFT, OW_RIGHT, OW_UP, OW_DOWN ; 49d0 .MovementSpinNextFacing: ; 49d0 @@ -1313,15 +1307,15 @@ Function47dd: ; 47dd ld a, [hl] pop hl ld [hl], a - call DecrementObjectStructField27 + call DecrementObjectMovementByteIndex ret ; 49e5 -.Movement13: ; 49e5 - call ._Movement13_14_1a_1b - ld hl, OBJECT_11 +.MovementShadow: ; 49e5 + call ._MovementShadow_Grass_Emote_BoulderDust + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $7 + ld [hl], PERSON_ACTION_07 ld hl, OBJECT_STEP_DURATION add hl, de ld a, [hl] @@ -1349,39 +1343,39 @@ Function47dd: ; 47dd ld hl, OBJECT_SPRITE_X_OFFSET add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $13 + ld [hl], STEP_TYPE_13 ret ; 4a21 -.Movement14: ; 4a21 +.MovementEmote: ; 4a21 call Function467b - call ._Movement13_14_1a_1b - ld hl, OBJECT_11 + call ._MovementShadow_Grass_Emote_BoulderDust + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 8 + ld [hl], PERSON_ACTION_EMOTE ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], 0 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc - ld [hl], $f0 + ld [hl], -$10 ld hl, OBJECT_SPRITE_X_OFFSET add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $13 + ld [hl], STEP_TYPE_13 ret ; 4a46 -.Movement1a: ; 4a46 +.MovementBoulderDust: ; 4a46 call Function467b - call ._Movement13_14_1a_1b - ld hl, OBJECT_11 + call ._MovementShadow_Grass_Emote_BoulderDust + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $e + ld [hl], PERSON_ACTION_0E ld hl, OBJECT_STEP_DURATION add hl, de ld a, [hl] @@ -1409,9 +1403,9 @@ endr ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], e - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $13 + ld [hl], STEP_TYPE_13 ret ; 4a81 @@ -1423,12 +1417,12 @@ endr db -6, 2 ; 4a89 -.Movement1b: ; 4a89 +.MovementShakingGrass: ; 4a89 call Function467b - call ._Movement13_14_1a_1b - ld hl, OBJECT_11 + call ._MovementShadow_Grass_Emote_BoulderDust + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $f + ld [hl], PERSON_ACTION_0F ld hl, OBJECT_STEP_DURATION add hl, de ld a, [hl] @@ -1436,14 +1430,14 @@ endr ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $13 + ld [hl], STEP_TYPE_13 ret ; 4aa8 -._Movement13_14_1a_1b: ; 4aa8 - ld hl, OBJECT_32 +._MovementShadow_Grass_Emote_BoulderDust: ; 4aa8 + ld hl, OBJECT_RANGE add hl, bc ld a, [hl] push bc @@ -1459,28 +1453,28 @@ endr ret ; 4abc -.Movement17: ; 4abc +.MovementScreenShake: ; 4abc call Function467b - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 0 - ld hl, OBJECT_32 + ld [hl], PERSON_ACTION_00 + ld hl, OBJECT_RANGE add hl, bc ld a, [hl] - call ._Movement17 + call ._MovementScreenShake ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], e ld hl, OBJECT_30 add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $15 + ld [hl], STEP_TYPE_15 ret ; 4ade -._Movement17: ; 4ade +._MovementScreenShake: ; 4ade ld d, a and %00111111 ld e, a @@ -1500,90 +1494,88 @@ endr .RandomWalkContinue: ; 4af0 call Function4690 - call Function6ec1 - jr c, Function4b17 + call Function6ec1 ; check whether the object can move in that direction + jr c, .NewDuration + call Function463f - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 2 - ld hl, wd4cf + ld [hl], PERSON_ACTION_STEP + + ld hl, wCenteredObject ld a, [hMapObjectIndexBuffer] cp [hl] jr z, .load_6 - ld hl, OBJECT_09 + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 7 + ld [hl], STEP_TYPE_07 ret .load_6 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 6 + ld [hl], STEP_TYPE_PLAYER_WALK ret -Function4b17: ; 4b17 +.NewDuration: ; 4b17 call Function467b call Function462a - ; fallthrough -; 4b1d - -Function4b1d: ; 4b1d +RandomStepDuration_Slow: ; 4b1d call Random ld a, [hRandomAdd] and %01111111 - jr Function4b2d + jr SetRandomStepDuration ; 4b26 -Function4b26: ; 4b26 +RandomStepDuration_Fast: ; 4b26 call Random ld a, [hRandomAdd] and %00011111 - ; fallthrough -; 4b2d - -Function4b2d: ; 4b2d +SetRandomStepDuration: ; 4b2d ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 1 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_STAND + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 3 + ld [hl], STEP_TYPE_03 ret ; 4b45 Pointers4b45: ; 4b45 - dw Function47bc - dw Function47dd - dw Function4e2b - dw Function4ddd - dw Function4e21 - dw Function4e0c - dw Function4e56 - dw Function4e47 - dw Function4b86 - dw Function4bbf - dw Function4e83 - dw Function4dff - dw Function4c18 - dw Function4c89 - dw Function4d14 - dw Function4ecd - dw Function4d7e - dw Function4daf - dw Function4dc8 - dw Function4f04 - dw Function4f33 - dw Function4f33 - dw Function4f77 - dw Function4f7a - dw Function4df0 - dw Function4f83 +; These pointers use OBJECT_STEP_TYPE. See constants/sprite_constants.asm + dw Function47bc ; 00 + dw Function47dd ; 01 + dw Function4e2b ; 02 npc walk + dw Function4ddd ; 03 + dw Function4e21 ; 04 + dw Function4e0c ; 05 + dw Function4e56 ; 06 player walk + dw Function4e47 ; 07 + dw Function4b86 ; 08 npc jump step + dw Function4bbf ; 09 player jump step + dw Function4e83 ; 0a half step + dw Function4dff ; 0b + dw Function4c18 ; 0c teleport from + dw Function4c89 ; 0d teleport to + dw Function4d14 ; 0e skyfall + dw Function4ecd ; 0f + dw Function4d7e ; 10 + dw Function4daf ; 11 + dw Function4dc8 ; 12 + dw Function4f04 ; 13 + dw Function4f33 ; 14 + dw Function4f33 ; 15 + dw Function4f77 ; 16 + dw Function4f7a ; 17 + dw Function4df0 ; 18 + dw Function4f83 ; 19 ; 4b79 Function4b79: ; 4b79 @@ -1591,27 +1583,28 @@ Function4b79: ; 4b79 add hl, bc dec [hl] ret nz - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4b86 Function4b86: ; 4b86 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4b8d dw Function4ba9 ; 4b8d Function4b8d: ; 4b8d - call Function46d7 + call AddStepVector call UpdateJumpPosition ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz call Function4600 - call Function46a6 + call GetNextTile ld hl, OBJECT_FLAGS2 add hl, bc res 3, [hl] @@ -1620,21 +1613,22 @@ Function4b8d: ; 4b8d ; 4ba9 Function4ba9: ; 4ba9 - call Function46d7 + call AddStepVector call UpdateJumpPosition ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz call Function4600 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4bbf Function4bbf: ; 4bbf - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4bca dw Function4bd2 dw Function4bf2 @@ -1642,12 +1636,9 @@ Function4bbf: ; 4bbf ; 4bca Function4bca: ; 4bca - ld hl, wd150 + ld hl, wPlayerStepFlags set 7, [hl] call IncrementObjectStructField28 -; fallthrough -; 4bd2 - Function4bd2: ; 4bd2 call UpdateJumpPosition call Function4738 @@ -1659,7 +1650,7 @@ Function4bd2: ; 4bd2 ld hl, OBJECT_FLAGS2 add hl, bc res 3, [hl] - ld hl, wd150 + ld hl, wPlayerStepFlags set 6, [hl] set 4, [hl] call IncrementObjectStructField28 @@ -1667,13 +1658,10 @@ Function4bd2: ; 4bd2 ; 4bf2 Function4bf2: ; 4bf2 - call Function46a6 - ld hl, wd150 + call GetNextTile + ld hl, wPlayerStepFlags set 7, [hl] call IncrementObjectStructField28 -; fallthrough -; 4bfd - Function4bfd: ; 4bfd call UpdateJumpPosition call Function4738 @@ -1681,17 +1669,18 @@ Function4bfd: ; 4bfd add hl, bc dec [hl] ret nz - ld hl, wd150 + ld hl, wPlayerStepFlags set 6, [hl] call Function4600 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4c18 Function4c18: ; 4c18 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4c23 dw Function4c32 dw Function4c42 @@ -1699,20 +1688,17 @@ Function4c18: ; 4c18 ; 4c23 Function4c23: ; 4c23 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], $10 call IncrementObjectStructField28 -; fallthrough -; 4c32 - Function4c32: ; 4c32 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 4 + ld [hl], PERSON_ACTION_SPIN ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] @@ -1722,7 +1708,7 @@ Function4c32: ; 4c32 ; 4c42 Function4c42: ; 4c42 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_31 @@ -1735,13 +1721,10 @@ Function4c42: ; 4c42 add hl, bc res 3, [hl] call IncrementObjectStructField28 -; fallthrough -; 4c5d - Function4c5d: ; 4c5d - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 4 + ld [hl], PERSON_ACTION_SPIN ld hl, OBJECT_31 add hl, bc inc [hl] @@ -1757,17 +1740,18 @@ Function4c5d: ; 4c5d add hl, bc dec [hl] ret nz - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4c89 Function4c89: ; 4c89 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4c9a dw Function4caa dw Function4cb3 @@ -1778,9 +1762,9 @@ Function4c89: ; 4c89 ; 4c9a Function4c9a: ; 4c9a - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 0 + ld [hl], PERSON_ACTION_00 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], $10 @@ -1794,11 +1778,8 @@ Function4caa: ; 4caa dec [hl] ret nz call IncrementObjectStructField28 -; fallthrough -; 4cb3 - Function4cb3: ; 4cb3 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_31 @@ -1812,9 +1793,9 @@ Function4cb3: ; 4cb3 ; 4cc9 Function4cc9: ; 4cc9 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 4 + ld [hl], PERSON_ACTION_SPIN ld hl, OBJECT_31 add hl, bc inc [hl] @@ -1831,9 +1812,6 @@ Function4cc9: ; 4cc9 dec [hl] ret nz call IncrementObjectStructField28 -; fallthrough -; 4ceb - Function4ceb: ; 4ceb ld hl, OBJECT_STEP_DURATION add hl, bc @@ -1843,30 +1821,29 @@ Function4ceb: ; 4ceb ; 4cf5 Function4cf5: ; 4cf5 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 4 + ld [hl], PERSON_ACTION_SPIN ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz -; 4d01 - Function4d01: ; 4d01 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4d14 Function4d14: ; 4d14 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4d1f dw Function4d2e dw Function4d4f @@ -1874,25 +1851,22 @@ Function4d14: ; 4d14 ; 4d1f Function4d1f: ; 4d1f - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 0 + ld [hl], PERSON_ACTION_00 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], $10 call IncrementObjectStructField28 -; fallthrough -; 4d2e - Function4d2e: ; 4d2e ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], 2 - ld hl, OBJECT_12 + ld [hl], PERSON_ACTION_STEP + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_31 @@ -1902,9 +1876,6 @@ Function4d2e: ; 4d2e add hl, bc ld [hl], $10 call IncrementObjectStructField28 -; fallthrough -; 4d4f - Function4d4f: ; 4d4f ld hl, OBJECT_31 add hl, bc @@ -1922,24 +1893,22 @@ Function4d4f: ; 4d4f dec [hl] ret nz call IncrementObjectStructField28 -; fallthrough -; 4d6b - Function4d6b: ; 4d6b - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4d7e Function4d7e: ; 4d7e - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4d85 dw Function4d94 ; 4d85 @@ -1952,9 +1921,6 @@ Function4d85: ; 4d85 add hl, bc ld [hl], 0 call IncrementObjectStructField28 - ; fallthrough -; 4d94 - Function4d94: ; 4d94 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc @@ -1968,9 +1934,9 @@ Function4d94: ; 4d94 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4daf @@ -1984,12 +1950,12 @@ Function4db5: ; 4db5 add hl, bc ld a, [hl] and %00000001 - ld a, 1 + ld a, PERSON_ACTION_STAND jr z, .yes - ld a, 0 + ld a, PERSON_ACTION_00 .yes - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc ld [hl], a ret @@ -2000,12 +1966,12 @@ Function4dc8: ; 4dc8 add hl, bc ld a, [hl] and %00000001 - ld a, 4 + ld a, PERSON_ACTION_SPIN jr z, .yes - ld a, 5 + ld a, PERSON_ACTION_SPIN_FLICKER .yes - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc ld [hl], a jp Function4b79 @@ -2019,9 +1985,9 @@ Function4ddd: ; 4ddd add hl, bc dec [hl] ret nz - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4df0 @@ -2041,28 +2007,26 @@ Function4dff: ; 4dff add hl, bc dec [hl] ret nz - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4e0c Function4e0c: ; 4e0c - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4e13 dw Function4e21 ; 4e13 Function4e13: ; 4e13 call RestoreDefaultMovement - call Function1a47 + call GetInitialFacing ld hl, OBJECT_FACING add hl, bc ld [hl], a call IncrementObjectStructField28 - ; fallthrough -; 4e21 - Function4e21: ; 4e21 call Function4fb2 ld hl, OBJECT_DIRECTION_WALKING @@ -2073,7 +2037,7 @@ Function4e21: ; 4e21 Function4e2b: ; 4e2b call Function4fb2 - call Function46d7 + call AddStepVector ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] @@ -2082,56 +2046,56 @@ Function4e2b: ; 4e2b ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4e47 Function4e47: ; 4e47 - call Function46d7 + call AddStepVector ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz call Function4600 - jp Function4b1d + jp RandomStepDuration_Slow ; 4e56 Function4e56: ; 4e56 ; AnimateStep? - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4e5d dw Function4e65 ; 4e5d Function4e5d: ; 4e5d - ld hl, wd150 + ld hl, wPlayerStepFlags set 7, [hl] call IncrementObjectStructField28 - ; fallthrough -; 4e65 - Function4e65: ; 4e65 call Function4738 ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz - ld hl, wd150 + + ld hl, wPlayerStepFlags set 6, [hl] call Function4600 ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4e83 Function4e83: ; 4e83 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4e8e dw Function4ea4 dw Function4ead @@ -2142,7 +2106,7 @@ Function4e8e: ; 4e8e ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] ld [hl], 2 @@ -2150,18 +2114,12 @@ Function4e8e: ; 4e8e add hl, bc ld [hl], 2 call IncrementObjectStructField28 - ; fallthrough -; 4ea4 - Function4ea4: ; 4ea4 ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz call IncrementObjectStructField28 - ; fallthrough -; 4ead - Function4ead: ; 4ead ld hl, OBJECT_29 add hl, bc @@ -2173,31 +2131,28 @@ Function4ead: ; 4ead add hl, bc ld [hl], $2 call IncrementObjectStructField28 - ; fallthrough -; 4ec0 - Function4ec0: ; 4ec0 ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4ecd Function4ecd: ; 4ecd - call Function46d7 + call AddStepVector ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] ret nz push bc - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] ld hl, OBJECT_MAP_OBJECT_INDEX @@ -2213,9 +2168,9 @@ Function4ecd: ; 4ecd ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4f04 @@ -2255,7 +2210,8 @@ Function4f04: ; 4f04 ; 4f33 Function4f33: ; 4f33 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4f3a dw Function4f43 ; 4f3a @@ -2266,16 +2222,13 @@ Function4f3a: ; 4f3a add hl, bc ld [hl], a call IncrementObjectStructField28 - ; fallthrough -; 4f43 - Function4f43: ; 4f43 ld hl, OBJECT_29 add hl, bc ld d, [hl] - ld a, [wd14f] + ld a, [wPlayerStepVectorY] sub d - ld [wd14f], a + ld [wPlayerStepVectorY], a ld hl, OBJECT_STEP_DURATION add hl, bc dec [hl] @@ -2286,9 +2239,9 @@ Function4f43: ; 4f43 add hl, bc ld [hl], a ld d, a - ld a, [wd14f] + ld a, [wPlayerStepVectorY] add d - ld [wd14f], a + ld [wPlayerStepVectorY], a ret .ok @@ -2308,29 +2261,31 @@ Function4f6c: ; 4f6c ; 4f77 Function4f77: ; 4f77 - call JumptoObjectStructField28 ; ???? + call Object28AnonymousJumptable ; ???? ; 4f7a Function4f7a: ; 4f7a - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4f83 dw Function4f83 dw Function4f83 ; 4f83 Function4f83: ; 4f83 - call JumptoObjectStructField28 + call Object28AnonymousJumptable +; anonymous jumptable dw Function4f8a dw Function4f99 ; 4f8a Function4f8a: ; 4f8a - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $10 + ld [hl], PERSON_ACTION_10 ld hl, OBJECT_STEP_DURATION add hl, bc - ld [hl], $10 + ld [hl], 16 call IncrementObjectStructField28 ; 4f99 @@ -2342,12 +2297,12 @@ Function4f99: ; 4f99 ld hl, OBJECT_SPRITE_Y_OFFSET add hl, bc ld [hl], $60 - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], 0 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 1 + ld [hl], STEP_TYPE_STANDING ret ; 4fb2 @@ -2404,7 +2359,7 @@ UpdateJumpPosition: ; 4fd5 ; 5000 Function5000: ; unscripted? -; copy [wc3de] to [wc2df] +; copy [wc2de] to [wc2df] ld a, [wc2de] ld hl, wc2df ld [hl], a @@ -2598,86 +2553,87 @@ Function550a: ; 550a ret ; 5529 -Function5529: ; 5529 +SpawnShadow: ; 5529 push bc - ld de, .data_5535 - call Function55b9 - call Function55ac + ld de, .ShadowObject + call CopyTempObjectData + call InitTempObject pop bc ret -.data_5535 - db $00, $05, $1b +.ShadowObject + ; vtile, palette, movement + db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW ; 5538 -Function5538: ; 5538 +SpawnStrengthBoulderDust: ; 5538 push bc - ld de, .data_5544 - call Function55b9 - call Function55ac + ld de, .BoulderDustObject + call CopyTempObjectData + call InitTempObject pop bc ret -.data_5544 - db $00, $05, $22 +.BoulderDustObject + db $00, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST ; 5547 -Function5547: ; 5547 +SpawnEmote: ; 5547 push bc - ld de, .data_5553 - call Function55b9 - call Function55ac + ld de, .EmoteObject + call CopyTempObjectData + call InitTempObject pop bc ret -.data_5553 - db $00, $05, $1c +.EmoteObject + db $00, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE ; 5556 -Function5556: ; 5556 +ShakeGrass: ; 5556 push bc ld de, .data_5562 - call Function55b9 - call Function55ac + call CopyTempObjectData + call InitTempObject pop bc ret .data_5562 - db $00, $06, $23 + db $00, PAL_OW_TREE, SPRITEMOVEDATA_GRASS ; 5565 -Function5565: ; 5565 +ShakeScreen: ; 5565 push bc push af - ld de, .data_5576 - call Function55b9 + ld de, .ScreenShakeObject + call CopyTempObjectData pop af - ld [wc2f5], a - call Function55ac + ld [wTempObjectCopyRange], a + call InitTempObject pop bc ret -.data_5576 - db $00, $05, $1d +.ScreenShakeObject + db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE ; 5579 -Function5579: ; 5579 +DespawnEmote: ; 5579 push bc ld a, [hMapObjectIndexBuffer] ld c, a - call Function5582 + call .DeleteEmote pop bc ret ; 5582 -Function5582: ; 5582 +.DeleteEmote: ; 5582 ld de, ObjectStructs ld a, NUM_OBJECT_STRUCTS .loop push af ld hl, OBJECT_FLAGS1 add hl, de - bit 7, [hl] + bit EMOTE_OBJECT, [hl] jr z, .next ld hl, OBJECT_SPRITE add hl, de @@ -2701,20 +2657,21 @@ Function5582: ; 5582 ret ; 55ac -Function55ac: ; 55ac +InitTempObject: ; 55ac call FindFirstEmptyObjectStruct ret nc ld d, h ld e, l - callba Function8286 + callba CopyTempObjectToObjectStruct ret ; 55b9 -Function55b9: ; 55b9 -; load into wc2f0: -; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [MapX], [MapY], -1 - ld hl, wc2f0 +CopyTempObjectData: ; 55b9 +; load into wTempObjectCopy: +; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [NextMapX], [NextMapY], -1 +; This spawns the object at the same place as whichever object is loaded into bc. + ld hl, wTempObjectCopyMapObjectIndex ld [hl], -1 inc hl ld [hl], -1 @@ -2733,10 +2690,10 @@ Function55b9: ; 55b9 ld [hli], a push hl - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] pop hl @@ -2753,6 +2710,7 @@ Function55e0:: ; 55e0 ld a, [VramState] bit 0, a ret z + ld bc, ObjectStructs xor a .loop @@ -2773,28 +2731,30 @@ Function55e0:: ; 55e0 ret ; 5602 -Function5602: ; 5602 - call Function5645 - ld a, 0 - call Function5629 - ld a, [wd459] +Function5602: ; 5602, called at battle start + call Function5645 ; clear sprites + ld a, PLAYER + call Function5629 ; respawn player + + ld a, [wBattleScriptFlags] bit 7, a jr z, .ok + ld a, [hLastTalked] and a jr z, .ok - call Function5629 + call Function5629 ; respawn opponent .ok - call RefreshMapAppearDisappear + call _UpdateSprites ret ; 561d Function561d: ; 561d - call Function5645 - ld a, 0 - call Function5629 - call RefreshMapAppearDisappear + call Function5645 ; clear sprites + ld a, PLAYER + call Function5629 ; respawn player + call _UpdateSprites ret ; 5629 @@ -2825,7 +2785,7 @@ Function5645: ; 5645 ld bc, ObjectStructs .loop ld [hMapObjectIndexBuffer], a - call Function5680 + call SetFacing_Standing ld hl, OBJECT_STRUCT_LENGTH add hl, bc ld b, h @@ -2841,9 +2801,9 @@ Function565c: ; 565c push bc call Function56cd pop bc - jr c, Function5680 + jr c, SetFacing_Standing call Function56a3 - jr c, Function5680 + jr c, SetFacing_Standing call Function5688 callba Function4440 xor a @@ -2852,13 +2812,13 @@ Function565c: ; 565c Function5673: ; 5673 call Function56a3 - jr c, Function5680 - callba Function4440 + jr c, SetFacing_Standing + callba Function4440 ; no need to farcall xor a ret ; 5680 -Function5680: ; 5680 +SetFacing_Standing: ; 5680 ld hl, OBJECT_FACING_STEP add hl, bc ld [hl], STANDING @@ -2868,26 +2828,26 @@ Function5680: ; 5680 Function5688: ; 5688 push bc - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] - call Function2a3c + call GetCoordTile pop bc - ld hl, OBJECT_STANDING_TILE + ld hl, OBJECT_NEXT_TILE add hl, bc ld [hl], a - callba Function463f + callba Function463f ; no need to farcall ret ; 56a3 Function56a3: ; 56a3 - ld hl, OBJECT_MAP_X + ld hl, OBJECT_NEXT_MAP_X add hl, bc ld d, [hl] - ld hl, OBJECT_MAP_Y + ld hl, OBJECT_NEXT_MAP_Y add hl, bc ld e, [hl] inc d @@ -3043,11 +3003,11 @@ Function576a:: ; 576a Function5771: ; 5771 xor a - ld [wd14e], a - ld [wd14f], a - ld [wd150], a + ld [wPlayerStepVectorX], a + ld [wPlayerStepVectorY], a + ld [wPlayerStepFlags], a ld a, -1 - ld [wd151], a + ld [wPlayerStepDirection], a ret ; 5781 @@ -3078,11 +3038,11 @@ Function579d: ; 579d ld [wc2df], a xor a ld [wd04e], a - ld [PlayerObject12], a + ld [PlayerObjectStepFrame], a call Function57bc callba CheckWarpCollision call c, SpawnInFacingDown - call Function57ca + call SpawnInCustomFacing ret ; 57bc @@ -3093,12 +3053,12 @@ Function57bc: ; 57bc ret .ok - ld a, 0 + ld a, PERSON_ACTION_00 ld [PlayerAction], a ret ; 57ca -Function57ca: ; 57ca +SpawnInCustomFacing: ; 57ca ld hl, wPlayerSpriteSetupFlags bit 5, [hl] ret z @@ -3107,30 +3067,29 @@ Function57ca: ; 57ca rept 2 add a endr - jr Function57db + jr ContinueSpawnFacing ; 57d9 SpawnInFacingDown: ; 57d9 ld a, 0 - ; fallthrough -; 57db - -Function57db: ; 57db +ContinueSpawnFacing: ; 57db ld bc, PlayerStruct call SetSpriteDirection ret ; 57e2 -Function57e2: ; 57e2 +SetPlayerPalette: ; 57e2 ld a, d and %10000000 ret z + ld bc, 0 ; debug? ld hl, OBJECT_FACING add hl, bc ld a, [hl] or d ld [hl], a + ld a, d swap a and %00000111 @@ -3186,9 +3145,9 @@ SetFollowerIfVisible: ; 582c ld hl, OBJECT_MOVEMENTTYPE add hl, bc ld [hl], SPRITEMOVEDATA_FOLLOWING - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 0 + ld [hl], STEP_TYPE_00 ld a, [hObjectStructIndexBuffer] ld [wObjectFollow_Follower], a ret @@ -3326,9 +3285,9 @@ Function58e3: ; 58e3 add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 0 + ld [hl], STEP_TYPE_00 ret ; 5903 @@ -3345,9 +3304,9 @@ Function5903: ; 5903 add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], 0 + ld [hl], STEP_TYPE_00 ret .standing_movefns @@ -3357,7 +3316,7 @@ Function5903: ; 5903 db SPRITEMOVEDATA_STANDING_RIGHT ; 5920 -RefreshMapAppearDisappear:: ; 5920 +_UpdateSprites:: ; 5920 ld a, [VramState] bit 0, a ret z @@ -3367,29 +3326,29 @@ RefreshMapAppearDisappear:: ; 5920 push af ld a, 1 ld [hOAMUpdate], a - call Function5991 - call Function593a + call InitSprites + call .fill pop af ld [hOAMUpdate], a ret ; 593a -Function593a: ; 593a +.fill: ; 593a ld a, [VramState] bit 1, a - ld b, $a0 + ld b, SpritesEnd % $100 jr z, .ok - ld b, $70 + ld b, 28 * 4 .ok ld a, [hUsedSpriteIndex] cp b ret nc ld l, a - ld h, $c4 - ld de, OBJECT_FLAGS1 + ld h, Sprites / $100 + ld de, 4 ld a, b - ld c, $a0 + ld c, SCREEN_HEIGHT_PX + 16 .loop ld [hl], c add hl, de @@ -3444,26 +3403,29 @@ Function5958: ; 5958 ret ; 5991 -Function5991: ; 5991 - call Function59a4 - ld c, $30 - call Function59f3 - ld c, $20 - call Function59f3 - ld c, $10 - call Function59f3 +InitSprites: ; 5991 +PRIORITY_LOW EQU $10 +PRIORITY_NORM EQU $20 +PRIORITY_HIGH EQU $30 + call .DeterminePriorities + ld c, PRIORITY_HIGH + call .InitSpritesByPriority + ld c, PRIORITY_NORM + call .InitSpritesByPriority + ld c, PRIORITY_LOW + call .InitSpritesByPriority ret ; 59a4 -Function59a4: ; 59a4 +.DeterminePriorities: ; 59a4 xor a - ld hl, wMovementPointer - ld bc, 13 + ld hl, wc2eb + ld bc, NUM_OBJECT_STRUCTS call ByteFill ld d, 0 ld bc, ObjectStructs - ld hl, wMovementPointer + ld hl, wc2eb .loop push hl call GetObjectSprite @@ -3472,19 +3434,19 @@ Function59a4: ; 59a4 ld hl, OBJECT_FACING_STEP add hl, bc ld a, [hl] - cp -1 + cp STANDING jr z, .skip ; Define the sprite priority. - ld e, $10 + ld e, PRIORITY_LOW ld hl, OBJECT_FLAGS2 add hl, bc bit 0, [hl] jr nz, .add - ld e, $20 + ld e, PRIORITY_NORM bit 1, [hl] jr z, .add - ld e, $30 + ld e, PRIORITY_HIGH jr .add .skip @@ -3513,28 +3475,28 @@ Function59a4: ; 59a4 ret ; 59f3 -Function59f3: ; 59f3 +.InitSpritesByPriority: ; 59f3 ld hl, wMovementPointer -.next +.next_sprite ld a, [hli] ld d, a and $f0 ret z cp c - jr nz, .next + jr nz, .next_sprite push bc push hl ld a, d and $f call .GetObjectStructPointer - call .asm_5a0d + call .InitSprite pop hl pop bc - jr .next + jr .next_sprite ; 5a0d -.asm_5a0d: ; 5a0d +.InitSprite: ; 5a0d ld hl, OBJECT_SPRITE_TILE add hl, bc ld a, [hl] @@ -3608,7 +3570,7 @@ Function59f3: ; 59f3 ld hl, OBJECT_FACING_STEP add hl, bc ld a, [hl] - cp -1 + cp STANDING jp z, .done cp NUM_FACINGS jp nc, .done diff --git a/engine/map_setup.asm b/engine/map_setup.asm index 9c99df2f6..7444c7fbe 100644 --- a/engine/map_setup.asm +++ b/engine/map_setup.asm @@ -249,10 +249,10 @@ MapSetupCommands: ; 15440 dba PlayMapMusic ; 03 dba RestartMapMusic ; 04 dba FadeToMapMusic ; 05 - dba FadeOutMapAndMusic ; 06 + dba RotatePalettesRightMapAndMusic ; 06 dba EnterMapMusic ; 07 dba ForceMapMusic ; 08 - dba FadeInMusic ; 09 + dba RotatePalettesLeftMusic ; 09 dba LoadBlockData ; 0a dba LoadNeighboringBlockData ; 0b dba SaveScreen ; 0c @@ -311,10 +311,10 @@ SuspendMapAnims: ; 154d3 ; 154d7 LoadObjectsRunCallback_02: ; 154d7 - ld a, $2 + ld a, 2 call RunMapCallback callba LoadObjectMasks - callba Function8177 + callba InitializeVisibleSprites ret ; 154ea (5:54ea) @@ -417,14 +417,14 @@ RetainOldPalettes: ; 1556d callba _UpdateTimePals ret -FadeOutMapAndMusic: ; 15574 +RotatePalettesRightMapAndMusic: ; 15574 ld e, 0 ld a, [MusicFadeIDLo] ld d, 0 ld a, [MusicFadeIDHi] ld a, $4 ld [MusicFade], a - call FadeToWhite + call RotateThreePalettesRight ret ; 15587 diff --git a/engine/mart.asm b/engine/mart.asm index 2c3dac0e7..87c805c25 100755 --- a/engine/mart.asm +++ b/engine/mart.asm @@ -29,7 +29,7 @@ MartDialog: ; 15a61 ld a, 0 ld [EngineBuffer1], a xor a - ld [MovementAnimation], a + ld [EngineBuffer5], a call StandardMart ret ; 15a6e @@ -129,7 +129,7 @@ LoadMartPointer: ; 15b10 ld bc, 16 call ByteFill xor a - ld [MovementAnimation], a + ld [EngineBuffer5], a ld [wBargainShopFlags], a ld [FacingDirection], a ret @@ -157,10 +157,10 @@ endr StandardMart: ; 15b47 .loop - ld a, [MovementAnimation] + ld a, [EngineBuffer5] ld hl, .MartFunctions rst JumpTable - ld [MovementAnimation], a + ld [EngineBuffer5], a cp $ff jr nz, .loop ret @@ -377,7 +377,7 @@ BuyMenu: ; 15c62 .loop call BuyMenuLoop ; menu loop jr nc, .loop - call Function2b3c + call ReturnToCallingMenu ret ; 15c7d @@ -470,16 +470,16 @@ endr BuyMenuLoop: ; 15cef - callba Function24ae8 + callba PlaceMoneyTopRightOW call UpdateSprites ld hl, MenuDataHeader_Buy call CopyMenuDataHeader ld a, [wd045] ld [wMenuCursorBuffer], a ld a, [wd045 + 1] - ld [wd0e4], a + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] + ld a, [wMenuScrollPosition] ld [wd045 + 1], a ld a, [MenuSelection2] ld [wd045], a @@ -658,7 +658,7 @@ MenuDataHeader_Buy: ; 0x15e18 dbw 0, CurMart dba PlaceMenuItemName dba .PrintBCDPrices - dba Function244c3 + dba UpdateItemDescription ; 15e30 .PrintBCDPrices: ; 15e30 @@ -875,7 +875,7 @@ Function15ee0: ; 15ee0 .okay_to_sell ld hl, Text_Mart_SellHowMany call PrintText - callba Function24af8 + callba PlaceMoneyTopRightMenu callba Function24fe1 call ExitMenu jr c, .declined @@ -899,7 +899,7 @@ Function15ee0: ; 15ee0 ld hl, Text_Mart_SoldForAmount call PrintTextBoxText call PlayTransactionSound - callba Function24af0 + callba PlaceMoneyBottomLeftOW call JoyWaitAorB .declined diff --git a/engine/menu.asm b/engine/menu.asm index a1ec30b7a..6978a0e54 100755 --- a/engine/menu.asm +++ b/engine/menu.asm @@ -4,7 +4,7 @@ Function2400e:: ; 2400e rst FarCall call Function24085 call UpdateSprites - call Function321c + call ApplyTilemap call Function2408f ret ; 24022 @@ -16,7 +16,7 @@ Function24022:: ; 24022 call Function24085 callba MobileTextBorder call UpdateSprites - call Function321c + call ApplyTilemap call Function2408f ret ; 2403c @@ -28,7 +28,7 @@ Function2403c:: ; 2403c call Function24085 callba MobileTextBorder call UpdateSprites - call Function321c + call ApplyTilemap call Function2411a ld hl, wcfa5 set 7, [hl] diff --git a/engine/money.asm b/engine/money.asm new file mode 100755 index 000000000..5935a23e7 --- /dev/null +++ b/engine/money.asm @@ -0,0 +1,209 @@ +GiveMoney:: ; 15fd7 + ld a, $3 + call AddMoney + ld bc, MaxMoney + ld a, $3 + call CompareMoney + jr z, .asm_15ff5 + jr c, .asm_15ff5 + ld hl, MaxMoney + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.asm_15ff5 + and a + ret +; 15ff7 + +MaxMoney: ; 15ff7 + dt 999999 +; 15ffa + + +TakeMoney:: ; 15ffa + ld a, 3 + call SubtractMoney + jr nc, .asm_16009 + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + scf + ret + +.asm_16009 + and a + ret +; 1600b + +CompareMoney:: ; 1600b + ld a, $3 +CompareFunds: ; 1600d + push hl + push de + push bc + ld h, b + ld l, c + ld c, $0 + ld b, a +.loop1 + dec a + jr z, .done + inc de + inc hl + jr .loop1 + +.done + and a +.loop2 + ld a, [de] + sbc [hl] + jr z, .okay + inc c + +.okay + dec de + dec hl + dec b + jr nz, .loop2 + jr c, .set_carry + ld a, c + and a + jr .skip_carry + +.set_carry + ld a, $1 + and a + scf + +.skip_carry + pop bc + pop de + pop hl + ret +; 16035 + +SubtractMoney: ; 16035 + ld a, 3 +SubtractFunds: ; 16037 + push hl + push de + push bc + ld h, b + ld l, c + ld b, a + ld c, 0 +.loop + dec a + jr z, .done + inc de + inc hl + jr .loop + +.done + and a +.loop2 + ld a, [de] + sbc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .loop2 + pop bc + pop de + pop hl + ret +; 16053 + +AddMoney: ; 16053 + ld a, $3 +AddFunds: ; 16055 + push hl + push de + push bc + ld h, b + ld l, c + ld b, a +.loop1 + dec a + jr z, .done + inc de + inc hl + jr .loop1 + +.done + and a +.loop2 + ld a, [de] + adc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .loop2 + pop bc + pop de + pop hl + ret +; 1606f + +GiveCoins:: ; 1606f + ld a, 2 + ld de, Coins + call AddFunds + ld a, 2 + ld bc, .maxcoins + call CompareFunds + jr c, .not_maxed + ld hl, .maxcoins + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.not_maxed + and a + ret +; 1608d + +.maxcoins: ; 1608d + bigdw 9999 +; 1608f + + +TakeCoins:: ; 1608f + ld a, 2 + ld de, Coins + call SubtractFunds + jr nc, .asm_1609f + xor a + ld [de], a + inc de + ld [de], a + scf + ret + +.asm_1609f + and a + ret +; 160a1 + +CheckCoins:: ; 160a1 + ld a, $2 + ld de, Coins + jp CompareFunds +; 160a9 diff --git a/engine/more_phone_scripts.asm b/engine/more_phone_scripts.asm index 5bc1f1560..f0c835e92 100644 --- a/engine/more_phone_scripts.asm +++ b/engine/more_phone_scripts.asm @@ -56,468 +56,468 @@ UnknownScript_0xa0074: UnknownScript_0xa007c: checkcode VAR_CALLERID - if_equal $5, UnknownScript_0xa00c2 - if_equal $b, UnknownScript_0xa00c8 - if_equal $d, UnknownScript_0xa00ce - if_equal $f, UnknownScript_0xa00d4 - if_equal $10, UnknownScript_0xa00da - if_equal $11, UnknownScript_0xa00e0 - if_equal $13, UnknownScript_0xa00e6 - if_equal $14, UnknownScript_0xa00ec - if_equal $17, UnknownScript_0xa00f2 - if_equal $18, UnknownScript_0xa00f8 - if_equal $1b, UnknownScript_0xa00fe - if_equal $1c, UnknownScript_0xa0104 - if_equal $1d, UnknownScript_0xa010a - if_equal $1e, UnknownScript_0xa0110 - if_equal $20, UnknownScript_0xa0116 - if_equal $21, UnknownScript_0xa011c - if_equal $23, UnknownScript_0xa0122 - -UnknownScript_0xa00c2: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1740c0 keeptextopen end -UnknownScript_0xa00c8: +.Gaven: farwritetext UnknownText_0x174a24 keeptextopen end -UnknownScript_0xa00ce: +.Jose: farwritetext UnknownText_0x174f2f keeptextopen end -UnknownScript_0xa00d4: +.Joey: farwritetext UnknownText_0x175530 keeptextopen end -UnknownScript_0xa00da: +.Wade: farwritetext UnknownText_0x1757d4 keeptextopen end -UnknownScript_0xa00e0: +.Ralph: farwritetext UnknownText_0x175bc4 keeptextopen end -UnknownScript_0xa00e6: +.Anthony: farwritetext UnknownText_0x176a2f keeptextopen end -UnknownScript_0xa00ec: +.Todd: farwritetext UnknownText_0x176e5d keeptextopen end -UnknownScript_0xa00f2: +.Arnie: farwritetext UnknownText_0x649dc keeptextopen end -UnknownScript_0xa00f8: +.Alan: farwritetext UnknownText_0x64cbd keeptextopen end -UnknownScript_0xa00fe: +.Chad: farwritetext UnknownText_0x65271 keeptextopen end -UnknownScript_0xa0104: +.Derek: farwritetext UnknownText_0x65ab2 keeptextopen end -UnknownScript_0xa010a: +.Tully: farwritetext UnknownText_0x65de4 keeptextopen end -UnknownScript_0xa0110: +.Brent: farwritetext UnknownText_0x660be keeptextopen end -UnknownScript_0xa0116: +.Vance: farwritetext UnknownText_0x66980 keeptextopen end -UnknownScript_0xa011c: +.Wilton: farwritetext UnknownText_0x66afc keeptextopen end -UnknownScript_0xa0122: +.Parry: farwritetext UnknownText_0x66f9f keeptextopen end UnknownScript_0xa0128: checkcode VAR_CALLERID - if_equal $6, UnknownScript_0xa014a - if_equal $c, UnknownScript_0xa0150 - if_equal $e, UnknownScript_0xa0156 - if_equal $12, UnknownScript_0xa015c - if_equal $15, UnknownScript_0xa0162 - if_equal $1a, UnknownScript_0xa0168 - if_equal $1f, UnknownScript_0xa016e - if_equal $24, UnknownScript_0xa0174 - -UnknownScript_0xa014a: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x174688 keeptextopen end -UnknownScript_0xa0150: +.Beth: farwritetext UnknownText_0x174c7f keeptextopen end -UnknownScript_0xa0156: +.Reena: farwritetext UnknownText_0x1752f5 keeptextopen end -UnknownScript_0xa015c: +.Liz: farwritetext UnknownText_0x175fda keeptextopen end -UnknownScript_0xa0162: +.Gina: farwritetext UnknownText_0x1771fd keeptextopen end -UnknownScript_0xa0168: +.Dana: farwritetext UnknownText_0x64f74 keeptextopen end -UnknownScript_0xa016e: +.Tiffany: farwritetext UnknownText_0x665ad keeptextopen end -UnknownScript_0xa0174: +.Erin: farwritetext UnknownText_0x6717a keeptextopen end UnknownScript_0xa017a: checkcode VAR_CALLERID - if_equal $5, UnknownScript_0xa01c0 - if_equal $b, UnknownScript_0xa01c6 - if_equal $d, UnknownScript_0xa01cc - if_equal $f, UnknownScript_0xa01d2 - if_equal $10, UnknownScript_0xa01d8 - if_equal $11, UnknownScript_0xa01de - if_equal $13, UnknownScript_0xa01e4 - if_equal $14, UnknownScript_0xa01ea - if_equal $17, UnknownScript_0xa01f0 - if_equal $18, UnknownScript_0xa01f6 - if_equal $1b, UnknownScript_0xa01fc - if_equal $1c, UnknownScript_0xa0202 - if_equal $1d, UnknownScript_0xa0208 - if_equal $1e, UnknownScript_0xa020e - if_equal $20, UnknownScript_0xa0214 - if_equal $21, UnknownScript_0xa021a - if_equal $23, UnknownScript_0xa0220 - -UnknownScript_0xa01c0: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x174106 keeptextopen end -UnknownScript_0xa01c6: +.Gaven: farwritetext UnknownText_0x174a80 keeptextopen end -UnknownScript_0xa01cc: +.Jose: farwritetext UnknownText_0x174f90 keeptextopen end -UnknownScript_0xa01d2: +.Joey: farwritetext UnknownText_0x175591 keeptextopen end -UnknownScript_0xa01d8: +.Wade: farwritetext UnknownText_0x175869 keeptextopen end -UnknownScript_0xa01de: +.Ralph: farwritetext UnknownText_0x175c24 keeptextopen end -UnknownScript_0xa01e4: +.Anthony: farwritetext UnknownText_0x176aef keeptextopen end -UnknownScript_0xa01ea: +.Todd: farwritetext UnknownText_0x176e9c keeptextopen end -UnknownScript_0xa01f0: +.Arnie: farwritetext UnknownText_0x64a13 keeptextopen end -UnknownScript_0xa01f6: +.Alan: farwritetext UnknownText_0x64cf3 keeptextopen end -UnknownScript_0xa01fc: +.Chad: farwritetext UnknownText_0x65318 keeptextopen end -UnknownScript_0xa0202: +.Derek: farwritetext UnknownText_0x65b29 keeptextopen end -UnknownScript_0xa0208: +.Tully: farwritetext UnknownText_0x65e42 keeptextopen end -UnknownScript_0xa020e: +.Brent: farwritetext UnknownText_0x6613c keeptextopen end -UnknownScript_0xa0214: +.Vance: farwritetext UnknownText_0x669b2 keeptextopen end -UnknownScript_0xa021a: +.Wilton: farwritetext UnknownText_0x66b3e keeptextopen end -UnknownScript_0xa0220: +.Parry: farwritetext UnknownText_0x66fc0 keeptextopen end UnknownScript_0xa0226: checkcode VAR_CALLERID - if_equal $6, UnknownScript_0xa0248 - if_equal $c, UnknownScript_0xa024e - if_equal $e, UnknownScript_0xa0254 - if_equal $12, UnknownScript_0xa025a - if_equal $15, UnknownScript_0xa0260 - if_equal $1a, UnknownScript_0xa0266 - if_equal $1f, UnknownScript_0xa026c - if_equal $24, UnknownScript_0xa0272 - -UnknownScript_0xa0248: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1746c3 keeptextopen end -UnknownScript_0xa024e: +.Beth: farwritetext UnknownText_0x174cf6 keeptextopen end -UnknownScript_0xa0254: +.Reena: farwritetext UnknownText_0x17536b keeptextopen end -UnknownScript_0xa025a: +.Liz: farwritetext UnknownText_0x17602d keeptextopen end -UnknownScript_0xa0260: +.Gina: farwritetext UnknownText_0x177237 keeptextopen end -UnknownScript_0xa0266: +.Dana: farwritetext UnknownText_0x64fb2 keeptextopen end -UnknownScript_0xa026c: +.Tiffany: farwritetext UnknownText_0x66605 keeptextopen end -UnknownScript_0xa0272: +.Erin: farwritetext UnknownText_0x671a4 keeptextopen end UnknownScript_0xa0278: checkcode VAR_CALLERID - if_equal $5, UnknownScript_0xa02be - if_equal $b, UnknownScript_0xa02c4 - if_equal $d, UnknownScript_0xa02ca - if_equal $f, UnknownScript_0xa02d0 - if_equal $10, UnknownScript_0xa02d6 - if_equal $11, UnknownScript_0xa02dc - if_equal $13, UnknownScript_0xa02e2 - if_equal $14, UnknownScript_0xa02e8 - if_equal $17, UnknownScript_0xa02ee - if_equal $18, UnknownScript_0xa02f4 - if_equal $1b, UnknownScript_0xa02fa - if_equal $1c, UnknownScript_0xa0300 - if_equal $1d, UnknownScript_0xa0306 - if_equal $1e, UnknownScript_0xa030c - if_equal $20, UnknownScript_0xa0312 - if_equal $21, UnknownScript_0xa0318 - if_equal $23, UnknownScript_0xa031e - -UnknownScript_0xa02be: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x174165 keeptextopen end -UnknownScript_0xa02c4: +.Gaven: farwritetext UnknownText_0x174b2d keeptextopen end -UnknownScript_0xa02ca: +.Jose: farwritetext UnknownText_0x174ffd keeptextopen end -UnknownScript_0xa02d0: +.Joey: farwritetext UnknownText_0x175611 keeptextopen end -UnknownScript_0xa02d6: +.Wade: farwritetext UnknownText_0x1758e4 keeptextopen end -UnknownScript_0xa02dc: +.Ralph: farwritetext UnknownText_0x175c9f keeptextopen end -UnknownScript_0xa02e2: +.Anthony: farwritetext UnknownText_0x176b45 keeptextopen end -UnknownScript_0xa02e8: +.Todd: farwritetext UnknownText_0x176eee keeptextopen end -UnknownScript_0xa02ee: +.Arnie: farwritetext UnknownText_0x64a71 keeptextopen end -UnknownScript_0xa02f4: +.Alan: farwritetext UnknownText_0x64d4f keeptextopen end -UnknownScript_0xa02fa: +.Chad: farwritetext UnknownText_0x65399 keeptextopen end -UnknownScript_0xa0300: +.Derek: farwritetext UnknownText_0x65bc8 keeptextopen end -UnknownScript_0xa0306: +.Tully: farwritetext UnknownText_0x65eac keeptextopen end -UnknownScript_0xa030c: +.Brent: farwritetext UnknownText_0x6618c keeptextopen end -UnknownScript_0xa0312: +.Vance: farwritetext UnknownText_0x669ed keeptextopen end -UnknownScript_0xa0318: +.Wilton: farwritetext UnknownText_0x66b8f keeptextopen end -UnknownScript_0xa031e: +.Parry: farwritetext UnknownText_0x67001 keeptextopen end UnknownScript_0xa0324: checkcode VAR_CALLERID - if_equal $6, UnknownScript_0xa0346 - if_equal $c, UnknownScript_0xa034c - if_equal $e, UnknownScript_0xa0352 - if_equal $12, UnknownScript_0xa0358 - if_equal $15, UnknownScript_0xa035e - if_equal $1a, UnknownScript_0xa0364 - if_equal $1f, UnknownScript_0xa036a - if_equal $24, UnknownScript_0xa0370 - -UnknownScript_0xa0346: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x174734 keeptextopen end -UnknownScript_0xa034c: +.Beth: farwritetext UnknownText_0x174d86 keeptextopen end -UnknownScript_0xa0352: +.Reena: farwritetext UnknownText_0x1753c5 keeptextopen end -UnknownScript_0xa0358: +.Liz: farwritetext UnknownText_0x176095 keeptextopen end -UnknownScript_0xa035e: +.Gina: farwritetext UnknownText_0x177297 keeptextopen end -UnknownScript_0xa0364: +.Dana: farwritetext UnknownText_0x6501c keeptextopen end -UnknownScript_0xa036a: +.Tiffany: farwritetext UnknownText_0x66688 keeptextopen end -UnknownScript_0xa0370: +.Erin: farwritetext UnknownText_0x671eb keeptextopen end @@ -532,150 +532,150 @@ UnknownScript_0xa037e: UnknownScript_0xa0386: checkcode VAR_CALLERID - if_equal $5, UnknownScript_0xa03cc - if_equal $7, UnknownScript_0xa03d2 - if_equal $b, UnknownScript_0xa03d8 - if_equal $d, UnknownScript_0xa03de - if_equal $f, UnknownScript_0xa03e4 - if_equal $10, UnknownScript_0xa03ea - if_equal $11, UnknownScript_0xa03f0 - if_equal $13, UnknownScript_0xa03f6 - if_equal $14, UnknownScript_0xa03fc - if_equal $17, UnknownScript_0xa0402 - if_equal $18, UnknownScript_0xa0408 - if_equal $1b, UnknownScript_0xa040e - if_equal $1d, UnknownScript_0xa0414 - if_equal $1e, UnknownScript_0xa041a - if_equal $20, UnknownScript_0xa0420 - if_equal $21, UnknownScript_0xa0426 - if_equal $23, UnknownScript_0xa042c - -UnknownScript_0xa03cc: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1741e1 keeptextopen end -UnknownScript_0xa03d2: +.Huey: farwritetext UnknownText_0x1748ea keeptextopen end -UnknownScript_0xa03d8: +.Gaven: farwritetext UnknownText_0x174bc5 keeptextopen end -UnknownScript_0xa03de: +.Jose: farwritetext UnknownText_0x17507d keeptextopen end -UnknownScript_0xa03e4: +.Joey: farwritetext UnknownText_0x175693 keeptextopen end -UnknownScript_0xa03ea: +.Wade: farwritetext UnknownText_0x175976 keeptextopen end -UnknownScript_0xa03f0: +.Ralph: farwritetext UnknownText_0x175d40 keeptextopen end -UnknownScript_0xa03f6: +.Anthony: farwritetext UnknownText_0x176bee keeptextopen end -UnknownScript_0xa03fc: +.Todd: farwritetext UnknownText_0x176f60 keeptextopen end -UnknownScript_0xa0402: +.Arnie: farwritetext UnknownText_0x64ada keeptextopen end -UnknownScript_0xa0408: +.Alan: farwritetext UnknownText_0x64da4 keeptextopen end -UnknownScript_0xa040e: +.Chad: farwritetext UnknownText_0x65419 keeptextopen end -UnknownScript_0xa0414: +.Tully: farwritetext UnknownText_0x65f17 keeptextopen end -UnknownScript_0xa041a: +.Brent: farwritetext UnknownText_0x66214 keeptextopen end -UnknownScript_0xa0420: +.Vance: farwritetext UnknownText_0x66a3a keeptextopen end -UnknownScript_0xa0426: +.Wilton: farwritetext UnknownText_0x66bf3 keeptextopen end -UnknownScript_0xa042c: +.Parry: farwritetext UnknownText_0x67096 keeptextopen end UnknownScript_0xa0432: checkcode VAR_CALLERID - if_equal $c, UnknownScript_0xa0450 - if_equal $e, UnknownScript_0xa0456 - if_equal $12, UnknownScript_0xa045c - if_equal $15, UnknownScript_0xa0462 - if_equal $1a, UnknownScript_0xa0468 - if_equal $1f, UnknownScript_0xa046e - if_equal $24, UnknownScript_0xa0474 - -UnknownScript_0xa0450: + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beth: farwritetext UnknownText_0x174e4e keeptextopen end -UnknownScript_0xa0456: +.Reena: farwritetext UnknownText_0x17543a keeptextopen end -UnknownScript_0xa045c: +.Liz: farwritetext UnknownText_0x17610a keeptextopen end -UnknownScript_0xa0462: +.Gina: farwritetext UnknownText_0x1772e2 keeptextopen end -UnknownScript_0xa0468: +.Dana: farwritetext UnknownText_0x65091 keeptextopen end -UnknownScript_0xa046e: +.Tiffany: farwritetext UnknownText_0x66730 keeptextopen end -UnknownScript_0xa0474: +.Erin: farwritetext UnknownText_0x6722e keeptextopen end @@ -690,147 +690,147 @@ UnknownScript_0xa047f: UnknownScript_0xa0484: checkcode VAR_CALLERID - if_equal $5, UnknownScript_0xa04d6 - if_equal $7, UnknownScript_0xa04db - if_equal $b, UnknownScript_0xa04e0 - if_equal $d, UnknownScript_0xa04e5 - if_equal $f, UnknownScript_0xa04ea - if_equal $10, UnknownScript_0xa04ef - if_equal $11, UnknownScript_0xa04f4 - if_equal $13, UnknownScript_0xa04f9 - if_equal $14, UnknownScript_0xa04fe - if_equal $16, UnknownScript_0xa0503 - if_equal $17, UnknownScript_0xa0508 - if_equal $18, UnknownScript_0xa050d - if_equal $1b, UnknownScript_0xa0512 - if_equal $1c, UnknownScript_0xa0517 - if_equal $1d, UnknownScript_0xa051c - if_equal $1e, UnknownScript_0xa0521 - if_equal $20, UnknownScript_0xa0526 - if_equal $21, UnknownScript_0xa052b - if_equal $22, UnknownScript_0xa0530 - if_equal $23, UnknownScript_0xa0535 - -UnknownScript_0xa04d6: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x174251 end -UnknownScript_0xa04db: +.Huey: farwritetext UnknownText_0x174962 end -UnknownScript_0xa04e0: +.Gaven: farwritetext UnknownText_0x174c0e end -UnknownScript_0xa04e5: +.Jose: farwritetext UnknownText_0x175106 end -UnknownScript_0xa04ea: +.Joey: farwritetext UnknownText_0x17570a end -UnknownScript_0xa04ef: +.Wade: farwritetext UnknownText_0x1759e7 end -UnknownScript_0xa04f4: +.Ralph: farwritetext UnknownText_0x175db7 end -UnknownScript_0xa04f9: +.Anthony: farwritetext UnknownText_0x176c47 end -UnknownScript_0xa04fe: +.Todd: farwritetext UnknownText_0x176fdb end -UnknownScript_0xa0503: +.Irwin: farwritetext UnknownText_0x64000 end -UnknownScript_0xa0508: +.Arnie: farwritetext UnknownText_0x64b48 end -UnknownScript_0xa050d: +.Alan: farwritetext UnknownText_0x64e1f end -UnknownScript_0xa0512: +.Chad: farwritetext UnknownText_0x65471 end -UnknownScript_0xa0517: +.Derek: farwritetext UnknownText_0x65c4e end -UnknownScript_0xa051c: +.Tully: farwritetext UnknownText_0x65f6e end -UnknownScript_0xa0521: +.Brent: farwritetext UnknownText_0x662a9 end -UnknownScript_0xa0526: +.Vance: farwritetext UnknownText_0x66a93 end -UnknownScript_0xa052b: +.Wilton: farwritetext UnknownText_0x66c58 end -UnknownScript_0xa0530: +.Kenji: farwritetext UnknownText_0x66dab end -UnknownScript_0xa0535: +.Parry: farwritetext UnknownText_0x670eb end UnknownScript_0xa053a: checkcode VAR_CALLERID - if_equal $6, UnknownScript_0xa055c - if_equal $c, UnknownScript_0xa0561 - if_equal $e, UnknownScript_0xa0566 - if_equal $12, UnknownScript_0xa056b - if_equal $15, UnknownScript_0xa0570 - if_equal $1a, UnknownScript_0xa0575 - if_equal $1f, UnknownScript_0xa057a - if_equal $24, UnknownScript_0xa057f - -UnknownScript_0xa055c: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1747ac end -UnknownScript_0xa0561: +.Beth: farwritetext UnknownText_0x174eb7 end -UnknownScript_0xa0566: +.Reena: farwritetext UnknownText_0x175488 end -UnknownScript_0xa056b: +.Liz: farwritetext UnknownText_0x17620a end -UnknownScript_0xa0570: +.Gina: farwritetext UnknownText_0x177361 end -UnknownScript_0xa0575: +.Dana: farwritetext UnknownText_0x650e2 end -UnknownScript_0xa057a: +.Tiffany: farwritetext UnknownText_0x667f7 end -UnknownScript_0xa057f: +.Erin: farwritetext UnknownText_0x67281 end @@ -856,15 +856,15 @@ UnknownScript_0xa05a0: UnknownScript_0xa05a4: checkcode VAR_CALLERID - if_equal $10, UnknownScript_0xa05ae - if_equal $1c, UnknownScript_0xa05b6 + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_POKEFANM_DEREK, .Derek -UnknownScript_0xa05ae: +.Wade: farwritetext UnknownText_0x1759f7 keeptextopen jump UnknownScript_0xa0484 -UnknownScript_0xa05b6: +.Derek: farwritetext UnknownText_0x65c66 keeptextopen jump UnknownScript_0xa0484 @@ -896,57 +896,57 @@ UnknownScript_0xa05de: UnknownScript_0xa05e6: checkcode VAR_CALLERID - if_equal $d, UnknownScript_0xa0600 - if_equal $10, UnknownScript_0xa0605 - if_equal $18, UnknownScript_0xa060a - if_equal $1c, UnknownScript_0xa060f - if_equal $1d, UnknownScript_0xa0614 - if_equal $21, UnknownScript_0xa0619 - -UnknownScript_0xa0600: + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_FISHER_WILTON, .Wilton + +.Jose: farwritetext UnknownText_0x175116 end -UnknownScript_0xa0605: +.Wade: farwritetext UnknownText_0x175a60 end -UnknownScript_0xa060a: +.Alan: farwritetext UnknownText_0x64e2f end -UnknownScript_0xa060f: +.Derek: farwritetext UnknownText_0x65cf9 end -UnknownScript_0xa0614: +.Tully: farwritetext UnknownText_0x65f88 end -UnknownScript_0xa0619: +.Wilton: farwritetext UnknownText_0x66c6b end UnknownScript_0xa061e: checkcode VAR_CALLERID - if_equal $6, UnknownScript_0xa0630 - if_equal $15, UnknownScript_0xa0635 - if_equal $1a, UnknownScript_0xa063a - if_equal $1f, UnknownScript_0xa063f + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany -UnknownScript_0xa0630: +.Beverly: farwritetext UnknownText_0x1747cc end -UnknownScript_0xa0635: +.Gina: farwritetext UnknownText_0x1773e7 end -UnknownScript_0xa063a: +.Dana: farwritetext UnknownText_0x650ec end -UnknownScript_0xa063f: +.Tiffany: farwritetext UnknownText_0x66801 end diff --git a/engine/movement.asm b/engine/movement.asm index 21dd89e9f..86a2eb6fb 100644 --- a/engine/movement.asm +++ b/engine/movement.asm @@ -59,7 +59,7 @@ MovementPointers: ; 5075 dw Movement_39 ; 39 dw Movement_remove_fixed_facing ; 3a dw Movement_fix_facing ; 3b - dw Movement_3c ; 3c + dw Movement_show_person ; 3c dw Movement_hide_person ; 3d dw Movement_step_sleep_1 ; 3e dw Movement_step_sleep_2 ; 3f @@ -78,8 +78,8 @@ MovementPointers: ; 5075 dw Movement_teleport_from ; 4c dw Movement_teleport_to ; 4d dw Movement_skyfall ; 4e - dw Movement_step_wait5 ; 4f - dw Movement_50 ; 50 + dw Movement_step_dig ; 4f + dw Movement_step_bump ; 50 dw Movement_fish_got_bite ; 51 dw Movement_fish_cast_rod ; 52 dw Movement_hide_emote ; 53 @@ -87,67 +87,67 @@ MovementPointers: ; 5075 dw Movement_step_shake ; 55 dw Movement_56 ; 56 dw Movement_rock_smash ; 57 - dw Movement_58 ; 58 + dw Movement_return_dig ; 58 dw Movement_59 ; 59 ; 5129 Movement_teleport_from: ; 5129 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $c + ld [hl], STEP_TYPE_TELEPORT_FROM ret ; 5130 Movement_teleport_to: ; 5130 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $d + ld [hl], STEP_TYPE_TELEPORT_TO ret ; 5137 Movement_skyfall: ; 5137 - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $e + ld [hl], STEP_TYPE_SKYFALL ret ; 513e Movement_59: ; 513e - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $19 + ld [hl], STEP_TYPE_19 ret ; 5145 -Movement_step_wait5: ; 5145 +Movement_step_dig: ; 5145 call GetSpriteDirection rlca rlca - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], a - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $4 + ld [hl], PERSON_ACTION_SPIN call GetMovementByte ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $3 + ld [hl], STEP_TYPE_03 ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING ret ; 516a -Movement_58: ; 516a +Movement_return_dig: ; 516a call GetSpriteDirection rlca rlca - ld hl, OBJECT_12 + ld hl, OBJECT_STEP_FRAME add hl, bc ld [hl], a call GetMovementByte @@ -157,19 +157,19 @@ Movement_58: ; 516a ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $12 + ld [hl], STEP_TYPE_RETURN_DIG ret ; 5189 Movement_fish_got_bite: ; 5189 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $6 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_FISHING + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $10 + ld [hl], STEP_TYPE_GOT_BITE ret ; 5196 @@ -178,22 +178,22 @@ Movement_rock_smash: ; 5196 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $1 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_STAND + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $11 + ld [hl], STEP_TYPE_ROCK_SMASH ret ; 51ab Movement_fish_cast_rod: ; 51ab - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $6 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_FISHING + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $1 + ld [hl], STEP_TYPE_STANDING ret ; 51b8 @@ -217,9 +217,9 @@ Movement_step_end: ; 51c1 ld hl, VramState res 7, [hl] - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $1 + ld [hl], STEP_TYPE_STANDING ret ; 51db @@ -238,9 +238,9 @@ Movement_48: ; 51db add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $3 + ld [hl], STEP_TYPE_03 ld hl, VramState res 7, [hl] @@ -262,13 +262,13 @@ Movement_remove_person: ; 51fd ; 5210 Movement_4b: ; 5210 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $1 + ld [hl], PERSON_ACTION_STAND - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $4 + ld [hl], STEP_TYPE_04 ld hl, VramState res 7, [hl] @@ -276,56 +276,56 @@ Movement_4b: ; 5210 ; 5222 Movement_step_sleep_1: ; 5222 - ld a, $1 - jr Function5247 + ld a, 1 + jr Movement_step_sleep_common Movement_step_sleep_2: ; 5226 - ld a, $2 - jr Function5247 + ld a, 2 + jr Movement_step_sleep_common Movement_step_sleep_3: ; 522a - ld a, $3 - jr Function5247 + ld a, 3 + jr Movement_step_sleep_common Movement_step_sleep_4: ; 522e - ld a, $4 - jr Function5247 + ld a, 4 + jr Movement_step_sleep_common Movement_step_sleep_5: ; 5232 - ld a, $5 - jr Function5247 + ld a, 5 + jr Movement_step_sleep_common Movement_step_sleep_6: ; 5236 - ld a, $6 - jr Function5247 + ld a, 6 + jr Movement_step_sleep_common Movement_step_sleep_7: ; 523a - ld a, $7 - jr Function5247 + ld a, 7 + jr Movement_step_sleep_common Movement_step_sleep_8: ; 523e - ld a, $8 - jr Function5247 + ld a, 8 + jr Movement_step_sleep_common Movement_step_sleep: ; 5242 ; parameters: ; duration (DecimalParam) call GetMovementByte - jr Function5247 + jr Movement_step_sleep_common -Function5247: ; 5247 +Movement_step_sleep_common: ; 5247 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $3 + ld [hl], STEP_TYPE_03 - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $1 + ld [hl], PERSON_ACTION_STAND ld hl, OBJECT_DIRECTION_WALKING add hl, bc @@ -333,17 +333,20 @@ Function5247: ; 5247 ret ; 525f -Movement_50: ; 525f - ld a, $1 +Movement_step_bump: ; 525f + ld a, 1 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $b - ld hl, OBJECT_11 + ld [hl], STEP_TYPE_BUMP + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $3 + ld [hl], PERSON_ACTION_BUMP + ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING @@ -351,16 +354,19 @@ Movement_50: ; 525f ; 5279 Movement_56: ; 5279 - ld a, $18 + ld a, 24 ld hl, OBJECT_STEP_DURATION add hl, bc ld [hl], a - ld hl, OBJECT_09 + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $3 - ld hl, OBJECT_11 + ld [hl], STEP_TYPE_03 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $b + ld [hl], PERSON_ACTION_0B + ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING @@ -370,52 +376,52 @@ Movement_56: ; 5279 Movement_38: ; 5293 ld hl, OBJECT_FLAGS1 add hl, bc - res 3, [hl] + res SLIDING, [hl] jp ContinueReadingMovement ; 529c Movement_39: ; 529c ld hl, OBJECT_FLAGS1 add hl, bc - set 3, [hl] + set SLIDING, [hl] jp ContinueReadingMovement ; 52a5 Movement_remove_fixed_facing: ; 52a5 ld hl, OBJECT_FLAGS1 add hl, bc - res 2, [hl] + res FIXED_FACING, [hl] jp ContinueReadingMovement ; 52ae Movement_fix_facing: ; 52ae ld hl, OBJECT_FLAGS1 add hl, bc - set 2, [hl] + set FIXED_FACING, [hl] jp ContinueReadingMovement ; 52b7 -Movement_3c: ; 52b7 +Movement_show_person: ; 52b7 ld hl, OBJECT_FLAGS1 add hl, bc - res 0, [hl] + res INVISIBLE, [hl] jp ContinueReadingMovement ; 52c0 Movement_hide_person: ; 52c0 ld hl, OBJECT_FLAGS1 add hl, bc - set 0, [hl] + set INVISIBLE, [hl] jp ContinueReadingMovement ; 52c9 Movement_hide_emote: ; 52c9 - call Function5579 + call DespawnEmote jp ContinueReadingMovement ; 52cf Movement_show_emote: ; 52cf - call Function5547 + call SpawnEmote jp ContinueReadingMovement ; 52d5 @@ -424,7 +430,7 @@ Movement_step_shake: ; 52d5 ; displacement (DecimalParam) call GetMovementByte - call Function5565 + call ShakeScreen jp ContinueReadingMovement ; 52de @@ -448,9 +454,11 @@ TurnHead: ; 52ee ld hl, OBJECT_FACING add hl, bc ld [hl], a - ld hl, OBJECT_11 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $1 + ld [hl], PERSON_ACTION_STAND + ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING @@ -721,70 +729,76 @@ HalfStep: ; 5400 ld hl, OBJECT_29 add hl, bc ld [hl], a - ld hl, OBJECT_11 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $2 - ld hl, OBJECT_09 + ld [hl], PERSON_ACTION_STEP + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $a + ld [hl], STEP_TYPE_HALF_STEP ret ; 5412 NormalStep: ; 5412 call Function4690 call Function463f - ld hl, OBJECT_11 + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $2 - ld hl, OBJECT_STANDING_TILE + ld [hl], PERSON_ACTION_STEP + + ld hl, OBJECT_NEXT_TILE add hl, bc ld a, [hl] call CheckSuperTallGrassTile - jr z, .asm_542d + jr z, .shake_grass - call Function1875 - jr c, .asm_5430 + call CheckGrassTile + jr c, .skip_grass -.asm_542d - call Function5556 +.shake_grass + call ShakeGrass -.asm_5430 - ld hl, wd4cf +.skip_grass + ld hl, wCenteredObject ld a, [hMapObjectIndexBuffer] cp [hl] - jr z, .asm_543f + jr z, .player - ld hl, OBJECT_09 + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $2 + ld [hl], STEP_TYPE_NPC_WALK ret -.asm_543f - ld hl, OBJECT_09 +.player + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $6 + ld [hl], STEP_TYPE_PLAYER_WALK ret ; 5446 TurningStep: ; 5446 call Function4690 call Function463f - ld hl, OBJECT_11 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $4 - ld hl, wd4cf + ld [hl], PERSON_ACTION_SPIN + + ld hl, wCenteredObject ld a, [hMapObjectIndexBuffer] cp [hl] - jr z, .asm_5461 - ld hl, OBJECT_09 + jr z, .player + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $2 + ld [hl], STEP_TYPE_NPC_WALK ret -.asm_5461 - ld hl, OBJECT_09 +.player + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $6 + ld [hl], STEP_TYPE_PLAYER_WALK ret ; 5468 @@ -792,22 +806,25 @@ TurningStep: ; 5446 SlideStep: ; 5468 call Function4690 call Function463f - ld hl, OBJECT_11 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $1 - ld hl, wd4cf + ld [hl], PERSON_ACTION_STAND + + ld hl, wCenteredObject ld a, [hMapObjectIndexBuffer] cp [hl] - jr z, .asm_5483 - ld hl, OBJECT_09 + jr z, .player + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $2 + ld [hl], STEP_TYPE_NPC_WALK ret -.asm_5483 - ld hl, OBJECT_09 +.player + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $6 + ld [hl], STEP_TYPE_PLAYER_WALK ret ; 548a @@ -817,25 +834,30 @@ JumpStep: ; 548a ld hl, OBJECT_31 add hl, bc ld [hl], $0 + ld hl, OBJECT_FLAGS2 add hl, bc res 3, [hl] - ld hl, OBJECT_11 + + ld hl, OBJECT_ACTION add hl, bc - ld [hl], $2 - call Function5529 - ld hl, wd4cf + ld [hl], PERSON_ACTION_STEP + + call SpawnShadow + + ld hl, wCenteredObject ld a, [hMapObjectIndexBuffer] cp [hl] - jr z, .asm_54b1 - ld hl, OBJECT_09 + jr z, .player + + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $8 + ld [hl], STEP_TYPE_NPC_JUMP ret -.asm_54b1 - ld hl, OBJECT_09 +.player + ld hl, OBJECT_STEP_TYPE add hl, bc - ld [hl], $9 + ld [hl], STEP_TYPE_PLAYER_JUMP ret ; 54b8 diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm new file mode 100755 index 000000000..43cbe52d1 --- /dev/null +++ b/engine/mysterygift.asm @@ -0,0 +1,1702 @@ +DoMysteryGift: ; 1048ba (41:48ba) + call ClearTileMap + call ClearSprites + call WaitBGMap + call Function105153 + hlcoord 3, 8 + ld de, .String_PressAToLink_BToCancel + call PlaceString + call WaitBGMap + callba Function2c642 + call Function1050fb + ld a, $2 + ld [wca01], a + ld a, $14 + ld [wca02], a + ld a, [rIE] + push af + call Function104a95 + ld d, a + xor a + ld [rIF], a + pop af + ld [rIE], a + push de + call ClearTileMap + call EnableLCD + call WaitBGMap + ld b, SCGB_08 + call GetSGBLayout + call SetPalettes + pop de + hlcoord 2, 8 + ld a, d + ld de, .Text_LinkCanceled ; Link has been canceled + cp $10 + jp z, .LinkCanceled + cp $6c + jp nz, .CommunicationError + ld a, [wc900] + cp $3 + jr z, .skip_checks + call .CheckAlreadyGotFiveGiftsToday + ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day + jp nc, .PrintTextAndExit + call .CheckAlreadyGotAGiftFromThatPerson + ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person + jp c, .PrintTextAndExit +.skip_checks + ld a, [wc962] + and a + jp nz, .GiftWaiting + ld a, [wc912] + and a + jp nz, .FriendNotReady + ld a, [wc900] + cp $3 + jr z, .skip_append_save + call .AddMysteryGiftPartnerID + ld a, [wc900] + cp $4 + jr z, .skip_append_save + call .SaveMysteryGiftTrainerName + callba RestoreMobileEventIndex + callba MobileFn_1060a9 + callba BackupMobileEventIndex +.skip_append_save + ld a, [wc90f] + and a + jr z, .item + ld a, [wc911] + ld c, a + callba MysteryGiftGetDecoration + push bc + call Function105069 + pop bc + jr nz, .item + callab GetDecorationName_c + ld h, d + ld l, e + ld de, StringBuffer1 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + ld hl, .Text_SentToHome ; sent decoration to home + jr .PrintTextAndExit + +.item + call GetMysteryGiftBank + ld a, [wc910] + ld c, a + callba MysteryGiftGetItemHeldEffect + ld a, c + ld [sBackupMysteryGiftItem], a + ld [wNamedObjectIndexBuffer], a + call CloseSRAM + call GetItemName + ld hl, .Text_Sent ; sent item + jr .PrintTextAndExit + +.LinkCanceled: ; 1049af (41:49af) + ld hl, .Text_LinkCanceled ; Link has been canceled + jr .PrintTextAndExit + +.CommunicationError: ; 1049b4 (41:49b4) + ld hl, .Text_CommunicationError ; Communication error + call PrintText + jp DoMysteryGift + +.GiftWaiting: ; 1049bd (41:49bd) + ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter + jr .PrintTextAndExit + +.FriendNotReady: ; 1049c2 (41:49c2) + ld hl, .Text_FriendNotReady ; friend not ready + +.PrintTextAndExit: ; 1049c5 (41:49c5) + call PrintText + ld a, $e3 + ld [rLCDC], a + ret +; 1049cd (41:49cd) + +.String_PressAToLink_BToCancel: ; 1049cd + db "Press A to" + next "link IR-Device" + next "Press B to" + next "cancel it." + db "@" +; 1049fd + +.Text_LinkCanceled: ; 1049fd + text_jump UnknownText_0x1c0436 + db "@" +; 104a02 + +.Text_CommunicationError: ; 104a02 + text_jump UnknownText_0x1c0454 + db "@" +; 104a07 + +.Text_ReceiveGiftAtCounter: ; 104a07 + text_jump UnknownText_0x1c046a + db "@" +; 104a0c + +.Text_FriendNotReady: ; 104a0c + text_jump UnknownText_0x1c048e + db "@" +; 104a11 + +.Text_MaxFiveGifts: ; 104a11 + text_jump UnknownText_0x1c04a7 + db "@" +; 104a16 + +.Text_MaxOneGiftPerPerson: ; 104a16 + text_jump UnknownText_0x1c04c6 + db "@" +; 104a1b + +.Text_Sent: ; 104a1b + text_jump UnknownText_0x1c04e9 + db "@" +; 104a20 + +.Text_SentToHome: ; 104a20 + text_jump UnknownText_0x1c04fa + db "@" +; 104a25 + +.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25) + call GetMysteryGiftBank + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp $5 + jp CloseSRAM + +.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30) + call GetMysteryGiftBank + ld a, [wMysteryGiftPartnerID] + ld b, a + ld a, [wMysteryGiftPartnerID + 1] + ld c, a + ld a, [sNumDailyMysteryGiftPartnerIDs] + ld d, a + ld hl, sDailyMysteryGiftPartnerIDs +.loop + ld a, d + and a + jr z, .No + ld a, [hli] + cp b + jr nz, .skip + ld a, [hl] + cp c + jr z, .Yes +.skip + inc hl + dec d + jr .loop +.Yes + scf +.No + jp CloseSRAM + +.AddMysteryGiftPartnerID: ; 104a56 (41:4a56) + call GetMysteryGiftBank + ld hl, sNumDailyMysteryGiftPartnerIDs + ld a, [hl] + inc [hl] + ld hl, sDailyMysteryGiftPartnerIDs ; inc hl + ld e, a + ld d, $0 +rept 2 + add hl, de +endr + ld a, [wMysteryGiftPartnerID] + ld [hli], a + ld a, [wMysteryGiftPartnerID + 1] + ld [hl], a + jp CloseSRAM + +.SaveMysteryGiftTrainerName: ; 104a71 (41:4a71) + call GetMysteryGiftBank + ld a, $1 + ld [sMysteryGiftTrainerHouseFlag], a + ld hl, wMysteryGiftPartnerName + ld de, sMysteryGiftPartnerName + ld bc, NAME_LENGTH + call CopyBytes + ld a, $1 + ld [de], a + inc de + ld hl, wMysteryGiftTrainerData + ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2 + call CopyBytes + jp CloseSRAM + +Function104a95: ; 104a95 (41:4a95) + di + callba ClearChannels + call Function104d5e +.loop2 + call Function104d96 + call Function104ddd + ld a, [hPrintNum10] + cp $10 + jp z, Function104bd0 + cp $6c + jr nz, .loop2 + ld a, [hPrintNum9] + cp $2 + jr z, Function104b22 + ld hl, $ffb3 + ld b, $1 + call Function104d56 + jr nz, .ly_loop + call Function104b49 + jp nz, Function104bd0 + jr asm_104b0a +.ly_loop + ld a, [rLY] + cp $90 + jr c, .ly_loop + ld c, rRP % $100 + ld a, $c0 + ld [$ff00+c], a + ld b, $f0 +.loop3 + push bc + call Function105038 + ld b, $2 + ld c, rRP % $100 +.ly_loop2 + ld a, [$ff00+c] + and b + ld b, a + ld a, [rLY] + cp $90 + jr nc, .ly_loop2 +.ly_loop3 + ld a, [$ff00+c] + and b + ld b, a + ld a, [rLY] + cp $90 + jr c, .ly_loop3 + ld a, b + pop bc + dec b + jr z, .loop2 + or a + jr nz, .loop2 + ld a, [hMoneyTemp + 1] + bit 1, a + jr z, .loop3 + ld a, $10 + ld [hPrintNum10], a + jp Function104bd0 + +Function104b04: ; 104b04 (41:4b04) + call Function104b40 + jp nz, Function104bd0 + +asm_104b0a: ; 104b0a (41:4b0a) + call Function104d38 + jp nz, Function104bd0 + call Function104b88 + jp nz, Function104bd0 + call Function104d43 + jp nz, Function104bd0 + call Function105033 + jp Function104bd0 + +Function104b22: ; 104b22 (41:4b22) + call Function104b88 + jp nz, Function104bd0 + call Function104d43 + jp nz, Function104bd0 + call Function104b40 + jp nz, Function104bd0 + call Function104d38 + jp nz, Function104bd0 + call Function10502e + jp Function104bd0 + +Function104b40: ; 104b40 (41:4b40) + ld hl, $ffb3 + ld b, $1 + call Function104d56 + ret nz + +Function104b49: ; 104b49 (41:4b49) + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret nz + ld a, [$ffb3] + cp $96 + jp nz, Function104d32 + ld a, $90 + ld [$ffb3], a + call Function104d38 + ret nz + ld hl, $ffb3 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, wMysteryGiftTrainerData + ld a, [wca02] + ld b, a + call Function104d56 + ret nz + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret + +Function104b88: ; 104b88 (41:4b88) + ld a, $96 + ld [$ffb3], a + ld hl, $ffb3 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, $ffb3 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret nz + ld a, [$ffb3] + cp $90 + jp nz, Function104d32 + call Function104d38 + ret nz + ld hl, OverworldMap + ld a, [wca02] + ld b, a + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret + +Function104bd0: ; 104bd0 (41:4bd0) + nop + ld a, [hPrintNum10] + cp $10 + jr z, .asm_104c18 + cp $6c + jr nz, .asm_104c18 + ld hl, wca01 + dec [hl] + jr z, .asm_104c18 + ld hl, wMysteryGiftTrainerData + ld de, wc900 + ld bc, $14 + call CopyBytes + ld a, [wMysteryGiftTrainerData] + cp $3 + jr nc, .asm_104c18 + callba Function10510b + call Function1050fb + ld a, $26 + ld [wca02], a + ld a, [hPrintNum9] + cp $2 + jr z, .asm_104c10 + call Function104d43 + jr nz, Function104bd0 + jp Function104b04 +.asm_104c10 + call Function104d38 + jr nz, Function104bd0 + jp Function104b22 +.asm_104c18 + ld a, [hPrintNum10] + push af + call Function104da0 + xor a + ld [rIF], a + ld a, [rIE] + or $1 + ld [rIE], a + ei + call DelayFrame + pop af + ret + +Function104c2d: ; 104c2d (41:4c2d) + di + callba ClearChannels + call Function104d5e +.asm_104c37 + call Function104d96 + call Function104ddd + ld a, [hPrintNum10] + cp $10 + jp z, Function104d1c + cp $6c + jr nz, .asm_104c37 + ld a, [hPrintNum9] + cp $2 + jr z, .asm_104c6c + call Function104c8a + jp nz, Function104d1c + call Function104d38 + jp nz, Function104d1c + call Function104cd2 + jp nz, Function104d1c + call Function104d43 + jp nz, Function104d1c + call Function105033 + jp Function104d1c +.asm_104c6c + call Function104cd2 + jp nz, Function104d1c + call Function104d43 + jp nz, Function104d1c + call Function104c8a + jp nz, Function104d1c + call Function104d38 + jp nz, Function104d1c + call Function10502e + jp Function104d1c + +Function104c8a: ; 104c8a (41:4c8a) + ld hl, $ffb3 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret nz + ld a, [$ffb3] + cp $3c + jp nz, Function104d32 + swap a + ld [$ffb3], a + call Function104d38 + ret nz + ld hl, $ffb3 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, wMysteryGiftTrainerData + ld a, [wca02] + ld b, a + call Function104d56 + ret nz + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret + +Function104cd2: ; 104cd2 (41:4cd2) + ld a, $3c + ld [$ffb3], a + ld hl, $ffb3 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, $ffb3 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hPrintNum10] + cp $6c + ret nz + ld a, [$ffb3] + swap a + cp $3c + jp nz, Function104d32 + call Function104d38 + ret nz + ld hl, OverworldMap + ld a, [wca02] + ld b, a + call Function104d4e + ret nz + call Function10502e + ld a, [hPrintNum10] + cp $6c + ret + +Function104d1c: ; 104d1c (41:4d1c) + nop + ld a, [hPrintNum10] + push af + call Function104da0 + xor a + ld [rIF], a + ld a, [rIE] + or $1 + ld [rIE], a + ei + call DelayFrame + pop af + ret + +Function104d32: ; 104d32 (41:4d32) + ld a, $80 + ld [hPrintNum10], a + and a + ret + +Function104d38: ; 104d38 (41:4d38) + call Function104d96 + call Function104e46 + ld a, [hPrintNum10] + cp $6c + ret + +Function104d43: ; 104d43 (41:4d43) + call Function104d96 + call Function104dfe + ld a, [hPrintNum10] + cp $6c + ret + +Function104d4e: ; 104d4e (41:4d4e) + call Function104e93 + ld a, [hPrintNum10] + cp $6c + ret + +Function104d56: ; 104d56 (41:4d56) + call Function104f57 + ld a, [hPrintNum10] + cp $6c + ret + +Function104d5e: ; 104d5e (41:4d5e) + call Function104d74 + ld a, $4 + ld [rIE], a + xor a + ld [rIF], a + call Function104d96 + xor a + ld b, a +.asm_104d6d + inc a + jr nz, .asm_104d6d + inc b + jr nz, .asm_104d6d + ret + +Function104d74: ; 104d74 (41:4d74) + xor a + ld [rTAC], a + ld a, $fe + ld [rTMA], a + ld [rTIMA], a + ld a, $2 + ld [rTAC], a + or $4 + ld [rTAC], a + ret + +Function104d86: ; 104d86 (41:4d86) + xor a + ld [rTAC], a + ld [rTMA], a + ld [rTIMA], a + ld a, $2 + ld [rTAC], a + or $4 + ld [rTAC], a + ret + +Function104d96: ; 104d96 (41:4d96) + ld a, $c0 + call Function104e8c + ld a, $1 + ld [hPrintNum9], a + ret + +Function104da0: ; 104da0 (41:4da0) + xor a + call Function104e8c + ld a, $2 + ld [rTAC], a + ret + +Function104da9: ; 104da9 (41:4da9) + inc d + ret z + xor a + ld [rIF], a + halt + ld a, [$ff00+c] + bit 1, a + jr z, Function104da9 + or a + ret + +Function104db7: ; 104db7 (41:4db7) + inc d + ret z + xor a + ld [rIF], a + halt + ld a, [$ff00+c] + bit 1, a + jr nz, Function104db7 + or a + ret + +Function104dc5: ; 104dc5 (41:4dc5) + ld a, $c1 + ld [$ff00+c], a +.asm_104dc8 + dec d + ret z + xor a + ld [rIF], a + halt + jr .asm_104dc8 + +Function104dd1: ; 104dd1 (41:4dd1) + ld a, $c0 + ld [$ff00+c], a +.asm_104dd4 + dec d + ret z + xor a + ld [rIF], a + halt + jr .asm_104dd4 + +Function104ddd: ; 104ddd (41:4ddd) + ld d, $0 + ld e, d + ld a, $1 + ld [hPrintNum9], a +.asm_104de4 + call Function105038 + ld b, $2 + ld c, rRP % $100 + ld a, [hMoneyTemp + 1] + bit 1, a + jr z, .asm_104df6 + ld a, $10 + ld [hPrintNum10], a + ret +.asm_104df6 + bit 0, a + jr nz, asm_104e3a + ld a, [$ff00+c] + and b + jr nz, .asm_104de4 + +Function104dfe: ; 104dfe (41:4dfe) + ld c, rRP % $100 + ld d, $0 + ld e, d + call Function104db7 + jp z, Function104f42 + ld d, e + call Function104da9 + jp z, Function104f42 + call Function104db7 + jp z, Function104f42 + call Function104da9 + jp z, Function104f42 + ld a, $6c + ld [hPrintNum10], a + ld d, $3d + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $5 + call Function104dd1 + ret + +asm_104e3a: ; 104e3a (41:4e3a) + call Random + ld e, a + and $f + ld d, a +.asm_104e41 + dec de + ld a, d + or e + jr nz, .asm_104e41 + +Function104e46: ; 104e46 (41:4e46) + ld a, $2 + ld [hPrintNum9], a + ld c, $56 + ld d, $0 + ld e, d + ld d, $3d + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $5 + call Function104dd1 + ld d, e + call Function104db7 + jp z, Function104f42 + ld d, e + call Function104da9 + jp z, Function104f42 + call Function104db7 + jp z, Function104f42 + call Function104da9 + jp z, Function104f42 + ld d, $3d + call Function104dd1 + ld a, $6c + ld [hPrintNum10], a + ret + +Function104e8c: ; 104e8c (41:4e8c) + ld [rRP], a + ld a, $ff + ld [hPrintNum10], a + ret + +Function104e93: ; 104e93 (41:4e93) + xor a + ld [hDivisor], a + ld [hMathBuffer], a + push hl + push bc + ld c, $56 + ld d, $3d + call Function104dd1 + ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand) + ld a, $5a + ld [hli], a + ld [hl], b + dec hl + ld b, $2 + call Function104ed6 + pop bc + pop hl + call Function104ed6 + ld a, [hDivisor] + ld [hQuotient], a + ld a, [hMathBuffer] + ld [$ffb5], a + push hl + ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand) + ld b, $2 + call Function104ed6 + ld hl, hPrintNum10 + ld b, $1 + call Function104faf + ld a, [hQuotient] + ld [hDivisor], a + ld a, [$ffb5] + ld [hMathBuffer], a + pop hl + ret + +Function104ed6: ; 104ed6 (41:4ed6) + ld c, $56 + ld d, $5 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld a, b + cpl + ld b, a + ld a, $f4 + ld [rTMA], a +.asm_104eee + inc b + jr z, .asm_104f2e + ld a, $8 + ld [$ffb6], a + ld a, [hli] + ld e, a + ld a, [hDivisor] + add e + ld [hDivisor], a + ld a, [hMathBuffer] + adc $0 + ld [hMathBuffer], a +.asm_104f02 + xor a + ld [rIF], a + halt + ld a, $c1 + ld [rRP], a + ld d, $1 + ld a, e + rlca + ld e, a + jr nc, .asm_104f13 + inc d +.asm_104f13 + ld a, [rTIMA] + cp $f8 + jr c, .asm_104f13 + ld a, $c0 + ld [rRP], a + dec d + jr z, .asm_104f25 + xor a + ld [rIF], a + halt +.asm_104f25 + ld a, [$ffb6] + dec a + jr z, .asm_104eee + ld [$ffb6], a + jr .asm_104f02 +.asm_104f2e + ld a, $fe + ld [rTMA], a + xor a + ld [rIF], a + halt + ld d, $5 + call Function104dc5 + ld d, $11 + call Function104dd1 + ret + +Function104f42: ; 104f42 (41:4f42) + ld a, [hPrintNum10] + or $2 + ld [hPrintNum10], a + ret + +Function104f49: ; 104f49 (41:4f49) + ld a, [hPrintNum10] + or $1 + ld [hPrintNum10], a + ret + +Function104f50: ; 104f50 (41:4f50) + ld a, [hPrintNum10] + or $80 + ld [hPrintNum10], a + ret + +Function104f57: ; 104f57 (41:4f57) + xor a + ld [hDivisor], a + ld [hMathBuffer], a + push bc + push hl + ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand) + ld b, $2 + call Function104faf + ld a, [$ffb5] + ld [$ffba], a + ld b, a + pop hl + pop af + cp b + jp c, Function104f50 + ld a, [hQuotient] + cp $5a + jp nz, Function104f50 + call Function104faf + ld a, [hDivisor] + ld d, a + ld a, [hMathBuffer] + ld e, a + push hl + push de + ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand) + ld b, $2 + call Function104faf + pop de + ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand) + ld a, [hli] + xor d + ld b, a + ld a, [hl] + xor e + or b + call nz, Function104f49 + push de + ld d, $3d + call Function104dd1 + ld hl, hPrintNum10 + ld b, $1 + call Function104ed6 + pop de + pop hl + ld a, d + ld [hDivisor], a + ld a, e + ld [hMathBuffer], a + ret + +Function104faf: ; 104faf (41:4faf) + ld c, rRP % $100 + ld d, $0 + call Function104db7 + jp z, Function104f42 + ld d, $0 + call Function104da9 + jp z, Function104f42 + ld d, $0 + call Function104db7 + jp z, Function104f42 + ld a, b + cpl + ld b, a + xor a + ld [hMoneyTemp + 2], a + call Function104d86 +.asm_104fd2 + inc b + jr z, .asm_10501a + ld a, $8 + ld [$ffb6], a +.asm_104fd9 + ld d, $0 +.asm_104fdb + inc d + jr z, .asm_104fe5 + ld a, [$ff00+c] + bit 1, a + jr z, .asm_104fdb + ld d, $0 +.asm_104fe5 + inc d + jr z, .asm_104fed + ld a, [$ff00+c] + bit 1, a + jr nz, .asm_104fe5 +.asm_104fed + ld a, [hMoneyTemp + 2] + ld d, a + ld a, [rTIMA] + ld [hMoneyTemp + 2], a + sub d + cp $12 + jr c, .asm_104ffd + set 0, e + jr .asm_104fff +.asm_104ffd + res 0, e +.asm_104fff + ld a, [$ffb6] + dec a + ld [$ffb6], a + jr z, .asm_10500b + ld a, e + rlca + ld e, a + jr .asm_104fd9 +.asm_10500b + ld a, e + ld [hli], a + ld a, [hDivisor] + add e + ld [hDivisor], a + ld a, [hMathBuffer] + adc $0 + ld [hMathBuffer], a + jr .asm_104fd2 +.asm_10501a + call Function104d74 + xor a + ld [rIF], a + ld d, $0 + call Function104da9 + jp z, Function104f42 + ld d, $10 + call Function104dd1 + ret + +Function10502e: ; 10502e (41:502e) + ld b, $0 + jp Function104e93 + +Function105033: ; 105033 (41:5033) + ld b, $0 + jp Function104f57 + +Function105038: ; 105038 (41:5038) + ld a, $20 + ld [rJOYP], a +rept 2 + ld a, [rJOYP] +endr + cpl + and $f + swap a + ld b, a + ld a, $10 + ld [rJOYP], a +rept 6 + ld a, [rJOYP] +endr + cpl + and $f + or b + ld c, a + ld a, [hMoneyTemp] + xor c + and c + ld [hMoneyTemp + 1], a + ld a, c + ld [hMoneyTemp], a + ld a, $30 + ld [rJOYP], a + ret + +Function105069: ; 105069 (41:5069) + call GetMysteryGiftBank + ld d, $0 + ld b, CHECK_FLAG + ld hl, sMysteryGiftDecorationsReceived + predef_id FlagPredef + push hl + push bc + call Predef + call CloseSRAM + ld a, c + and a + pop bc + pop hl + ret nz + call GetMysteryGiftBank + ld b, SET_FLAG + predef FlagPredef + call CloseSRAM + xor a + ret + +Function105091: ; 105091 (41:5091) + call GetMysteryGiftBank + ld c, $0 +.loop + push bc + ld d, $0 + ld b, CHECK_FLAG + ld hl, sMysteryGiftDecorationsReceived + predef FlagPredef + ld a, c + and a + pop bc + jr z, .skip + push bc + callab SetSpecificDecorationFlag + pop bc +.skip + inc c + ld a, c + cp Trophys - DecorationIDs + jr c, .loop + jp CloseSRAM + +Special_UnlockMysteryGift: ; 1050b9 + call GetMysteryGiftBank + ld hl, sMysteryGiftUnlocked + ld a, [hl] + inc a + jr nz, .ok + ld [hld], a + ld [hl], a +.ok + jp CloseSRAM +; 1050c8 + +Function1050c8: ; 1050c8 + call GetMysteryGiftBank + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp $ff + jr z, .okay + xor a + ld [sNumDailyMysteryGiftPartnerIDs], a +.okay + jp CloseSRAM +; 1050d9 + + +BackupMysteryGift: ; 1050d9 + call GetMysteryGiftBank + ld hl, sMysteryGiftItem + ld de, sBackupMysteryGiftItem + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp CloseSRAM +; 1050ea + + +RestoreMysteryGift: ; 1050ea (41:50ea) + call GetMysteryGiftBank + ld hl, sBackupMysteryGiftItem + ld de, sMysteryGiftItem + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp CloseSRAM + +Function1050fb: ; 1050fb (41:50fb) + ld hl, wMysteryGiftTrainerData + xor a + ld b, $26 +.asm_105101 + ld [hli], a + dec b + jr nz, .asm_105101 + ret + + +GetMysteryGiftBank: ; 105106 + ld a, BANK(sBackupMysteryGiftItem) + jp GetSRAMBank +; 10510b + + +Function10510b: ; 10510b (41:510b) + ld a, BANK(sPokemonData) + call GetSRAMBank + ld de, OverworldMap + ld bc, sPokemonData + PartyMons - wPokemonData + ld hl, sPokemonData + PartySpecies - wPokemonData +.asm_105119 + ld a, [hli] + cp $ff + jr z, .asm_105148 + cp EGG + jr z, .asm_10513e + push hl + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + ld [de], a + inc de + ld hl, MON_SPECIES + add hl, bc + ld a, [hl] + ld [de], a + inc de + ld hl, MON_MOVES + add hl, bc + push bc + ld bc, NUM_MOVES + call CopyBytes + pop bc + pop hl +.asm_10513e + push hl + ld hl, PARTYMON_STRUCT_LENGTH + add hl, bc + ld b, h + ld c, l + pop hl + jr .asm_105119 +.asm_105148 + ld a, $ff + ld [de], a + ld a, $26 + ld [wca00], a + jp CloseSRAM + +Function105153: ; 105153 (41:5153) + call ClearBGPalettes + call DisableLCD + ld hl, MysteryGiftGFX + ld de, VTiles2 tile $00 + ld a, BANK(MysteryGiftGFX) + ld bc, Function105688 - MysteryGiftGFX + call FarCopyBytes + hlcoord 0, 0 + ld a, $42 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call ByteFill + hlcoord 3, 7 + lb bc, 9, 15 + call ClearBox + hlcoord 0, 0 + ld a, $0 + ld [hli], a + inc a + ld [hl], a + hlcoord 0, 1 + inc a + ld [hli], a + inc a + ld [hl], a + hlcoord 7, 1 + ld a, $12 + call Function10522e + hlcoord 2, 2 + ld a, $17 + call Function105236 + hlcoord 2, 3 + ld a, $27 + call Function105236 + hlcoord 9, 4 + ld a, $37 + ld [hli], a + inc a + ld [hl], a + hlcoord 1, 2 + ld [hl], $4 + hlcoord 1, 3 + ld a, $5 + call Function105246 + ld a, $9 + hlcoord 18, 5 + call Function105242 + hlcoord 2, 5 + ld a, $b + call Function105251 + hlcoord 2, 16 + ld a, $7 + call Function105251 + hlcoord 2, 5 + ld a, $d + call Function10522e + hlcoord 7, 5 + ld [hl], $c + hlcoord 18, 5 + ld [hl], $a + hlcoord 18, 16 + ld [hl], $8 + hlcoord 1, 16 + ld [hl], $6 + hlcoord 2, 6 + ld a, $3a + call Function105251 + hlcoord 2, 15 + ld a, $40 + call Function105251 + hlcoord 2, 6 + ld a, $3c + call Function10523e + hlcoord 17, 6 + ld a, $3e + call Function10523e + hlcoord 2, 6 + ld [hl], $39 + hlcoord 17, 6 + ld [hl], $3b + hlcoord 2, 15 + ld [hl], $3f + hlcoord 17, 15 + ld [hl], $41 + call EnableLCD + call WaitBGMap + ld b, SCGB_1D + call GetSGBLayout + call SetPalettes + ret + +Function10522e: ; 10522e (41:522e) + ld b, $5 + jr asm_105238 +; 105232 (41:5232) + +Function105232: ; unreferenced + ld b, 6 + jr asm_105238 + +Function105236: ; 105236 (41:5236) + ld b, $10 + +asm_105238: ; 105238 (41:5238) + ld [hli], a + inc a + dec b + jr nz, asm_105238 + ret + +Function10523e: ; 10523e (41:523e) + ld b, $9 + jr asm_105248 + +Function105242: ; 105242 (41:5242) + ld b, $b + jr asm_105248 + +Function105246: ; 105246 (41:5246) + ld b, $e + +asm_105248: ; 105248 (41:5248) + ld [hl], a + ld de, $14 + add hl, de + dec b + jr nz, asm_105248 + ret + +Function105251: ; 105251 (41:5251) + ld b, $10 +.asm_105253 + ld [hli], a + dec b + jr nz, .asm_105253 + ret + +MysteryGiftGFX: ; 105258 +INCBIN "gfx/misc/mystery_gift.2bpp" + + +Function105688: ; 105688 (41:5688) + call ClearTileMap + call ClearSprites + call WaitBGMap + call Function1057d7 + hlcoord 3, 8 + ld de, String_10572e + call PlaceString + call WaitBGMap + call Function10578c + call Function1050fb + ld a, $24 + ld [wca02], a + ld a, [rIE] + push af + call Function104c2d + ld d, a + xor a + ld [rIF], a + pop af + ld [rIE], a + ld a, d + cp $10 + jp z, Function105712 + cp $6c + jp nz, Function10571a + call Function1056eb + ld c, 60 + call DelayFrames + call Function105777 + ld hl, Text_10575e + call PrintText + ld de, wMysteryGiftTrainerData + callba Function8ac70 + ld a, c + ld [wd265], a + ld hl, Text_105768 + jr c, asm_105726 + ld hl, Text_105763 + jr asm_105726 + +Function1056eb: ; 1056eb (41:56eb) + ld c, $10 +.asm_1056ed + ld hl, Sprites + ld b, $8 +.asm_1056f2 + dec [hl] +rept 4 + inc hl +endr + dec b + jr nz, .asm_1056f2 + ld hl, Sprites + $20 + ld b, $8 +.asm_1056ff + inc [hl] +rept 4 + inc hl +endr + dec b + jr nz, .asm_1056ff + dec c + ret z + push bc + ld c, 4 + call DelayFrames + pop bc + jr .asm_1056ed + +Function105712: ; 105712 (41:5712) + call Function105777 + ld hl, Text_10576d + jr asm_105726 + +Function10571a: ; 10571a (41:571a) + call Function105777 + ld hl, Text_105772 + call PrintText + jp Function105688 + +asm_105726: ; 105726 (41:5726) + call PrintText + ld a, $e3 + ld [rLCDC], a + ret +; 10572e (41:572e) + +String_10572e: ; 10572e + db "エーボタン¯おすと" + next "つうしん", $4a, "おこなわれるよ!" + next "ビーボタン¯おすと" + next "つうしん¯ちゅうし します" + db "@" + +; 10575e + +Text_10575e: ; 10575e + text_jump UnknownText_0x1c051a + db "@" + +Text_105763: ; 105763 + text_jump UnknownText_0x1c0531 + db "@" + +Text_105768: ; 105768 + text_jump UnknownText_0x1c0555 + db "@" + +Text_10576d: ; 10576d + text_jump UnknownText_0x1c0573 + db "@" + +Text_105772: ; 105772 + text_jump UnknownText_0x1c0591 + db "@" +; 105777 + +Function105777: ; 105777 (41:5777) + call ClearSprites + call ClearTileMap + call EnableLCD + call WaitBGMap + ld b, SCGB_08 + call GetSGBLayout + call SetPalettes + ret + +Function10578c: ; 10578c (41:578c) + ld de, OverworldMap + ld a, BANK(sPlayerData) + call GetSRAMBank + ld hl, sPlayerData + PlayerName - wPlayerData + ld bc, NAME_LENGTH + call CopyBytes + ld hl, sPlayerData + PlayerID - wPlayerData + ld bc, 2 + call CopyBytes + ld hl, sPlayerData + wSecretID - wPlayerData + ld bc, 2 + call CopyBytes + call CloseSRAM + ld a, BANK(sCrystalData) + call GetSRAMBank + ld a, [sCrystalData + 0] + ld [de], a + inc de + ld a, $4 + call GetSRAMBank + ld hl, $a603 + ld bc, $8 + call CopyBytes + ld hl, $a007 + ld bc, $c + call CopyBytes + call CloseSRAM + ret + +Function1057d7: ; 1057d7 (41:57d7) + call ClearBGPalettes + call DisableLCD + ld hl, MysteryGiftJP_GFX + ld de, VTiles2 tile $00 + ld a, BANK(MysteryGiftJP_GFX) + lb bc, 4, 0 + call FarCopyBytes + ld hl, MysteryGiftJP_GFX + $400 + ld de, VTiles0 tile $00 + ld a, BANK(MysteryGiftJP_GFX) + ld bc, $80 + call FarCopyBytes + hlcoord 0, 0 + ld a, $3f + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call ByteFill + hlcoord 3, 7 + lb bc, 9, 15 + call ClearBox + hlcoord 0, 0 + ld a, $0 + ld [hli], a + inc a + ld [hl], a + hlcoord 0, 1 + inc a + ld [hli], a + inc a + ld [hl], a + hlcoord 4, 2 + ld a, $13 + call Function1058ca + hlcoord 4, 3 + ld a, $1e + call Function1058ce + hlcoord 4, 4 + ld a, $2a + call Function1058ce + hlcoord 1, 2 + ld [hl], $4 + hlcoord 1, 3 + ld a, $5 + call Function1058de + ld a, $9 + hlcoord 18, 5 + call Function1058da + hlcoord 2, 5 + ld a, $b + call Function1058e9 + hlcoord 2, 16 + ld a, $7 + call Function1058e9 + hlcoord 2, 5 + ld a, $d + call Function1058c6 + hlcoord 8, 5 + ld [hl], $c + hlcoord 18, 5 + ld [hl], $a + hlcoord 18, 16 + ld [hl], $8 + hlcoord 1, 16 + ld [hl], $6 + hlcoord 2, 6 + ld a, $37 + call Function1058e9 + hlcoord 2, 15 + ld a, $3d + call Function1058e9 + hlcoord 2, 6 + ld a, $39 + call Function1058d6 + hlcoord 17, 6 + ld a, $3b + call Function1058d6 + hlcoord 2, 6 + ld [hl], $36 + hlcoord 17, 6 + ld [hl], $38 + hlcoord 2, 15 + ld [hl], $3c + hlcoord 17, 15 + ld [hl], $3e + ld de, Sprites + ld hl, OAM_1058f0 + ld bc, $40 + call CopyBytes + call EnableLCD + call WaitBGMap + ld b, $2 + callba Function4930f + jp SetPalettes + +Function1058c6: ; 1058c6 (41:58c6) + ld b, $6 + jr asm_1058d0 + +Function1058ca: ; 1058ca (41:58ca) + ld b, $b + jr asm_1058d0 + +Function1058ce: ; 1058ce (41:58ce) + ld b, $c + +asm_1058d0: ; 1058d0 (41:58d0) + ld [hli], a + inc a + dec b + jr nz, asm_1058d0 + ret + +Function1058d6: ; 1058d6 (41:58d6) + ld b, $9 + jr asm_1058e0 + +Function1058da: ; 1058da (41:58da) + ld b, $b + jr asm_1058e0 + +Function1058de: ; 1058de (41:58de) + ld b, $e + +asm_1058e0: ; 1058e0 (41:58e0) + ld [hl], a + ld de, SCREEN_WIDTH + add hl, de + dec b + jr nz, asm_1058e0 + ret + +Function1058e9: ; 1058e9 (41:58e9) + ld b, $10 +.asm_1058eb + ld [hli], a + dec b + jr nz, .asm_1058eb + ret +; 1058f0 (41:58f0) + +OAM_1058f0: ; 1058f0 + db $11, $34, $00, $00 + db $11, $3c, $01, $00 + db $11, $44, $02, $00 + db $11, $4c, $03, $00 + db $19, $34, $04, $00 + db $19, $3c, $05, $00 + db $19, $44, $06, $00 + db $19, $4c, $07, $00 + db $01, $5c, $00, $00 + db $01, $64, $01, $00 + db $01, $6c, $02, $00 + db $01, $74, $03, $00 + db $09, $5c, $04, $00 + db $09, $64, $05, $00 + db $09, $6c, $06, $00 + db $09, $74, $07, $00 + +; japanese mystery gift gfx +MysteryGiftJP_GFX: ; 105930 +INCBIN "gfx/misc/mystery_gift_jp.2bpp" diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm index 21ec969b4..93cd97199 100755 --- a/engine/namingscreen.asm +++ b/engine/namingscreen.asm @@ -41,7 +41,7 @@ NamingScreen: ; 116c1 Function116f8: ; 116f8 call ClearBGPalettes - ld b, $8 + ld b, SCGB_08 call GetSGBLayout call DisableLCD call Function11c51 @@ -173,9 +173,9 @@ Function117f5: ; 117f5 (4:57f5) ld hl, wc300 ld [hli], a ld [hl], a - ld de, $2420 - ld a, $a - call Function3b2a + depixel 4, 4, 4, 0 + ld a, SPRITE_ANIM_INDEX_0A + call _InitSpriteAnimStruct ld hl, $1 add hl, bc ld [hl], $0 @@ -220,18 +220,18 @@ Function11847: ; 11847 (4:5847) ld [hli], a ld [hl], a pop de - ld b, $a + ld b, SPRITE_ANIM_INDEX_0A ld a, d cp $7a jr nz, .asm_11873 ld a, e cp $40 jr nz, .asm_11873 - ld b, $1e + ld b, SPRITE_ANIM_INDEX_1E .asm_11873 ld a, b - ld de, $2420 - call Function3b2a + depixel 4, 4, 4, 0 + call _InitSpriteAnimStruct ret Function1187b: ; 1187b (4:587b) @@ -400,13 +400,13 @@ Jumptable_11977: ; 11977 (4:5977) Function1197b: ; 1197b (4:597b) - lb de, $50, $18 + depixel 10, 3 call Function1189c jr nz, .asm_11985 - ld d, $40 + ld d, 8 * 8 .asm_11985 - ld a, $2 - call Function3b2a + ld a, SPRITE_ANIM_INDEX_02 + call _InitSpriteAnimStruct ld a, c ld [wc6d5], a ld a, b diff --git a/engine/npctrade.asm b/engine/npctrade.asm new file mode 100755 index 000000000..71ab03ee3 --- /dev/null +++ b/engine/npctrade.asm @@ -0,0 +1,635 @@ + +; Trade struct +TRADE_DIALOG EQU 0 +TRADE_GIVEMON EQU 1 +TRADE_GETMON EQU 2 +TRADE_NICK EQU 3 +TRADE_DVS EQU 14 +TRADE_ITEM EQU 16 +TRADE_OT_ID EQU 17 +TRADE_OT_NAME EQU 19 +TRADE_GENDER EQU 30 +TRADE_PADDING EQU 31 + +; Trade dialogs +TRADE_INTRO EQU 0 +TRADE_CANCEL EQU 1 +TRADE_WRONG EQU 2 +TRADE_COMPLETE EQU 3 +TRADE_AFTER EQU 4 + +TRADE_EITHER_GENDER EQU 0 +TRADE_MALE_ONLY EQU 1 +TRADE_FEMALE_ONLY EQU 2 + +NPCTrade:: ; fcba8 + ld a, e + ld [wJumptableIndex], a + call Trade_GetDialog + ld b, CHECK_FLAG + call TradeFlagAction + ld a, TRADE_AFTER + jr nz, .done + + ld a, TRADE_INTRO + call PrintTradeText + + call YesNoBox + ld a, TRADE_CANCEL + jr c, .done + +; Select givemon from party + ld b, 6 + callba Function5001d + ld a, TRADE_CANCEL + jr c, .done + + ld e, TRADE_GIVEMON + call GetTradeAttribute + ld a, [CurPartySpecies] + cp [hl] + ld a, TRADE_WRONG + jr nz, .done + + call CheckTradeGender + ld a, TRADE_WRONG + jr c, .done + + ld b, SET_FLAG + call TradeFlagAction + + ld hl, ConnectLinkCableText + call PrintText + + call DoNPCTrade + call .TradeAnimation + call GetTradeMonNames + + ld hl, TradedForText + call PrintText + + call RestartMapMusic + + ld a, TRADE_COMPLETE + +.done + call PrintTradeText + ret +; fcc07 + +.TradeAnimation: ; fcc07 + call DisableSpriteUpdates + ld a, [wJumptableIndex] + push af + ld a, [wcf64] + push af + predef TradeAnimation + pop af + ld [wcf64], a + pop af + ld [wJumptableIndex], a + call Function2b74 + ret +; fcc23 + +CheckTradeGender: ; fcc23 + xor a + ld [MonType], a + + ld e, TRADE_GENDER + call GetTradeAttribute + ld a, [hl] + and a + jr z, .asm_fcc46 + cp 1 + jr z, .asm_fcc3e + + callba GetGender + jr nz, .asm_fcc48 + jr .asm_fcc46 + +.asm_fcc3e + callba GetGender + jr z, .asm_fcc48 + +.asm_fcc46 + and a + ret + +.asm_fcc48 + scf + ret +; fcc4a + +TradeFlagAction: ; fcc4a + ld hl, wTradeFlags + ld a, [wJumptableIndex] + ld c, a + predef FlagPredef + ld a, c + and a + ret +; fcc59 + +Trade_GetDialog: ; fcc59 + ld e, TRADE_DIALOG + call GetTradeAttribute + ld a, [hl] + ld [wcf64], a + ret +; fcc63 + +DoNPCTrade: ; fcc63 + ld e, TRADE_GIVEMON + call GetTradeAttribute + ld a, [hl] + ld [wPlayerTrademonSpecies], a + + ld e, TRADE_GETMON + call GetTradeAttribute + ld a, [hl] + ld [wOTTrademonSpecies], a + + ld a, [wPlayerTrademonSpecies] + ld de, wPlayerTrademonSpeciesName + call GetTradeMonName + call CopyTradeName + + ld a, [wOTTrademonSpecies] + ld de, wOTTrademonSpeciesName + call GetTradeMonName + call CopyTradeName + + ld hl, PartyMonOT + ld bc, NAME_LENGTH + call Trade_GetAttributeOfCurrentPartymon + ld de, wPlayerTrademonOTName + call CopyTradeName + + ld hl, PlayerName + ld de, wPlayerTrademonSenderName + call CopyTradeName + + ld hl, PartyMon1ID + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfCurrentPartymon + ld de, wPlayerTrademonID + call Trade_CopyTwoBytes + + ld hl, PartyMon1DVs + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfCurrentPartymon + ld de, wPlayerTrademonDVs + call Trade_CopyTwoBytes + + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfCurrentPartymon + ld b, h + ld c, l + callba GetCaughtGender + ld a, c + ld [wPlayerTrademonCaughtData], a + + ld e, TRADE_DIALOG + call GetTradeAttribute + ld a, [hl] + cp 3 + ld a, 1 + jr c, .okay + ld a, 2 +.okay + ld [wOTTrademonCaughtData], a + + ld hl, PartyMon1Level + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfCurrentPartymon + ld a, [hl] + ld [CurPartyLevel], a + ld a, [wOTTrademonSpecies] + ld [CurPartySpecies], a + xor a + ld [MonType], a + ld [wPokemonWithdrawDepositParameter], a + callab Functione039 + predef TryAddMonToParty + + ld e, TRADE_DIALOG + call GetTradeAttribute + ld a, [hl] + cp TRADE_COMPLETE + ld b, RESET_FLAG + jr c, .asm_fcd1c + ld b, SET_FLAG +.asm_fcd1c + callba SetGiftPartyMonCaughtData + + ld e, TRADE_NICK + call GetTradeAttribute + ld de, wOTTrademonNickname + call CopyTradeName + + ld hl, PartyMonNicknames + ld bc, PKMN_NAME_LENGTH + call Trade_GetAttributeOfLastPartymon + ld hl, wOTTrademonNickname + call CopyTradeName + + ld e, TRADE_OT_NAME + call GetTradeAttribute + push hl + ld de, wOTTrademonOTName + call CopyTradeName + pop hl + ld de, wOTTrademonSenderName + call CopyTradeName + + ld hl, PartyMonOT + ld bc, NAME_LENGTH + call Trade_GetAttributeOfLastPartymon + ld hl, wOTTrademonOTName + call CopyTradeName + + ld e, TRADE_DVS + call GetTradeAttribute + ld de, wOTTrademonDVs + call Trade_CopyTwoBytes + + ld hl, PartyMon1DVs + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfLastPartymon + ld hl, wOTTrademonDVs + call Trade_CopyTwoBytes + + ld e, TRADE_OT_ID + call GetTradeAttribute + ld de, wOTTrademonID + 1 + call Trade_CopyTwoBytesReverseEndian + + ld hl, PartyMon1ID + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfLastPartymon + ld hl, wOTTrademonID + call Trade_CopyTwoBytes + + ld e, TRADE_ITEM + call GetTradeAttribute + push hl + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call Trade_GetAttributeOfLastPartymon + pop hl + ld a, [hl] + ld [de], a + + push af + push bc + push de + push hl + ld a, [CurPartyMon] + push af + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + callba Functione134 + pop af + ld [CurPartyMon], a + pop hl + pop de + pop bc + pop af + ret +; fcdc2 + + +GetTradeAttribute: ; 0xfcdc2 + ld d, 0 + push de + ld a, [wJumptableIndex] + and $f + swap a + ld e, a + ld d, 0 + ld hl, NPCTrades +rept 2 + add hl, de +endr + pop de + add hl, de + ret +; 0xfcdd7 + +Trade_GetAttributeOfCurrentPartymon: ; fcdd7 + ld a, [CurPartyMon] + call AddNTimes + ret +; fcdde + +Trade_GetAttributeOfLastPartymon: ; fcdde + ld a, [PartyCount] + dec a + call AddNTimes + ld e, l + ld d, h + ret +; fcde8 + +GetTradeMonName: ; fcde8 + push de + ld [wd265], a + call GetBasePokemonName + ld hl, StringBuffer1 + pop de + ret +; fcdf4 + +CopyTradeName: ; fcdf4 + ld bc, NAME_LENGTH + call CopyBytes + ret +; fcdfb + +Functionfcdfb: ; fcdfb +; unreferenced + ld bc, 4 + call CopyBytes + ld a, "@" + ld [de], a + ret +; fce05 + +Functionfce05: ; fce05 +; unreferenced + ld bc, 3 + call CopyBytes + ld a, "@" + ld [de], a + ret +; fce0f + +Trade_CopyTwoBytes: ; fce0f + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ret +; fce15 + +Trade_CopyTwoBytesReverseEndian: ; fce15 + ld a, [hli] + ld [de], a + dec de + ld a, [hl] + ld [de], a + ret +; fce1b + +GetTradeMonNames: ; fce1b + ld e, TRADE_GETMON + call GetTradeAttribute + ld a, [hl] + call GetTradeMonName + + ld de, StringBuffer2 + call CopyTradeName + + ld e, TRADE_GIVEMON + call GetTradeAttribute + ld a, [hl] + call GetTradeMonName + + ld de, wd050 + call CopyTradeName + + ld hl, StringBuffer1 +.loop + ld a, [hli] + cp "@" + jr nz, .loop + + dec hl + push hl + ld e, TRADE_GENDER + call GetTradeAttribute + ld a, [hl] + pop hl + and a + ret z + + cp 1 + ld a, "♂" + jr z, .done + ld a, "♀" +.done + ld [hli], a + ld [hl], "@" + ret +; fce58 + + +NPCTrades: ; fce58 +npctrade: MACRO + db \1, \2, \3, \4 + dw \5 + db \6 + dw \7 + db \8, \9, 0 +ENDM + + + npctrade 0, ABRA, MACHOP, "MUSCLE@@@@@", $6637, GOLD_BERRY, 37460, "MIKE@@@@@@@", TRADE_EITHER_GENDER + npctrade 0, BELLSPROUT, ONIX, "ROCKY@@@@@@", $6696, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_EITHER_GENDER + npctrade 1, KRABBY, VOLTORB, "VOLTY@@@@@@", $8898, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_EITHER_GENDER + npctrade 3, DRAGONAIR, DODRIO, "DORIS@@@@@@", $6677, SMOKE_BALL, 00283, "EMY@@@@@@@@", TRADE_FEMALE_ONLY + npctrade 2, HAUNTER, XATU, "PAUL@@@@@@@", $8696, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_EITHER_GENDER + npctrade 3, CHANSEY, AERODACTYL, "AEROY@@@@@@", $6696, GOLD_BERRY, 26491, "KIM@@@@@@@@", TRADE_EITHER_GENDER + npctrade 0, DUGTRIO, MAGNETON, "MAGGIE@@@@@", $6696, METAL_COAT, 50082, "FOREST@@@@@", TRADE_EITHER_GENDER +; fcf38 + + +PrintTradeText: ; fcf38 + push af + call GetTradeMonNames + pop af + ld bc, 2 * 4 + ld hl, TradeTexts + call AddNTimes + ld a, [wcf64] + ld c, a +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +; fcf53 + +TradeTexts: ; fcf53 +; intro + dw TradeIntroText1 + dw TradeIntroText2 + dw TradeIntroText3 + dw TradeIntroText4 + +; cancel + dw TradeCancelText1 + dw TradeCancelText2 + dw TradeCancelText3 + dw TradeCancelText4 + +; wrong mon + dw TradeWrongText1 + dw TradeWrongText2 + dw TradeWrongText3 + dw TradeWrongText4 + +; completed + dw TradeCompleteText1 + dw TradeCompleteText2 + dw TradeCompleteText3 + dw TradeCompleteText4 + +; after + dw TradeAfterText1 + dw TradeAfterText2 + dw TradeAfterText3 + dw TradeAfterText4 +; fcf7b + + +ConnectLinkCableText: ; 0xfcf7b + ; OK, connect the Game Link Cable. + text_jump UnknownText_0x1bd407 + db "@" +; 0xfcf80 + + +TradedForText: ; 0xfcf80 + ; traded givemon for getmon + text_jump UnknownText_0x1bd429 + start_asm + + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld hl, .done + ret + +.done + ; sound_dex_fanfare_80_109 + ; interpret_data + text_jump UnknownText_0x1bd445 + db "@" +; 0xfcf97 + + +TradeIntroText1: ; 0xfcf97 + ; I collect #MON. Do you have @ ? Want to trade it for my @ ? + text_jump UnknownText_0x1bd449 + db "@" +; 0xfcf9c + +TradeCancelText1: ; 0xfcf9c + ; You don't want to trade? Aww… + text_jump UnknownText_0x1bd48c + db "@" +; 0xfcfa1 + +TradeWrongText1: ; 0xfcfa1 + ; Huh? That's not @ . What a letdown… + text_jump UnknownText_0x1bd4aa + db "@" +; 0xfcfa6 + +TradeCompleteText1: ; 0xfcfa6 + ; Yay! I got myself @ ! Thanks! + text_jump UnknownText_0x1bd4d2 + db "@" +; 0xfcfab + +TradeAfterText1: ; 0xfcfab + ; Hi, how's my old @ doing? + text_jump UnknownText_0x1bd4f4 + db "@" +; 0xfcfb0 + + +TradeIntroText2: +TradeIntroText3: ; 0xfcfb0 + ; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ? + text_jump UnknownText_0x1bd512 + db "@" +; 0xfcfb5 + +TradeCancelText2: +TradeCancelText3: ; 0xfcfb5 + ; You don't have one either? Gee, that's really disappointing… + text_jump UnknownText_0x1bd565 + db "@" +; 0xfcfba + +TradeWrongText2: +TradeWrongText3: ; 0xfcfba + ; You don't have @ ? That's too bad, then. + text_jump UnknownText_0x1bd5a1 + db "@" +; 0xfcfbf + +TradeCompleteText2: ; 0xfcfbf + ; Great! Thank you! I finally got @ . + text_jump UnknownText_0x1bd5cc + db "@" +; 0xfcfc4 + +TradeAfterText2: ; 0xfcfc4 + ; Hi! The @ you traded me is doing great! + text_jump UnknownText_0x1bd5f4 + db "@" +; 0xfcfc9 + + +TradeIntroText4: ; 0xfcfc9 + ; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ? + text_jump UnknownText_0x1bd621 + db "@" +; 0xfcfce + +TradeCancelText4: ; 0xfcfce + ; You don't want to trade? Oh, darn… + text_jump UnknownText_0x1bd673 + db "@" +; 0xfcfd3 + +TradeWrongText4: ; 0xfcfd3 + ; That's not @ . Please trade with me if you get one. + text_jump UnknownText_0x1bd696 + db "@" +; 0xfcfd8 + +TradeCompleteText4: ; 0xfcfd8 + ; Wow! Thank you! I always wanted @ ! + text_jump UnknownText_0x1bd6cd + db "@" +; 0xfcfdd + +TradeAfterText4: ; 0xfcfdd + ; How is that @ I traded you doing? Your @ 's so cute! + text_jump UnknownText_0x1bd6f5 + db "@" +; 0xfcfe2 + + +TradeCompleteText3: ; 0xfcfe2 + ; Uh? What happened? + text_jump UnknownText_0x1bd731 + db "@" +; 0xfcfe7 + +TradeAfterText3: ; 0xfcfe7 + ; Trading is so odd… I still have a lot to learn about it. + text_jump UnknownText_0x1bd745 + db "@" +; 0xfcfec diff --git a/engine/options_menu.asm b/engine/options_menu.asm new file mode 100755 index 000000000..ed2c21f30 --- /dev/null +++ b/engine/options_menu.asm @@ -0,0 +1,565 @@ +_OptionsMenu: ; e41d0 + ld hl, hInMenu + ld a, [hl] + push af + ld [hl], $1 + call ClearBGPalettes + hlcoord 0, 0 + ld b, $10 + ld c, $12 + call TextBox + hlcoord 2, 2 + ld de, StringOptions + call PlaceString + xor a + ld [wJumptableIndex], a + ld c, $6 ; number of items on the menu minus 1 (for cancel) + +.print_text_loop ; this next will display the settings of each option when the menu is opened + push bc + xor a + ld [hJoyLast], a + call GetOptionPointer + pop bc + ld hl, wJumptableIndex + inc [hl] + dec c + jr nz, .print_text_loop + + call UpdateFrame + xor a + ld [wJumptableIndex], a + inc a + ld [hBGMapMode], a + call WaitBGMap + ld b, SCGB_08 + call GetSGBLayout + call SetPalettes + +.joypad_loop + call JoyTextDelay + ld a, [hJoyPressed] + and START | B_BUTTON + jr nz, .ExitOptions + call OptionsControl + jr c, .dpad + call GetOptionPointer + jr c, .ExitOptions + +.dpad + call Functione455c + ld c, 3 + call DelayFrames + jr .joypad_loop + +.ExitOptions + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX + pop af + ld [hInMenu], a + ret +; e4241 + +StringOptions: ; e4241 + db "TEXT SPEED<LNBRK>" + db " :<LNBRK>" + db "BATTLE SCENE<LNBRK>" + db " :<LNBRK>" + db "BATTLE STYLE<LNBRK>" + db " :<LNBRK>" + db "SOUND<LNBRK>" + db " :<LNBRK>" + db "PRINT<LNBRK>" + db " :<LNBRK>" + db "MENU ACCOUNT<LNBRK>" + db " :<LNBRK>" + db "FRAME<LNBRK>" + db " :TYPE<LNBRK>" + db "CANCEL@" +; e42d6 + + +GetOptionPointer: ; e42d6 + ld a, [wJumptableIndex] ; load the cursor position to a + ld e, a ; copy it to de + ld d, 0 + ld hl, .Pointers +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] ; jump to the code of the current highlighted item +; e42e5 + +.Pointers + dw Options_TextSpeed + dw Options_BattleScene + dw Options_BattleStyle + dw Options_Sound + dw Options_Print + dw Options_MenuAccount + dw Options_Frame + dw Options_Cancel +; e42f5 + + +Options_TextSpeed: ; e42f5 + call GetTextSpeed + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + ld a, c ; right pressed + cp SLOW_TEXT + jr c, .Increase + ld c, FAST_TEXT +- 1 + +.Increase + inc c + ld a, e + jr .Save + +.LeftPressed + ld a, c + and a + jr nz, .Decrease + ld c, SLOW_TEXT + 1 + +.Decrease + dec c + ld a, d + +.Save + ld b, a + ld a, [Options] + and $f0 + or b + ld [Options], a + +.NonePressed + ld b, 0 + ld hl, .Strings +rept 2 + add hl, bc +endr + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 11, 3 + call PlaceString + and a + ret +; e4331 + +.Strings + dw .Fast + dw .Mid + dw .Slow + +.Fast + db "FAST@" +.Mid + db "MID @" +.Slow + db "SLOW@" +; e4346 + + +GetTextSpeed: ; e4346 + ld a, [Options] ; This converts the number of frames, to 0, 1, 2 representing speed + and 7 + cp 5 ; 5 frames of delay is slow + jr z, .slow + cp 1 ; 1 frame of delay is fast + jr z, .fast + ld c, MED_TEXT ; set it to mid if not one of the above + lb de, 1, 5 + ret + +.slow + ld c, SLOW_TEXT + lb de, 3, 1 + ret + +.fast + ld c, FAST_TEXT + lb de, 5, 3 + ret +; e4365 + + +Options_BattleScene: ; e4365 + ld hl, Options + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + bit BATTLE_SCENE, [hl] + jr nz, .ToggleOn + jr .ToggleOff + +.LeftPressed + bit BATTLE_SCENE, [hl] + jr z, .ToggleOff + jr .ToggleOn + +.NonePressed + bit BATTLE_SCENE, [hl] + jr z, .ToggleOn + jr .ToggleOff + +.ToggleOn + res BATTLE_SCENE, [hl] + ld de, .On + jr .Display + +.ToggleOff + set BATTLE_SCENE, [hl] + ld de, .Off + +.Display + hlcoord 11, 5 + call PlaceString + and a + ret +; e4398 + +.On + db "ON @" +.Off + db "OFF@" +; e43a0 + + +Options_BattleStyle: ; e43a0 + ld hl, Options + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + bit BATTLE_SHIFT, [hl] + jr nz, .ToggleShift + jr .ToggleSet + +.LeftPressed + bit BATTLE_SHIFT, [hl] + jr z, .ToggleSet + jr .ToggleShift + +.NonePressed + bit BATTLE_SHIFT, [hl] + jr nz, .ToggleSet + +.ToggleShift + res BATTLE_SHIFT, [hl] + ld de, .Shift + jr .Display + +.ToggleSet + set BATTLE_SHIFT, [hl] + ld de, .Set + +.Display + hlcoord 11, 7 + call PlaceString + and a + ret +; e43d1 + +.Shift + db "SHIFT@" +.Set + db "SET @" +; e43dd + + +Options_Sound: ; e43dd + ld hl, Options + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + bit STEREO, [hl] + jr nz, .SetMono + jr .SetStereo + +.LeftPressed + bit STEREO, [hl] + jr z, .SetStereo + jr .SetMono + +.NonePressed + bit STEREO, [hl] + jr nz, .ToggleStereo + jr .ToggleMono + +.SetMono + res STEREO, [hl] + call RestartMapMusic + +.ToggleMono + ld de, .Mono + jr .Display + +.SetStereo + set STEREO, [hl] + call RestartMapMusic + +.ToggleStereo + ld de, .Stereo + +.Display + hlcoord 11, 9 + call PlaceString + and a + ret +; e4416 + +.Mono + db "MONO @" +.Stereo + db "STEREO@" +; e4424 + + +Options_Print: ; e4424 + call GetPrinterSetting + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + ld a, c + cp 4 + jr c, .Increase + ld c, -1 + +.Increase + inc c + ld a, e + jr .Save + +.LeftPressed + ld a, c + and a + jr nz, .Decrease + ld c, 5 + +.Decrease + dec c + ld a, d + +.Save + ld b, a + ld [GBPrinter], a + +.NonePressed + ld b, $0 + ld hl, .Strings +rept 2 + add hl, bc +endr + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 11, 11 + call PlaceString + and a + ret +; e445a + +.Strings + dw .Lightest + dw .Lighter + dw .Normal + dw .Darker + dw .Darkest + +.Lightest + db "LIGHTEST@" +.Lighter + db "LIGHTER @" +.Normal + db "NORMAL @" +.Darker + db "DARKER @" +.Darkest + db "DARKEST @" +; e4491 + + +GetPrinterSetting: ; e4491 + ld a, [GBPrinter] ; converts from the stored printer setting to 0,1,2,3,4 + and a + jr z, .IsLightest + cp PRINT_LIGHTER + jr z, .IsLight + cp PRINT_DARKER + jr z, .IsDark + cp PRINT_DARKEST + jr z, .IsDarkest + ld c, 2 ; normal if none of the above + lb de, PRINT_LIGHTER, PRINT_DARKER ; the 2 values next to this setting + ret + +.IsLightest + ld c, 0 + lb de, PRINT_DARKEST, PRINT_LIGHTER ; the 2 values next to this setting + ret + +.IsLight + ld c, 1 + lb de, PRINT_LIGHTEST, PRINT_NORMAL ; the 2 values next to this setting + ret + +.IsDark + ld c, 3 + lb de, PRINT_NORMAL, PRINT_DARKEST ; the 2 values next to this setting + ret + +.IsDarkest + ld c, 4 + lb de, PRINT_DARKER, PRINT_LIGHTEST ; the 2 values next to this setting + ret +; e44c1 + +Options_MenuAccount: ; e44c1 + ld hl, Options2 + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr z, .NonePressed + bit MENU_ACCOUNT, [hl] + jr nz, .ToggleOff + jr .ToggleOn + +.LeftPressed + bit MENU_ACCOUNT, [hl] + jr z, .ToggleOn + jr .ToggleOff + +.NonePressed + bit MENU_ACCOUNT, [hl] + jr nz, .ToggleOn + +.ToggleOff + res MENU_ACCOUNT, [hl] + ld de, .Off + jr .Display + +.ToggleOn + set MENU_ACCOUNT, [hl] + ld de, .On + +.Display + hlcoord 11, 13 + call PlaceString + and a + ret +; e44f2 + +.Off + db "OFF@" +.On + db "ON @" +; e44fa + + +Options_Frame: ; e44fa + ld hl, TextBoxFrame + ld a, [hJoyPressed] + bit D_LEFT_F, a + jr nz, .LeftPressed + bit D_RIGHT_F, a + jr nz, .RightPressed + and a + ret + +.RightPressed + ld a, [hl] + inc a + jr .Save + +.LeftPressed + ld a, [hl] + dec a + +.Save + and $7 + ld [hl], a +UpdateFrame: ; e4512 + ld a, [TextBoxFrame] + hlcoord 16, 15 ; where on the screen the number is drawn + add "1" + ld [hl], a + call LoadFontsExtra + and a + ret +; e4520 + +Options_Cancel: ; e4520 + ld a, [hJoyPressed] + and A_BUTTON + jr nz, .Exit + and a + ret + +.Exit + scf + ret +; e452a + +OptionsControl: ; e452a + ld hl, wJumptableIndex + ld a, [hJoyLast] + cp D_DOWN + jr z, .DownPressed + cp D_UP + jr z, .UpPressed + and a + ret + +.DownPressed + ld a, [hl] ; load the cursor position to a + cp $7 ; maximum number of items in option menu + jr nz, .CheckFive + ld [hl], $0 + scf + ret + +.CheckFive ; I have no idea why this exists... + cp $5 + jr nz, .Increase + ld [hl], $5 + +.Increase + inc [hl] + scf + ret + +.UpPressed + ld a, [hl] + cp $6 + jr nz, .NotSix + ld [hl], $5 ; Another thing where I'm not sure why it exists + scf + ret + +.NotSix + and a + jr nz, .Decrease + ld [hl], $8 ; number of option items +1 + +.Decrease + dec [hl] + scf + ret +; e455c diff --git a/engine/overworld.asm b/engine/overworld.asm new file mode 100755 index 000000000..fa4d02e7c --- /dev/null +++ b/engine/overworld.asm @@ -0,0 +1,1488 @@ +GetEmote2bpp: ; 1412a + ld a, $1 + ld [rVBK], a + call Get2bpp + xor a + ld [rVBK], a + ret +; 14135 + +_ReplaceKrisSprite:: ; 14135 + call GetPlayerSprite + ld a, [UsedSprites] + ld [hUsedSpriteIndex], a + ld a, [UsedSprites + 1] + ld [hUsedSpriteTile], a + call GetUsedSprite + ret +; 14146 + +Function14146: ; mobile + ld hl, wSpriteFlags + ld a, [hl] + push af + res 7, [hl] + set 6, [hl] + call RunCallback_04 + pop af + ld [wSpriteFlags], a + ret +; 14157 + +Function14157: ; mobile + ld hl, wSpriteFlags + ld a, [hl] + push af + set 7, [hl] + res 6, [hl] + call RunCallback_04 + pop af + ld [wSpriteFlags], a + ret +; 14168 + +RefreshSprites:: ; 14168 + call .Refresh + call RunCallback_04 + ret +; 1416f + +.Refresh: ; 1416f + xor a + ld bc, UsedSpritesEnd - UsedSprites + ld hl, UsedSprites + call ByteFill + call GetPlayerSprite + call AddMapSprites + call LoadAndSortSprites + ret +; 14183 + +GetPlayerSprite: ; 14183 +; Get Chris or Kris's sprite. + ld hl, .Chris + ld a, [wPlayerSpriteSetupFlags] + bit 2, a + jr nz, .go + ld a, [PlayerGender] + bit 0, a + jr z, .go + ld hl, .Kris + +.go + ld a, [PlayerState] + ld c, a +.loop + ld a, [hli] + cp c + jr z, .good + inc hl + cp $ff + jr nz, .loop + +; Any player state not in the array defaults to Chris's sprite. + xor a ; ld a, PLAYER_NORMAL + ld [PlayerState], a + ld a, SPRITE_CHRIS + jr .finish + +.good + ld a, [hl] + +.finish + ld [UsedSprites + 0], a + ld [PlayerSprite], a + ld [PlayerObjectSprite], a + ret + +.Chris + db PLAYER_NORMAL, SPRITE_CHRIS + db PLAYER_BIKE, SPRITE_CHRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff + +.Kris + db PLAYER_NORMAL, SPRITE_KRIS + db PLAYER_BIKE, SPRITE_KRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff +; 141c9 + + +AddMapSprites: ; 141c9 + call GetMapPermission + call CheckOutdoorMap + jr z, .outdoor + call AddIndoorSprites + ret + +.outdoor + call AddOutdoorSprites + ret +; 141d9 + + +AddIndoorSprites: ; 141d9 + ld hl, Map1ObjectSprite + ld a, 1 +.loop + push af + ld a, [hl] + call AddSpriteGFX + ld de, OBJECT_LENGTH + add hl, de + pop af + inc a + cp NUM_OBJECTS + jr nz, .loop + ret +; 141ee + + +AddOutdoorSprites: ; 141ee + ld a, [MapGroup] + dec a + ld c, a + ld b, 0 + ld hl, OutdoorSprites +rept 2 + add hl, bc +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld c, MAX_OUTDOOR_SPRITES +.loop + push bc + ld a, [hli] + call AddSpriteGFX + pop bc + dec c + jr nz, .loop + ret +; 14209 + + +RunCallback_04: ; 14209 + ld a, $4 + call RunMapCallback + call GetUsedSprites + call .LoadMiscTiles + ret +; 14215 + +.LoadMiscTiles: ; 14215 + ld a, [wSpriteFlags] + bit 6, a + ret nz + + ld c, EMOTE_SHADOW + callba LoadEmote + call GetMapPermission + call CheckOutdoorMap + ld c, EMOTE_0B + jr z, .outdoor + ld c, EMOTE_BOULDER_DUST +.outdoor + callba LoadEmote + ret +; 14236 + + + +SafeGetSprite: ; 14236 + push hl + call GetSprite + pop hl + ret +; 1423c + +GetSprite: ; 1423c + call GetMonSprite + ret c + + ld hl, SpriteHeaders ; address + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ; load the address into de + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ; load the length into c + ld a, [hli] + swap a + ld c, a + ; load the sprite bank into both b and h + ld b, [hl] + ld a, [hli] + ; load the sprite type into l + ld l, [hl] + ld h, a + ret +; 14259 + + +GetMonSprite: ; 14259 +; Return carry if a monster sprite was loaded. + + cp SPRITE_POKEMON + jr c, .Normal + cp SPRITE_DAYCARE_MON_1 + jr z, .wBreedMon1 + cp SPRITE_DAYCARE_MON_2 + jr z, .wBreedMon2 + cp SPRITE_VARS + jr nc, .Variable + jr .Icon + +.Normal + and a + ret + +.Icon + sub SPRITE_POKEMON + ld e, a + ld d, 0 + ld hl, SpriteMons + add hl, de + ld a, [hl] + jr .Mon + +.wBreedMon1 + ld a, [wBreedMon1Species] + jr .Mon + +.wBreedMon2 + ld a, [wBreedMon2Species] + +.Mon + ld e, a + and a + jr z, .NoBreedmon + + callba Function8e82b + + ld l, 1 + ld h, 0 + scf + ret + +.Variable + sub SPRITE_VARS + ld e, a + ld d, 0 + ld hl, VariableSprites + add hl, de + ld a, [hl] + and a + jp nz, GetMonSprite + +.NoBreedmon + ld a, 1 + ld l, 1 + ld h, 0 + and a + ret +; 142a7 + + +_DoesSpriteHaveFacings:: ; 142a7 +; Checks to see whether we can apply a facing to a sprite. +; Returns carry unless the sprite is a Pokemon or a Still Sprite. + cp SPRITE_POKEMON + jr nc, .only_down + + push hl + push bc + ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type + dec a + ld c, a + ld b, 0 + ld a, NUM_SPRITEHEADER_FIELDS + call AddNTimes + ld a, [hl] + pop bc + pop hl + cp STILL_SPRITE + jr nz, .only_down + scf + ret + +.only_down + and a + ret +; 142c4 + + +_GetSpritePalette:: ; 142c4 + ld a, c + call GetMonSprite + jr c, .is_pokemon + + ld hl, SpriteHeaders + 5 ; palette + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ld c, [hl] + ret + +.is_pokemon + xor a + ld c, a + ret +; 142db + + +LoadAndSortSprites: ; 142db + call LoadSpriteGFX + call SortUsedSprites + call ArrangeUsedSprites + ret +; 142e5 + + +AddSpriteGFX: ; 142e5 +; Add any new sprite ids to a list of graphics to be loaded. +; Return carry if the list is full. + + push hl + push bc + ld b, a + ld hl, UsedSprites + 2 + ld c, SPRITE_GFX_LIST_CAPACITY - 1 +.loop + ld a, [hl] + cp b + jr z, .exists + and a + jr z, .new +rept 2 + inc hl +endr + dec c + jr nz, .loop + + pop bc + pop hl + scf + ret + +.exists + pop bc + pop hl + and a + ret + +.new + ld [hl], b + pop bc + pop hl + and a + ret +; 14306 + + +LoadSpriteGFX: ; 14306 +; Bug: b is not preserved, so +; it's useless as a next count. + + ld hl, UsedSprites + ld b, SPRITE_GFX_LIST_CAPACITY +.loop + ld a, [hli] + and a + jr z, .done + push hl + call .LoadSprite + pop hl + ld [hli], a + dec b + jr nz, .loop + +.done + ret + +.LoadSprite + call GetSprite + ld a, l + ret +; 1431e + + +SortUsedSprites: ; 1431e +; Bubble-sort sprites by type. + +; Run backwards through UsedSprites to find the last one. + + ld c, SPRITE_GFX_LIST_CAPACITY + ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2 +.FindLastSprite + ld a, [de] + and a + jr nz, .FoundLastSprite +rept 2 + dec de +endr + dec c + jr nz, .FindLastSprite +.FoundLastSprite + dec c + jr z, .quit + +; If the length of the current sprite is +; higher than a later one, swap them. + + inc de + ld hl, UsedSprites + 1 + +.CheckSprite + push bc + push de + push hl + +.CheckFollowing + ld a, [de] + cp [hl] + jr nc, .loop + +; Swap the two sprites. + + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + dec de + dec hl + ld a, [de] + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + inc de + inc hl + +; Keep doing this until everything's in order. + +.loop +rept 2 + dec de +endr + dec c + jr nz, .CheckFollowing + + pop hl +rept 2 + inc hl +endr + pop de + pop bc + dec c + jr nz, .CheckSprite + +.quit + ret +; 14355 + + +ArrangeUsedSprites: ; 14355 +; Get the length of each sprite and space them out in VRAM. +; Crystal introduces a second table in VRAM bank 0. + + ld hl, UsedSprites + ld c, SPRITE_GFX_LIST_CAPACITY + ld b, 0 +.FirstTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; Spill over into the second table after $80 tiles. + add b + cp $80 + jr z, .loop + jr nc, .SecondTable + +.loop + ld [hl], b + inc hl + ld b, a + +; Assumes the next table will be reached before c hits 0. + dec c + jr nz, .FirstTableLength + +.SecondTable +; The second tile table starts at tile $80. + ld b, $80 + dec hl +.SecondTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; There are only two tables, so don't go any further than that. + add b + jr c, .quit + + ld [hl], b + ld b, a + inc hl + + dec c + jr nz, .SecondTableLength + +.quit + ret +; 14386 + + +GetSpriteLength: ; 14386 +; Return the length of sprite type a in tiles. + + cp WALKING_SPRITE + jr z, .AnyDirection + cp STANDING_SPRITE + jr z, .AnyDirection + cp STILL_SPRITE + jr z, .OneDirection + + ld a, 12 + ret + +.AnyDirection + ld a, 12 + ret + +.OneDirection + ld a, 4 + ret +; 1439b + + +GetUsedSprites: ; 1439b + ld hl, UsedSprites + ld c, SPRITE_GFX_LIST_CAPACITY + +.loop + ld a, [wSpriteFlags] + res 5, a + ld [wSpriteFlags], a + + ld a, [hli] + and a + jr z, .done + ld [hUsedSpriteIndex], a + + ld a, [hli] + ld [hUsedSpriteTile], a + + bit 7, a + jr z, .dont_set + + ld a, [wSpriteFlags] + set 5, a ; load VBank0 + ld [wSpriteFlags], a + +.dont_set + push bc + push hl + call GetUsedSprite + pop hl + pop bc + dec c + jr nz, .loop + +.done + ret +; 143c8 + +GetUsedSprite: ; 143c8 + ld a, [hUsedSpriteIndex] + call SafeGetSprite + ld a, [hUsedSpriteTile] + call .GetTileAddr + push hl + push de + push bc + ld a, [wSpriteFlags] + bit 7, a + jr nz, .skip + call .CopyToVram + +.skip + pop bc + ld l, c + ld h, $0 +rept 4 + add hl, hl +endr + pop de + add hl, de + ld d, h + ld e, l + pop hl + + ld a, [wSpriteFlags] + bit 5, a + jr nz, .done + bit 6, a + jr nz, .done + + ld a, [hUsedSpriteIndex] + call _DoesSpriteHaveFacings + jr c, .done + + ld a, h + add $8 + ld h, a + call .CopyToVram + +.done + ret +; 14406 + +.GetTileAddr: ; 14406 +; Return the address of tile (a) in (hl). + and $7f + ld l, a + ld h, 0 +rept 4 + add hl, hl +endr + ld a, l + add VTiles0 % $100 + ld l, a + ld a, h + adc VTiles0 / $100 + ld h, a + ret +; 14418 + +.CopyToVram: ; 14418 + ld a, [rVBK] + push af + ld a, [wSpriteFlags] + bit 5, a + ld a, $1 + jr z, .bankswitch + ld a, $0 + +.bankswitch + ld [rVBK], a + call Get2bpp + pop af + ld [rVBK], a + ret +; 1442f + +LoadEmote:: ; 1442f +; Get the address of the pointer to emote c. + ld a, c + ld bc, 6 + ld hl, EmotesPointers + call AddNTimes +; Load the emote address into de + ld e, [hl] + inc hl + ld d, [hl] +; load the length of the emote (in tiles) into c + inc hl + ld c, [hl] + swap c +; load the emote pointer bank into b + inc hl + ld b, [hl] +; load the VRAM destination into hl + inc hl + ld a, [hli] + ld h, [hl] + ld l, a +; if the emote has a length of 0, do not proceed (error handling) + ld a, c + and a + ret z + call GetEmote2bpp + ret +; 1444d + +emote_header: MACRO + dw \1 + db \2 tiles, BANK(\1) + dw VTiles1 tile \3 +ENDM + +EmotesPointers: ; 144d +; dw source address +; db length, bank +; dw dest address + + emote_header ShockEmote, 4, $78 + emote_header QuestionEmote, 4, $78 + emote_header HappyEmote, 4, $78 + emote_header SadEmote, 4, $78 + emote_header HeartEmote, 4, $78 + emote_header BoltEmote, 4, $78 + emote_header SleepEmote, 4, $78 + emote_header FishEmote, 4, $78 + emote_header JumpShadowGFX, 1, $7c + emote_header FishingRodGFX2, 2, $7c + emote_header BoulderDustGFX, 2, $7e + emote_header FishingRodGFX4, 1, $7e +; 14495 + + +SpriteMons: ; 14495 + db UNOWN + db GEODUDE + db GROWLITHE + db WEEDLE + db SHELLDER + db ODDISH + db GENGAR + db ZUBAT + db MAGIKARP + db SQUIRTLE + db TOGEPI + db BUTTERFREE + db DIGLETT + db POLIWAG + db PIKACHU + db CLEFAIRY + db CHARMANDER + db JYNX + db STARMIE + db BULBASAUR + db JIGGLYPUFF + db GRIMER + db EKANS + db PARAS + db TENTACOOL + db TAUROS + db MACHOP + db VOLTORB + db LAPRAS + db RHYDON + db MOLTRES + db SNORLAX + db GYARADOS + db LUGIA + db HO_OH +; 144b8 + + +OutdoorSprites: ; 144b8 +; Valid sprite IDs for each map group. + + dw Group1Sprites + dw Group2Sprites + dw Group3Sprites + dw Group4Sprites + dw Group5Sprites + dw Group6Sprites + dw Group7Sprites + dw Group8Sprites + dw Group9Sprites + dw Group10Sprites + dw Group11Sprites + dw Group12Sprites + dw Group13Sprites + dw Group14Sprites + dw Group15Sprites + dw Group16Sprites + dw Group17Sprites + dw Group18Sprites + dw Group19Sprites + dw Group20Sprites + dw Group21Sprites + dw Group22Sprites + dw Group23Sprites + dw Group24Sprites + dw Group25Sprites + dw Group26Sprites +; 144ec + + +Group13Sprites: ; 144ec + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14503 + +Group23Sprites: ; 14503 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1451a + +Group14Sprites: ; 1451a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14531 + +Group6Sprites: ; 14531 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14548 + +Group7Sprites: ; 14548 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 1455f + +Group25Sprites: ; 1455f + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 14576 + +Group21Sprites: ; 14576 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_POLIWAG + db SPRITE_TEACHER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_BIKER + db SPRITE_SILVER + db SPRITE_BLUE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1458d + +Group18Sprites: ; 1458d + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145a4 + +Group12Sprites: ; 145a4 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145bb + +Group17Sprites: ; 145bb + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145d2 + +Group16Sprites: ; 145d2 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_BUENA + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_MACHOP + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 145e9 + +Group24Sprites: ; 145e9 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14600 + +Group26Sprites: ; 14600 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14617 + +Group19Sprites: ; 14617 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1462e + +Group10Sprites: ; 1462e + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14645 + +Group4Sprites: ; 14645 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1465c + +Group8Sprites: ; 1465c + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_KURT_OUTSIDE + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_TEACHER + db SPRITE_AZALEA_ROCKET + db SPRITE_LASS + db SPRITE_SILVER + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 14673 + +Group11Sprites: ; 14673 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_POKE_BALL + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_DAYCARE_MON_1 + db SPRITE_COOLTRAINER_F + db SPRITE_ROCKET + db SPRITE_LASS + db SPRITE_DAYCARE_MON_2 + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 1468a + +Group22Sprites: ; 1468a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F + db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146a1 + +Group1Sprites: ; 146a1 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F + db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146b8 + +Group9Sprites: ; 146b8 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LANCE + db SPRITE_GRAMPS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_LASS + db SPRITE_YOUNGSTER + db SPRITE_GYARADOS + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146cf + +Group2Sprites: ; 146cf + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146e6 + +Group5Sprites: ; 146e6 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146fd + +Group3Sprites: ; 146fd + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_GAMEBOY_KID + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LASS + db SPRITE_POKEFAN_F + db SPRITE_TEACHER + db SPRITE_YOUNGSTER + db SPRITE_GROWLITHE + db SPRITE_POKEFAN_M + db SPRITE_ROCKER + db SPRITE_FISHER + db SPRITE_SCIENTIST + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 14714 + +Group15Sprites: ; 14714 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SAILOR + db SPRITE_FISHING_GURU + db SPRITE_GENTLEMAN + db SPRITE_SUPER_NERD + db SPRITE_HO_OH + db SPRITE_TEACHER + db SPRITE_COOLTRAINER_F + db SPRITE_YOUNGSTER + db SPRITE_FAIRY + db SPRITE_POKE_BALL + db SPRITE_ROCK +; 1472b + +Group20Sprites: ; 1472b + db SPRITE_OAK + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_TWIN + db SPRITE_POKEFAN_M + db SPRITE_GRAMPS + db SPRITE_FAIRY + db SPRITE_SILVER + db SPRITE_FISHING_GURU + db SPRITE_POKE_BALL + db SPRITE_POKEDEX +; 14736 + + +SpriteHeaders: ; 14736 +INCLUDE "gfx/overworld/sprite_headers.asm" +; 1499a diff --git a/engine/pack.asm b/engine/pack.asm index 2ba9c9d3a..0b7d35ece 100644 --- a/engine/pack.asm +++ b/engine/pack.asm @@ -1,7 +1,7 @@ Pack: ; 10000 ld hl, Options - set 4, [hl] + set NO_TEXT_SCROLL, [hl] call Function1068a .loop call JoyTextDelay @@ -14,9 +14,9 @@ Pack: ; 10000 .done ld a, [wcf65] - ld [wd0d6], a + ld [wLastPocket], a ld hl, Options - res 4, [hl] + res NO_TEXT_SCROLL, [hl] ret ; 10026 @@ -65,11 +65,11 @@ Function10067: ; 10067 (4:4067) call CopyMenuDataHeader ld a, [wItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0df] - ld [wd0e4], a + ld a, [wItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0df], a + ld a, [wMenuScrollPosition] + ld [wItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wItemsPocketCursor], a ld b, $7 @@ -93,11 +93,11 @@ Function100a6: ; 100a6 (4:40a6) call CopyMenuDataHeader ld a, [wKeyItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e0] - ld [wd0e4], a + ld a, [wKeyItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e0], a + ld a, [wMenuScrollPosition] + ld [wKeyItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ld b, $3 @@ -164,7 +164,7 @@ MenuData2_0x1012c: ; 0x1012c Jumptable_10137: ; 10137 dw Function10159 - dw Function10492_ret + dw QuitItemSubmenu ; 1013b MenuDataHeader_0x1013b: ; 0x1013b @@ -185,8 +185,8 @@ MenuData2_0x10143: ; 0x10143 Jumptable_10153: ; 10153 dw Function10159 - dw Function103fd - dw Function10492_ret + dw GiveItem + dw QuitItemSubmenu ; 10159 Function10159: ; 10159 @@ -223,11 +223,11 @@ Function10198: ; 10198 (4:4198) call CopyMenuDataHeader ld a, [wBallsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e1] - ld [wd0e4], a + ld a, [wBallsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e1], a + ld a, [wMenuScrollPosition] + ld [wBallsPocketScrollPosition], a ld a, [MenuSelection2] ld [wBallsPocketCursor], a ld b, $1 @@ -267,32 +267,32 @@ Function101c5: ; 101c5 (4:41c5) jr .tossable_unselectable .usable - ld hl, MenuDataHeader_0x10249 + ld hl, MenuDataHeader_UsableKeyItem ld de, Jumptable_1026a jr .build_menu .selectable_usable - ld hl, MenuDataHeader_0x10274 + ld hl, MenuDataHeader_UsableItem ld de, Jumptable_10291 jr .build_menu .tossable_selectable - ld hl, MenuDataHeader_0x10299 + ld hl, MenuDataHeader_UnusableItem ld de, Jumptable_102ac jr .build_menu .tossable_unselectable - ld hl, MenuDataHeader_0x102b0 + ld hl, MenuDataHeader_UnusableKeyItem ld de, Jumptable_102c7 jr .build_menu .unusable - ld hl, MenuDataHeader_0x102cd + ld hl, MenuDataHeader_HoldableKeyItem ld de, Jumptable_102ea jr .build_menu .selectable_unusable - ld hl, MenuDataHeader_0x102f2 + ld hl, MenuDataHeader_HoldableItem ld de, Jumptable_1030b .build_menu push de @@ -307,15 +307,15 @@ Function101c5: ; 101c5 (4:41c5) jp [hl] ; 10249 (4:4249) -MenuDataHeader_0x10249: ; 0x10249 +MenuDataHeader_UsableKeyItem: ; 0x10249 db $40 ; flags db 01, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x10251 + dw .MenuData2 db 1 ; default option ; 0x10251 -MenuData2_0x10251: ; 0x10251 +.MenuData2: ; 0x10251 db $c0 ; flags db 5 ; items db "USE@" @@ -326,22 +326,22 @@ MenuData2_0x10251: ; 0x10251 ; 0x1026a Jumptable_1026a: ; 1026a - dw Function10311 - dw Function103fd - dw Function10364 - dw Function103c2 - dw Function10492_ret + dw UseItem + dw GiveItem + dw TossMenu + dw RegisterItem + dw QuitItemSubmenu ; 10274 -MenuDataHeader_0x10274: ; 0x10274 +MenuDataHeader_UsableItem: ; 0x10274 db $40 ; flags db 03, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x1027c + dw .MenuData2 db 1 ; default option ; 0x1027c -MenuData2_0x1027c: ; 0x1027c +.MenuData2: ; 0x1027c db $c0 ; flags db 4 ; items db "USE@" @@ -351,21 +351,21 @@ MenuData2_0x1027c: ; 0x1027c ; 0x10291 Jumptable_10291: ; 10291 - dw Function10311 - dw Function103fd - dw Function10364 - dw Function10492_ret + dw UseItem + dw GiveItem + dw TossMenu + dw QuitItemSubmenu ; 10299 -MenuDataHeader_0x10299: ; 0x10299 +MenuDataHeader_UnusableItem: ; 0x10299 db %01000000 ; flags db 07, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x102a1 + dw .MenuData2 db 1 ; default option ; 0x102a1 -MenuData2_0x102a1: ; 0x102a1 +.MenuData2: ; 0x102a1 db $c0 ; flags db 2 ; items db "USE@" @@ -373,19 +373,19 @@ MenuData2_0x102a1: ; 0x102a1 ; 0x102ac Jumptable_102ac: ; 102ac - dw Function10311 - dw Function10492_ret + dw UseItem + dw QuitItemSubmenu ; 102b0 -MenuDataHeader_0x102b0: ; 0x102b0 +MenuDataHeader_UnusableKeyItem: ; 0x102b0 db %01000000 ; flags db 05, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x102b8 + dw .MenuData2 db 1 ; default option ; 0x102b8 -MenuData2_0x102b8: ; 0x102b8 +.MenuData2: ; 0x102b8 db $c0 ; flags db 3 ; items db "USE@" @@ -394,20 +394,20 @@ MenuData2_0x102b8: ; 0x102b8 ; 0x102c7 Jumptable_102c7: ; 102c7 - dw Function10311 - dw Function103c2 - dw Function10492_ret + dw UseItem + dw RegisterItem + dw QuitItemSubmenu ; 102cd -MenuDataHeader_0x102cd: ; 0x102cd +MenuDataHeader_HoldableKeyItem: ; 0x102cd db $40 ; flags db 03, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x102d5 + dw .MenuData2 db 1 ; default option ; 0x102d5 -MenuData2_0x102d5: ; 0x102d5 +.MenuData2: ; 0x102d5 db $c0 ; flags db 4 ; items db "GIVE@" @@ -417,21 +417,21 @@ MenuData2_0x102d5: ; 0x102d5 ; 0x102ea Jumptable_102ea: ; 102ea - dw Function103fd - dw Function10364 - dw Function103c2 - dw Function10492_ret + dw GiveItem + dw TossMenu + dw RegisterItem + dw QuitItemSubmenu ; 102f2 -MenuDataHeader_0x102f2: ; 0x102f2 +MenuDataHeader_HoldableItem: ; 0x102f2 db $40 ; flags db 05, 13 ; start coords db 11, 19 ; end coords - dw MenuData2_0x102fa + dw .MenuData2 db 1 ; default option ; 0x102fa -MenuData2_0x102fa: ; 0x102fa +.MenuData2: ; 0x102fa db $c0 ; flags db 3 ; items db "GIVE@" @@ -440,12 +440,12 @@ MenuData2_0x102fa: ; 0x102fa ; 0x1030b Jumptable_1030b: ; 1030b - dw Function103fd - dw Function10364 - dw Function10492_ret + dw GiveItem + dw TossMenu + dw QuitItemSubmenu ; 10311 -Function10311: ; 10311 +UseItem: ; 10311 callba CheckItemMenu ld a, [wItemAttributeParamBuffer] ld hl, .jumptable @@ -464,7 +464,7 @@ Function10311: ; 10311 ; 1035c .Oak: ; 1032d (4:432d) - ld hl, UnknownText_0x10af3 + ld hl, Text_ThisIsntTheTime call Function10889 ret @@ -498,30 +498,30 @@ Function10311: ; 10311 ret ; 10364 (4:4364) -Function10364: ; 10364 - ld hl, UnknownText_0x10ae4 +TossMenu: ; 10364 + ld hl, Text_ThrowAwayHowMany call Function10889 callba Function24fbf push af call ExitMenu pop af - jr c, .asm_1039c - call Function10a1d - ld hl, UnknownText_0x10ae9 + jr c, .finish + call Pack_GetItemName + ld hl, Text_ConfirmThrowAway call MenuTextBox call YesNoBox push af call ExitMenu pop af - jr c, .asm_1039c + jr c, .finish ld hl, NumItems - ld a, [wd107] + ld a, [ItemCountBuffer] call TossItem - call Function10a1d - ld hl, UnknownText_0x10aee + call Pack_GetItemName + ld hl, Text_ThrewAway call Function10889 -.asm_1039c +.finish ret ; 1039d @@ -538,23 +538,23 @@ Function1039d: ; 1039d .asm_103aa xor a ld [wBallsPocketCursor], a - ld [wd0e1], a + ld [wBallsPocketScrollPosition], a ret .asm_103b2 xor a ld [wItemsPocketCursor], a - ld [wd0df], a + ld [wItemsPocketScrollPosition], a ret .asm_103ba xor a ld [wKeyItemsPocketCursor], a - ld [wd0e0], a + ld [wKeyItemsPocketScrollPosition], a ret ; 103c2 -Function103c2: ; 103c2 +RegisterItem: ; 103c2 callba CheckSelectableItem ld a, [wItemAttributeParamBuffer] and a @@ -564,27 +564,27 @@ Function103c2: ; 103c2 rrca and $c0 ld b, a - ld a, [wd107] + ld a, [ItemCountBuffer] inc a and $3f or b ld [WhichRegisteredItem], a ld a, [CurItem] ld [RegisteredItem], a - call Function10a1d + call Pack_GetItemName ld de, SFX_FULL_HEAL call WaitPlaySFX - ld hl, UnknownText_0x10afd + ld hl, Text_RegisteredItem call Function10889 ret .asm_103f6 - ld hl, UnknownText_0x10b02 + ld hl, Text_CantRegister call Function10889 ret ; 103fd -Function103fd: ; 103fd +GiveItem: ; 103fd ld a, [PartyCount] and a jp z, Function10486 @@ -595,9 +595,9 @@ Function103fd: ; 103fd ld a, $8 ld [PartyMenuActionText], a call ClearBGPalettes - callba Function5004f - callba Function50405 - callba Function503e0 + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX .asm_10427 callba WritePartyMenuTilemap callba PrintPartyMenuText @@ -652,7 +652,7 @@ TextJump_AnEGGCantHoldAnItem: ; 0x1048d db "@" ; 0x10492 -Function10492_ret: ; 10492 +QuitItemSubmenu: ; 10492 ret ; 10493 @@ -661,18 +661,18 @@ BattlePack: ; 10493 ld hl, Options set 4, [hl] call Function1068a -.asm_1049b +.loop call JoyTextDelay ld a, [wJumptableIndex] bit 7, a - jr nz, .asm_104ad + jr nz, .end call Function104b9 call DelayFrame - jr .asm_1049b + jr .loop -.asm_104ad +.end ld a, [wcf65] - ld [wd0d6], a + ld [wLastPocket], a ld hl, Options res 4, [hl] ret @@ -723,11 +723,11 @@ Function104fa: ; 104fa (4:44fa) call CopyMenuDataHeader ld a, [wItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0df] - ld [wd0e4], a + ld a, [wItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0df], a + ld a, [wMenuScrollPosition] + ld [wItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wItemsPocketCursor], a ld b, $7 @@ -751,11 +751,11 @@ Function10539: ; 10539 (4:4539) call CopyMenuDataHeader ld a, [wKeyItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e0] - ld [wd0e4], a + ld a, [wKeyItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e0], a + ld a, [wMenuScrollPosition] + ld [wKeyItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ld b, $3 @@ -773,7 +773,7 @@ Function10566: ; 10566 (4:4566) xor a ld [hBGMapMode], a call WaitBGMap_DrawPackGFX - ld hl, UnknownText_0x10b0c + ld hl, Text_PackEmptyString call Function10889 call Function10866 ret @@ -802,11 +802,11 @@ Function105a6: ; 105a6 (4:45a6) call CopyMenuDataHeader ld a, [wBallsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e1] - ld [wd0e4], a + ld a, [wBallsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e1], a + ld a, [wMenuScrollPosition] + ld [wBallsPocketScrollPosition], a ld a, [MenuSelection2] ld [wBallsPocketCursor], a ld b, $1 @@ -898,7 +898,7 @@ Function105dc: ; 105dc (4:45dc) .Oak: ; 10645 (4:4645) - ld hl, UnknownText_0x10af3 + ld hl, Text_ThisIsntTheTime call Function10889 ret @@ -951,7 +951,7 @@ Function105dc: ; 105dc (4:45dc) Function1068a: ; 1068a xor a ld [wJumptableIndex], a - ld a, [wd0d6] + ld a, [wLastPocket] and $3 ld [wcf65], a inc a @@ -1008,33 +1008,33 @@ Jumptable_106d1: ; 106d1 (4:46d1) call CopyMenuDataHeader ld a, [wItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0df] - ld [wd0e4], a + ld a, [wItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0df], a + ld a, [wMenuScrollPosition] + ld [wItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wItemsPocketCursor], a ret .KeyItemsPocket: ; 106ff (4:46ff) - ld a, $2 + ld a, 2 call InitPocket ld hl, MenuDataHeader_0x10a97 call CopyMenuDataHeader ld a, [wKeyItemsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e0] - ld [wd0e4], a + ld a, [wKeyItemsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e0], a + ld a, [wMenuScrollPosition] + ld [wKeyItemsPocketScrollPosition], a ld a, [MenuSelection2] ld [wKeyItemsPocketCursor], a ret .TMHMPocket: ; 10726 (4:4726) - ld a, $3 + ld a, 3 call InitPocket call WaitBGMap_DrawPackGFX callba Function2c76f @@ -1043,17 +1043,17 @@ Jumptable_106d1: ; 106d1 (4:46d1) ret .BallsPocket: ; 1073b (4:473b) - ld a, $1 + ld a, 1 call InitPocket ld hl, MenuDataHeader_0x10ac7 call CopyMenuDataHeader ld a, [wBallsPocketCursor] ld [wMenuCursorBuffer], a - ld a, [wd0e1] - ld [wd0e4], a + ld a, [wBallsPocketScrollPosition] + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] - ld [wd0e1], a + ld a, [wMenuScrollPosition] + ld [wBallsPocketScrollPosition], a ld a, [MenuSelection2] ld [wBallsPocketCursor], a ret @@ -1120,17 +1120,17 @@ Function1076f: ; 1076f ret ; 107bb -Function107bb: ; 107bb +TutorialPack: ; 107bb call Function106a5 ld a, [InputType] or a - jr z, .asm_107ca + jr z, .loop callba _DudeAutoInput_RightA -.asm_107ca +.loop call Function107d7 call Function1076f - jr c, .asm_107ca + jr c, .loop xor a ld [wcf66], a ret @@ -1138,13 +1138,13 @@ Function107bb: ; 107bb Function107d7: ; 107d7 ld a, [wJumptableIndex] - ld hl, Jumptable_107e1 + ld hl, .jumptable call Function1086b jp [hl] ; 107e1 -Jumptable_107e1: ; 107e1 (4:47e1) +.jumptable: ; 107e1 (4:47e1) dw Function107e9 dw Function1083b dw Function10807 @@ -1161,22 +1161,22 @@ MenuDataHeader_0x107ef: ; 0x107ef db $40 ; flags db 01, 07 ; start coords db 11, 19 ; end coords - dw MenuData2_0x107f7 + dw .MenuData2 db 1 ; default option ; 0x107f7 -MenuData2_0x107f7: ; 0x107f7 +.MenuData2: ; 0x107f7 db $ae ; flags db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, OTPartyMons dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10807 Function10807: ; 10807 (4:4807) - ld a, $2 + ld a, 2 ld hl, MenuDataHeader_0x1080e jr Function1085a ; 1080e (4:480e) @@ -1185,22 +1185,22 @@ MenuDataHeader_0x1080e: ; 0x1080e db $40 ; flags db 01, 07 ; start coords db 11, 19 ; end coords - dw MenuData2_0x10816 + dw .MenuData2 db 1 ; default option ; 0x10816 -MenuData2_0x10816: ; 0x10816 +.MenuData2: ; 0x10816 db $ae ; flags db 5, 8 ; rows, columns db 1 ; horizontal spacing dbw 0, OTPartyMon1Exp + 2 dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10826 Function10826: ; 10826 (4:4826) - ld a, $3 + ld a, 3 call InitPocket call WaitBGMap_DrawPackGFX callba Function2c76f @@ -1209,7 +1209,7 @@ Function10826: ; 10826 (4:4826) ret Function1083b: ; 1083b (4:483b) - ld a, $1 + ld a, 1 ld hl, MenuDataHeader_0x10842 jr Function1085a ; 10842 (4:4842) @@ -1218,18 +1218,18 @@ MenuDataHeader_0x10842: ; 0x10842 db $40 ; flags db 01, 07 ; start coords db 11, 19 ; end coords - dw MenuData2_0x1084a + dw .MenuData2 db 1 ; default option ; 0x1084a -MenuData2_0x1084a: ; 0x1084a +.MenuData2: ; 0x1084a db $ae ; flags db 5, 8 ; rows, columns db 2 ; horizontal spacing dbw 0, OTPartyMon1CaughtGender dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 1085a Function1085a: ; 1085a (4:485a) @@ -1374,7 +1374,7 @@ Function108d4: ; 108d4 (4:48d4) ret .asm_10923 callba Function2490c - ld hl, UnknownText_0x10b07 + ld hl, Text_MoveItemWhere call Function10889 scf ret @@ -1410,13 +1410,19 @@ Function10955: ; 10955 ld bc, $60 tiles ld a, BANK(PackMenuGFX) call FarCopyBytes + +; Background (blue if male, pink if female) hlcoord 0, 1 ld bc, 11 * SCREEN_WIDTH ld a, $24 call ByteFill + +; This is where the items themselves will be listed. hlcoord 5, 1 lb bc, 11, 15 call ClearBox + +; ◀▶ POCKET ▼▲ ITEMS hlcoord 0, 0 ld a, $28 ld c, SCREEN_WIDTH @@ -1425,31 +1431,34 @@ Function10955: ; 10955 inc a dec c jr nz, .loop + call DrawPocketName - call Function109a5 - hlcoord 0, 12 - lb bc, 4, 18 + call PlacePackGFX + +; Place the textbox for displaying the item description + hlcoord 0, SCREEN_HEIGHT - 4 - 2 + lb bc, 4, SCREEN_WIDTH - 2 call TextBox call EnableLCD call DrawPackGFX ret ; 109a5 -Function109a5: ; 109a5 +PlacePackGFX: ; 109a5 hlcoord 0, 3 ld a, $50 - ld de, 15 + ld de, SCREEN_WIDTH - 5 ld b, 3 -.asm_109af +.row ld c, 5 -.asm_109b1 +.column ld [hli], a inc a dec c - jr nz, .asm_109b1 + jr nz, .column add hl, de dec b - jr nz, .asm_109af + jr nz, .row ret ; 109bb @@ -1487,21 +1496,33 @@ DrawPocketName: ; 109bb ; 109e1 .tilemap: ; 109e1 - db $00, $04, $04, $04, $01, $06, $07, $08, $09, $0a, $02, $05, $05, $05, $03 - db $00, $04, $04, $04, $01, $15, $16, $17, $18, $19, $02, $05, $05, $05, $03 - db $00, $04, $04, $04, $01, $0b, $0c, $0d, $0e, $0f, $02, $05, $05, $05, $03 - db $00, $04, $04, $04, $01, $10, $11, $12, $13, $14, $02, $05, $05, $05, $03 + db $00, $04, $04, $04, $01 ; top border + db $06, $07, $08, $09, $0a ; Items + db $02, $05, $05, $05, $03 ; bottom border + + db $00, $04, $04, $04, $01 ; top border + db $15, $16, $17, $18, $19 ; Balls + db $02, $05, $05, $05, $03 ; bottom border + + db $00, $04, $04, $04, $01 ; top border + db $0b, $0c, $0d, $0e, $0f ; Key Items + db $02, $05, $05, $05, $03 ; bottom border + + db $00, $04, $04, $04, $01 ; top border + db $10, $11, $12, $13, $14 ; TM/HM + db $02, $05, $05, $05, $03 ; bottom border ; 10a1d -Function10a1d: ; 10a1d +Pack_GetItemName: ; 10a1d ld a, [CurItem] - ld [wd265], a + ld [wNamedObjectIndexBuffer], a call GetItemName call CopyName1 ret ; 10a2a -Function10a2a: ; 10a2a +Pack_ClearTilemap: ; 10a2a +; unreferenced hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT ld a, " " @@ -1540,7 +1561,7 @@ MenuData2_0x10a57: ; 0x10a57 dbw 0, NumItems dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10a67 MenuDataHeader_0x10a67: ; 0x10a67 @@ -1558,7 +1579,7 @@ MenuData2_0x10a6f: ; 0x10a6f dbw 0, NumItems dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10a7f MenuDataHeader_0x10a7f: ; 0x10a7f @@ -1576,7 +1597,7 @@ MenuData2_0x10a87: ; 0x10a87 dbw 0, NumKeyItems dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10a97 MenuDataHeader_0x10a97: ; 0x10a97 @@ -1594,7 +1615,7 @@ MenuData2_0x10a9f: ; 0x10a9f dbw 0, NumKeyItems dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10aaf MenuDataHeader_0x10aaf: ; 0x10aaf @@ -1612,7 +1633,7 @@ MenuData2_0x10ab7: ; 0x10ab7 dbw 0, NumBalls dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10ac7 MenuDataHeader_0x10ac7: ; 0x10ac7 @@ -1630,34 +1651,34 @@ MenuData2_0x10acf: ; 0x10acf dbw 0, NumBalls dba PlaceMenuItemName dba PlaceMenuItemQuantity - dba Function244c3 + dba UpdateItemDescription ; 10adf -UnknownText_0x10adf: ; 0x10adf +Text_PackNoItems: ; 0x10adf ; No items. text_jump UnknownText_0x1c0b9a db "@" ; 0x10ae4 -UnknownText_0x10ae4: ; 0x10ae4 +Text_ThrowAwayHowMany: ; 0x10ae4 ; Throw away how many? text_jump UnknownText_0x1c0ba5 db "@" ; 0x10ae9 -UnknownText_0x10ae9: ; 0x10ae9 +Text_ConfirmThrowAway: ; 0x10ae9 ; Throw away @ @ (S)? text_jump UnknownText_0x1c0bbb db "@" ; 0x10aee -UnknownText_0x10aee: ; 0x10aee +Text_ThrewAway: ; 0x10aee ; Threw away @ (S). text_jump UnknownText_0x1c0bd8 db "@" ; 0x10af3 -UnknownText_0x10af3: ; 0x10af3 +Text_ThisIsntTheTime: ; 0x10af3 ; OAK: ! This isn't the time to use that! text_jump UnknownText_0x1c0bee db "@" @@ -1669,25 +1690,25 @@ TextJump_YouDontHaveAPkmn: ; 0x10af8 db "@" ; 0x10afd -UnknownText_0x10afd: ; 0x10afd +Text_RegisteredItem: ; 0x10afd ; Registered the @ . text_jump UnknownText_0x1c0c2e db "@" ; 0x10b02 -UnknownText_0x10b02: ; 0x10b02 +Text_CantRegister: ; 0x10b02 ; You can't register that item. text_jump UnknownText_0x1c0c45 db "@" ; 0x10b07 -UnknownText_0x10b07: ; 0x10b07 +Text_MoveItemWhere: ; 0x10b07 ; Where should this be moved to? text_jump UnknownText_0x1c0c63 db "@" ; 0x10b0c -UnknownText_0x10b0c: ; 0x10b0c +Text_PackEmptyString: ; 0x10b0c ; text_jump UnknownText_0x1c0c83 db "@" diff --git a/engine/party_menu.asm b/engine/party_menu.asm index 4d50ee8e4..06b774064 100644 --- a/engine/party_menu.asm +++ b/engine/party_menu.asm @@ -20,7 +20,7 @@ Function5001d: ; 5001d call ClearBGPalettes call Function5003f call WaitBGMap - ld b, $a + ld b, SCGB_0A call GetSGBLayout call SetPalettes call DelayFrame @@ -30,18 +30,18 @@ Function5001d: ; 5001d ; 5003f Function5003f: ; 5003f - call Function5004f - call Function50405 - call Function503e0 + call LoadPartyMenuGFX + call InitPartyMenuWithCancel + call InitPartyMenuGFX call WritePartyMenuTilemap call PrintPartyMenuText ret ; 5004f -Function5004f: ; 5004f +LoadPartyMenuGFX: ; 5004f call LoadFontsBattleExtra callab Function8ad1 ; engine/color.asm - callab InefficientlyClear121BytesAtwc300 + callab ClearSpriteAnims ret ; 5005f @@ -149,7 +149,7 @@ PlacePartyHPBar: ; 500cf ld b, $0 add hl, bc call SetHPPal - ld b, $fc + ld b, SCGB_FC call GetSGBLayout .skip @@ -162,7 +162,7 @@ PlacePartyHPBar: ; 500cf inc b dec c jr nz, .loop - ld b, $a + ld b, SCGB_0A call GetSGBLayout ret ; 50117 @@ -648,7 +648,7 @@ endr ; 503e0 -Function503e0: ; 503e0 +InitPartyMenuGFX: ; 503e0 ld hl, PartyCount ld a, [hli] and a @@ -656,7 +656,7 @@ Function503e0: ; 503e0 ld c, a xor a ld [hObjectStructIndexBuffer], a -.asm_503ea +.loop push bc push hl ld hl, Function8e83f @@ -669,60 +669,62 @@ Function503e0: ; 503e0 pop hl pop bc dec c - jr nz, .asm_503ea + jr nz, .loop callab Function8cf69 ret ; 50405 -Function50405: ; 50405 +InitPartyMenuWithCancel: ; 50405 +; with cancel xor a - ld [wd0e3], a - ld de, Unknown_5044f - call Function1bb1 + ld [wSwitchMon], a + ld de, PartyMenuAttributes + call InitMenu3 ld a, [PartyCount] inc a - ld [wcfa3], a + ld [wcfa3], a ; list length dec a ld b, a - ld a, [wd0d8] + ld a, [wPartyMenuCursor] and a - jr z, .asm_50422 + jr z, .skip inc b cp b - jr c, .asm_50424 + jr c, .done -.asm_50422 +.skip ld a, $1 -.asm_50424 +.done ld [MenuSelection2], a - ld a, $3 + ld a, A_BUTTON | B_BUTTON ld [wcfa8], a ret ; 5042d -Function5042d: ; 0x5042d - ld de, Unknown_5044f - call Function1bb1 +InitPartyMenuNoCancel: ; 0x5042d +; no cancel + ld de, PartyMenuAttributes + call InitMenu3 ld a, [PartyCount] - ld [wcfa3], a + ld [wcfa3], a ; list length ld b, a - ld a, [wd0d8] + ld a, [wPartyMenuCursor] and a - jr z, .asm_50444 + jr z, .skip inc b cp b - jr c, .asm_50446 -.asm_50444 + jr c, .done +.skip ld a, $1 -.asm_50446 +.done ld [MenuSelection2], a - ld a, $3 + ld a, A_BUTTON | B_BUTTON ld [wcfa8], a ret ; 5044f (14:444f) -Unknown_5044f: ; 5044f +PartyMenuAttributes: ; 5044f ; cursor y ; cursor x ; list length @@ -744,7 +746,7 @@ PartyMenuSelect: ; 0x50457 ld a, [MenuSelection2] ; menu selection? cp b jr z, .exitmenu ; CANCEL - ld [wd0d8], a + ld [wPartyMenuCursor], a ld a, [hJoyLast] ld b, a bit 1, b @@ -839,92 +841,92 @@ YouHaveNoPKMNString: ; 0x50556 db "You have no <PK><MN>!@" -Function50566: ; 50566 +PrintPartyMenuActionText: ; 50566 ld a, [CurPartyMon] ld hl, PartyMonNicknames call GetNick ld a, [PartyMenuActionText] and $f - ld hl, Unknown_5057b - call Function505c1 + ld hl, .MenuActionTexts + call .PrintText ret ; 5057b -Unknown_5057b: ; 5057b - dw UnknownText_0x50594 - dw UnknownText_0x5059e - dw UnknownText_0x505a3 - dw UnknownText_0x505a8 - dw UnknownText_0x50599 - dw UnknownText_0x5058f - dw UnknownText_0x505ad - dw UnknownText_0x505b2 - dw UnknownText_0x505b7 - dw UnknownText_0x505bc +.MenuActionTexts: ; 5057b + dw .Text_CuredOfPoison + dw .Text_BurnWasHealed + dw .Text_Defrosted + dw .Text_WokeUp + dw .Text_RidOfParalysis + dw .Text_RecoveredSomeHP + dw .Text_HealthReturned + dw .Text_Revitalized + dw .Text_GrewToLevel + dw .Text_CameToItsSenses ; 5058f -UnknownText_0x5058f: ; 0x5058f +.Text_RecoveredSomeHP: ; 0x5058f ; recovered @ HP! text_jump UnknownText_0x1bc0a2 db "@" ; 0x50594 -UnknownText_0x50594: ; 0x50594 +.Text_CuredOfPoison: ; 0x50594 ; 's cured of poison. text_jump UnknownText_0x1bc0bb db "@" ; 0x50599 -UnknownText_0x50599: ; 0x50599 +.Text_RidOfParalysis: ; 0x50599 ; 's rid of paralysis. text_jump UnknownText_0x1bc0d2 db "@" ; 0x5059e -UnknownText_0x5059e: ; 0x5059e +.Text_BurnWasHealed: ; 0x5059e ; 's burn was healed. text_jump UnknownText_0x1bc0ea db "@" ; 0x505a3 -UnknownText_0x505a3: ; 0x505a3 +.Text_Defrosted: ; 0x505a3 ; was defrosted. text_jump UnknownText_0x1bc101 db "@" ; 0x505a8 -UnknownText_0x505a8: ; 0x505a8 +.Text_WokeUp: ; 0x505a8 ; woke up. text_jump UnknownText_0x1bc115 db "@" ; 0x505ad -UnknownText_0x505ad: ; 0x505ad +.Text_HealthReturned: ; 0x505ad ; 's health returned. text_jump UnknownText_0x1bc123 db "@" ; 0x505b2 -UnknownText_0x505b2: ; 0x505b2 +.Text_Revitalized: ; 0x505b2 ; is revitalized. text_jump UnknownText_0x1bc13a db "@" ; 0x505b7 -UnknownText_0x505b7: ; 0x505b7 +.Text_GrewToLevel: ; 0x505b7 ; grew to level @ !@ @ text_jump UnknownText_0x1bc14f db "@" ; 0x505bc -UnknownText_0x505bc: ; 0x505bc +.Text_CameToItsSenses: ; 0x505bc ; came to its senses. text_jump UnknownText_0x1bc16e db "@" ; 0x505c1 -Function505c1: ; 505c1 +.PrintText: ; 505c1 ld e, a ld d, 0 rept 2 @@ -935,7 +937,7 @@ endr ld l, a ld a, [Options] push af - set 4, a + set NO_TEXT_SCROLL, a ld [Options], a call PrintText pop af diff --git a/engine/phone.asm b/engine/phone.asm index 32481deaa..ab0ecb84a 100644 --- a/engine/phone.asm +++ b/engine/phone.asm @@ -604,7 +604,7 @@ Phone_StartRinging: ; 9033f call PlaySFX call Phone_CallerTextbox call UpdateSprites - callba Function4d188 + callba PhoneRing_LoadEDTile ret ; 90355 @@ -614,7 +614,7 @@ HangUp_Wait20Frames: ; 90355 Phone_Wait20Frames ld c, 20 call DelayFrames - callba Function4d188 + callba PhoneRing_LoadEDTile ret ; 90363 diff --git a/engine/phone_scripts.asm b/engine/phone_scripts.asm index 33541e224..5d0795766 100644 --- a/engine/phone_scripts.asm +++ b/engine/phone_scripts.asm @@ -1914,369 +1914,369 @@ UnknownScript_0xbde4e: checknite iftrue UnknownScript_0xbdfec checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbdeaa - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbdeb0 - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbdeb6 - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbdebc - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbdec2 - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbdec8 - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbdece - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbded4 - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbdeda - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbdee0 - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbdee6 - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbdeec - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbdef2 - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbdef8 - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbdefe - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbdf04 - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbdf0a - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbdf10 - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbdf16 - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbdf1c - -UnknownScript_0xbdeaa: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4dc5 keeptextopen end -UnknownScript_0xbdeb0: +.Huey: farwritetext UnknownText_0x1b5073 keeptextopen end -UnknownScript_0xbdeb6: +.Gaven: farwritetext UnknownText_0x1b5270 keeptextopen end -UnknownScript_0xbdebc: +.Jose: farwritetext UnknownText_0x1b55ae keeptextopen end -UnknownScript_0xbdec2: +.Joey: farwritetext UnknownText_0x1b589a keeptextopen end -UnknownScript_0xbdec8: +.Wade: farwritetext UnknownText_0x1b5a3b keeptextopen end -UnknownScript_0xbdece: +.Ralph: farwritetext UnknownText_0x1b5c10 keeptextopen end -UnknownScript_0xbded4: +.Anthony: farwritetext UnknownText_0x1b5f7a keeptextopen end -UnknownScript_0xbdeda: +.Todd: farwritetext UnknownText_0x1b60f5 keeptextopen end -UnknownScript_0xbdee0: +.Irwin: farwritetext UnknownText_0x1b638c keeptextopen end -UnknownScript_0xbdee6: +.Arnie: farwritetext UnknownText_0x1b6454 keeptextopen end -UnknownScript_0xbdeec: +.Alan: farwritetext UnknownText_0x1b659d keeptextopen end -UnknownScript_0xbdef2: +.Chad: farwritetext UnknownText_0x1b67e2 keeptextopen end -UnknownScript_0xbdef8: +.Derek: farwritetext UnknownText_0x1b69a8 keeptextopen end -UnknownScript_0xbdefe: +.Tully: farwritetext UnknownText_0x1b6b39 keeptextopen end -UnknownScript_0xbdf04: +.Brent: farwritetext UnknownText_0x1b6c96 keeptextopen end -UnknownScript_0xbdf0a: +.Vance: farwritetext UnknownText_0x1b7019 keeptextopen end -UnknownScript_0xbdf10: +.Wilton: farwritetext UnknownText_0x1b71d5 keeptextopen end -UnknownScript_0xbdf16: +.Kenji: farwritetext UnknownText_0x1b730b keeptextopen end -UnknownScript_0xbdf1c: +.Parry: farwritetext UnknownText_0x1b73c7 keeptextopen end UnknownScript_0xbdf22: checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbdf74 - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbdf7a - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbdf80 - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbdf86 - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbdf8c - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbdf92 - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbdf98 - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbdf9e - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbdfa4 - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbdfaa - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbdfb0 - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbdfb6 - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbdfbc - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbdfc2 - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbdfc8 - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbdfce - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbdfd4 - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbdfda - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbdfe0 - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbdfe6 - -UnknownScript_0xbdf74: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4ded keeptextopen end -UnknownScript_0xbdf7a: +.Huey: farwritetext UnknownText_0x1b509b keeptextopen end -UnknownScript_0xbdf80: +.Gaven: farwritetext UnknownText_0x1b52a5 keeptextopen end -UnknownScript_0xbdf86: +.Jose: farwritetext UnknownText_0x1b55da keeptextopen end -UnknownScript_0xbdf8c: +.Joey: farwritetext UnknownText_0x1b58c2 keeptextopen end -UnknownScript_0xbdf92: +.Wade: farwritetext UnknownText_0x1b5a74 keeptextopen end -UnknownScript_0xbdf98: +.Ralph: farwritetext UnknownText_0x1b5c63 keeptextopen end -UnknownScript_0xbdf9e: +.Anthony: farwritetext UnknownText_0x1b5f9e keeptextopen end -UnknownScript_0xbdfa4: +.Todd: farwritetext UnknownText_0x1b611b keeptextopen end -UnknownScript_0xbdfaa: +.Irwin: farwritetext UnknownText_0x1b63a8 keeptextopen end -UnknownScript_0xbdfb0: +.Arnie: farwritetext UnknownText_0x1b647e keeptextopen end -UnknownScript_0xbdfb6: +.Alan: farwritetext UnknownText_0x1b65c7 keeptextopen end -UnknownScript_0xbdfbc: +.Chad: farwritetext UnknownText_0x1b680e keeptextopen end -UnknownScript_0xbdfc2: +.Derek: farwritetext UnknownText_0x1b69d2 keeptextopen end -UnknownScript_0xbdfc8: +.Tully: farwritetext UnknownText_0x1b6b65 keeptextopen end -UnknownScript_0xbdfce: +.Brent: farwritetext UnknownText_0x1b6cc6 keeptextopen end -UnknownScript_0xbdfd4: +.Vance: farwritetext UnknownText_0x1b7057 keeptextopen end -UnknownScript_0xbdfda: +.Wilton: farwritetext UnknownText_0x1b71fc keeptextopen end -UnknownScript_0xbdfe0: +.Kenji: farwritetext UnknownText_0x1b7331 keeptextopen end -UnknownScript_0xbdfe6: +.Parry: farwritetext UnknownText_0x1b73ef keeptextopen end UnknownScript_0xbdfec: checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe03e - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe044 - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe04a - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe050 - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe056 - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe05c - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe062 - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe068 - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe06e - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe074 - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe07a - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe080 - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe086 - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe08c - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe092 - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe098 - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe09e - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe0a4 - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe0aa - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe0b0 - -UnknownScript_0xbe03e: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4e16 keeptextopen end -UnknownScript_0xbe044: +.Huey: farwritetext UnknownText_0x1b50c2 keeptextopen end -UnknownScript_0xbe04a: +.Gaven: farwritetext UnknownText_0x1b52cc keeptextopen end -UnknownScript_0xbe050: +.Jose: farwritetext UnknownText_0x1b55fc keeptextopen end -UnknownScript_0xbe056: +.Joey: farwritetext UnknownText_0x1b58ea keeptextopen end -UnknownScript_0xbe05c: +.Wade: farwritetext UnknownText_0x1b5a9f keeptextopen end -UnknownScript_0xbe062: +.Ralph: farwritetext UnknownText_0x1b5cb6 keeptextopen end -UnknownScript_0xbe068: +.Anthony: farwritetext UnknownText_0x1b5fc9 keeptextopen end -UnknownScript_0xbe06e: +.Todd: farwritetext UnknownText_0x1b6149 keeptextopen end -UnknownScript_0xbe074: +.Irwin: farwritetext UnknownText_0x1b63c4 keeptextopen end -UnknownScript_0xbe07a: +.Arnie: farwritetext UnknownText_0x1b64a8 keeptextopen end -UnknownScript_0xbe080: +.Alan: farwritetext UnknownText_0x1b65e3 keeptextopen end -UnknownScript_0xbe086: +.Chad: farwritetext UnknownText_0x1b6836 keeptextopen end -UnknownScript_0xbe08c: +.Derek: farwritetext UnknownText_0x1b69f8 keeptextopen end -UnknownScript_0xbe092: +.Tully: farwritetext UnknownText_0x1b6b92 keeptextopen end -UnknownScript_0xbe098: +.Brent: farwritetext UnknownText_0x1b6cf6 keeptextopen end -UnknownScript_0xbe09e: +.Vance: farwritetext UnknownText_0x1b7092 keeptextopen end -UnknownScript_0xbe0a4: +.Wilton: farwritetext UnknownText_0x1b722a keeptextopen end -UnknownScript_0xbe0aa: +.Kenji: farwritetext UnknownText_0x1b7357 keeptextopen end -UnknownScript_0xbe0b0: +.Parry: farwritetext UnknownText_0x1b7417 keeptextopen end @@ -2287,153 +2287,153 @@ UnknownScript_0xbe0b6: checknite iftrue UnknownScript_0xbe164 checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe0e2 - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe0e8 - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe0ee - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe0f4 - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe0fa - if_equal PHONE_LASS_DANA, UnknownScript_0xbe100 - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe106 - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe10c - -UnknownScript_0xbe0e2: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b4f21 keeptextopen end -UnknownScript_0xbe0e8: +.Beth: farwritetext UnknownText_0x1b53f7 keeptextopen end -UnknownScript_0xbe0ee: +.Reena: farwritetext UnknownText_0x1b5702 keeptextopen end -UnknownScript_0xbe0f4: +.Liz: farwritetext UnknownText_0x1b5d9f keeptextopen end -UnknownScript_0xbe0fa: +.Gina: farwritetext UnknownText_0x1b626a keeptextopen end -UnknownScript_0xbe100: +.Dana: farwritetext UnknownText_0x1b66c8 keeptextopen end -UnknownScript_0xbe106: +.Tiffany: farwritetext UnknownText_0x1b6e7c keeptextopen end -UnknownScript_0xbe10c: +.Erin: farwritetext UnknownText_0x1b751a keeptextopen end UnknownScript_0xbe112: checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe134 - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe13a - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe140 - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe146 - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe14c - if_equal PHONE_LASS_DANA, UnknownScript_0xbe152 - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe158 - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe15e - -UnknownScript_0xbe134: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b4f4d keeptextopen end -UnknownScript_0xbe13a: +.Beth: farwritetext UnknownText_0x1b5424 keeptextopen end -UnknownScript_0xbe140: +.Reena: farwritetext UnknownText_0x1b572e keeptextopen end -UnknownScript_0xbe146: +.Liz: farwritetext UnknownText_0x1b5dcc keeptextopen end -UnknownScript_0xbe14c: +.Gina: farwritetext UnknownText_0x1b6296 keeptextopen end -UnknownScript_0xbe152: +.Dana: farwritetext UnknownText_0x1b66ec keeptextopen end -UnknownScript_0xbe158: +.Tiffany: farwritetext UnknownText_0x1b6ea6 keeptextopen end -UnknownScript_0xbe15e: +.Erin: farwritetext UnknownText_0x1b7548 keeptextopen end UnknownScript_0xbe164: checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe186 - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe18c - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe192 - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe198 - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe19e - if_equal PHONE_LASS_DANA, UnknownScript_0xbe1a4 - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe1aa - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe1b0 - -UnknownScript_0xbe186: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b4f75 keeptextopen end -UnknownScript_0xbe18c: +.Beth: farwritetext UnknownText_0x1b5446 keeptextopen end -UnknownScript_0xbe192: +.Reena: farwritetext UnknownText_0x1b575a keeptextopen end -UnknownScript_0xbe198: +.Liz: farwritetext UnknownText_0x1b5df8 keeptextopen end -UnknownScript_0xbe19e: +.Gina: farwritetext UnknownText_0x1b62c5 keeptextopen end -UnknownScript_0xbe1a4: +.Dana: farwritetext UnknownText_0x1b6713 keeptextopen end -UnknownScript_0xbe1aa: +.Tiffany: farwritetext UnknownText_0x1b6ec9 keeptextopen end -UnknownScript_0xbe1b0: +.Erin: farwritetext UnknownText_0x1b756f keeptextopen end @@ -2444,369 +2444,369 @@ UnknownScript_0xbe1b6: checknite iftrue UnknownScript_0xbe354 checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe212 - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe218 - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe21e - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe224 - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe22a - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe230 - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe236 - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe23c - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe242 - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe248 - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe24e - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe254 - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe25a - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe260 - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe266 - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe26c - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe272 - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe278 - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe27e - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe284 - -UnknownScript_0xbe212: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4e3e keeptextopen end -UnknownScript_0xbe218: +.Huey: farwritetext UnknownText_0x1b50e9 keeptextopen end -UnknownScript_0xbe21e: +.Gaven: farwritetext UnknownText_0x1b5301 keeptextopen end -UnknownScript_0xbe224: +.Jose: farwritetext UnknownText_0x1b5628 keeptextopen end -UnknownScript_0xbe22a: +.Joey: farwritetext UnknownText_0x1b5912 keeptextopen end -UnknownScript_0xbe230: +.Wade: farwritetext UnknownText_0x1b5ad8 keeptextopen end -UnknownScript_0xbe236: +.Ralph: farwritetext UnknownText_0x1b5d09 keeptextopen end -UnknownScript_0xbe23c: +.Anthony: farwritetext UnknownText_0x1b5ff6 keeptextopen end -UnknownScript_0xbe242: +.Todd: farwritetext UnknownText_0x1b616e keeptextopen end -UnknownScript_0xbe248: +.Irwin: farwritetext UnknownText_0x1b63e3 keeptextopen end -UnknownScript_0xbe24e: +.Arnie: farwritetext UnknownText_0x1b64d2 keeptextopen end -UnknownScript_0xbe254: +.Alan: farwritetext UnknownText_0x1b660d keeptextopen end -UnknownScript_0xbe25a: +.Chad: farwritetext UnknownText_0x1b6862 keeptextopen end -UnknownScript_0xbe260: +.Derek: farwritetext UnknownText_0x1b6a22 keeptextopen end -UnknownScript_0xbe266: +.Tully: farwritetext UnknownText_0x1b6bb9 keeptextopen end -UnknownScript_0xbe26c: +.Brent: farwritetext UnknownText_0x1b6d26 keeptextopen end -UnknownScript_0xbe272: +.Vance: farwritetext UnknownText_0x1b70e7 keeptextopen end -UnknownScript_0xbe278: +.Wilton: farwritetext UnknownText_0x1b725c keeptextopen end -UnknownScript_0xbe27e: +.Kenji: farwritetext UnknownText_0x1b737f keeptextopen end -UnknownScript_0xbe284: +.Parry: farwritetext UnknownText_0x1b743f keeptextopen end UnknownScript_0xbe28a: checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe2dc - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe2e2 - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe2e8 - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe2ee - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe2f4 - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe2fa - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe300 - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe306 - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe30c - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe312 - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe318 - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe31e - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe324 - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe32a - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe330 - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe336 - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe33c - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe342 - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe348 - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe34e - -UnknownScript_0xbe2dc: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4e72 keeptextopen end -UnknownScript_0xbe2e2: +.Huey: farwritetext UnknownText_0x1b511a keeptextopen end -UnknownScript_0xbe2e8: +.Gaven: farwritetext UnknownText_0x1b5335 keeptextopen end -UnknownScript_0xbe2ee: +.Jose: farwritetext UnknownText_0x1b564c keeptextopen end -UnknownScript_0xbe2f4: +.Joey: farwritetext UnknownText_0x1b5948 keeptextopen end -UnknownScript_0xbe2fa: +.Wade: farwritetext UnknownText_0x1b5b0b keeptextopen end -UnknownScript_0xbe300: +.Ralph: farwritetext UnknownText_0x1b5d21 keeptextopen end -UnknownScript_0xbe306: +.Anthony: farwritetext UnknownText_0x1b6017 keeptextopen end -UnknownScript_0xbe30c: +.Todd: farwritetext UnknownText_0x1b618f keeptextopen end -UnknownScript_0xbe312: +.Irwin: farwritetext UnknownText_0x1b6407 keeptextopen end -UnknownScript_0xbe318: +.Arnie: farwritetext UnknownText_0x1b6506 keeptextopen end -UnknownScript_0xbe31e: +.Alan: farwritetext UnknownText_0x1b6624 keeptextopen end -UnknownScript_0xbe324: +.Chad: farwritetext UnknownText_0x1b6890 keeptextopen end -UnknownScript_0xbe32a: +.Derek: farwritetext UnknownText_0x1b6a56 keeptextopen end -UnknownScript_0xbe330: +.Tully: farwritetext UnknownText_0x1b6bef keeptextopen end -UnknownScript_0xbe336: +.Brent: farwritetext UnknownText_0x1b6d57 keeptextopen end -UnknownScript_0xbe33c: +.Vance: farwritetext UnknownText_0x1b7112 keeptextopen end -UnknownScript_0xbe342: +.Wilton: farwritetext UnknownText_0x1b7283 keeptextopen end -UnknownScript_0xbe348: +.Kenji: farwritetext UnknownText_0x1b7397 keeptextopen end -UnknownScript_0xbe34e: +.Parry: farwritetext UnknownText_0x1b746f keeptextopen end UnknownScript_0xbe354: checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe3a6 - if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe3ac - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe3b2 - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe3b8 - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe3be - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe3c4 - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe3ca - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe3d0 - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe3d6 - if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe3dc - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe3e2 - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe3e8 - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe3ee - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe3f4 - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe3fa - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe400 - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe406 - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe40c - if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe412 - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe418 - -UnknownScript_0xbe3a6: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_SAILOR_HUEY, .Huey + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_JUGGLER_IRWIN, .Irwin + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_BLACKBELT_KENJI, .Kenji + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4e9e keeptextopen end -UnknownScript_0xbe3ac: +.Huey: farwritetext UnknownText_0x1b5154 keeptextopen end -UnknownScript_0xbe3b2: +.Gaven: farwritetext UnknownText_0x1b535f keeptextopen end -UnknownScript_0xbe3b8: +.Jose: farwritetext UnknownText_0x1b5670 keeptextopen end -UnknownScript_0xbe3be: +.Joey: farwritetext UnknownText_0x1b597c keeptextopen end -UnknownScript_0xbe3c4: +.Wade: farwritetext UnknownText_0x1b5b37 keeptextopen end -UnknownScript_0xbe3ca: +.Ralph: farwritetext UnknownText_0x1b5d39 keeptextopen end -UnknownScript_0xbe3d0: +.Anthony: farwritetext UnknownText_0x1b6041 keeptextopen end -UnknownScript_0xbe3d6: +.Todd: farwritetext UnknownText_0x1b61bd keeptextopen end -UnknownScript_0xbe3dc: +.Irwin: farwritetext UnknownText_0x1b642c keeptextopen end -UnknownScript_0xbe3e2: +.Arnie: farwritetext UnknownText_0x1b6539 keeptextopen end -UnknownScript_0xbe3e8: +.Alan: farwritetext UnknownText_0x1b663b keeptextopen end -UnknownScript_0xbe3ee: +.Chad: farwritetext UnknownText_0x1b68ba keeptextopen end -UnknownScript_0xbe3f4: +.Derek: farwritetext UnknownText_0x1b6a8b keeptextopen end -UnknownScript_0xbe3fa: +.Tully: farwritetext UnknownText_0x1b6c23 keeptextopen end -UnknownScript_0xbe400: +.Brent: farwritetext UnknownText_0x1b6d88 keeptextopen end -UnknownScript_0xbe406: +.Vance: farwritetext UnknownText_0x1b7132 keeptextopen end -UnknownScript_0xbe40c: +.Wilton: farwritetext UnknownText_0x1b72a5 keeptextopen end -UnknownScript_0xbe412: +.Kenji: farwritetext UnknownText_0x1b73af keeptextopen end -UnknownScript_0xbe418: +.Parry: farwritetext UnknownText_0x1b749b keeptextopen end @@ -2817,314 +2817,314 @@ UnknownScript_0xbe41e: checknite iftrue UnknownScript_0xbe4cc checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe44a - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe450 - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe456 - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe45c - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe462 - if_equal PHONE_LASS_DANA, UnknownScript_0xbe468 - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe46e - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe474 - -UnknownScript_0xbe44a: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b4fa1 keeptextopen end -UnknownScript_0xbe450: +.Beth: farwritetext UnknownText_0x1b5472 keeptextopen end -UnknownScript_0xbe456: +.Reena: farwritetext UnknownText_0x1b5786 keeptextopen end -UnknownScript_0xbe45c: +.Liz: farwritetext UnknownText_0x1b5e25 keeptextopen end -UnknownScript_0xbe462: +.Gina: farwritetext UnknownText_0x1b62f1 keeptextopen end -UnknownScript_0xbe468: +.Dana: farwritetext UnknownText_0x1b6738 keeptextopen end -UnknownScript_0xbe46e: +.Tiffany: farwritetext UnknownText_0x1b6ef3 keeptextopen end -UnknownScript_0xbe474: +.Erin: farwritetext UnknownText_0x1b758f keeptextopen end UnknownScript_0xbe47a: checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe49c - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe4a2 - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe4a8 - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe4ae - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe4b4 - if_equal PHONE_LASS_DANA, UnknownScript_0xbe4ba - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe4c0 - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe4c6 - -UnknownScript_0xbe49c: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b4fda keeptextopen end -UnknownScript_0xbe4a2: +.Beth: farwritetext UnknownText_0x1b54a6 keeptextopen end -UnknownScript_0xbe4a8: +.Reena: farwritetext UnknownText_0x1b57b7 keeptextopen end -UnknownScript_0xbe4ae: +.Liz: farwritetext UnknownText_0x1b5e59 keeptextopen end -UnknownScript_0xbe4b4: +.Gina: farwritetext UnknownText_0x1b630e keeptextopen end -UnknownScript_0xbe4ba: +.Dana: farwritetext UnknownText_0x1b6757 keeptextopen end -UnknownScript_0xbe4c0: +.Tiffany: farwritetext UnknownText_0x1b6f1c keeptextopen end -UnknownScript_0xbe4c6: +.Erin: farwritetext UnknownText_0x1b75ac keeptextopen end UnknownScript_0xbe4cc: checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe4ee - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe4f4 - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe4fa - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe500 - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe506 - if_equal PHONE_LASS_DANA, UnknownScript_0xbe50c - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe512 - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe518 - -UnknownScript_0xbe4ee: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b5004 keeptextopen end -UnknownScript_0xbe4f4: +.Beth: farwritetext UnknownText_0x1b54d4 keeptextopen end -UnknownScript_0xbe4fa: +.Reena: farwritetext UnknownText_0x1b57e8 keeptextopen end -UnknownScript_0xbe500: +.Liz: farwritetext UnknownText_0x1b5e8e keeptextopen end -UnknownScript_0xbe506: +.Gina: farwritetext UnknownText_0x1b6331 keeptextopen end -UnknownScript_0xbe50c: +.Dana: farwritetext UnknownText_0x1b6776 keeptextopen end -UnknownScript_0xbe512: +.Tiffany: farwritetext UnknownText_0x1b6f37 keeptextopen end -UnknownScript_0xbe518: +.Erin: farwritetext UnknownText_0x1b75c9 keeptextopen end UnknownScript_0xbe51e: checkcode VAR_CALLERID - if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe564 - if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe570 - if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe576 - if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe57c - if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe582 - if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe588 - if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe58e - if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe594 - if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe59a - if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe5a0 - if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe5a6 - if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe5ac - if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe5b2 - if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe5b8 - if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe5be - if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe5c4 - if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe5ca - -UnknownScript_0xbe564: + if_equal PHONE_SCHOOLBOY_JACK, .Jack + if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven + if_equal PHONE_BIRDKEEPER_JOSE, .Jose + if_equal PHONE_YOUNGSTER_JOEY, .Joey + if_equal PHONE_BUG_CATCHER_WADE, .Wade + if_equal PHONE_FISHER_RALPH, .Ralph + if_equal PHONE_HIKER_ANTHONY, .Anthony + if_equal PHONE_CAMPER_TODD, .Todd + if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie + if_equal PHONE_SCHOOLBOY_ALAN, .Alan + if_equal PHONE_SCHOOLBOY_CHAD, .Chad + if_equal PHONE_POKEFANM_DEREK, .Derek + if_equal PHONE_FISHER_TULLY, .Tully + if_equal PHONE_POKEMANIAC_BRENT, .Brent + if_equal PHONE_BIRDKEEPER_VANCE, .Vance + if_equal PHONE_FISHER_WILTON, .Wilton + if_equal PHONE_HIKER_PARRY, .Parry + +.Jack: farwritetext UnknownText_0x1b4ecd keeptextopen end -UnknownScript_0xbe56a: +.Unknown: farwritetext UnknownText_0x1b518b keeptextopen end -UnknownScript_0xbe570: +.Gaven: farwritetext UnknownText_0x1b5393 keeptextopen end -UnknownScript_0xbe576: +.Jose: farwritetext UnknownText_0x1b5694 keeptextopen end -UnknownScript_0xbe57c: +.Joey: farwritetext UnknownText_0x1b59b2 keeptextopen end -UnknownScript_0xbe582: +.Wade: farwritetext UnknownText_0x1b5b68 keeptextopen end -UnknownScript_0xbe588: +.Ralph: farwritetext UnknownText_0x1b5d51 keeptextopen end -UnknownScript_0xbe58e: +.Anthony: farwritetext UnknownText_0x1b606f keeptextopen end -UnknownScript_0xbe594: +.Todd: farwritetext UnknownText_0x1b61f2 keeptextopen end -UnknownScript_0xbe59a: +.Arnie: farwritetext UnknownText_0x1b656c keeptextopen end -UnknownScript_0xbe5a0: +.Alan: farwritetext UnknownText_0x1b6652 keeptextopen end -UnknownScript_0xbe5a6: +.Chad: farwritetext UnknownText_0x1b68e8 keeptextopen end -UnknownScript_0xbe5ac: +.Derek: farwritetext UnknownText_0x1b6ac2 keeptextopen end -UnknownScript_0xbe5b2: +.Tully: farwritetext UnknownText_0x1b6c56 keeptextopen end -UnknownScript_0xbe5b8: +.Brent: farwritetext UnknownText_0x1b6db9 keeptextopen end -UnknownScript_0xbe5be: +.Vance: farwritetext UnknownText_0x1b7161 keeptextopen end -UnknownScript_0xbe5c4: +.Wilton: farwritetext UnknownText_0x1b72d0 keeptextopen end -UnknownScript_0xbe5ca: +.Parry: farwritetext UnknownText_0x1b74c8 keeptextopen end UnknownScript_0xbe5d0: checkcode VAR_CALLERID - if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe5f2 - if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe5f8 - if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe5fe - if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe604 - if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe60a - if_equal PHONE_LASS_DANA, UnknownScript_0xbe610 - if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe616 - if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe61c - -UnknownScript_0xbe5f2: + if_equal PHONE_POKEFAN_BEVERLY, .Beverly + if_equal PHONE_COOLTRAINERF_BETH, .Beth + if_equal PHONE_COOLTRAINERF_REENA, .Reena + if_equal PHONE_PICNICKER_LIZ, .Liz + if_equal PHONE_PICNICKER_GINA, .Gina + if_equal PHONE_LASS_DANA, .Dana + if_equal PHONE_PICNICKER_TIFFANY, .Tiffany + if_equal PHONE_PICNICKER_ERIN, .Erin + +.Beverly: farwritetext UnknownText_0x1b502b keeptextopen end -UnknownScript_0xbe5f8: +.Beth: farwritetext UnknownText_0x1b5510 keeptextopen end -UnknownScript_0xbe5fe: +.Reena: farwritetext UnknownText_0x1b5819 keeptextopen end -UnknownScript_0xbe604: +.Liz: farwritetext UnknownText_0x1b5ebe keeptextopen end -UnknownScript_0xbe60a: +.Gina: farwritetext UnknownText_0x1b6352 keeptextopen end -UnknownScript_0xbe610: +.Dana: farwritetext UnknownText_0x1b6795 keeptextopen end -UnknownScript_0xbe616: +.Tiffany: farwritetext UnknownText_0x1b6f60 keeptextopen end -UnknownScript_0xbe61c: +.Erin: farwritetext UnknownText_0x1b75e5 keeptextopen end diff --git a/engine/pokecenter_pc.asm b/engine/pokecenter_pc.asm new file mode 100755 index 000000000..064b35a6c --- /dev/null +++ b/engine/pokecenter_pc.asm @@ -0,0 +1,705 @@ +PokemonCenterPC: ; 1559a + call PC_CheckPartyForPokemon + ret c + call PC_PlayBootSound + ld hl, UnknownText_0x15a27 + call PC_DisplayText + ld hl, UnknownText_0x15a2c + call PC_DisplayTextWaitMenu + ld hl, .TopMenu + call LoadMenuDataHeader +.loop + xor a + ld [hBGMapMode], a + call .ChooseWhichPCListToUse + ld [wcf76], a + call DoNthMenu + jr c, .shutdown + ld a, [MenuSelection] + ld hl, .JumpTable + call MenuJumptable + jr nc, .loop + +.shutdown + call PC_PlayShutdownSound + call ExitMenu + call WriteBackup + ret +; 155d6 + +.TopMenu: ; 0x155d6 + db $48 ; flags + db 00, 00 ; start coords + db 12, 15 ; end coords + dw .MenuData2 + db 1 ; default option +; 0x155de + +.MenuData2: ; 0x155de + db $a0 ; flags + db 0 ; items + dw .WhichPC + dw PlaceNthMenuStrings + dw .JumpTable +; 0x155e6 + +.JumpTable: ; 155e6 + dw PlayersPC, .String_PlayersPC + dw BillsPC, .String_BillsPC + dw OaksPC, .String_OaksPC + dw HallOfFamePC, .String_HallOfFame + dw TurnOffPC, .String_TurnOff +; 155fa + +.String_PlayersPC: db "<PLAYER>'s PC@" +.String_BillsPC: db "BILL's PC@" +.String_OaksPC: db "PROF.OAK's PC@" +.String_HallOfFame: db "HALL OF FAME@" +.String_TurnOff: db "TURN OFF@" +; 1562c + +.WhichPC: ; 1562c + ; before pokedex + db 3 ; items + db 1, 0, 4 ; bill's, player's, turn off + db -1 + + ; before Hall Of Fame + db 4 ; items + db 1, 0, 2, 4 ; bill's, player's, oak's, turn off + db -1 + + ; postgame + db 5 ; items + db 1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off + db -1 +; 1563e + +.ChooseWhichPCListToUse: ; 1563e + call CheckReceivedDex + jr nz, .got_dex + ld a, $0 + ret + +.got_dex + ld a, [wHallOfFameCount] + and a + ld a, $1 + ret z + ld a, $2 + ret +; 15650 + +PC_CheckPartyForPokemon: ; 15650 + ld a, [PartyCount] + and a + ret nz + ld de, SFX_CHOOSE_PC_OPTION + call PlaySFX + ld hl, UnknownText_0x15663 + call PC_DisplayText + scf + ret +; 15663 + +UnknownText_0x15663: ; 0x15663 + ; Bzzzzt! You must have a #MON to use this! + text_jump UnknownText_0x1c1328 + db "@" +; 0x15668 + +BillsPC: ; 15668 + call PC_PlayChoosePCSound + ld hl, UnknownText_0x15a31 + call PC_DisplayText + callba _BillsPC + and a + ret +; 15679 (5:5679) + +PlayersPC: ; 15679 + call PC_PlayChoosePCSound + ld hl, UnknownText_0x15a36 + call PC_DisplayText + ld b, $0 + call _PlayersPC + and a + ret +; 15689 + +OaksPC: ; 15689 + call PC_PlayChoosePCSound + ld hl, UnknownText_0x15a3b + call PC_DisplayText + callba ProfOaksPC + and a + ret +; 1569a + +HallOfFamePC: ; 1569a + call PC_PlayChoosePCSound + call FadeToMenu + callba _HallOfFamePC + call ReturnToCallingMenu + and a + ret +; 156ab + +TurnOffPC: ; 156ab + ld hl, UnknownText_0x15a40 + call PrintText + scf + ret +; 156b3 + +PC_PlayBootSound: ; 156b3 + ld de, SFX_BOOT_PC + jr PC_WaitPlaySFX + +PC_PlayShutdownSound: ; 156b8 + ld de, SFX_SHUT_DOWN_PC + call PC_WaitPlaySFX + call WaitSFX + ret + +PC_PlayChoosePCSound: ; 156c2 + ld de, SFX_CHOOSE_PC_OPTION + jr PC_WaitPlaySFX + +Function156c7: ; 156c7 + ld de, SFX_SWITCH_POKEMON + call PC_WaitPlaySFX + ld de, SFX_SWITCH_POKEMON + +PC_WaitPlaySFX: ; 156d0 + push de + call WaitSFX + pop de + call PlaySFX + ret +; 156d9 + +_KrissHousePC: ; 156d9 + call PC_PlayBootSound + ld hl, UnknownText_0x156ff + call PC_DisplayText + ld b, $1 + call _PlayersPC + and a + jr nz, .asm_156f9 + call OverworldTextModeSwitch + call ApplyTilemap + call UpdateSprites + call PC_PlayShutdownSound + ld c, $0 + ret + +.asm_156f9 + call ClearBGPalettes + ld c, $1 + ret +; 156ff + +UnknownText_0x156ff: ; 0x156ff + ; turned on the PC. + text_jump UnknownText_0x1c1353 + db "@" +; 0x15704 + +_PlayersPC: ; 15704 + ld a, b + ld [wcf76], a + ld hl, UnknownText_0x157cc + call PC_DisplayTextWaitMenu + call Function15715 + call ExitMenu + ret +; 15715 + +Function15715: ; 15715 + xor a + ld [wd0d7], a + ld [wd0dd], a + ld hl, KrissPCMenuData + call LoadMenuDataHeader +.asm_15722 + call UpdateTimePals + call DoNthMenu + jr c, .asm_15731 + call MenuJumptable + jr nc, .asm_15722 + jr .asm_15732 + +.asm_15731 + xor a + +.asm_15732 + call ExitMenu + ret +; 15736 + +KrissPCMenuData: ; 0x15736 + db %01000000 + db 0, 0 ; top left corner coords (y, x) + db 12, 15 ; bottom right corner coords (y, x) + dw .KrissPCMenuData2 + db 1 ; default selected option + +.KrissPCMenuData2 + db %10100000 ; bit7 + db 0 ; # items? + dw .KrissPCMenuList1 + dw PlaceNthMenuStrings + dw .KrissPCMenuPointers + +.KrissPCMenuPointers ; 0x15746 + dw KrisWithdrawItemMenu, .WithdrawItem + dw KrisDepositItemMenu, .DepositItem + dw KrisTossItemMenu, .TossItem + dw KrisMailBoxMenu, .MailBox + dw KrisDecorationMenu, .Decoration + dw KrisLogOffMenu, .LogOff + dw KrisLogOffMenu, .TurnOff + +.WithdrawItem db "WITHDRAW ITEM@" +.DepositItem db "DEPOSIT ITEM@" +.TossItem db "TOSS ITEM@" +.MailBox db "MAIL BOX@" +.Decoration db "DECORATION@" +.TurnOff db "TURN OFF@" +.LogOff db "LOG OFF@" + +WITHDRAW_ITEM EQU 0 +DEPOSIT_ITEM EQU 1 +TOSS_ITEM EQU 2 +MAIL_BOX EQU 3 +DECORATION EQU 4 +TURN_OFF EQU 5 +LOG_OFF EQU 6 + +.KrissPCMenuList1 + db 5 + db WITHDRAW_ITEM + db DEPOSIT_ITEM + db TOSS_ITEM + db MAIL_BOX + db TURN_OFF + db -1 + +.KrissPCMenuList2 + db 6 + db WITHDRAW_ITEM + db DEPOSIT_ITEM + db TOSS_ITEM + db MAIL_BOX + db DECORATION + db LOG_OFF + db -1 + +PC_DisplayTextWaitMenu: ; 157bb + ld a, [Options] + push af + set NO_TEXT_SCROLL, a + ld [Options], a + call MenuTextBox + pop af + ld [Options], a + ret +; 157cc + +UnknownText_0x157cc: ; 0x157cc + ; What do you want to do? + text_jump UnknownText_0x1c1368 + db "@" +; 0x157d1 + +KrisWithdrawItemMenu: ; 0x157d1 + call LoadStandardMenuDataHeader + callba ClearPCItemScreen +.asm_157da + call Function15985 + jr c, .asm_157e4 + call Function157e9 + jr .asm_157da + +.asm_157e4 + call ReturnToCallingMenu + xor a + ret +; 0x157e9 + +Function157e9: ; 0x157e9 + ; check if the item has a quantity + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr z, .askquantity + + ; items without quantity are always ×1 + ld a, 1 + ld [wItemQuantityChangeBuffer], a + jr .withdraw + +.askquantity + ld hl, .HowManyText + call MenuTextBox + callba Function24fbf + call ExitMenu + call ExitMenu + jr c, .done + +.withdraw + ld a, [wItemQuantityChangeBuffer] + ld [Buffer1], a ; quantity + ld a, [wd107] + ld [Buffer2], a + ld hl, NumItems + call ReceiveItem + jr nc, .PackFull + ld a, [Buffer1] + ld [wItemQuantityChangeBuffer], a + ld a, [Buffer2] + ld [wd107], a + ld hl, PCItems + call TossItem + predef PartyMonItemName + ld hl, .WithdrewText + call MenuTextBox + xor a + ld [hBGMapMode], a + call ExitMenu + ret + +.PackFull + ld hl, .NoRoomText + call MenuTextBoxBackup + ret + +.done + ret +; 0x15850 + +.HowManyText ; 0x15850 + text_jump _KrissPCHowManyWithdrawText + db "@" + +.WithdrewText ; 0x15855 + text_jump _KrissPCWithdrewItemsText + db "@" + +.NoRoomText ; 0x1585a + text_jump _KrissPCNoRoomWithdrawText + db "@" + + +KrisTossItemMenu: ; 0x1585f + call LoadStandardMenuDataHeader + callba ClearPCItemScreen +.asm_15868 + call Function15985 + jr c, .asm_15878 + ld de, PCItems + callba Function129f4 + jr .asm_15868 + +.asm_15878 + call ReturnToCallingMenu + xor a + ret +; 0x1587d + + +KrisDecorationMenu: ; 0x1587d + callba _KrisDecorationMenu + ld a, c + and a + ret z + scf + ret +; 0x15888 + + +KrisLogOffMenu: ; 0x15888 + xor a + scf + ret +; 0x1588b + + +KrisDepositItemMenu: ; 0x1588b + call Function158b8 + jr c, .asm_158b6 + call DisableSpriteUpdates + call LoadStandardMenuDataHeader + callba Function106a5 +.asm_1589c + callba Function106be + ld a, [wcf66] + and a + jr z, .asm_158b3 + call Function158cc + callba CheckRegisteredItem + jr .asm_1589c + +.asm_158b3 + call ReturnToCallingMenu + +.asm_158b6 + xor a + ret +; 0x158b8 + +Function158b8: ; 0x158b8 + callba HasNoItems + ret nc + ld hl, UnknownText_0x158c7 + call MenuTextBoxBackup + scf + ret +; 0x158c7 + +UnknownText_0x158c7: ; 0x158c7 + ; No items here! + text_jump UnknownText_0x1c13df + db "@" +; 0x158cc + + +Function158cc: ; 0x158cc + ld a, [wSpriteUpdatesEnabled] + push af + ld a, $0 + ld [wSpriteUpdatesEnabled], a + callba CheckItemMenu + ld a, [wItemAttributeParamBuffer] + ld hl, .jumptable + rst JumpTable + pop af + ld [wSpriteUpdatesEnabled], a + ret +; 0x158e7 + +.jumptable: ; 0x158e7 + dw .tossable + dw .no_toss + dw .no_toss + dw .no_toss + dw .tossable + dw .tossable + dw .tossable + +.no_toss: + ret + +.tossable: + ld a, [Buffer1] + push af + ld a, [Buffer2] + push af + call Function1590a + pop af + ld [Buffer2], a + pop af + ld [Buffer1], a + ret +; 0x1590a + +Function1590a: ; 0x1590a + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr z, .asm_1591d + ld a, $1 + ld [wItemQuantityChangeBuffer], a + jr .asm_15933 + +.asm_1591d + ld hl, .HowManyText + call MenuTextBox + callba Function24fbf + push af + call ExitMenu + call ExitMenu + pop af + jr c, .asm_1596c + +.asm_15933 + ld a, [wItemQuantityChangeBuffer] + ld [Buffer1], a + ld a, [wd107] + ld [Buffer2], a + ld hl, PCItems + call ReceiveItem + jr nc, .asm_15965 + ld a, [Buffer1] + ld [wItemQuantityChangeBuffer], a + ld a, [Buffer2] + ld [wd107], a + ld hl, NumItems + call TossItem + predef PartyMonItemName + ld hl, .DepositText + call PrintText + ret + +.asm_15965 + ld hl, .NoRoomText + call PrintText + ret + +.asm_1596c + and a + ret +; 0x1596e + + +.HowManyText ; 0x1596e + text_jump _KrissPCHowManyDepositText + db "@" + +.DepositText ; 0x15973 + text_jump _KrissPCDepositItemsText + db "@" + +.NoRoomText ; 0x15978 + text_jump _KrissPCNoRoomDepositText + db "@" + + +KrisMailBoxMenu: ; 0x1597d + callba _KrisMailBoxMenu + xor a + ret +; 0x15985 + + +Function15985: ; 0x15985 + xor a + ld [wd0e3], a +.asm_15989 + ld a, [wSpriteUpdatesEnabled] + push af + ld a, $0 + ld [wSpriteUpdatesEnabled], a + ld hl, MenuData15a08 + call CopyMenuDataHeader + hlcoord 0, 0 + ld b, $a + ld c, $12 + call TextBox + ld a, [wd0d7] + ld [wMenuCursorBuffer], a + ld a, [wd0dd] + ld [wMenuScrollPosition], a + call HandleScrollingMenu + ld a, [wMenuScrollPosition] + ld [wd0dd], a + ld a, [MenuSelection2] + ld [wd0d7], a + pop af + ld [wSpriteUpdatesEnabled], a + ld a, [wd0e3] + and a + jr nz, .asm_159d8 + ld a, [wcf73] + cp $2 + jr z, .asm_15a06 + cp $1 + jr z, .asm_159fb + cp $4 + jr z, .asm_159f2 + jr .asm_159f8 + +.asm_159d8 + ld a, [wcf73] + cp $2 + jr z, .asm_159e9 + cp $1 + jr z, .asm_159ef + cp $4 + jr z, .asm_159ef + jr .asm_159f8 + +.asm_159e9 + xor a + ld [wd0e3], a + jr .asm_159f8 + +.asm_159ef + call Function156c7 + +.asm_159f2 + callba Function2490c + +.asm_159f8 + jp .asm_15989 + +.asm_159fb + callba Function24706 + call Function1bee + and a + ret + +.asm_15a06 + scf + ret +; 0x15a08 + +MenuData15a08: ; 0x15a08 + db %01000000 + db 1, 4 ; start coords + db 10, 18 ; end coords + dw .MenuData2 + db 1 ; default option + +.MenuData2 + db %10110000 + db 4, 8 ; rows/cols? + db 2 ; horizontal spacing? + dbw 0, PCItems + dba PlaceMenuItemName + dba PlaceMenuItemQuantity + dba UpdateItemDescription + +PC_DisplayText: ; 15a20 + call MenuTextBox + call ExitMenu + ret +; 15a27 + + +UnknownText_0x15a27: ; 0x15a27 + ; turned on the PC. + text_jump UnknownText_0x1c144d + db "@" +; 0x15a2c + +UnknownText_0x15a2c: ; 0x15a2c + ; Access whose PC? + text_jump UnknownText_0x1c1462 + db "@" +; 0x15a31 + +UnknownText_0x15a31: ; 0x15a31 + ; BILL's PC accessed. #MON Storage System opened. + text_jump UnknownText_0x1c1474 + db "@" +; 0x15a36 + +UnknownText_0x15a36: ; 0x15a36 + ; Accessed own PC. Item Storage System opened. + text_jump UnknownText_0x1c14a4 + db "@" +; 0x15a3b + +UnknownText_0x15a3b: ; 0x15a3b + ; PROF.OAK's PC accessed. #DEX Rating System opened. + text_jump UnknownText_0x1c14d2 + db "@" +; 0x15a40 + +UnknownText_0x15a40: ; 0x15a40 + ; … Link closed… + text_jump UnknownText_0x1c1505 + db "@" +; 0x15a45 diff --git a/engine/pokedex.asm b/engine/pokedex.asm index 8d5680ded..d150ee471 100644 --- a/engine/pokedex.asm +++ b/engine/pokedex.asm @@ -65,12 +65,8 @@ InitPokedex: ; 40063 call ClearTileMap call Function414b7 - ld hl, wc6d0 -IF DEF(CRYSTAL11) - ld bc, $0116 -ELSE - ld bc, $0115 -ENDC + ld hl, wPokedexDataStart + ld bc, wPokedexDataEnd - wPokedexDataStart xor a call ByteFill @@ -480,7 +476,7 @@ Function4034f: ; 4034f push af ld a, [wJumptableIndex] push af - callba Function8442c + callba PrintDexEntry pop af ld [wJumptableIndex], a pop af @@ -2367,7 +2363,7 @@ Function41401: ; 41401 (10:5401) push af ld a, $5 ld [rSVBK], a - ld hl, wMapPals + ld hl, UnknBGPals ld bc, $40 xor a call ByteFill diff --git a/engine/pokegear.asm b/engine/pokegear.asm new file mode 100755 index 000000000..da6006853 --- /dev/null +++ b/engine/pokegear.asm @@ -0,0 +1,2990 @@ +PokeGear: ; 90b8d (24:4b8d) + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + + ld a, [VramState] + push af + xor a + ld [VramState], a + + call Function90bea + call DelayFrame + +.loop + call UpdateTime + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done + call Function90f04 + callba Function8cf69 + call DelayFrame + jr .loop + +.done + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + pop af + ld [VramState], a + pop af + ld [hInMenu], a + pop af + ld [Options], a + call ClearBGPalettes + xor a + ld [hBGMapAddress], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ld a, $90 + ld [hWY], a + call Function91492 + ret + +Function90bea: ; 90bea (24:4bea) + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + xor a + ld [hSCY], a + ld [hSCX], a + ld a, $7 + ld [hWX], a + call Function90c4e + callba Function8cf53 + call Function90d32 + ld a, 8 + call SkipMusic + ld a, $e3 + ld [rLCDC], a + call Function90d70 + xor a + ld [wJumptableIndex], a + ld [wcf64], a + ld [wcf65], a + ld [wcf66], a + ld [wc6d2], a + ld [wc6d1], a + ld [wc6d3], a + ld [wc6d9], a + ld [wc6da], a + ld [wc6db], a + call Function90d9e + call Function90da8 + ld b, SCGB_02 + call GetSGBLayout + call SetPalettes + ld a, [hCGB] + and a + ret z + ld a, $e4 + call Functioncf8 + ret + +Function90c4e: ; 90c4e + call ClearVBank1 + ld hl, TownMapGFX + ld de, VTiles2 + ld a, BANK(TownMapGFX) + call FarDecompress + + ld hl, PokegearGFX + ld de, VTiles2 + $30 tiles + ld a, BANK(PokegearGFX) + call FarDecompress + + ld hl, PokegearSpritesGFX + ld de, VTiles0 + ld a, BANK(PokegearSpritesGFX) + call Decompress + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + cp FAST_SHIP + jr z, .ssaqua + + callba GetPlayerIcon + + push de + ld h, d + ld l, e + ld a, b + + push af + ld de, VTiles0 tile $10 + ld bc, 4 tiles + call FarCopyBytes + pop af + + pop hl + + ld de, $c0 + add hl, de + ld de, VTiles0 tile $14 + ld bc, 4 tiles + call FarCopyBytes + ret + +.ssaqua + ld hl, FastShipGFX + ld de, VTiles0 tile $10 + ld bc, 8 tiles + call CopyBytes + ret +; 90cb2 + +FastShipGFX: ; 90cb2 +INCBIN "gfx/misc/fast_ship.2bpp" +; 90d32 + +Function90d32: ; 90d32 (24:4d32) + depixel 4, 2, 4, 0 + ld a, SPRITE_ANIM_INDEX_0D + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $0 + ret + +Function90d41: ; 90d41 (24:4d41) + ld hl, wcf64 + ld e, [hl] + ld d, 0 + ld hl, Unknown_90d52 + add hl, de + ld a, [hl] + ld hl, $6 + add hl, bc + ld [hl], a + ret +; 90d52 (24:4d52) + +Unknown_90d52: ; 90d52 + db $00, $10, $20, $30 +; 90d56 + +Function90d56: ; 90d56 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + cp SPECIAL_MAP + ret nz + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + call GetWorldMapLocation + ret +; 90d70 + + +Function90d70: ; 90d70 (24:4d70) + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + + cp FAST_SHIP + jr z, .asm_90d95 + + cp SPECIAL_MAP + jr nz, .asm_90d8e + + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + call GetWorldMapLocation + +.asm_90d8e + ld [wc6d8], a + ld [wc6d7], a + ret + +.asm_90d95 + ld [wc6d8], a + ld a, NEW_BARK_TOWN + ld [wc6d7], a + ret + +Function90d9e: ; 90d9e (24:4d9e) + ld a, $0 + ld [wJumptableIndex], a + xor a + ld [wcf64], a + ret + +Function90da8: ; 90da8 (24:4da8) + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, TileMapEnd - TileMap + ld a, $4f + call ByteFill + ld a, [wcf64] + and $3 + add a + ld e, a + ld d, 0 + ld hl, Jumptable_90e12 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .asm_90dcb + push de + jp [hl] + +.asm_90dcb + call Function90eb0 + callba TownMapPals + ld a, [wcf65] + and a + jr nz, .asm_90de8 + + xor a + ld [hBGMapAddress], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call Function90e00 + ld a, $90 + jr .asm_90df3 + +.asm_90de8 + xor a + ld [hBGMapAddress], a + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call Function90e00 + xor a + +.asm_90df3 + ld [hWY], a + ld a, [wcf65] + and 1 + xor 1 + ld [wcf65], a + ret + +Function90e00: ; 90e00 (24:4e00) + ld a, [hCGB] + and a + jr z, .asm_90e0e + ld a, $2 + ld [hBGMapMode], a + ld c, 3 + call DelayFrames +.asm_90e0e + call WaitBGMap + ret +; 90e12 (24:4e12) + +Jumptable_90e12: ; 90e12 + dw Function90e1a + dw Function90e3f + dw Function90e82 + dw Function90e72 +; 90e1a + +Function90e1a: ; 90e1a + ld de, ClockTilemapRLE + call Function914bb + hlcoord 12, 1 + ld de, .switch + call PlaceString + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + call Function90f86 + ret +; 90e36 (24:4e36) + +.switch + db " SWITCH▶@" +; 90e3f + +Function90e3f: ; 90e3f + + ld a, [wc6d8] + cp FAST_SHIP + jr z, .johto + cp KANTO_LANDMARK + jr nc, .kanto +.johto + ld e, 0 + jr .ok +.kanto + ld e, 1 +.ok + callba PokegearMap + ld a, $7 + ld bc, $12 + hlcoord 1, 2 + call ByteFill + hlcoord 0, 2 + ld [hl], $6 + hlcoord 19, 2 + ld [hl], $17 + ld a, [wc6d7] + call Function910b4 + ret +; 90e72 + +Function90e72: ; 90e72 + ld de, RadioTilemapRLE + call Function914bb + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + ret +; 90e82 + +Function90e82: ; 90e82 + ld de, PhoneTilemapRLE + call Function914bb + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + call Function90e98 + call Function912d8 + ret +; 90e98 + +Function90e98: ; 90e98 (24:4e98) + hlcoord 17, 1 + ld a, $3c + ld [hli], a + inc a + ld [hl], a + hlcoord 17, 2 + inc a + ld [hli], a + call GetMapHeaderPhoneServiceNybble + and a + ret nz + hlcoord 18, 2 + ld [hl], $3f + ret + +Function90eb0: ; 90eb0 (24:4eb0) + hlcoord 0, 0 + ld bc, $8 + ld a, $4f + call ByteFill + hlcoord 0, 1 + ld bc, $8 + ld a, $4f + call ByteFill + ld de, wPokegearFlags + ld a, [de] + bit 0, a + call nz, Function90ee4 + ld a, [de] + bit 2, a + call nz, Function90eeb + ld a, [de] + bit 1, a + call nz, Function90ef2 + hlcoord 0, 0 + ld a, $46 + call Function90ef7 + ret + +Function90ee4: ; 90ee4 (24:4ee4) + hlcoord 2, 0 + ld a, $40 + jr Function90ef7 + +Function90eeb: ; 90eeb (24:4eeb) + hlcoord 4, 0 + ld a, $44 + jr Function90ef7 + +Function90ef2: ; 90ef2 (24:4ef2) + hlcoord 6, 0 + ld a, $42 + +Function90ef7: ; 90ef7 (24:4ef7) + ld [hli], a + inc a + ld [hld], a + ld bc, $14 + add hl, bc + add $f + ld [hli], a + inc a + ld [hld], a + ret + +Function90f04: ; 90f04 (24:4f04) + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_90f13 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Jumptable_90f13: ; 90f13 (24:4f13) + dw Function90f2d + dw Function90f3e + dw Function90fb4 + dw Function90fcd + dw Function90fee + dw Function90fcd + dw Function90fe9 + dw Function91156 + dw Function91171 + dw Function911eb + dw Function91256 + dw Function910f9 + dw Function91112 + + +Function90f2d: ; 90f2d (24:4f2d) + call Function90da8 + ld hl, UnknownText_0x914d3 + call PrintText + ld hl, wJumptableIndex + inc [hl] + call Function91492 + ret + +Function90f3e: ; 90f3e (24:4f3e) + call Function90f7b + ld hl, hJoyLast + + ld a, [hl] + and A_BUTTON + B_BUTTON + START + SELECT + jr nz, .asm_90f75 + + ld a, [hl] + and D_RIGHT + ret z + + ld a, [wPokegearFlags] + bit 0, a + jr z, .asm_90f5a + ld c, $2 + ld b, $1 + jr .asm_90f71 +.asm_90f5a + + ld a, [wPokegearFlags] + bit 2, a + jr z, .asm_90f67 + ld c, $7 + ld b, $2 + jr .asm_90f71 +.asm_90f67 + + ld a, [wPokegearFlags] + bit 1, a + ret z + + ld c, $b + ld b, $3 + +.asm_90f71 + call Function91480 + ret + +.asm_90f75 + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function90f7b: ; 90f7b (24:4f7b) + xor a + ld [hBGMapMode], a + call Function90f86 + ld a, $1 + ld [hBGMapMode], a + ret + +Function90f86: ; 90f86 (24:4f86) + hlcoord 3, 5 + lb bc, 5, 14 + call ClearBox + ld a, [hHours] + ld b, a + ld a, [hMinutes] + ld c, a + decoord 6, 8 + callba PrintHoursMins + ld hl, UnknownText_0x90faf + bccoord 6, 6 + call PlaceWholeStringInBoxAtOnce + ret +; 90fa8 (24:4fa8) + +String_90fa8: db "ごぜん@" +String_90fac: db "ごご@" + +UnknownText_0x90faf: ; 0x90faf + text_jump UnknownText_0x1c5821 + db "@" +; 0x90fb4 + +Function90fb4: ; 90fb4 (24:4fb4) + ld a, [wc6d8] + cp FAST_SHIP + jr z, .johto + cp KANTO_LANDMARK + jr nc, .kanto +.johto + ld a, 3 + jr .done + + ret + +.kanto + ld a, 5 +.done + ld [wJumptableIndex], a + call Function91492 + ret + +Function90fcd: ; 90fcd (24:4fcd) + call Function90da8 + ld a, [wc6d8] + call Function9106a + ld a, [wc6d7] + call Function91098 + ld a, c + ld [wc6d5], a + ld a, b + ld [wc6d6], a + ld hl, wJumptableIndex + inc [hl] + ret + +Function90fe9: ; 90fe9 (24:4fe9) + call Function910e8 + jr Function90ff2 + +Function90fee: ; 90fee (24:4fee) + ld d, $2e + ld e, $1 +Function90ff2: ; 90ff2 (24:4ff2) + ld hl, hJoyLast + ld a, [hl] + and B_BUTTON + jr nz, .cancel + ld a, [hl] + and D_RIGHT + jr nz, .right + ld a, [hl] + and D_LEFT + jr nz, .left + call Function9102f + ret + +.right + ld a, [wPokegearFlags] + bit 2, a + jr z, .asm_91015 + ld c, $7 + ld b, $2 + jr .done + +.asm_91015 + ld a, [wPokegearFlags] + bit 1, a + ret z + ld c, $b + ld b, $3 + jr .done + +.left + ld c, $0 + ld b, $0 +.done + call Function91480 + ret +.cancel + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function9102f: ; 9102f (24:502f) + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + ret +.up + ld hl, wc6d7 + ld a, [hl] + cp d + jr c, .asm_91047 + ld a, e + dec a + ld [hl], a +.asm_91047 + inc [hl] + jr .done + +.down + ld hl, wc6d7 + ld a, [hl] + cp e + jr nz, .asm_91054 + ld a, d + inc a + ld [hl], a +.asm_91054 + dec [hl] + +.done + ld a, [wc6d7] + call Function910b4 + ld a, [wc6d5] + ld c, a + ld a, [wc6d6] + ld b, a + ld a, [wc6d7] + call Function910d4 + ret + +Function9106a: ; 9106a + push af + ld de, 0 + ld b, SPRITE_ANIM_INDEX_0A + ld a, [PlayerGender] + bit 0, a + jr z, .asm_91079 + ld b, SPRITE_ANIM_INDEX_1E + +.asm_91079 + ld a, b + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $10 + pop af + ld e, a + push bc + callba GetLandmarkCoords + pop bc + ld hl, $4 + add hl, bc + ld [hl], e + ld hl, $5 + add hl, bc + ld [hl], d + ret +; 91098 + +Function91098: ; 91098 + push af + ld de, 0 + ld a, SPRITE_ANIM_INDEX_0D + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $4 + ld hl, $2 + add hl, bc + ld [hl], $0 + pop af + push bc + call Function910d4 + pop bc + ret +; 910b4 + +Function910b4: ; 910b4 + push af + hlcoord 8, 0 + lb bc, 2, 12 + call ClearBox + pop af + ld e, a + push de + callba GetLandmarkName + pop de + callba Function1de2c5 + hlcoord 8, 0 + ld [hl], $34 + ret +; 910d4 + +Function910d4: ; 910d4 + push bc + ld e, a + callba GetLandmarkCoords + pop bc + ld hl, $4 + add hl, bc + ld [hl], e + ld hl, $5 + add hl, bc + ld [hl], d + ret +; 910e8 + +Function910e8: ; 910e8 + ld a, [StatusFlags] + bit 6, a + jr z, .asm_910f4 + ld d, $5e + ld e, $2f + ret + +.asm_910f4 + ld d, $5e + ld e, $58 + ret +; 910f9 + + +Function910f9: ; 910f9 (24:50f9) + call Function90da8 + depixel 4, 10, 4, 4 + ld a, SPRITE_ANIM_INDEX_14 + call _InitSpriteAnimStruct + ld hl, $3 + add hl, bc + ld [hl], $8 + call _UpdateRadioStation + ld hl, wJumptableIndex + inc [hl] + ret + +Function91112: ; 91112 (24:5112) + ld hl, hJoyLast + ld a, [hl] + and B_BUTTON + jr nz, .cancel + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [wc6da] + ld l, a + ld a, [wc6db] + ld h, a + ld a, [wc6d9] + and a + ret z + rst FarCall + ret + +.left + ld a, [wPokegearFlags] + bit 2, a + jr z, .asm_9113b + ld c, $7 + ld b, $2 + jr .asm_9114c + +.asm_9113b + ld a, [wPokegearFlags] + bit 0, a + jr z, .asm_91148 + ld c, $2 + ld b, $1 + jr .asm_9114c + +.asm_91148 + ld c, $0 + ld b, $0 +.asm_9114c + call Function91480 + ret + +.cancel + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function91156: ; 91156 (24:5156) + ld hl, wJumptableIndex + inc [hl] + xor a + ld [wc6d2], a + ld [wc6d1], a + ld [wc6d3], a + call Function90da8 + call Function91492 + ld hl, UnknownText_0x914ce + call PrintText + ret + +Function91171: ; 91171 (24:5171) + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .b + ld a, [hl] + and A_BUTTON + jr nz, .a + ld hl, hJoyLast + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] + and D_RIGHT + jr nz, .right + call Function9126d + ret + +.left + ld a, [wPokegearFlags] + bit 0, a + jr z, .asm_9119c + ld c, $2 + ld b, $1 + jr .asm_911ac +.asm_9119c + ld c, $0 + ld b, $0 + jr .asm_911ac + +.right + ld a, [wPokegearFlags] + bit 1, a + ret z + ld c, $b + ld b, $3 +.asm_911ac + call Function91480 + ret + +.b + ld hl, wJumptableIndex + set 7, [hl] + ret + +.a + ld hl, wPhoneList + ld a, [wc6d2] + ld e, a + ld d, 0 + add hl, de + ld a, [wc6d1] + ld e, a + ld d, 0 + add hl, de + ld a, [hl] + and a + ret z + + ld [wc6d3], a + hlcoord 1, 4 + ld a, [wc6d1] + ld bc, 20 * 2 + call AddNTimes + ld [hl], "▷" + call Function91342 + jr c, .asm_911e5 + + ld hl, wJumptableIndex + inc [hl] + ret + +.asm_911e5 + ld a, $8 + ld [wJumptableIndex], a + ret + +Function911eb: ; 911eb (24:51eb) + call GetMapHeaderPhoneServiceNybble + and a + jr nz, .asm_91234 + ld hl, Options + res NO_TEXT_SCROLL, [hl] + xor a + ld [hInMenu], a + ld de, SFX_CALL + call PlaySFX + ld hl, UnknownText_0x9124c + call PrintText + call WaitSFX + ld de, SFX_CALL + call PlaySFX + ld hl, UnknownText_0x9124c + call PrintText + call WaitSFX + ld a, [wc6d3] + ld b, a + call Function90199 + ld c, 10 + call DelayFrames + ld hl, Options + set NO_TEXT_SCROLL, [hl] + ld a, $1 + ld [hInMenu], a + call Function912b7 + ld hl, wJumptableIndex + inc [hl] + ret +.asm_91234 + callba Phone_NoSignal + ld hl, OutOfServiceAreaText + call PrintText + ld a, $8 + ld [wJumptableIndex], a + ld hl, UnknownText_0x914ce + call PrintText + ret +; 9124c (24:524c) + +UnknownText_0x9124c: ; 0x9124c + ; + text_jump UnknownText_0x1c5824 + db "@" +; 0x91251 + +OutOfServiceAreaText: ; 0x91251 + ; You're out of the service area. + text_jump UnknownText_0x1c5827 + db "@" +; 0x91256 + +Function91256: ; 91256 (24:5256) + ld a, [hJoyPressed] + and A_BUTTON | B_BUTTON + ret z + callba HangUp + ld a, $8 + ld [wJumptableIndex], a + ld hl, UnknownText_0x914ce + call PrintText + ret + +Function9126d: ; 9126d (24:526d) + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + ret + +.up + ld hl, wc6d1 + ld a, [hl] + and a + jr z, .asm_91285 + dec [hl] + jr .asm_912a3 + +.asm_91285 + ld hl, wc6d2 + ld a, [hl] + and a + ret z + dec [hl] + jr .asm_912ad + +.down + ld hl, wc6d1 + ld a, [hl] + cp $3 + jr nc, .asm_91299 + inc [hl] + jr .asm_912a3 + +.asm_91299 + ld hl, wc6d2 + ld a, [hl] + cp $6 + ret nc + inc [hl] + jr .asm_912ad + +.asm_912a3 + xor a + ld [hBGMapMode], a + call Function912b7 + call WaitBGMap + ret + +.asm_912ad + xor a + ld [hBGMapMode], a + call Function912d8 + call WaitBGMap + ret + +Function912b7: ; 912b7 (24:52b7) + ld a, " " + hlcoord 1, 4 + ld [hl], a + hlcoord 1, 6 + ld [hl], a + hlcoord 1, 8 + ld [hl], a + hlcoord 1, 10 + ld [hl], a + hlcoord 1, 4 + ld a, [wc6d1] + ld bc, $28 + call AddNTimes + ld [hl], "▶" + ret + +Function912d8: ; 912d8 (24:52d8) + hlcoord 1, 3 + ld b, $9 + ld a, $7f +.asm_912df + ld c, $12 +.asm_912e1 + ld [hli], a + dec c + jr nz, .asm_912e1 +rept 2 + inc hl +endr + dec b + jr nz, .asm_912df + ld a, [wc6d2] + ld e, a + ld d, $0 + ld hl, wPhoneList + add hl, de + xor a + ld [wc6d0], a +.asm_912f8 + ld a, [hli] + push hl + push af + hlcoord 2, 4 + ld a, [wc6d0] + ld bc, $28 + call AddNTimes + ld d, h + ld e, l + pop af + ld b, a + call Function90380 + pop hl + ld a, [wc6d0] + inc a + ld [wc6d0], a + cp $4 + jr c, .asm_912f8 + call Function912b7 + ret +; 9131e (24:531e) + +Function9131e: ; 9131e + ld hl, wPhoneList + ld a, [wc6d2] + ld e, a + ld d, 0 + add hl, de + ld a, [wc6d1] + ld e, a + ld d, 0 + add hl, de + ld [hl], 0 + ld hl, wPhoneList + ld c, $a +.asm_91336 + ld a, [hli] + and a + jr nz, .asm_9133e + ld a, [hld] + ld [hli], a + ld [hl], 0 +.asm_9133e + dec c + jr nz, .asm_91336 + ret +; 91342 + +Function91342: ; 91342 (24:5342) + ld hl, wPhoneList + ld a, [wc6d2] + ld e, a + ld d, 0 + add hl, de + ld a, [wc6d1] + ld e, a + ld d, 0 + add hl, de + ld c, [hl] + callba Function9038a + ld a, c + and a + jr z, .asm_91366 + + ld hl, Jumptable_91455 + ld de, Unknown_9143f + jr .asm_9136c + +.asm_91366 + ld hl, Jumptable_9146a + ld de, Unknown_9145b + +.asm_9136c + xor a + ld [hBGMapMode], a + push hl + push de + ld a, [de] + ld l, a + inc de + ld a, [de] + ld h, a + inc de + push hl + ld bc, hBGMapAddress + 1 + add hl, bc + ld a, [de] + inc de + sla a + ld b, a + ld c, 8 + push de + call TextBox + pop de + pop hl + inc hl + call PlaceString + pop de + xor a + ld [wc6d4], a + call Function9141d + call WaitBGMap + +.asm_91398 + push de + call JoyTextDelay + pop de + ld hl, hJoyPressed + ld a, [hl] + and D_UP + jr nz, .asm_913b4 + ld a, [hl] + and D_DOWN + jr nz, .asm_913c1 + ld a, [hl] + and A_BUTTON | B_BUTTON + jr nz, .asm_913d4 + call DelayFrame + jr .asm_91398 + +.asm_913b4 + ld hl, wc6d4 + ld a, [hl] + and a + jr z, .asm_91398 + dec [hl] + call Function9141d + jr .asm_91398 + +.asm_913c1 + ld hl, 2 + add hl, de + ld a, [wc6d4] + inc a + cp [hl] + jr nc, .asm_91398 + ld [wc6d4], a + call Function9141d + jr .asm_91398 + +.asm_913d4 + xor a + ld [hBGMapMode], a + call Function912d8 + ld a, $1 + ld [hBGMapMode], a + pop hl + ld a, [hJoyPressed] + and B_BUTTON + jr nz, Function913f1 + + ld a, [wc6d4] + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Function913f1: ; 913f1 + ld hl, UnknownText_0x914ce + call PrintText + scf + ret +; 913f9 (24:53f9) + +Function913f9: ; 913f9 + ld hl, UnknownText_0x914d8 + call MenuTextBox + call YesNoBox + call ExitMenu + jr c, .asm_91419 + call Function9131e + xor a + ld [hBGMapMode], a + call Function912d8 + ld hl, UnknownText_0x914ce + call PrintText + call WaitBGMap +.asm_91419 + scf + ret +; 9141b + +Function9141b: ; 9141b + and a + ret +; 9141d + +Function9141d: ; 9141d (24:541d) + push de + ld a, [de] + inc de + ld l, a + ld a, [de] + inc de + ld h, a + ld a, [de] + ld c, a + push hl + ld a, " " + ld de, 20 * 2 +.asm_9142c + ld [hl], a + add hl, de + dec c + jr nz, .asm_9142c + pop hl + ld a, [wc6d4] + ld bc, 20 * 2 + call AddNTimes + ld [hl], "▶" + pop de + ret +; 9143f (24:543f) + +Unknown_9143f: ; 9143f + dwcoord 10, 6 + db 3 + db "CALL" + next "DELETE" + next "CANCEL" + db "@" +; 91455 + +Jumptable_91455: ; 91455 + dw Function9141b + dw Function913f9 + dw Function913f1 +; 9145b + +Unknown_9145b: ; 9145b + dwcoord 10, 8 + db 2 + db "CALL" + next "CANCEL" + db "@" +; 9146a + +Jumptable_9146a: ; 9146a + dw Function9141b + dw Function913f1 +; 9146e + + +Function9146e: ; 9146e + ld a, [hHours] + cp 12 + jr c, .asm_9147b + sub 12 + ld [wd265], a + scf + ret + +.asm_9147b + ld [wd265], a + and a + ret +; 91480 + + +Function91480: ; 91480 (24:5480) + ld de, SFX_READ_TEXT_2 + call PlaySFX + ld a, c + ld [wJumptableIndex], a + ld a, b + ld [wcf64], a + call DeleteSpriteAnimStruct2ToEnd + ret + +Function91492: ; 91492 + ld a, [wc6dc] + cp $fe + jr z, .asm_914a3 + cp $ff + call z, EnterMapMusic + xor a + ld [wc6dc], a + ret + +.asm_914a3 + call RestartMapMusic + xor a + ld [wc6dc], a + ret +; 914ab + + +DeleteSpriteAnimStruct2ToEnd: ; 914ab (24:54ab) + ld hl, SpriteAnim2 + ld bc, wSpriteAnimationStructsEnd - SpriteAnim2 + xor a + call ByteFill + ld a, 2 + ld [wSpriteAnimCount], a + ret + +Function914bb: ; 914bb (24:54bb) + hlcoord 0, 0 +.asm_914be + ld a, [de] + cp $ff + ret z + ld b, a + inc de + ld a, [de] + ld c, a + inc de + ld a, b +.asm_914c8 + ld [hli], a + dec c + jr nz, .asm_914c8 + jr .asm_914be +; 914ce (24:54ce) + +UnknownText_0x914ce: ; 0x914ce + ; Whom do you want to call? + text_jump UnknownText_0x1c5847 + db "@" +; 0x914d3 + +UnknownText_0x914d3: ; 0x914d3 + ; Press any button to exit. + text_jump UnknownText_0x1c5862 + db "@" +; 0x914d8 + +UnknownText_0x914d8: ; 0x914d8 + ; Delete this stored phone number? + text_jump UnknownText_0x1c587d + db "@" +; 0x914dd + + +PokegearSpritesGFX: ; 914dd +INCBIN "gfx/misc/pokegear_sprites.2bpp.lz" +; 9150d + +RadioTilemapRLE: ; 9150d +INCBIN "gfx/unknown/09150d.tilemap.rle" + +PhoneTilemapRLE: ; 9158a +INCBIN "gfx/unknown/09158a.tilemap.rle" + +ClockTilemapRLE: ; 915db +INCBIN "gfx/unknown/0915db.tilemap.rle" +; 9163e +_UpdateRadioStation: ; 9163e (24:563e) + jr UpdateRadioStation + +Function91640: ; 91640 (24:5640) + push bc + call .TuningKnob + pop bc + ld a, [wRadioTuningKnob] + ld hl, $6 + add hl, bc + ld [hl], a + ret + +.TuningKnob: ; 9164e (24:564e) + ld hl, hJoyLast + ld a, [hl] + and D_DOWN + jr nz, .down + ld a, [hl] + and D_UP + jr nz, .up + ret + +.down + ld hl, wRadioTuningKnob + ld a, [hl] + and a + ret z +rept 2 + dec [hl] +endr + jr .update + +.up + ld hl, wRadioTuningKnob + ld a, [hl] + cp 80 + ret nc +rept 2 + inc [hl] +endr + +.update + +UpdateRadioStation: ; 9166f (24:566f) + ld hl, wRadioTuningKnob + ld d, [hl] + ld hl, RadioChannels +.loop + ld a, [hli] + cp -1 + jr z, .nostation + cp d + jr z, .foundstation +rept 2 + inc hl +endr + jr .loop + +.nostation + call NoRadioStation + ret + +.foundstation + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .returnafterstation + push de + jp [hl] +.returnafterstation + ld a, [wc6d9] + and a + ret z + xor a + ld [hBGMapMode], a + hlcoord 2, 9 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret +; 916a1 (24:56a1) + +Function916a1: ; 916a1 + ld [wc6d9], a + ld a, [hli] + ld [wc6da], a + ld a, [hli] + ld [wc6db], a + ret +; 916ad + + +RadioChannels: +; frequencies and the shows that play on them. +; frequency value given here = 4 × ingame_frequency − 2 + dbw 16, .PkmnTalkAndPokedexShow + dbw 28, .PokemonMusic + dbw 32, .LuckyChannel + dbw 40, .BuenasPassword + dbw 52, .RuinsOfAlphRadio + dbw 64, .PlacesAndPeople + dbw 72, .LetsAllSing + dbw 78, .PokeFluteRadio + dbw 80, .EvolutionRadio + db $ff + +.PkmnTalkAndPokedexShow +; Pokédex Show in the morning +; Oak's Pokémon Talk in the afternoon and evening + call .InJohto + jr nc, .NoSignal + ld a, [TimeOfDay] + and a + jp z, LoadStation_PokedexShow + jp LoadStation_OaksPokemonTalk + +.PokemonMusic + call .InJohto + jr nc, .NoSignal + jp LoadStation_PokemonMusic + +.LuckyChannel + call .InJohto + jr nc, .NoSignal + jp LoadStation_LuckyChannel + +.BuenasPassword + call .InJohto + jr nc, .NoSignal + jp LoadStation_BuenasPassword + +.RuinsOfAlphRadio + ld a, [wc6d8] + cp RUINS_OF_ALPH + jr nz, .NoSignal + jp LoadStation_UnownRadio + +.PlacesAndPeople + call .InJohto + jr c, .NoSignal + ld a, [wPokegearFlags] + bit 3, a + jr z, .NoSignal + jp LoadStation_PlacesAndPeople + +.LetsAllSing + call .InJohto + jr c, .NoSignal + ld a, [wPokegearFlags] + bit 3, a + jr z, .NoSignal + jp LoadStation_LetsAllSing + +.PokeFluteRadio + call .InJohto + jr c, .NoSignal + ld a, [wPokegearFlags] + bit 3, a + jr z, .NoSignal + jp LoadStation_PokeFluteRadio + +.EvolutionRadio +; This station airs in the Lake of Rage area when Rocket are still in Mahogany. + + ld a, [StatusFlags] + bit 4, a + jr z, .NoSignal + + ld a, [wc6d8] + cp MAHOGANY_TOWN + jr z, .ok + cp ROUTE_43 + jr z, .ok + cp LAKE_OF_RAGE + jr nz, .NoSignal +.ok + jp LoadStation_EvolutionRadio + +.NoSignal + call NoRadioStation + ret + +.InJohto +; if in Johto or on the S.S. Aqua, set carry +; otherwise clear carry + ld a, [wc6d8] + cp FAST_SHIP + jr z, .johto + cp KANTO_LANDMARK + jr c, .johto +.kanto + and a + ret +.johto + scf + ret + + + +LoadStation_OaksPokemonTalk: ; 91753 (24:5753) + xor a ; OAKS_POKEMON_TALK + ld [wd002], a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, OaksPkmnTalkName + ret + +LoadStation_PokedexShow: ; 91766 (24:5766) + ld a, POKEDEX_SHOW + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, PokedexShowName + ret + +LoadStation_PokemonMusic: ; 9177b (24:577b) + ld a, POKEMON_MUSIC + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, PokemonMusicName + ret + +LoadStation_LuckyChannel: ; 91790 (24:5790) + ld a, LUCKY_CHANNEL + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, LuckyChannelName + ret + +LoadStation_BuenasPassword: ; 917a5 (24:57a5) + ld a, BUENAS_PASSWORD + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, NotBuenasPasswordName + ld a, [StatusFlags2] + bit 0, a + ret z + ld de, BuenasPasswordName + ret +; 917c3 (24:57c3) + +BuenasPasswordName: db "BUENA'S PASSWORD@" +NotBuenasPasswordName: db "@" + +LoadStation_UnownRadio: ; 917d5 (24:57d5) + ld a, UNOWN_RADIO + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, UnknownStationName + ret + +LoadStation_PlacesAndPeople: ; 917ea (24:57ea) + ld a, PLACES_AND_PEOPLE + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, PlacesAndPeopleName + ret + +LoadStation_LetsAllSing: ; 917ff (24:57ff) + ld a, LETS_ALL_SING + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, LetsAllSingName + ret +; 91814 (24:5814) + +LoadStation_RocketRadio: ; 91814 + ld a, ROCKET_RADIO + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, LetsAllSingName + ret +; 91829 + +LoadStation_PokeFluteRadio: ; 91829 (24:5829) + ld a, POKE_FLUTE_RADIO + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, PokeFluteStationName + ret + +LoadStation_EvolutionRadio: ; 9183e (24:583e) + ld a, EVOLUTION_RADIO + ld [wd002], a + xor a + ld [wd005], a + ld a, BANK(PlayRadioShow) + ld hl, PlayRadioShow + call Radio_BackUpFarCallParams + ld de, UnknownStationName + ret +; 91853 (24:5853) + +LoadStation_Dummy: ; 91853 + ret + +RadioMusicRestartDE: ; 91854 (24:5854) + push de + ld a, e + ld [wc6dc], a + ld de, MUSIC_NONE + call PlayMusic + pop de + ld a, e + ld [wMapMusic], a + call PlayMusic + ret + +RadioMusicRestartPokemonChannel: ; 91868 (24:5868) + push de + ld a, $fe + ld [wc6dc], a + ld de, MUSIC_NONE + call PlayMusic + pop de + ld de, MUSIC_POKEMON_CHANNEL + call PlayMusic + ret + +Radio_BackUpFarCallParams: ; 9187c (24:587c) + ld [wc6d9], a + ld a, l + ld [wc6da], a + ld a, h + ld [wc6db], a + ret + +NoRadioStation: ; 91888 (24:5888) + call NoRadioMusic + call NoRadioName + xor a + ld [wc6d9], a + ld [wc6da], a + ld [wc6db], a + ld a, $1 + ld [hBGMapMode], a + ret + +NoRadioMusic: ; 9189d (24:589d) + ld de, MUSIC_NONE + call PlayMusic + ld a, $ff + ld [wc6dc], a + ret + +NoRadioName: ; 918a9 (24:58a9) + xor a + ld [hBGMapMode], a + hlcoord 1, 8 + lb bc, 3, 18 + call ClearBox + hlcoord 0, 12 + ld bc, $412 + call TextBox + ret +; 918bf + +OaksPkmnTalkName: db "OAK's <PK><MN> Talk@" +PokedexShowName: db "#DEX Show@" +PokemonMusicName: db "#MON Music@" +LuckyChannelName: db "Lucky Channel@" +UnknownStationName: db "?????@" +PlacesAndPeopleName: db "Places & People@" +LetsAllSingName: db "Let's All Sing!@" +PokeFluteStationName: db "# FLUTE@" +; 9191c + +INCLUDE "engine/town_map.asm" + +PlayRadio: ; 91a53 + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call .PlayStation + ld c, 100 + call DelayFrames +.loop + call JoyTextDelay + ld a, [hJoyPressed] + and A_BUTTON | B_BUTTON + jr nz, .stop + ld a, [wc6da] + ld l, a + ld a, [wc6db] + ld h, a + ld a, [wc6d9] + and a + jr z, .zero + rst FarCall + +.zero + call DelayFrame + jr .loop + +.stop + pop af + ld [Options], a + call Function91492 + ret +; 91a87 + +.PlayStation: ; 91a87 + ld a, -1 + ld [EnemyTurnsTaken], a + ld hl, .StationPointers + ld d, $0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .jump_return + push de + jp [hl] + +.jump_return + push de + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + hlcoord 1, 14 + ld [hl], $72 + pop de + hlcoord 2, 14 + call PlaceString + ld h, b + ld l, c + ld [hl], $73 + call WaitBGMap + ret +; 91ab9 + +.StationPointers: ; 91ab9 + dw .OakOrPnP + dw LoadStation_OaksPokemonTalk + dw LoadStation_PokedexShow + dw LoadStation_PokemonMusic + dw LoadStation_LuckyChannel + dw LoadStation_UnownRadio + dw LoadStation_PlacesAndPeople + dw LoadStation_LetsAllSing + dw LoadStation_RocketRadio +; 91acb + +.OakOrPnP: ; 91acb + call IsInJohto + and a + jr nz, .kanto + call UpdateTime + ld a, [TimeOfDay] + and a + jp z, LoadStation_PokedexShow + jp LoadStation_OaksPokemonTalk + +.kanto + jp LoadStation_PlacesAndPeople +; 91ae1 + +PokegearMap: ; 91ae1 + ld a, e + and a + jr nz, .kanto + call Function91ff2 + call FillJohtoMap + ret + +.kanto + call Function91ff2 + call FillKantoMap + ret +; 91af3 + +_FlyMap: ; 91af3 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld hl, hInMenu + ld a, [hl] + push af + ld [hl], $1 + xor a + ld [hBGMapMode], a + callba Function8cf53 + call Function91ff2 + ld de, GFX_922e1 + ld hl, VTiles2 tile $30 + lb bc, BANK(GFX_922e1), 6 + call Request1bpp + call FlyMap + call Function91c8f + ld b, SCGB_02 + call GetSGBLayout + call SetPalettes +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .pressedB + ld a, [hl] + and A_BUTTON + jr nz, .pressedA + call FlyMapScroll + call GetMapCursorCoordinates + callba Function8cf69 + call DelayFrame + jr .loop + +.pressedB + ld a, -1 + jr .exit + +.pressedA + ld a, [wd002] + ld l, a + ld h, 0 + add hl, hl + ld de, Flypoints + 1 + add hl, de + ld a, [hl] + +.exit + ld [wd002], a + pop af + ld [hInMenu], a + call ClearBGPalettes + ld a, $90 + ld [hWY], a + xor a + ld [hBGMapAddress], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ld a, [wd002] + ld e, a + ret +; 91b73 + +FlyMapScroll: ; 91b73 + ld a, [StartFlypoint] + ld e, a + ld a, [EndFlypoint] + ld d, a + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .ScrollNext + ld a, [hl] + and D_DOWN + jr nz, .ScrollPrev + ret + +.ScrollNext + ld hl, wd002 + ld a, [hl] + cp d + jr nz, .NotAtEndYet + ld a, e + dec a + ld [hl], a + +.NotAtEndYet + inc [hl] + call CheckIfVisitedFlypoint + jr z, .ScrollNext + jr .Finally + +.ScrollPrev + ld hl, wd002 + ld a, [hl] + cp e + jr nz, .NotAtStartYet + ld a, d + inc a + ld [hl], a + +.NotAtStartYet + dec [hl] + call CheckIfVisitedFlypoint + jr z, .ScrollPrev + +.Finally + call TownMapBubble + call WaitBGMap + xor a + ld [hBGMapMode], a + ret +; 91bb5 + +TownMapBubble: ; 91bb5 +; Draw the bubble containing the location text in the town map HUD + +; Top-left corner + hlcoord 1, 0 + ld a, $30 + ld [hli], a + +; Top row + ld bc, 16 + ld a, " " + call ByteFill + +; Top-right corner + ld a, $31 + ld [hl], a + hlcoord 1, 1 + + +; Middle row + ld bc, 18 + ld a, " " + call ByteFill + + +; Bottom-left corner + hlcoord 1, 2 + ld a, $32 + ld [hli], a + +; Bottom row + ld bc, 16 + ld a, " " + call ByteFill + +; Bottom-right corner + ld a, $33 + ld [hl], a + + +; Print "Where?" + hlcoord 2, 0 + ld de, .Where + call PlaceString + +; Print the name of the default flypoint + call .Name + +; Up/down arrows + hlcoord 18, 1 + ld [hl], $34 + ret + +.Where + db "Where?@" + +.Name +; We need the map location of the default flypoint + ld a, [wd002] + ld l, a + ld h, 0 + add hl, hl ; two bytes per flypoint + ld de, Flypoints + add hl, de + ld e, [hl] + + callba GetLandmarkName + + hlcoord 2, 1 + ld de, StringBuffer1 + call PlaceString + ret +; 91c17 + +GetMapCursorCoordinates: ; 91c17 + ld a, [wd002] + ld l, a + ld h, $0 + add hl, hl + ld de, Flypoints + add hl, de + ld e, [hl] + callba GetLandmarkCoords + ld a, [wd003] + ld c, a + ld a, [wd004] + ld b, a + ld hl, $4 + add hl, bc + ld [hl], e + ld hl, $5 + add hl, bc + ld [hl], d + ret +; 91c3c + +CheckIfVisitedFlypoint: ; 91c3c +; Check if the flypoint loaded in [hl] has been visited yet. + push bc + push de + push hl + ld l, [hl] + ld h, 0 + add hl, hl + ld de, Flypoints + 1 + add hl, de + ld c, [hl] + call HasVisitedSpawn + pop hl + pop de + pop bc + and a + ret +; 91c50 + +HasVisitedSpawn: ; 91c50 +; Check if spawn point c has been visited. + ld hl, VisitedSpawns + ld b, CHECK_FLAG + ld d, 0 + predef FlagPredef + ld a, c + ret +; 91c5e + +Flypoints: ; 91c5e +; landmark, spawn point + + const_def + +flypoint: MACRO +; \1\@FLY EQUS "FLY_\1" +; \1\@SPAWN EQUS "SPAWN_\1" + ; const \1\@FLY + ; db \2, \1\@SPAWN + const FLY_\1 + db \2, SPAWN_\1 +ENDM + +; Johto + flypoint NEW_BARK, NEW_BARK_TOWN + flypoint CHERRYGROVE, CHERRYGROVE_CITY + flypoint VIOLET, VIOLET_CITY + flypoint AZALEA, AZALEA_TOWN + flypoint GOLDENROD, GOLDENROD_CITY + flypoint ECRUTEAK, ECRUTEAK_CITY + flypoint OLIVINE, OLIVINE_CITY + flypoint CIANWOOD, CIANWOOD_CITY + flypoint MAHOGANY, MAHOGANY_TOWN + flypoint LAKE, LAKE_OF_RAGE + flypoint BLACKTHORN, BLACKTHORN_CITY + flypoint MT_SILVER, SILVER_CAVE + +; Kanto +KANTO_FLYPOINT EQU const_value + + flypoint PALLET, PALLET_TOWN + flypoint VIRIDIAN, VIRIDIAN_CITY + flypoint PEWTER, PEWTER_CITY + flypoint CERULEAN, CERULEAN_CITY + flypoint VERMILION, VERMILION_CITY + flypoint ROCK_TUNNEL, ROCK_TUNNEL + flypoint LAVENDER, LAVENDER_TOWN + flypoint CELADON, CELADON_CITY + flypoint SAFFRON, SAFFRON_CITY + flypoint FUCHSIA, FUCHSIA_CITY + flypoint CINNABAR, CINNABAR_ISLAND + flypoint INDIGO, INDIGO_PLATEAU + + db -1 +; 91c8f + +Function91c8f: ; 91c8f + ret +; 91c90 + +FlyMap: ; 91c90 + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + +; If we're not in a valid location, i.e. Pokecenter floor 2F, +; the backup map information is used + + cp SPECIAL_MAP + jr nz, .CheckRegion + + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + call GetWorldMapLocation + +.CheckRegion +; The first 46 locations are part of Johto. The rest are in Kanto + cp KANTO_LANDMARK + jr nc, .KantoFlyMap + +.JohtoFlyMap +; Note that .NoKanto should be modified in tandem with this branch + + push af + +; Start from New Bark Town + ld a, FLY_NEW_BARK + ld [wd002], a + +; Flypoints begin at New Bark Town... + ld [StartFlypoint], a +; ..and end at Silver Cave + ld a, FLY_MT_SILVER + ld [EndFlypoint], a + +; Fill out the map + call FillJohtoMap + call .MapHud + pop af + call TownMapPlayerIcon + ret + +.KantoFlyMap + +; The event that there are no flypoints enabled in a map is not +; accounted for. As a result, if you attempt to select a flypoint +; when there are none enabled, the game will crash. Additionally, +; the flypoint selection has a default starting point that +; can be flown to even if none are enabled + +; To prevent both of these things from happening when the player +; enters Kanto, fly access is restricted until Indigo Plateau is +; visited and its flypoint enabled + + push af + ld c, SPAWN_INDIGO + call HasVisitedSpawn + and a + jr z, .NoKanto + +; Kanto's map is only loaded if we've visited Indigo Plateau + +; Flypoints begin at Pallet Town... + ld a, FLY_PALLET + ld [StartFlypoint], a +; ...and end at Indigo Plateau + ld a, FLY_INDIGO + ld [EndFlypoint], a + +; Because Indigo Plateau is the first flypoint the player +; visits, it's made the default flypoint + ld [wd002], a + +; Fill out the map + call FillKantoMap + call .MapHud + pop af + call TownMapPlayerIcon + ret + +.NoKanto +; If Indigo Plateau hasn't been visited, we use Johto's map instead + +; Start from New Bark Town + ld a, FLY_NEW_BARK + ld [wd002], a + +; Flypoints begin at New Bark Town... + ld [StartFlypoint], a +; ..and end at Silver Cave + ld a, FLY_MT_SILVER + ld [EndFlypoint], a + + call FillJohtoMap + + pop af + +.MapHud + call TownMapBubble + call TownMapPals + + hlbgcoord 0, 0 ; BG Map 0 + call TownMapBGUpdate + + call TownMapMon + ld a, c + ld [wd003], a + ld a, b + ld [wd004], a + ret +; 91d11 + +Function91d11: ; 91d11 + ld a, [wd002] + push af + ld a, [wd003] + push af + ld a, e + ld [wd002], a + call ClearSprites + xor a + ld [hBGMapMode], a + ld a, $1 + ld [hInMenu], a + + ld de, GFX_922d1 + ld hl, VTiles0 tile $7f + lb bc, BANK(GFX_922d1), 1 + call Request2bpp ; actually 1bpp + + call Function91ed0 + + ld hl, VTiles0 tile $78 + ld c, $4 + call Request2bpp + + call Function91ff2 + call FillKantoMap + call Function91de9 + call TownMapPals + hlbgcoord 0, 0, VBGMap1 + call TownMapBGUpdate + call FillJohtoMap + call Function91de9 + call TownMapPals + hlbgcoord 0, 0 + call TownMapBGUpdate + ld b, SCGB_02 + call GetSGBLayout + call SetPalettes + xor a + ld [hBGMapMode], a + xor a + call Function91e1e +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and A_BUTTON | B_BUTTON + jr nz, .a_b + ld a, [hJoypadDown] + and SELECT + jr nz, .select + call Function91d9b + call Function91dcd + jr .next + +.select + call Function91e5a + +.next + call DelayFrame + jr .loop + +.a_b + call ClearSprites + pop af + ld [wd003], a + pop af + ld [wd002], a + ret +; 91d9b + +Function91d9b: ; 91d9b + ld a, [hl] + and $20 + jr nz, .asm_91da6 + ld a, [hl] + and $10 + jr nz, .asm_91db7 + ret + +.asm_91da6 + ld a, [hWY] + cp $90 + ret z + call ClearSprites + ld a, $90 + ld [hWY], a + xor a + call Function91e1e + ret + +.asm_91db7 + ld a, [StatusFlags] + bit 6, a ; hall of fame + ret z + ld a, [hWY] + and a + ret z + call ClearSprites + xor a + ld [hWY], a + ld a, $1 + call Function91e1e + ret +; 91dcd + +Function91dcd: ; 91dcd + ld a, [hVBlankCounter] + ld e, a + and $f + ret nz + ld a, e + and $10 + jr nz, .asm_91ddc + call ClearSprites + ret + +.asm_91ddc + hlcoord 0, 0 + ld de, Sprites + ld bc, $a0 + call CopyBytes + ret +; 91de9 + +Function91de9: ; 91de9 + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, $7f + call ByteFill + hlcoord 0, 1 + ld a, $6 + ld [hli], a + ld bc, SCREEN_HEIGHT + ld a, $7 + call ByteFill + ld [hl], $17 + call GetPokemonName + hlcoord 2, 0 + call PlaceString + ld h, b + ld l, c + ld de, String_91e16 + call PlaceString + ret +; 91e16 + +String_91e16: + db "'S NEST@" +; 91e1e + +Function91e1e: ; 91e1e + ld [wd003], a + ld e, a + callba Function2a01f + decoord 0, 0 + ld hl, Sprites +.asm_91e2e + ld a, [de] + and a + jr z, .asm_91e4d + push de + ld e, a + push hl + callba GetLandmarkCoords + pop hl + ld a, d + sub $4 + ld [hli], a + ld a, e + sub $4 + ld [hli], a + ld a, $7f + ld [hli], a + xor a + ld [hli], a + pop de + inc de + jr .asm_91e2e + +.asm_91e4d + ld hl, Sprites + decoord 0, 0 + ld bc, $a0 + call CopyBytes + ret +; 91e5a + +Function91e5a: ; 91e5a + call Function91ea9 + ret c + + ld a, [wd002] + ld e, a + callba GetLandmarkCoords + ld c, e + ld b, d + ld de, Unknown_91e9c + ld hl, Sprites +.asm_91e70 + ld a, [de] + cp $80 + jr z, .asm_91e91 + + add b + ld [hli], a + inc de + + ld a, [de] + add c + ld [hli], a + inc de + + ld a, [de] + add $78 + ld [hli], a + inc de + + push bc + ld c, 0 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_91e8c + inc c +.asm_91e8c + ld a, c + ld [hli], a + pop bc + + jr .asm_91e70 + +.asm_91e91 + ld hl, Sprites + $10 + ld bc, SpritesEnd - (Sprites + $10) + xor a + call ByteFill + ret +; 91e9c + +Unknown_91e9c: ; 91e9c + db -8, -8, 0 + db -8, 0, 1 + db 0, -8, 2 + db 0, 0, 3 + db $80 ; terminator +; 91ea9 + +Function91ea9: ; 91ea9 + ld a, [wd002] + cp FAST_SHIP + jr z, .johto + cp KANTO_LANDMARK + jr c, .johto + +.kanto + ld a, [wd003] + and a + jr z, .clear + jr .ok + +.johto + ld a, [wd003] + and a + jr nz, .clear + +.ok + and a + ret + +.clear + ld hl, Sprites + ld bc, SpritesEnd - Sprites + xor a + call ByteFill + scf + ret +; 91ed0 + +Function91ed0: ; 91ed0 + ld a, [wd002] + cp FAST_SHIP + jr z, .asm_91ede + callba GetPlayerIcon + ret + +.asm_91ede + ld de, FastShipGFX + ld b, BANK(FastShipGFX) + ret +; 91ee4 + +TownMapBGUpdate: ; 91ee4 +; Update BG Map tiles and attributes + +; BG Map address + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + +; Only update palettes on CGB + ld a, [hCGB] + and a + jr z, .tiles + +; BG Map mode 2 (palettes) + ld a, 2 + ld [hBGMapMode], a + +; The BG Map is updated in thirds, so we wait +; 3 frames to update the whole screen's palettes. + ld c, 3 + call DelayFrames + +.tiles +; Update BG Map tiles + call WaitBGMap + +; Turn off BG Map update + xor a + ld [hBGMapMode], a + ret +; 91eff + +FillJohtoMap: ; 91eff + ld de, JohtoMap + jr FillTownMap + +FillKantoMap: ; 91f04 + ld de, KantoMap + +FillTownMap: ; 91f07 + hlcoord 0, 0 +.loop + ld a, [de] + cp $ff + ret z + ld a, [de] + ld [hli], a + inc de + jr .loop +; 91f13 + +TownMapPals: ; 91f13 +; Assign palettes based on tile ids + + hlcoord 0, 0 + decoord 0, 0, AttrMap + ld bc, 360 +.loop +; Current tile + ld a, [hli] + push hl + +; HP/borders use palette 0 + cp $60 + jr nc, .pal0 + +; The palette data is condensed to nybbles, +; least-significant first. + ld hl, TownMapPalMap + srl a + jr c, .odd + +; Even-numbered tile ids take the bottom nybble... + add l + ld l, a + ld a, h + adc 0 + ld h, a + ld a, [hl] + and %111 + jr .update + +.odd +; ...and odd ids take the top. + add l + ld l, a + ld a, h + adc 0 + ld h, a + ld a, [hl] + swap a + and %111 + jr .update + +.pal0 + xor a + +.update + pop hl + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .loop + ret + +TownMapPalMap: + db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00 + db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00 + db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33 + db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00 +; 91f7b + +TownMapMon: ; 91f7b +; Draw the FlyMon icon at town map location in + +; Get FlyMon species + ld a, [CurPartyMon] + ld hl, PartySpecies + ld e, a + ld d, $0 + add hl, de + ld a, [hl] + ld [wd265], a + +; Get FlyMon icon + ld e, 8 ; starting tile in VRAM + callba GetSpeciesIcon + +; Animation/palette + ld de, 0 + ld a, $0 + call _InitSpriteAnimStruct + + ld hl, 3 + add hl, bc + ld [hl], 8 + ld hl, 2 + add hl, bc + ld [hl], 0 + ret +; 91fa6 + +TownMapPlayerIcon: ; 91fa6 +; Draw the player icon at town map location in a + push af + + callba GetPlayerIcon + +; Standing icon + ld hl, VTiles0 tile $10 + ld c, 4 ; # tiles + call Request2bpp + +; Walking icon + ld hl, $c0 + add hl, de + ld d, h + ld e, l + ld hl, VTiles0 tile $14 + ld c, 4 ; # tiles + ld a, BANK(ChrisSpriteGFX) ; does nothing + call Request2bpp + +; Animation/palette + ld de, 0 + ld b, $0a ; Male + ld a, [PlayerGender] + bit 0, a + jr z, .asm_91fd3 + ld b, $1e ; Female +.asm_91fd3 + ld a, b + call _InitSpriteAnimStruct + + ld hl, $3 + add hl, bc + ld [hl], $10 + + pop af + ld e, a + push bc + callba GetLandmarkCoords + pop bc + + ld hl, 4 + add hl, bc + ld [hl], e + ld hl, 5 + add hl, bc + ld [hl], d + ret +; 0x91ff2 + +Function91ff2: ; 91ff2 + ld hl, TownMapGFX + ld de, VTiles2 + lb bc, BANK(TownMapGFX), $30 + call DecompressRequest2bpp + ret +; 91fff + + +JohtoMap: ; 91fff +INCBIN "gfx/misc/johto.bin" +; 92168 + +KantoMap: ; 92168 +INCBIN "gfx/misc/kanto.bin" +; 922d1 + + +GFX_922d1: ; 922d1 +INCBIN "gfx/unknown/0922d1.2bpp" +GFX_922e1: ; 922e1 +INCBIN "gfx/unknown/0922e1.2bpp" +GFX_92301: ; 92301 +INCBIN "gfx/unknown/092301.2bpp" +Function92311: ; unreferenced + xor a + ld [wd002], a + call ClearBGPalettes + call ClearTileMap + call ClearSprites + ld hl, hInMenu + ld a, [hl] + push af + ld [hl], $1 + xor a + ld [hBGMapMode], a + callba Function8cf53 + call Function91ff2 + ld de, GFX_922e1 + ld hl, VTiles2 tile $30 + lb bc, BANK(GFX_922e1), 6 + call Request1bpp + call FillKantoMap + call TownMapBubble + call TownMapPals + hlbgcoord 0, 0, VBGMap1 + call TownMapBGUpdate + call FillJohtoMap + call TownMapBubble + call TownMapPals + hlbgcoord 0, 0 + call TownMapBGUpdate + call TownMapMon + ld a, c + ld [wd003], a + ld a, b + ld [wd004], a + ld b, SCGB_02 + call GetSGBLayout + call SetPalettes +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .pressedB + ld a, [hl] + and A_BUTTON + jr nz, .pressedA + call Function923b8 + call GetMapCursorCoordinates + callba Function8cf69 + call DelayFrame + jr .loop + +.pressedB + ld a, -1 + jr .asm_9239f + +.pressedA + ld a, [wd002] + ld l, a + ld h, 0 + add hl, hl + ld de, Flypoints + 1 + add hl, de + ld a, [hl] + +.asm_9239f + ld [wd002], a + pop af + ld [hInMenu], a + call ClearBGPalettes + ld a, $90 + ld [hWY], a + xor a + ld [hBGMapAddress], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ld a, [wd002] + ld e, a + ret +; 923b8 + +Function923b8: ; 923b8 + ld hl, hJoyLast + ld a, [hl] + and D_DOWN | D_RIGHT + jr nz, .asm_923c6 + ld a, [hl] + and D_UP | D_LEFT + jr nz, .asm_923d3 + ret + +.asm_923c6 + ld hl, wd002 + ld a, [hl] + cp FLY_INDIGO + jr c, .asm_923d0 + ld [hl], -1 +.asm_923d0 + inc [hl] + jr .asm_923dd + +.asm_923d3 + ld hl, wd002 + ld a, [hl] + and a + jr nz, .asm_923dc + ld [hl], FLY_INDIGO + 1 +.asm_923dc + dec [hl] + +.asm_923dd + ld a, [wd002] + cp KANTO_FLYPOINT + jr c, .johto + + call FillKantoMap + xor a + ld b, $9c + jr .asm_923f3 + +.johto + call FillJohtoMap + ld a, $90 + ld b, $98 + +.asm_923f3 + ld [hWY], a + ld a, b + ld [hBGMapAddress + 1], a + call TownMapBubble + call WaitBGMap + xor a + ld [hBGMapMode], a + ret +; 92402 diff --git a/engine/predef.asm b/engine/predef.asm index 6079b48a4..680a6b4a0 100644 --- a/engine/predef.asm +++ b/engine/predef.asm @@ -37,7 +37,7 @@ PredefPointers:: ; 856b add_predef DrawPartyMenuHPBar add_predef FillPP add_predef TryAddMonToParty - add_predef Functionda96 + add_predef AddTempmonToParty add_predef SentGetPkmnIntoFromBox add_predef SentPkmnIntoBox add_predef GiveEgg @@ -46,7 +46,7 @@ PredefPointers:: ; 856b add_predef CalcPkmnStatC add_predef CanLearnTMHMMove add_predef GetTMHMMove - add_predef Function28eef ; $ 10 + add_predef Predef_LinkTextbox ; $ 10 add_predef PrintMoveDesc add_predef UpdatePlayerHUD add_predef FillBox @@ -58,9 +58,9 @@ PredefPointers:: ; 856b add_predef GetMonFrontpic add_predef LearnLevelMoves add_predef FillMoves - add_predef Function421e6 - add_predef Function28f63 - add_predef Function28f24 + add_predef EvolveAfterBattle + add_predef TradeAnimationPlayer2 + add_predef TradeAnimation add_predef CopyPkmnToTempMon add_predef ListMoves ; $20 add_predef PlaceNonFaintStatus @@ -92,12 +92,12 @@ PredefPointers:: ; 856b add_predef PartyMonItemName add_predef GetFrontpic add_predef GetBackpic - add_predef Function5108b + add_predef FrontpicPredef add_predef GetTrainerPic add_predef DecompressPredef ; $40 add_predef CheckTypeMatchup add_predef ConvertMon_1to2 - add_predef Functionfb877 + add_predef NewPokedexEntry add_predef AnimateMon_Slow_Normal add_predef PlaceStatusString add_predef LoadMonAnimation diff --git a/engine/printer.asm b/engine/printer.asm new file mode 100755 index 000000000..5330d6b3c --- /dev/null +++ b/engine/printer.asm @@ -0,0 +1,1493 @@ +Function84000: ; 84000 + ld hl, OverworldMap + lb bc, 4, 12 + xor a + call Function842ab + xor a + ld [rSB], a + ld [rSC], a + ld [wc2d5], a + ld hl, wc2d4 + set 0, [hl] + ld a, [GBPrinter] + ld [wcbfb], a + xor a + ld [wJumptableIndex], a + ret +; 84022 + +Function84022: ; 84022 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, Jumptable_84031 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 84031 + + +Jumptable_84031: ; 84031 (21:4031) + dw Function84077 + dw Function84143 + dw Function84120 + dw Function84099 + dw Function84180 + dw Function8412e + dw Function840c5 + dw Function84180 + dw Function84120 + dw Function840de + dw Function84180 + dw Function84120 + dw Function841a1 + dw Function84063 + dw Function8406d + dw Function84120 + dw Function84103 + dw Function84071 + dw Function841b0 + dw Function841b3 + + +Function84059: ; 84059 (21:4059) + ld hl, wJumptableIndex + inc [hl] + ret + +Function8405e: ; 8405e (21:405e) + ld hl, wJumptableIndex + dec [hl] + ret + +Function84063: ; 84063 (21:4063) + xor a + ld [wca89], a + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function8406d: ; 8406d (21:406d) + call Function84059 + ret + +Function84071: ; 84071 (21:4071) + ld a, $1 + ld [wJumptableIndex], a + ret + +Function84077: ; 84077 (21:4077) + call Function841fb + ld hl, Unknown_842b7 + call Function841e2 + xor a + ld [wca8e], a + ld [wca8f], a + ld a, [wcf65] + ld [wca81], a + call Function84059 + call Function841c3 + ld a, $1 + ld [wcbf8], a + ret + +Function84099: ; 84099 (21:4099) + call Function841fb + ld hl, wca81 + ld a, [hl] + and a + jr z, Function840c5 + ld hl, Unknown_842c3 + call Function841e2 + call Function84260 + ld a, $80 + ld [wca8e], a + ld a, $2 + ld [wca8f], a + call Function84219 + call Function84059 + call Function841c3 + ld a, $2 + ld [wcbf8], a + ret + +Function840c5: ; 840c5 (21:40c5) + ld a, $6 + ld [wJumptableIndex], a + ld hl, Unknown_842c9 + call Function841e2 + xor a + ld [wca8e], a + ld [wca8f], a + call Function84059 + call Function841c3 + ret + +Function840de: ; 840de (21:40de) + call Function841fb + ld hl, Unknown_842bd + call Function841e2 + call Function84249 + ld a, $4 + ld [wca8e], a + ld a, $0 + ld [wca8f], a + call Function84219 + call Function84059 + call Function841c3 + ld a, $3 + ld [wcbf8], a + ret + +Function84103: ; 84103 (21:4103) + call Function841fb + ld hl, Unknown_842b7 + call Function841e2 + xor a + ld [wca8e], a + ld [wca8f], a + ld a, [wcf65] + ld [wca81], a + call Function84059 + call Function841c3 + ret + +Function84120: ; 84120 (21:4120) + ld hl, wca8b + inc [hl] + ld a, [hl] + cp $6 + ret c + xor a + ld [hl], a + call Function84059 + ret + +Function8412e: ; 8412e (21:412e) + ld hl, wca8b + inc [hl] + ld a, [hl] + cp $6 + ret c + xor a + ld [hl], a + ld hl, wca81 + dec [hl] + call Function8405e + call Function8405e + ret + +Function84143: ; 84143 (21:4143) + ld a, [wc2d5] + and a + ret nz + ld a, [wca88] + cp $ff + jr nz, .printer_connected + ld a, [wca89] + cp $ff + jr z, .printer_error + +.printer_connected + ld a, [wca88] + cp $81 + jr nz, .printer_error + ld a, [wca89] + cp $0 + jr nz, .printer_error + ld hl, wc2d4 + set 1, [hl] + ld a, $5 + ld [wca8a], a + call Function84059 + ret + +.printer_error + ld a, $ff + ld [wca88], a + ld [wca89], a + ld a, $e + ld [wJumptableIndex], a + ret + +Function84180: ; 84180 (21:4180) + ld a, [wc2d5] + and a + ret nz + ld a, [wca89] + and $f0 + jr nz, .asm_8419b + ld a, [wca89] + and $1 + jr nz, .asm_84197 + call Function84059 + ret +.asm_84197 + call Function8405e + ret +.asm_8419b + ld a, $12 + ld [wJumptableIndex], a + ret + +Function841a1: ; 841a1 (21:41a1) + ld a, [wc2d5] + and a + ret nz + ld a, [wca89] + and $f3 + ret nz + call Function84059 + ret + +Function841b0: ; 841b0 (21:41b0) + call Function84059 + +Function841b3: ; 841b3 (21:41b3) + ld a, [wc2d5] + and a + ret nz + ld a, [wca89] + and $f0 + ret nz + xor a + ld [wJumptableIndex], a + ret + +Function841c3: ; 841c3 (21:41c3) + ld a, [wc2d5] + and a + jr nz, Function841c3 + xor a + ld [wca8c], a + ld [wca8d], a + ld a, $1 + ld [wc2d5], a + ld a, $88 + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret + +Function841e2: ; 841e2 (21:41e2) + ld a, [hli] + ld [wca82], a + ld a, [hli] + ld [wca83], a + ld a, [hli] + ld [wca84], a + ld a, [hli] + ld [wca85], a + ld a, [hli] + ld [wca86], a + ld a, [hl] + ld [wca87], a + ret + +Function841fb: ; 841fb (21:41fb) + xor a + ld hl, wca82 +rept 3 + ld [hli], a +endr + ld [hl], a + ld hl, wca86 + ld [hli], a + ld [hl], a + xor a + ld [wca8e], a + ld [wca8f], a + ld hl, OverworldMap + ld bc, $280 + call Function842ab + ret + +Function84219: ; 84219 (21:4219) + ld hl, 0 + ld bc, $4 + ld de, wca82 + call Function8423c + ld a, [wca8e] + ld c, a + ld a, [wca8f] + ld b, a + ld de, OverworldMap + call Function8423c + ld a, l + ld [wca86], a + ld a, h + ld [wca87], a + ret + +Function8423c: ; 8423c (21:423c) + ld a, [de] + inc de + add l + jr nc, .asm_84242 + inc h +.asm_84242 + ld l, a + dec bc + ld a, c + or b + jr nz, Function8423c + ret + +Function84249: ; 84249 (21:4249) + ld a, $1 + ld [OverworldMap], a + ld a, [wcbfa] + ld [wc801], a + ld a, $e4 + ld [wc802], a + ld a, [wcbfb] + ld [wc803], a + ret + +Function84260: ; 84260 (21:4260) + ld a, [wca81] + xor $ff + ld d, a + ld a, [wcf65] + inc a + add d + ld hl, wca90 + ld de, $28 +.asm_84271 + and a + jr z, .asm_84278 + add hl, de + dec a + jr .asm_84271 +.asm_84278 + ld e, l + ld d, h + ld hl, OverworldMap + ld c, $28 +.asm_8427f + ld a, [de] + inc de + push bc + push de + push hl + swap a + ld d, a + and $f0 + ld e, a + ld a, d + and $f + ld d, a + and $8 + ld a, d + jr nz, .asm_84297 + or $90 + jr .asm_84299 +.asm_84297 + or $80 +.asm_84299 + ld d, a + lb bc, $21, 1 + call Request2bpp + pop hl + ld de, $10 + add hl, de + pop de + pop bc + dec c + jr nz, .asm_8427f + ret + +Function842ab: ; 842ab + push de + ld e, a +.asm_842ad + ld [hl], e + inc hl + dec bc + ld a, c + or b + jr nz, .asm_842ad + ld a, e + pop de + ret +; 842b7 + +Unknown_842b7: db 1, 0, $00, 0, 1, 0 +Unknown_842bd: db 2, 0, $04, 0, 0, 0 +Unknown_842c3: db 4, 0, $80, 2, 0, 0 +Unknown_842c9: db 4, 0, $00, 0, 4, 0 +Unknown_842cf: db 8, 0, $00, 0, 8, 0 ; unused +Unknown_842d5: db 15, 0, $00, 0, 15, 0 ; unused +; 842db + + +Function842db:: ; 842db + ld a, [wc2d5] + add a + ld e, a + ld d, 0 + ld hl, Jumptable_842ea + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 842ea + + +Jumptable_842ea: ; 842ea (21:42ea) + dw Function8432f + dw Function84330 + dw Function84339 + dw Function84343 + dw Function8434d + dw Function84357 + dw Function84361 + dw Function8438b + dw Function84395 + dw Function8439f + dw Function843a8 + dw Function843b6 + dw Function84330 + dw Function843c0 + dw Function843c9 + dw Function843c9 + dw Function843c9 + dw Function843c0 + dw Function843c9 + dw Function8439f + dw Function843a8 + dw Function843e6 + dw Function84330 + dw Function843d2 + dw Function843c9 + dw Function843c9 + dw Function843c9 + dw Function843d2 + dw Function843c9 + dw Function8439f + dw Function843a8 + dw Function843b6 + + +Function8432a: ; 8432a (21:432a) + ld hl, wc2d5 + inc [hl] + ret + +Function8432f: ; 8432f (21:432f) + ret + +Function84330: ; 84330 (21:4330) + ld a, $33 + call Function843db + call Function8432a + ret + +Function84339: ; 84339 (21:4339) + ld a, [wca82] + call Function843db + call Function8432a + ret + +Function84343: ; 84343 (21:4343) + ld a, [wca83] + call Function843db + call Function8432a + ret + +Function8434d: ; 8434d (21:434d) + ld a, [wca84] + call Function843db + call Function8432a + ret + +Function84357: ; 84357 (21:4357) + ld a, [wca85] + call Function843db + call Function8432a + ret + +Function84361: ; 84361 (21:4361) + ld hl, wca8e + ld a, [hli] + ld d, [hl] + ld e, a + or d + jr z, .asm_84388 + dec de + ld [hl], d + dec hl + ld [hl], e + ld a, [wca8c] + ld e, a + ld a, [wca8d] + ld d, a + ld hl, OverworldMap + add hl, de + inc de + ld a, e + ld [wca8c], a + ld a, d + ld [wca8d], a + ld a, [hl] + call Function843db + ret +.asm_84388 + call Function8432a + +Function8438b: ; 8438b (21:438b) + ld a, [wca86] + call Function843db + call Function8432a + ret + +Function84395: ; 84395 (21:4395) + ld a, [wca87] + call Function843db + call Function8432a + ret + +Function8439f: ; 8439f (21:439f) + ld a, $0 + call Function843db + call Function8432a + ret + +Function843a8: ; 843a8 (21:43a8) + ld a, [rSB] + ld [wca88], a + ld a, $0 + call Function843db + call Function8432a + ret + +Function843b6: ; 843b6 (21:43b6) + ld a, [rSB] + ld [wca89], a + xor a + ld [wc2d5], a + ret + +Function843c0: ; 843c0 (21:43c0) + ld a, $f + call Function843db + call Function8432a + ret + +Function843c9: ; 843c9 (21:43c9) + ld a, $0 + call Function843db + call Function8432a + ret + +Function843d2: ; 843d2 (21:43d2) + ld a, $8 + call Function843db + call Function8432a + ret + +Function843db: ; 843db (21:43db) + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret + +Function843e6: ; 843e6 (21:43e6) + ld a, [rSB] + ld [wca89], a + xor a + ld [wc2d5], a + ret + +Function843f0: ; 843f0 +.asm_843f0 + call JoyTextDelay + call Function846f6 + jr c, .asm_8440f + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_8440d + call Function84022 + call Function84757 + call Function84785 + call DelayFrame + jr .asm_843f0 + +.asm_8440d + and a + ret + +.asm_8440f + scf + ret +; 84411 + +Function84411: ; 84411 + xor a + ld [wc2d4], a + ld [wc2d5], a + ret +; 84419 + +Function84419: ; 84419 + push af + call Function84000 + pop af + ld [wcbfa], a + call Function84728 + ret +; 84425 + +Function84425: ; 84425 + call ReturnToMapFromSubmenu + call Function84753 + ret +; 8442c + +PrintDexEntry: ; 8442c + ld a, [wcf65] + push af + ld hl, VTiles1 + ld de, FontInversed + lb bc, BANK(FontInversed), $80 + call Request1bpp + xor a + ld [hPrinter], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + call Function84000 + ld a, $10 + ld [wcbfa], a + callba Function1dc1b0 + call ClearTileMap + ld a, $e4 + call DmgToCgbBGPals + call DelayFrame + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + ld a, $8 + ld [wcf65], a + call Function84742 + call Function843f0 + jr c, .asm_8449d + call Function84411 + ld c, 12 + call DelayFrames + xor a + ld [hBGMapMode], a + call Function84000 + ld a, $3 + ld [wcbfa], a + callba Function1dc213 + call Function84742 + ld a, $4 + ld [wcf65], a + call Function843f0 + +.asm_8449d + pop af + ld [hVBlank], a + call Function84411 + xor a + ld [rIF], a + pop af + ld [rIE], a + call Function84425 + ld c, $8 +.asm_844ae + call LowVolume + call DelayFrame + dec c + jr nz, .asm_844ae + pop af + ld [wcf65], a + ret +; 844bc + +PrintPCBox: ; 844bc (21:44bc) + ld a, [wcf65] + push af + ld a, $9 + ld [wcf65], a + ld a, e + ld [wd004], a + ld a, d + ld [wd005], a + ld a, b + ld [wd006], a + ld a, c + ld [wd007], a + xor a + ld [hPrinter], a + ld [wd003], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + xor a + ld [hBGMapMode], a + call Function84817 + ld a, $10 + call Function84419 + call Function84559 + jr c, .asm_84545 + call Function84411 + ld c, 12 + call DelayFrames + xor a + ld [hBGMapMode], a + call Function8486f + ld a, $0 + call Function84419 + call Function84559 + jr c, .asm_84545 + call Function84411 + ld c, 12 + call DelayFrames + xor a + ld [hBGMapMode], a + call Function84893 + ld a, $0 + call Function84419 + call Function84559 + jr c, .asm_84545 + call Function84411 + ld c, 12 + call DelayFrames + xor a + ld [hBGMapMode], a + call Function848b7 + ld a, $3 + call Function84419 + call Function84559 +.asm_84545 + pop af + ld [hVBlank], a + call Function84411 + xor a + ld [rIF], a + pop af + ld [rIE], a + call Function84425 + pop af + ld [wcf65], a + ret + +Function84559: ; 84559 (21:4559) + call Function84742 + call Function843f0 + ret + +PrintUnownStamp: ; 84560 + ld a, [wcf65] + push af + xor a + ld [hPrinter], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + xor a + ld [hBGMapMode], a + call LoadTileMapToTempTileMap + callba Function16dac + ld a, $0 + call Function84419 + call Call_LoadTempTileMapToTileMap + call Function84742 + ld a, $9 + ld [wcf65], a +.asm_84597 + call JoyTextDelay + call Function846f6 + jr c, .asm_845c0 + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_845c0 + call Function84022 + ld a, [wJumptableIndex] + cp $2 + jr nc, .asm_845b5 + ld a, $3 + ld [wca81], a + +.asm_845b5 + call Function84757 + call Function84785 + call DelayFrame + jr .asm_84597 + +.asm_845c0 + pop af + ld [hVBlank], a + call Function84411 + call Call_LoadTempTileMapToTileMap + xor a + ld [rIF], a + pop af + ld [rIE], a + pop af + ld [wcf65], a + ret +; 845d4 + +PrintMail: ; 845d4 + call Function845db + call Function84425 + ret +; 845db + +Function845db: ; 845db + ld a, [wcf65] + push af + xor a + ld [hPrinter], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + xor a + ld [hBGMapMode], a + ld a, $13 + call Function84419 + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + ld a, $9 + ld [wcf65], a + call Function843f0 + pop af + ld [hVBlank], a + call Function84411 + call Function84735 + xor a + ld [rIF], a + pop af + ld [rIE], a + pop af + ld [wcf65], a + ret +; 8461a + +PrintPartymon: ; 8461a + ld a, [wcf65] + push af + xor a + ld [hPrinter], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + xor a + ld [hBGMapMode], a + callba Function1dc381 + ld a, $10 + call Function84419 + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + ld a, $8 + ld [wcf65], a + call Function84742 + call Function843f0 + jr c, .asm_84671 + call Function84411 + ld c, 12 + call DelayFrames + xor a + ld [hBGMapMode], a + callba Function1dc47b + ld a, $3 + call Function84419 + ld a, $9 + ld [wcf65], a + call Function84742 + call Function843f0 + +.asm_84671 + pop af + ld [hVBlank], a + call Function84411 + call Function84735 + xor a + ld [rIF], a + pop af + ld [rIE], a + call Function84425 + pop af + ld [wcf65], a + ret +; 84688 + +_PrintDiploma: ; 84688 + ld a, [wcf65] + push af + callba Function1dd709 + xor a + ld [hPrinter], a + call Function8474c + ld a, [rIE] + push af + xor a + ld [rIF], a + ld a, $9 + ld [rIE], a + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $4 + ld a, $10 + call Function84419 + call Function84742 + ld a, $9 + ld [wcf65], a + call Function843f0 + jr c, .asm_846e2 + call Function84411 + ld c, 12 + call DelayFrames + call LoadTileMapToTempTileMap + xor a + ld [hBGMapMode], a + callba Function1dd7ae + ld a, $3 + call Function84419 + call Call_LoadTempTileMapToTileMap + call Function84742 + ld a, $9 + ld [wcf65], a + call Function843f0 + +.asm_846e2 + pop af + ld [hVBlank], a + call Function84411 + xor a + ld [rIF], a + pop af + ld [rIE], a + call Function84425 + pop af + ld [wcf65], a + ret +; 846f6 + +Function846f6: ; 846f6 + ld a, [hJoyDown] + and B_BUTTON + jr nz, .asm_846fe + and a + ret + +.asm_846fe + ld a, [wca80] + cp $c + jr nz, .asm_84722 +.asm_84705 + ld a, [wc2d5] + and a + jr nz, .asm_84705 + ld a, $16 + ld [wc2d5], a + ld a, $88 + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a +.asm_8471c + ld a, [wc2d5] + and a + jr nz, .asm_8471c + +.asm_84722 + ld a, $1 + ld [hPrinter], a + scf + ret +; 84728 + +Function84728: ; 84728 + hlcoord 0, 0 + ld de, wca90 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + call CopyBytes + ret +; 84735 + +Function84735: ; 84735 + ld hl, wca90 + decoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + call CopyBytes + ret +; 84742 + +Function84742: ; 84742 + xor a + ld [hJoyReleased], a + ld [hJoyPressed], a + ld [hJoyDown], a + ld [hJoyLast], a + ret +; 8474c + +Function8474c: ; 8474c + ld de, MUSIC_PRINTER + call PlayMusic2 + ret +; 84753 + +Function84753: ; 84753 + call RestartMapMusic + ret +; 84757 + +Function84757: ; 84757 + ld a, [wca88] + cp -1 + jr nz, .printer_connected + ld a, [wca89] + cp -1 + jr z, .error_2 + +.printer_connected + ld a, [wca89] + and %11100000 + ret z ; no error + + bit 7, a + jr nz, .error_1 + bit 6, a + jr nz, .error_4 + ld a, 6 ; error 3 + jr .load_text_index + +.error_4 + ld a, 7 ; error 4 + jr .load_text_index + +.error_1 + ld a, 4 ; error 1 + jr .load_text_index + +.error_2 + ld a, 5 ; error 2 + +.load_text_index + ld [wcbf8], a + ret +; 84785 + +Function84785: ; 84785 + ld a, [wcbf8] + and a + ret z + push af + xor a + ld [hBGMapMode], a + hlcoord 0, 5 + lb bc, 10, 18 + call TextBox + pop af + ld e, a + ld d, 0 + ld hl, PrinterStatusStringPointers +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 1, 7 + ld a, BANK(GBPrinterStrings) + call FarString + hlcoord 2, 15 + ld de, String_PressBToCancel + call PlaceString + ld a, $1 + ld [hBGMapMode], a + xor a + ld [wcbf8], a + ret +; 847bd + +Function847bd: ; 847bd + ld a, [wcbf8] + and a + ret z + push af + xor a + ld [hBGMapMode], a + hlcoord 2, 4 + lb bc, 13, 16 + call ClearBox + pop af + ld e, a + ld d, 0 + ld hl, PrinterStatusStringPointers +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + hlcoord 4, 7 + ld a, BANK(GBPrinterStrings) + call FarString + hlcoord 4, 15 + ld de, String_PressBToCancel + call PlaceString + ld a, $1 + ld [hBGMapMode], a + xor a + ld [wcbf8], a + ret +; 847f5 + +String_PressBToCancel: + db "Press B to Cancel@" +; 84807 + +PrinterStatusStringPointers: ; 84807 + dw String_1dc275 ; @ + dw String_1dc276 ; CHECKING LINK + dw String_1dc289 ; TRANSMITTING + dw String_1dc29c ; PRINTING + dw String_1dc2ad ; error 1 + dw String_1dc2e2 ; error 2 + dw String_1dc317 ; error 3 + dw String_1dc34c ; error 4 +; 84817 + +Function84817: ; 84817 (21:4817) + xor a + ld [wd002], a + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + call Printer_PlaceEmptyBoxSlotString + hlcoord 0, 0 + ld bc, 9 * SCREEN_WIDTH + ld a, " " + call ByteFill + call Printer_PlaceSideBorders + call Printer_PlaceTopBorder + hlcoord 4, 3 + ld de, .String_PokemonList + call PlaceString + ld a, [wd007] + ld bc, BOX_NAME_LENGTH + ld hl, wBoxNames + call AddNTimes + ld d, h + ld e, l + hlcoord 6, 5 + call PlaceString + ld a, $1 + call Function849c6 + hlcoord 2, 9 + ld c, $3 + call Function848e7 + ret +; 84865 (21:4865) + +.String_PokemonList: + db "#MON LIST@" +; 8486f + +Function8486f: ; 8486f (21:486f) + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + call Printer_PlaceEmptyBoxSlotString + call Printer_PlaceSideBorders + ld a, [wd003] + and a + ret nz + ld a, $4 + call Function849c6 + hlcoord 2, 0 + ld c, $6 + call Function848e7 + ret + +Function84893: ; 84893 (21:4893) + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + call Printer_PlaceEmptyBoxSlotString + call Printer_PlaceSideBorders + ld a, [wd003] + and a + ret nz + ld a, $a + call Function849c6 + hlcoord 2, 0 + ld c, $6 + call Function848e7 + ret + +Function848b7: ; 848b7 (21:48b7) + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + call Printer_PlaceEmptyBoxSlotString + hlcoord 1, 15 + lb bc, 2, 18 + call ClearBox + call Printer_PlaceSideBorders + call Printer_PlaceBottomBorders + ld a, [wd003] + and a + ret nz + ld a, $10 + call Function849c6 + hlcoord 2, 0 + ld c, $5 + call Function848e7 + ret + +Function848e7: ; 848e7 (21:48e7) + ld a, [wd006] + call GetSRAMBank + +Function848ed: ; 848ed (21:48ed) + ld a, c + and a + jp z, Function84986 + dec c + ld a, [de] + cp $ff + jp z, Function84981 + ld [wd265], a + ld [CurPartySpecies], a + push bc + push hl + push de + push hl + ld bc, $10 + ld a, " " + call ByteFill + pop hl + push hl + call GetBasePokemonName + pop hl + push hl + call PlaceString + ld a, [CurPartySpecies] + cp EGG + pop hl + jr z, .ok2 + ld bc, $b + add hl, bc + call Function8498a + ld bc, $9 + add hl, bc + ld a, "/" + ld [hli], a + push hl + ld bc, $e + ld a, " " + call ByteFill + pop hl + push hl + ld a, [wd004] + ld l, a + ld a, [wd005] + ld h, a + ld bc, $372 + add hl, bc + ld bc, $b + ld a, [wd002] + call AddNTimes + ld e, l + ld d, h + pop hl + push hl + call PlaceString + pop hl + ld bc, $b + add hl, bc + push hl + ld a, [wd004] + ld l, a + ld a, [wd005] + ld h, a + ld bc, $35 + add hl, bc + ld bc, $20 + ld a, [wd002] + call AddNTimes + ld a, [hl] + pop hl + call Function383d +.ok2 + ld hl, wd002 + inc [hl] + pop de + pop hl + ld bc, $3c + add hl, bc + pop bc + inc de + jp Function848ed + +Function84981: ; 84981 (21:4981) + ld a, $1 + ld [wd003], a + +Function84986: ; 84986 (21:4986) + call CloseSRAM + ret + +Function8498a: ; 8498a (21:498a) + push hl + ld a, [wd004] + ld l, a + ld a, [wd005] + ld h, a + ld bc, $2b + add hl, bc + ld bc, $20 + ld a, [wd002] + call AddNTimes + ld de, TempMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, [wd002] + ld [CurPartyMon], a + ld a, $3 + ld [MonType], a + callba GetGender + ld a, $7f + jr c, .asm_849c3 + ld a, $ef + jr nz, .asm_849c3 + ld a, $f5 +.asm_849c3 + pop hl + ld [hli], a + ret + +Function849c6: ; 849c6 (21:49c6) + push hl + ld e, a + ld d, $0 + ld a, [wd004] + ld l, a + ld a, [wd005] + ld h, a + add hl, de + ld e, l + ld d, h + pop hl + ret + +Printer_PlaceTopBorder: ; 849d7 (21:49d7) + hlcoord 0, 0 + ld a, "┌" + ld [hli], a + ld a, "─" + ld c, SCREEN_WIDTH - 2 +.loop + ld [hli], a + dec c + jr nz, .loop + ld a, "┐" + ld [hl], a + ret + +Printer_PlaceSideBorders: ; 849e9 (21:49e9) + hlcoord 0, 0 + ld de, SCREEN_WIDTH - 1 + ld c, SCREEN_HEIGHT +.loop + ld a, "│" + ld [hl], a + add hl, de + ld a, "│" + ld [hli], a + dec c + jr nz, .loop + ret + +Printer_PlaceBottomBorders: ; 849fc (21:49fc) + hlcoord 0, 17 + ld a, "└" + ld [hli], a + ld a, "─" + ld c, SCREEN_WIDTH - 2 +.loop + ld [hli], a + dec c + jr nz, .loop + ld a, "┘" + ld [hl], a + ret + +Printer_PlaceEmptyBoxSlotString: ; 84a0e (21:4a0e) + hlcoord 2, 0 + ld c, $6 +.loop + push bc + push hl + ld de, String84a25 + call PlaceString + pop hl + ld bc, 3 * SCREEN_WIDTH + add hl, bc + pop bc + dec c + jr nz, .loop + ret +; 84a25 (21:4a25) + +String84a25: ; 84a25 + db " ------@" +; 84a2e diff --git a/engine/radio2.asm b/engine/radio2.asm deleted file mode 100644 index 1d07c904c..000000000 --- a/engine/radio2.asm +++ /dev/null @@ -1,404 +0,0 @@ -_UpdateRadioStation: ; 9163e (24:563e) - jr UpdateRadioStation - -Function91640: ; 91640 (24:5640) - push bc - call .TuningKnob - pop bc - ld a, [wRadioTuningKnob] - ld hl, $6 - add hl, bc - ld [hl], a - ret - -.TuningKnob: ; 9164e (24:564e) - ld hl, hJoyLast - ld a, [hl] - and D_DOWN - jr nz, .down - ld a, [hl] - and D_UP - jr nz, .up - ret - -.down - ld hl, wRadioTuningKnob - ld a, [hl] - and a - ret z -rept 2 - dec [hl] -endr - jr .update - -.up - ld hl, wRadioTuningKnob - ld a, [hl] - cp 80 - ret nc -rept 2 - inc [hl] -endr - -.update - -UpdateRadioStation: ; 9166f (24:566f) - ld hl, wRadioTuningKnob - ld d, [hl] - ld hl, RadioChannels -.loop - ld a, [hli] - cp -1 - jr z, .nostation - cp d - jr z, .foundstation -rept 2 - inc hl -endr - jr .loop - -.nostation - call NoRadioStation - ret - -.foundstation - ld a, [hli] - ld h, [hl] - ld l, a - ld de, .returnafterstation - push de - jp [hl] -.returnafterstation - ld a, [wc6d9] - and a - ret z - xor a - ld [hBGMapMode], a - hlcoord 2, 9 - call PlaceString - ld a, $1 - ld [hBGMapMode], a - ret -; 916a1 (24:56a1) - -Function916a1: ; 916a1 - ld [wc6d9], a - ld a, [hli] - ld [wc6da], a - ld a, [hli] - ld [wc6db], a - ret -; 916ad - - -RadioChannels: -; frequencies and the shows that play on them. -; frequency value given here = 4 × ingame_frequency − 2 - dbw 16, .PkmnTalkAndPokedexShow - dbw 28, .PokemonMusic - dbw 32, .LuckyChannel - dbw 40, .BuenasPassword - dbw 52, .RuinsOfAlphRadio - dbw 64, .PlacesAndPeople - dbw 72, .LetsAllSing - dbw 78, .PokeFluteRadio - dbw 80, .EvolutionRadio - db $ff - -.PkmnTalkAndPokedexShow -; Pokédex Show in the morning -; Oak's Pokémon Talk in the afternoon and evening - call .InJohto - jr nc, .NoSignal - ld a, [TimeOfDay] - and a - jp z, LoadStation_PokedexShow - jp LoadStation_OaksPokemonTalk - -.PokemonMusic - call .InJohto - jr nc, .NoSignal - jp LoadStation_PokemonMusic - -.LuckyChannel - call .InJohto - jr nc, .NoSignal - jp LoadStation_LuckyChannel - -.BuenasPassword - call .InJohto - jr nc, .NoSignal - jp LoadStation_BuenasPassword - -.RuinsOfAlphRadio - ld a, [wc6d8] - cp RUINS_OF_ALPH - jr nz, .NoSignal - jp LoadStation_UnownRadio - -.PlacesAndPeople - call .InJohto - jr c, .NoSignal - ld a, [wPokegearFlags] - bit 3, a - jr z, .NoSignal - jp LoadStation_PlacesAndPeople - -.LetsAllSing - call .InJohto - jr c, .NoSignal - ld a, [wPokegearFlags] - bit 3, a - jr z, .NoSignal - jp LoadStation_LetsAllSing - -.PokeFluteRadio - call .InJohto - jr c, .NoSignal - ld a, [wPokegearFlags] - bit 3, a - jr z, .NoSignal - jp LoadStation_PokeFluteRadio - -.EvolutionRadio -; This station airs in the Lake of Rage area when Rocket are still in Mahogany. - - ld a, [StatusFlags] - bit 4, a - jr z, .NoSignal - - ld a, [wc6d8] - cp MAHOGANY_TOWN - jr z, .ok - cp ROUTE_43 - jr z, .ok - cp LAKE_OF_RAGE - jr nz, .NoSignal -.ok - jp LoadStation_EvolutionRadio - -.NoSignal - call NoRadioStation - ret - -.InJohto -; if in Johto or on the S.S. Aqua, set carry -; otherwise clear carry - ld a, [wc6d8] - cp FAST_SHIP - jr z, .johto - cp KANTO_LANDMARK - jr c, .johto -.kanto - and a - ret -.johto - scf - ret - - - -LoadStation_OaksPokemonTalk: ; 91753 (24:5753) - xor a ; OAKS_POKEMON_TALK - ld [wd002], a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, OaksPkmnTalkName - ret - -LoadStation_PokedexShow: ; 91766 (24:5766) - ld a, POKEDEX_SHOW - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, PokedexShowName - ret - -LoadStation_PokemonMusic: ; 9177b (24:577b) - ld a, POKEMON_MUSIC - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, PokemonMusicName - ret - -LoadStation_LuckyChannel: ; 91790 (24:5790) - ld a, LUCKY_CHANNEL - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, LuckyChannelName - ret - -LoadStation_BuenasPassword: ; 917a5 (24:57a5) - ld a, BUENAS_PASSWORD - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, NotBuenasPasswordName - ld a, [StatusFlags2] - bit 0, a - ret z - ld de, BuenasPasswordName - ret -; 917c3 (24:57c3) - -BuenasPasswordName: db "BUENA'S PASSWORD@" -NotBuenasPasswordName: db "@" - -LoadStation_UnownRadio: ; 917d5 (24:57d5) - ld a, UNOWN_RADIO - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, UnknownStationName - ret - -LoadStation_PlacesAndPeople: ; 917ea (24:57ea) - ld a, PLACES_AND_PEOPLE - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, PlacesAndPeopleName - ret - -LoadStation_LetsAllSing: ; 917ff (24:57ff) - ld a, LETS_ALL_SING - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, LetsAllSingName - ret -; 91814 (24:5814) - -LoadStation_RocketRadio: ; 91814 - ld a, ROCKET_RADIO - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, LetsAllSingName - ret -; 91829 - -LoadStation_PokeFluteRadio: ; 91829 (24:5829) - ld a, POKE_FLUTE_RADIO - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, PokeFluteStationName - ret - -LoadStation_EvolutionRadio: ; 9183e (24:583e) - ld a, EVOLUTION_RADIO - ld [wd002], a - xor a - ld [wd005], a - ld a, BANK(PlayRadioShow) - ld hl, PlayRadioShow - call Radio_BackUpFarCallParams - ld de, UnknownStationName - ret -; 91853 (24:5853) - -LoadStation_Dummy: ; 91853 - ret - -RadioMusicRestartDE: ; 91854 (24:5854) - push de - ld a, e - ld [wc6dc], a - ld de, MUSIC_NONE - call PlayMusic - pop de - ld a, e - ld [wMapMusic], a - call PlayMusic - ret - -RadioMusicRestartPokemonChannel: ; 91868 (24:5868) - push de - ld a, $fe - ld [wc6dc], a - ld de, MUSIC_NONE - call PlayMusic - pop de - ld de, MUSIC_POKEMON_CHANNEL - call PlayMusic - ret - -Radio_BackUpFarCallParams: ; 9187c (24:587c) - ld [wc6d9], a - ld a, l - ld [wc6da], a - ld a, h - ld [wc6db], a - ret - -NoRadioStation: ; 91888 (24:5888) - call NoRadioMusic - call NoRadioName - xor a - ld [wc6d9], a - ld [wc6da], a - ld [wc6db], a - ld a, $1 - ld [hBGMapMode], a - ret - -NoRadioMusic: ; 9189d (24:589d) - ld de, MUSIC_NONE - call PlayMusic - ld a, $ff - ld [wc6dc], a - ret - -NoRadioName: ; 918a9 (24:58a9) - xor a - ld [hBGMapMode], a - hlcoord 1, 8 - lb bc, 3, 18 - call ClearBox - hlcoord 0, 12 - ld bc, $412 - call TextBox - ret -; 918bf - -OaksPkmnTalkName: db "OAK's <PK><MN> Talk@" -PokedexShowName: db "#DEX Show@" -PokemonMusicName: db "#MON Music@" -LuckyChannelName: db "Lucky Channel@" -UnknownStationName: db "?????@" -PlacesAndPeopleName: db "Places & People@" -LetsAllSingName: db "Let's All Sing!@" -PokeFluteStationName: db "# FLUTE@" -; 9191c diff --git a/engine/save.asm b/engine/save.asm index de11a8133..20f59c042 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -1,13 +1,13 @@ -Function14a1a: ; 14a1a +SaveMenu: ; 14a1a call LoadStandardMenuDataHeader - callba Function5e9a + callba DisplaySaveInfoOnSave call SpeechTextBox call UpdateSprites - callba Function4cf45 + callba SaveMenu_LoadEDTile ld hl, UnknownText_0x15283 call SaveTheGame_yesorno jr nz, .refused - call CheckForExistingSaveFile + call AskOverwriteSaveFile jr c, .refused call SetWRAMStateForSave call _SavingDontTurnOffThePower @@ -15,36 +15,37 @@ Function14a1a: ; 14a1a call ExitMenu and a ret + .refused call ExitMenu call Functiond90 - callba Function4cf45 + callba SaveMenu_LoadEDTile scf ret Function14a58: ; 14a58 call SetWRAMStateForSave - callba Function14056 - callba Function1050d9 + callba StageRTCTimeForSave + callba BackupMysteryGift call SavePokemonData - call Function14e13 + call SaveChecksum call SaveBackupPokemonData call SaveBackupChecksum - callba BackupScratchmons - callba Function1406a + callba BackupPartyMonMail + callba SaveRTC call ClearWRAMStateAfterSave ret ; 14a83 -Function14a83: ; 14a83 (5:4a83) +ChangeBoxSaveGame: ; 14a83 (5:4a83) push de ld hl, UnknownText_0x152a1 call MenuTextBox call YesNoBox call ExitMenu jr c, .refused - call CheckForExistingSaveFile + call AskOverwriteSaveFile jr c, .refused call SetWRAMStateForSave call SavingDontTurnOffThePower @@ -61,8 +62,8 @@ Function14a83: ; 14a83 (5:4a83) pop de ret -Function14ab2: ; 14ab2 - call CheckForExistingSaveFile +Link_SaveGame: ; 14ab2 + call AskOverwriteSaveFile jr c, .refused call SetWRAMStateForSave call _SavingDontTurnOffThePower @@ -73,7 +74,7 @@ Function14ab2: ; 14ab2 ret ; 14ac2 -Function14ac2: ; 14ac2 +MovePkmnWOMail_SaveGame: ; 14ac2 call SetWRAMStateForSave push de call SaveBox @@ -93,46 +94,46 @@ Function14ad5: ; 14ad5 ld a, e ld [wCurBox], a ld a, $1 - ld [wcfcd], a - callba Function14056 - callba Function1050d9 + ld [wSaveFileExists], a + callba StageRTCTimeForSave + callba BackupMysteryGift call ValidateSave call SaveOptions call SavePlayerData call SavePokemonData - call Function14e13 + call SaveChecksum call ValidateBackupSave call SaveBackupOptions call SaveBackupPlayerData call SaveBackupPokemonData call SaveBackupChecksum - callba BackupScratchmons + callba BackupPartyMonMail callba BackupMobileEventIndex - callba Function1406a + callba SaveRTC call LoadBox call ClearWRAMStateAfterSave ld de, SFX_SAVE call PlaySFX - ld c, $18 + ld c, 24 call DelayFrames ret ; 14b34 -Function14b34: ; 14b34 +StartMovePkmnWOMail_SaveGame: ; 14b34 ld hl, UnknownText_0x152a6 call MenuTextBox call YesNoBox call ExitMenu - jr c, .asm_14b52 - call CheckForExistingSaveFile - jr c, .asm_14b52 + jr c, .refused + call AskOverwriteSaveFile + jr c, .refused call SetWRAMStateForSave call _SavingDontTurnOffThePower call ClearWRAMStateAfterSave and a ret -.asm_14b52 +.refused scf ret ; 14b54 @@ -177,8 +178,8 @@ SaveGameData: ; 14b85 ret ; 14b89 -CheckForExistingSaveFile: ; 14b89 - ld a, [wcfcd] +AskOverwriteSaveFile: ; 14b89 + ld a, [wSaveFileExists] and a jr z, .erase call Function14bcb @@ -269,31 +270,31 @@ SavedTheGame: ; 14be6 SaveGameData_: ; 14c10 ld a, 1 - ld [wcfcd], a - callba Function14056 - callba Function1050d9 + ld [wSaveFileExists], a + callba StageRTCTimeForSave + callba BackupMysteryGift call ValidateSave call SaveOptions call SavePlayerData call SavePokemonData call SaveBox - call Function14e13 + call SaveChecksum call ValidateBackupSave call SaveBackupOptions call SaveBackupPlayerData call SaveBackupPokemonData call SaveBackupChecksum call UpdateStackTop - callba BackupScratchmons + callba BackupPartyMonMail callba BackupMobileEventIndex - callba Function1406a - ld a, BANK(s1_be45) + callba SaveRTC + ld a, BANK(sBattleTowerChallengeState) call GetSRAMBank - ld a, [s1_be45] + ld a, [sBattleTowerChallengeState] cp $4 jr nz, .ok xor a - ld [s1_be45], a + ld [sBattleTowerChallengeState], a .ok call CloseSRAM ret @@ -371,7 +372,7 @@ ErasePreviousSave: ; 14cbb call EraseHallOfFame call EraseLinkBattleStats call EraseMysteryGift - call Function14d68 + call SaveData call Function14d5c ld a, BANK(sStackTop) call GetSRAMBank @@ -395,10 +396,10 @@ EraseLinkBattleStats: ; 14ce2 ; 14cf4 EraseMysteryGift: ; 14cf4 - ld a, BANK(s0_abe4) + ld a, BANK(sBackupMysteryGiftItem) call GetSRAMBank - ld hl, s0_abe4 - ld bc, s0_abe4End - s0_abe4 + ld hl, sBackupMysteryGiftItem + ld bc, sBackupMysteryGiftItemEnd - sBackupMysteryGiftItem xor a call ByteFill jp CloseSRAM @@ -437,15 +438,15 @@ Unknown_14d2c: ; 14d2c ; 14d5c Function14d5c: ; 14d5c - ld a, BANK(s1_be45) + ld a, BANK(sBattleTowerChallengeState) call GetSRAMBank xor a - ld [s1_be45], a + ld [sBattleTowerChallengeState], a jp CloseSRAM ; 14d68 -Function14d68: ; 14d68 - call Function1509a +SaveData: ; 14d68 + call _SaveData ret ; 14d6c @@ -496,9 +497,9 @@ Function14da0: ; 14da0 ValidateSave: ; 14da9 ld a, BANK(s1_a008) call GetSRAMBank - ld a, $63 + ld a, 99 ld [s1_a008], a - ld a, $7f + ld a, " " ld [s1_ad0f], a jp CloseSRAM ; 14dbb @@ -547,7 +548,7 @@ SaveBox: ; 14e0c ret ; 14e13 -Function14e13: ; 14e13 +SaveChecksum: ; 14e13 ld hl, sGameData ld bc, sGameDataEnd - sGameData ld a, BANK(sGameData) @@ -564,9 +565,9 @@ Function14e13: ; 14e13 ValidateBackupSave: ; 14e2d ld a, BANK(s0_b208) call GetSRAMBank - ld a, $63 + ld a, 99 ld [s0_b208], a - ld a, $7f + ld a, " " ld [s0_bf0f], a call CloseSRAM ret @@ -630,9 +631,9 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadPlayerData call LoadPokemonData call LoadBox - callba RestoreScratchmons + callba RestorePartyMonMail callba RestoreMobileEventIndex - callba Function1050ea + callba RestoreMysteryGift call ValidateBackupSave call SaveBackupOptions call SaveBackupPlayerData @@ -647,21 +648,21 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadBackupPlayerData call LoadBackupPokemonData call LoadBox - callba RestoreScratchmons + callba RestorePartyMonMail callba RestoreMobileEventIndex - callba Function1050ea + callba RestoreMysteryGift call ValidateSave call SaveOptions call SavePlayerData call SavePokemonData - call Function14e13 + call SaveChecksum and a ret .corrupt ld a, [Options] push af - set 4, a + set NO_TEXT_SCROLL, a ld [Options], a ld hl, UnknownText_0x1529c call PrintText @@ -671,11 +672,11 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) ret -Function14f1c: ; 14f1c +TryLoadSaveData: ; 14f1c xor a - ld [wcfcd], a - call Function14f84 - ld a, [wcfcd] + ld [wSaveFileExists], a + call CheckPrimarySaveFile + ld a, [wSaveFileExists] and a jr z, .backup @@ -693,8 +694,8 @@ Function14f1c: ; 14f1c ret .backup - call Function14faf - ld a, [wcfcd] + call CheckBackupSaveFile + ld a, [wSaveFileExists] and a jr z, .corrupt @@ -716,7 +717,7 @@ Function14f1c: ; 14f1c ld de, Options ld bc, OptionsEnd - Options call CopyBytes - call Function67e + call PanicResetClock ret ; 14f7c @@ -731,14 +732,14 @@ DefaultOptions: ; 14f7c db $00 ; 14f84 -Function14f84: ; 14f84 +CheckPrimarySaveFile: ; 14f84 ld a, BANK(s1_a008) call GetSRAMBank ld a, [s1_a008] - cp $63 + cp 99 jr nz, .nope ld a, [s1_ad0f] - cp $7f + cp " " jr nz, .nope ld hl, sOptions ld de, Options @@ -746,28 +747,28 @@ Function14f84: ; 14f84 call CopyBytes call CloseSRAM ld a, $1 - ld [wcfcd], a + ld [wSaveFileExists], a .nope call CloseSRAM ret ; 14faf -Function14faf: ; 14faf +CheckBackupSaveFile: ; 14faf ld a, BANK(s0_b208) call GetSRAMBank ld a, [s0_b208] - cp $63 + cp 99 jr nz, .nope ld a, [s0_bf0f] - cp $7f + cp " " jr nz, .nope ld hl, sBackupOptions ld de, Options ld bc, OptionsEnd - Options call CopyBytes ld a, $2 - ld [wcfcd], a + ld [wSaveFileExists], a .nope call CloseSRAM @@ -787,14 +788,14 @@ LoadPlayerData: ; 14fd7 (5:4fd7) ld bc, wMapDataEnd - wMapData call CopyBytes call CloseSRAM - ld a, BANK(s1_be45) + ld a, BANK(sBattleTowerChallengeState) call GetSRAMBank - ld a, [s1_be45] + ld a, [sBattleTowerChallengeState] cp $4 - jr nz, .asm_15008 + jr nz, .not_4 ld a, $3 - ld [s1_be45], a -.asm_15008 + ld [sBattleTowerChallengeState], a +.not_4 call CloseSRAM ret @@ -822,10 +823,10 @@ VerifyChecksum: ; 15028 (5:5028) call Checksum ld a, [sChecksum + 0] cp e - jr nz, .asm_15040 + jr nz, .fail ld a, [sChecksum + 1] cp d -.asm_15040 +.fail push af call CloseSRAM pop af @@ -863,17 +864,17 @@ VerifyBackupChecksum: ; 1507c (5:507c) call Checksum ld a, [sBackupChecksum + 0] cp e - jr nz, .asm_15094 + jr nz, .fail ld a, [sBackupChecksum + 1] cp d -.asm_15094 +.fail push af call CloseSRAM pop af ret -Function1509a: ; 1509a +_SaveData: ; 1509a ld a, BANK(sCrystalData) call GetSRAMBank ld hl, wCrystalData diff --git a/engine/scripting.asm b/engine/scripting.asm index ae5041bc2..c80343a4c 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -69,13 +69,13 @@ RunScriptCommand: ; 96ca9 ; 96cb1 -ScriptCommandTable: ; 0x96cb1 - dw Script_2call - dw Script_3call - dw Script_2ptcall - dw Script_2jump - dw Script_3jump - dw Script_2ptjump +ScriptCommandTable: ; 96cb1 + dw Script_scall + dw Script_farscall + dw Script_ptcall + dw Script_jump + dw Script_farjump + dw Script_ptjump dw Script_if_equal dw Script_if_not_equal dw Script_iffalse @@ -84,9 +84,9 @@ ScriptCommandTable: ; 0x96cb1 dw Script_if_less_than dw Script_jumpstd dw Script_callstd - dw Script_3callasm + dw Script_callasm dw Script_special - dw Script_2ptcallasm + dw Script_ptcallasm dw Script_checkmaptriggers dw Script_domaptrigger dw Script_checktriggers @@ -144,16 +144,16 @@ ScriptCommandTable: ; 0x96cb1 dw Script_loadfont dw Script_refreshscreen dw Script_loadmovesprites - dw Script_loadbytec1ce - dw Script_3writetext - dw Script_2writetext + dw Script_loadbytec2cf + dw Script_farwritetext + dw Script_writetext dw Script_repeattext dw Script_yesorno dw Script_loadmenudata dw Script_writebackup dw Script_jumptextfaceplayer IF _CRYSTAL - dw Script_3jumptext + dw Script_farjumptext ENDC dw Script_jumptext dw Script_closetext @@ -241,28 +241,28 @@ ENDC dw Script_trainerclassname dw Script_name dw Script_wait - dw Script_unknown0xa9 -; 0x96e05 + dw Script_check_save +; 96e05 -StartScript: ; 0x96e05 +StartScript: ; 96e05 ld hl, ScriptFlags set SCRIPT_RUNNING, [hl] ret -; 0x96e0b +; 96e0b -CheckScript: ; 0x96e0b +CheckScript: ; 96e0b ld hl, ScriptFlags bit SCRIPT_RUNNING, [hl] ret -; 0x96e11 +; 96e11 -StopScript: ; 0x96e11 +StopScript: ; 96e11 ld hl, ScriptFlags res SCRIPT_RUNNING, [hl] ret -; 0x96e17 +; 96e17 -Script_3callasm: ; 0x96e17 +Script_callasm: ; 96e17 ; script command 0xe ; parameters: ; asm (AsmPointerParam) @@ -276,9 +276,9 @@ Script_3callasm: ; 0x96e17 ld a, b rst FarCall ret -; 0x96e26 +; 96e26 -Script_special: ; 0x96e26 +Script_special: ; 96e26 ; script command 0xf ; parameters: ; predefined_script (MultiByteParam) @@ -289,9 +289,9 @@ Script_special: ; 0x96e26 ld d, a callba Special ret -; 0x96e35 +; 96e35 -Script_2ptcallasm: ; 0x96e35 +Script_ptcallasm: ; 96e35 ; script command 0x10 ; parameters: ; asm (PointerToAsmPointerParam) @@ -308,9 +308,9 @@ Script_2ptcallasm: ; 0x96e35 ld a, b rst FarCall ret -; 0x96e45 +; 96e45 -Script_jumptextfaceplayer: ; 0x96e45 +Script_jumptextfaceplayer: ; 96e45 ; script command 0x51 ; parameters: ; text_pointer (RawTextPointerLabelParam) @@ -324,9 +324,9 @@ Script_jumptextfaceplayer: ; 0x96e45 ld b, BANK(JumpTextFacePlayerScript) ld hl, JumpTextFacePlayerScript jp ScriptJump -; 0x96e5f +; 96e5f -Script_jumptext: ; 0x96e5f +Script_jumptext: ; 96e5f ; script command 0x53 ; parameters: ; text_pointer (RawTextPointerLabelParam) @@ -340,22 +340,22 @@ Script_jumptext: ; 0x96e5f ld b, BANK(JumpTextScript) ld hl, JumpTextScript jp ScriptJump -; 0x96e79 +; 96e79 -JumpTextFacePlayerScript: ; 0x96e79 +JumpTextFacePlayerScript: ; 96e79 faceplayer -JumpTextScript: ; 0x96e7a +JumpTextScript: ; 96e7a loadfont repeattext -1, -1 closetext loadmovesprites end -; 0x96e81 +; 96e81 IF _CRYSTAL -Script_3jumptext: ; 0x96e81 +Script_farjumptext: ; 96e81 ; script command 0x52 ; parameters: ; text_pointer (PointerLabelBeforeBank) @@ -369,12 +369,12 @@ Script_3jumptext: ; 0x96e81 ld b, BANK(JumpTextScript) ld hl, JumpTextScript jp ScriptJump -; 0x96e9b +; 96e9b ENDC -Script_2writetext: ; 0x96e9b +Script_writetext: ; 96e9b ; script command 0x4c ; parameters: ; text_pointer (RawTextPointerLabelParam) @@ -387,9 +387,9 @@ Script_2writetext: ; 0x96e9b ld b, a call MapTextbox ret -; 0x96eab +; 96eab -Script_3writetext: ; 0x96eab +Script_farwritetext: ; 96eab ; script command 0x4b ; parameters: ; text_pointer (PointerLabelBeforeBank) @@ -402,9 +402,9 @@ Script_3writetext: ; 0x96eab ld h, a call MapTextbox ret -; 0x96ebb +; 96ebb -Script_repeattext: ; 0x96ebb +Script_repeattext: ; 96ebb ; script command 0x4d ; parameters: ; byte (SingleByteParam) @@ -415,10 +415,10 @@ Script_repeattext: ; 0x96ebb call GetScriptByte ld h, a cp -1 - jr nz, .done ; 0x96ec5 $11 + jr nz, .done ld a, l cp -1 - jr nz, .done ; 0x96eca $c + jr nz, .done ld hl, wd44e ld a, [hli] ld b, a @@ -429,15 +429,15 @@ Script_repeattext: ; 0x96ebb ret .done ret -; 0x96ed9 +; 96ed9 -Script_closetext: ; 0x96ed9 +Script_closetext: ; 96ed9 ; script command 0x54 jp CloseText -; 0x96edc +; 96edc -Script_keeptextopen: ; 0x96edc +Script_keeptextopen: ; 96edc ; script command 0x55 ld a, [hOAMUpdate] @@ -449,21 +449,21 @@ Script_keeptextopen: ; 0x96edc pop af ld [hOAMUpdate], a ret -; 0x96eed +; 96eed -Script_yesorno: ; 0x96eed +Script_yesorno: ; 96eed ; script command 0x4e call YesNoBox ld a, 0 - jr c, .no ; 0x96ef2 $2 + jr c, .no ld a, 1 .no ld [ScriptVar], a ret -; 0x96efa +; 96efa -Script_loadmenudata: ; 0x96efa +Script_loadmenudata: ; 96efa ; script command 0x4f ; parameters: ; data (MenuDataPointerParam) @@ -477,17 +477,17 @@ Script_loadmenudata: ; 0x96efa call Call_a_de call UpdateSprites ret -; 0x96f0f +; 96f0f -Script_writebackup: ; 0x96f0f +Script_writebackup: ; 96f0f ; script command 0x50 call WriteBackup call UpdateSprites ret -; 0x96f16 +; 96f16 -Script_pokepic: ; 0x96f16 +Script_pokepic: ; 96f16 ; script command 0x56 ; parameters: ; pokemon (PokemonParam) @@ -500,16 +500,16 @@ Script_pokepic: ; 0x96f16 ld [CurPartySpecies], a callba Pokepic ret -; 0x96f29 +; 96f29 -Script_pokepicyesorno: ; 0x96f29 +Script_pokepicyesorno: ; 96f29 ; script command 0x57 callba PokepicYesOrNo ret -; 0x96f30 +; 96f30 -Script_interpretmenu2: ; 0x96f30 +Script_interpretmenu2: ; 96f30 ; script command 0x59 ld a, [ScriptBank] @@ -521,9 +521,9 @@ Script_interpretmenu2: ; 0x96f30 .ok ld [ScriptVar], a ret -; 0x96f41 +; 96f41 -Script_interpretmenu: ; 0x96f41 +Script_interpretmenu: ; 96f41 ; script command 0x58 ld a, [ScriptBank] @@ -535,9 +535,9 @@ Script_interpretmenu: ; 0x96f41 .ok ld [ScriptVar], a ret -; 0x96f52 +; 96f52 -Script_battletowertext: ; 0x96f52 +Script_battletowertext: ; 96f52 ; script command 0xa4 ; parameters: ; pointer (PointerLabelBeforeBank) @@ -548,9 +548,9 @@ Script_battletowertext: ; 0x96f52 ld c, a callba BattleTowerText ret -; 0x96f60 +; 96f60 -Script_verbosegiveitem: ; 0x96f60 +Script_verbosegiveitem: ; 96f60 ; script command 0x9e ; parameters: ; item (ItemLabelByte) @@ -564,15 +564,15 @@ Script_verbosegiveitem: ; 0x96f60 ld b, BANK(GiveItemScript) ld de, GiveItemScript jp ScriptCall -; 0x96f76 +; 96f76 -Function96f76: ; 96f76 +ret_96f76: ; 96f76 ret ; 96f77 GiveItemScript: ; 96f77 - callasm Function96f76 + callasm ret_96f76 writetext ReceivedItemText iffalse .Full waitbutton @@ -593,7 +593,7 @@ ReceivedItemText: ; 96f89 ; 96f8e -Script_verbosegiveitem2: ; 0x96f8e +Script_verbosegiveitem2: ; 96f8e ; script command 0x9f ; parameters: ; item (ItemLabelByte) @@ -623,9 +623,9 @@ Script_verbosegiveitem2: ; 0x96f8e ld b, BANK(GiveItemScript) ld de, GiveItemScript jp ScriptCall -; 0x96fc6 +; 96fc6 -Script_itemnotify: ; 0x96fc6 +Script_itemnotify: ; 96fc6 ; script command 0x45 call GetPocketName @@ -634,9 +634,9 @@ Script_itemnotify: ; 0x96fc6 ld hl, PutItemInPocketText call MapTextbox ret -; 0x96fd5 +; 96fd5 -Script_pocketisfull: ; 0x96fd5 +Script_pocketisfull: ; 96fd5 ; script command 0x46 call GetPocketName @@ -645,9 +645,9 @@ Script_pocketisfull: ; 0x96fd5 ld hl, PocketIsFullText call MapTextbox ret -; 0x96fe4 +; 96fe4 -Script_specialsound: ; 0x96fe4 +Script_specialsound: ; 96fe4 ; script command 0x88 callba CheckItemPocket @@ -660,7 +660,7 @@ Script_specialsound: ; 0x96fe4 call PlaySFX call WaitSFX ret -; 0x96ffe +; 96ffe GetPocketName: ; 96ffe @@ -715,7 +715,7 @@ PocketIsFullText: ; 97060 ; 97065 -Script_pokemart: ; 0x97065 +Script_pokemart: ; 97065 ; script command 0x94 ; parameters: ; dialog_id (SingleByteParam) @@ -731,9 +731,9 @@ Script_pokemart: ; 0x97065 ld b, a callba OpenMartDialog ret -; 0x9707c +; 9707c -Script_elevator: ; 0x9707c +Script_elevator: ; 9707c ; script command 0x95 ; parameters: ; floor_list_pointer (PointerLabelParam) @@ -751,9 +751,9 @@ Script_elevator: ; 0x9707c ld a, $1 ld [ScriptVar], a ret -; 0x97099 +; 97099 -Script_trade: ; 0x97099 +Script_trade: ; 97099 ; script command 0x96 ; parameters: ; trade_id (SingleByteParam) @@ -762,9 +762,9 @@ Script_trade: ; 0x97099 ld e, a callba NPCTrade ret -; 0x970a4 +; 970a4 -Script_phonecall: ; 0x970a4 +Script_phonecall: ; 970a4 ; script command 0x98 ; parameters: ; caller_name (RawTextPointerLabelParam) @@ -777,40 +777,40 @@ Script_phonecall: ; 0x970a4 ld b, a callba PhoneCall ret -; 0x970b7 +; 970b7 -Script_hangup: ; 0x970b7 +Script_hangup: ; 970b7 ; script command 0x99 callba HangUp ret -; 0x970be +; 970be -Script_askforphonenumber: ; 0x970be +Script_askforphonenumber: ; 970be ; script command 0x97 ; parameters: ; number (SingleByteParam) call YesNoBox - jr c, .refused ; 0x970c1 $13 + jr c, .refused call GetScriptByte ld c, a callba AddPhoneNumber - jr c, .phonefull ; 0x970cd $3 + jr c, .phonefull xor a - jr .done ; 0x970d0 $9 + jr .done .phonefull ld a, 1 - jr .done ; 0x970d4 $5 + jr .done .refused call GetScriptByte ld a, 2 .done ld [ScriptVar], a ret -; 0x970df +; 970df -Script_describedecoration: ; 0x970df +Script_describedecoration: ; 970df ; script command 0x9a ; parameters: ; byte (SingleByteParam) @@ -821,9 +821,9 @@ Script_describedecoration: ; 0x970df ld h, d ld l, e jp ScriptJump -; 0x970ee +; 970ee -Script_fruittree: ; 0x970ee +Script_fruittree: ; 970ee ; script command 0x9b ; parameters: ; tree_id (SingleByteParam) @@ -833,9 +833,9 @@ Script_fruittree: ; 0x970ee ld b, BANK(FruitTreeScript) ld hl, FruitTreeScript jp ScriptJump -; 0x970fc +; 970fc -Script_loadwilddata: ; 0x970fc +Script_loadwilddata: ; 970fc ; script command 0xa0 ; parameters: ; flag (SingleByteParam) @@ -850,9 +850,9 @@ Script_loadwilddata: ; 0x970fc ld e, a callba LoadWildData ret -; 0x9710f +; 9710f -Script_trainertext: ; 0x9710f +Script_trainertext: ; 9710f ; script command 0x62 ; parameters: ; which_text (SingleByteParam) @@ -871,9 +871,9 @@ endr ld b, a call MapTextbox ret -; 0x97125 +; 97125 -Script_scripttalkafter: ; 0x97125 +Script_scripttalkafter: ; 97125 ; script command 0x65 ld hl, wd04b @@ -883,9 +883,9 @@ Script_scripttalkafter: ; 0x97125 ld a, [EngineBuffer1] ld b, a jp ScriptJump -; 0x97132 +; 97132 -Script_trainerstatus: ; 0x97132 +Script_trainerstatus: ; 97132 ; script command 0x63 ; parameters: ; action (SingleByteParam) @@ -905,9 +905,9 @@ Script_trainerstatus: ; 0x97132 ld a, 1 ld [ScriptVar], a ret -; 0x9714c +; 9714c -Script_winlosstext: ; 0x9714c +Script_winlosstext: ; 9714c ; script command 0x64 ; parameters: ; win_text_pointer (TextPointerLabelParam) @@ -924,47 +924,47 @@ Script_winlosstext: ; 0x9714c call GetScriptByte ld [hli], a ret -; 0x97163 +; 97163 -Script_talkaftercancel: ; 0x97163 +Script_talkaftercancel: ; 97163 ; script command 0x66 - ld a, [wd04d] + ld a, [wRunningTrainerBattleScript] and a ret z jp Script_end -; 0x9716b +; 9716b -Script_talkaftercheck: ; 0x9716b +Script_talkaftercheck: ; 9716b ; script command 0x67 ld a, 1 ld [ScriptVar], a - ld a, [wd04d] + ld a, [wRunningTrainerBattleScript] and a ret nz xor a ld [ScriptVar], a ret -; 0x9717a +; 9717a -Script_playrammusic: ; 0x9717a +Script_playrammusic: ; 9717a ; script command 0x80 ld a, [OtherTrainerClass] ld e, a callba PlayTrainerEncounterMusic ret -; 0x97185 +; 97185 -Script_playmapmusic: ; 0x97185 +Script_playmapmusic: ; 97185 ; script command 0x82 call PlayMapMusic ret -; 0x97189 +; 97189 -Script_playmusic: ; 0x97189 +Script_playmusic: ; 97189 ; script command 0x7f ; parameters: ; music_pointer (MultiByteParam) @@ -980,9 +980,9 @@ Script_playmusic: ; 0x97189 ld d, a call PlayMusic ret -; 0x971a2 +; 971a2 -Script_musicfadeout: ; 0x971a2 +Script_musicfadeout: ; 971a2 ; script command 0x81 ; parameters: ; music (MultiByteParam) @@ -996,9 +996,9 @@ Script_musicfadeout: ; 0x971a2 and $7f ld [MusicFade], a ret -; 0x971b7 +; 971b7 -Script_playsound: ; 0x971b7 +Script_playsound: ; 971b7 ; script command 0x85 ; parameters: ; sound_pointer (MultiByteParam) @@ -1009,24 +1009,24 @@ Script_playsound: ; 0x971b7 ld d, a call PlaySFX ret -; 0x971c3 +; 971c3 -Script_waitbutton: ; 0x971c3 +Script_waitbutton: ; 971c3 ; script command 0x86 call WaitSFX ret -; 0x971c7 +; 971c7 -Script_warpsound: ; 0x971c7 +Script_warpsound: ; 971c7 ; script command 0x87 callba Function14a07 call PlaySFX ret -; 0x971d1 +; 971d1 -Script_cry: ; 0x971d1 +Script_cry: ; 971d1 ; script command 0x84 ; parameters: ; cry_id (MultiByteParam) @@ -1041,18 +1041,18 @@ Script_cry: ; 0x971d1 .ok call PlayCry ret -; 0x971e3 +; 971e3 -GetScriptPerson: ; 0x971e3 +GetScriptPerson: ; 971e3 and a ret z cp LAST_TALKED ret z dec a ret -; 0x971ea +; 971ea -Script_setlasttalked: ; 0x971ea +Script_setlasttalked: ; 971ea ; script command 0x68 ; parameters: ; person (SingleByteParam) @@ -1061,9 +1061,9 @@ Script_setlasttalked: ; 0x971ea call GetScriptPerson ld [hLastTalked], a ret -; 0x971f3 +; 971f3 -Script_applymovement: ; 0x971f3 +Script_applymovement: ; 971f3 ; script command 0x69 ; parameters: ; person (SingleByteParam) @@ -1097,14 +1097,14 @@ ApplyMovement: ; 971fa ld [ScriptMode], a call StopScript ret -; 0x97221 +; 97221 -SetFlagsForMovement_2: ; 0x97221 +SetFlagsForMovement_2: ; 97221 callba _SetFlagsForMovement_2 ret -; 0x97228 +; 97228 -Script_applymovement2: ; 0x97228 +Script_applymovement2: ; 97228 ; apply movement to last talked ; script command 0x6a ; parameters: @@ -1113,9 +1113,9 @@ Script_applymovement2: ; 0x97228 ld a, [hLastTalked] ld c, a jp ApplyMovement -; 0x9722e +; 9722e -Script_faceplayer: ; 0x9722e +Script_faceplayer: ; 9722e ; script command 0x6b ld a, [hLastTalked] @@ -1134,9 +1134,9 @@ endr ld d, a call ApplyPersonFacing ret -; 0x97248 +; 97248 -Script_faceperson: ; 0x97248 +Script_faceperson: ; 97248 ; script command 0x6c ; parameters: ; person1 (SingleByteParam) @@ -1168,9 +1168,9 @@ endr ld d, c call ApplyPersonFacing ret -; 0x97274 +; 97274 -Script_spriteface: ; 0x97274 +Script_spriteface: ; 97274 ; script command 0x76 ; parameters: ; person (SingleByteParam) @@ -1190,13 +1190,13 @@ endr ld e, a call ApplyPersonFacing ret -; 0x9728b +; 9728b -ApplyPersonFacing: ; 0x9728b +ApplyPersonFacing: ; 9728b ld a, d push de call CheckObjectVisibility - jr c, .not_visible ; 0x97290 $27 + jr c, .not_visible ld hl, OBJECT_SPRITE add hl, bc ld a, [hl] @@ -1207,13 +1207,13 @@ ApplyPersonFacing: ; 0x9728b ld hl, OBJECT_FLAGS1 add hl, bc bit 2, [hl] - jr nz, .not_visible ; 0x972a4 $13 + jr nz, .not_visible pop de ld a, e call SetSpriteDirection ld hl, VramState bit 6, [hl] - jr nz, .text_state ; 0x972b0 $3 + jr nz, .text_state call .DisableTextTiles .text_state call UpdateSprites @@ -1223,9 +1223,9 @@ ApplyPersonFacing: ; 0x9728b pop de scf ret -; 0x972bc +; 972bc -.DisableTextTiles: ; 0x972bc +.DisableTextTiles: ; 972bc call LoadMapPart hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT @@ -1235,11 +1235,11 @@ ApplyPersonFacing: ; 0x9728b dec bc ld a, b or c - jr nz, .loop ; 0x972cb $f8 + jr nz, .loop ret -; 0x972ce +; 972ce -Script_variablesprite: ; 0x972ce +Script_variablesprite: ; 972ce ; script command 0x6d ; parameters: ; byte (SingleByteParam) @@ -1253,9 +1253,9 @@ Script_variablesprite: ; 0x972ce call GetScriptByte ld [hl], a ret -; 0x972dd +; 972dd -Script_appear: ; 0x972dd +Script_appear: ; 972dd ; script command 0x6f ; parameters: ; person (SingleByteParam) @@ -1267,9 +1267,9 @@ Script_appear: ; 0x972dd ld b, 0 ; clear call ApplyEventActionAppearDisappear ret -; 0x972ee +; 972ee -Script_disappear: ; 0x972ee +Script_disappear: ; 972ee ; script command 0x6e ; parameters: ; person (SingleByteParam) @@ -1284,11 +1284,11 @@ Script_disappear: ; 0x972ee ld a, [hMapObjectIndexBuffer] ld b, 1 ; set call ApplyEventActionAppearDisappear - callba RefreshMapAppearDisappear + callba _UpdateSprites ret -; 0x9730b +; 9730b -ApplyEventActionAppearDisappear: ; 0x9730b +ApplyEventActionAppearDisappear: ; 9730b push bc call GetMapObject ld hl, MAPOBJECT_EVENT_FLAG @@ -1299,17 +1299,17 @@ ApplyEventActionAppearDisappear: ; 0x9730b ld d, [hl] ld a, -1 cp e - jr nz, .okay ; 0x9731a $5 + jr nz, .okay cp d - jr nz, .okay ; 0x9731d $2 + jr nz, .okay xor a ret .okay call EventFlagAction ret -; 0x97325 +; 97325 -Script_follow: ; 0x97325 +Script_follow: ; 97325 ; script command 0x70 ; parameters: ; person2 (SingleByteParam) @@ -1323,16 +1323,16 @@ Script_follow: ; 0x97325 ld c, a callba StartFollow ret -; 0x9733a +; 9733a -Script_stopfollow: ; 0x9733a +Script_stopfollow: ; 9733a ; script command 0x71 callba StopFollow ret -; 0x97341 +; 97341 -Script_moveperson: ; 0x97341 +Script_moveperson: ; 97341 ; script command 0x72 ; parameters: ; person (SingleByteParam) @@ -1350,9 +1350,9 @@ Script_moveperson: ; 0x97341 ld e, a callba CopyDECoordsToMapObject ret -; 0x9735b +; 9735b -Script_writepersonxy: ; 0x9735b +Script_writepersonxy: ; 9735b ; script command 0x73 ; parameters: ; person (SingleByteParam) @@ -1366,9 +1366,9 @@ Script_writepersonxy: ; 0x9735b ld b, a callba WritePersonXY ret -; 0x9736f +; 9736f -Script_follownotexact: ; 0x9736f +Script_follownotexact: ; 9736f ; script command 0x77 ; parameters: ; person2 (SingleByteParam) @@ -1382,24 +1382,24 @@ Script_follownotexact: ; 0x9736f ld c, a callba FollowNotExact ret -; 0x97384 +; 97384 -Script_loademote: ; 0x97384 +Script_loademote: ; 97384 ; script command 0x74 ; parameters: ; bubble (SingleByteParam) call GetScriptByte cp -1 - jr nz, .not_var_emote ; 0x97389 $3 + jr nz, .not_var_emote ld a, [ScriptVar] .not_var_emote ld c, a callba LoadEmote ret -; 0x97396 +; 97396 -Script_showemote: ; 0x97396 +Script_showemote: ; 97396 ; script command 0x75 ; parameters: ; bubble (SingleByteParam) @@ -1419,7 +1419,7 @@ Script_showemote: ; 0x97396 ld b, BANK(ShowEmoteScript) ld de, ShowEmoteScript jp ScriptCall -; 0x973b6 +; 973b6 ShowEmoteScript: ; 973b6 loademote EMOTE_MEM @@ -1440,7 +1440,7 @@ ShowEmoteScript: ; 973b6 ; 973c7 -Script_earthquake: ; 0x973c7 +Script_earthquake: ; 973c7 ; script command 0x78 ; parameters: ; param (DecimalParam) @@ -1456,7 +1456,7 @@ Script_earthquake: ; 0x973c7 ld b, BANK(.script) ld de, .script jp ScriptCall -; 0x973e6 +; 973e6 .script: ; 973e6 applymovement PLAYER, wd002 @@ -1471,7 +1471,7 @@ EarthquakeMovementEnd ; 973f0 -Script_loadpikachudata: ; 0x973f0 +Script_loadpikachudata: ; 973f0 ; script command 0x5a ld a, PIKACHU @@ -1479,59 +1479,59 @@ Script_loadpikachudata: ; 0x973f0 ld a, 5 ld [CurPartyLevel], a ret -; 0x973fb +; 973fb -Script_battlecheck: ; 0x973fb +Script_battlecheck: ; 973fb ; script command 0x5b xor a - ld [wd459], a + ld [wBattleScriptFlags], a ret -; 0x97400 +; 97400 -Script_loadtrainerdata: ; 0x97400 +Script_loadtrainerdata: ; 97400 ; script command 0x5c ld a, (1 << 7) | 1 - ld [wd459], a + ld [wBattleScriptFlags], a ld a, [WalkingDirection] ld [OtherTrainerClass], a ld a, [FacingDirection] ld [OtherTrainerID], a ret -; 0x97412 +; 97412 -Script_loadpokedata: ; 0x97412 +Script_loadpokedata: ; 97412 ; script command 0x5d ; parameters: ; pokemon (PokemonParam) ; level (DecimalParam) ld a, (1 << 7) - ld [wd459], a + ld [wBattleScriptFlags], a call GetScriptByte ld [TempWildMonSpecies], a call GetScriptByte ld [CurPartyLevel], a ret -; 0x97424 +; 97424 -Script_loadtrainer: ; 0x97424 +Script_loadtrainer: ; 97424 ; script command 0x5e ; parameters: ; trainer_group (TrainerGroupParam) ; trainer_id (TrainerIdParam) ld a, (1 << 7) | 1 - ld [wd459], a + ld [wBattleScriptFlags], a call GetScriptByte ld [OtherTrainerClass], a call GetScriptByte ld [OtherTrainerID], a ret -; 0x97436 +; 97436 -Script_startbattle: ; 0x97436 +Script_startbattle: ; 97436 ; script command 0x5f call BufferScreen @@ -1540,9 +1540,9 @@ Script_startbattle: ; 0x97436 and $3f ld [ScriptVar], a ret -; 0x97447 +; 97447 -Script_catchtutorial: ; 0x97447 +Script_catchtutorial: ; 97447 ; script command 0x61 ; parameters: ; byte (SingleByteParam) @@ -1552,53 +1552,53 @@ Script_catchtutorial: ; 0x97447 call BufferScreen callba CatchTutorial jp Script_reloadmap -; 0x97459 +; 97459 -Script_returnafterbattle: ; 0x97459 +Script_returnafterbattle: ; 97459 ; script command 0x60 - ld hl, wd459 + ld hl, wBattleScriptFlags ld d, [hl] ld [hl], $0 ld a, [wBattleResult] and $3f cp $1 - jr nz, .notblackedout ; 0x97466 $8 + jr nz, .notblackedout ld b, BANK(Script_BattleWhiteout) ld hl, Script_BattleWhiteout jp ScriptJump .notblackedout bit 0, d - jr z, .was_wild ; 0x97472 $8 + jr z, .was_wild callba MomTriesToBuySomething - jr .done ; 0x9747a $12 + jr .done .was_wild ld a, [wBattleResult] bit 7, a - jr z, .done ; 0x97481 $b + jr z, .done ld b, BANK(Script_SpecialBillCall) ld de, Script_SpecialBillCall callba LoadScriptBDE .done jp Script_reloadmap -; 0x97491 +; 97491 -Script_reloadmap: ; 0x97491 +Script_reloadmap: ; 97491 ; script command 0x7b xor a - ld [wd459], a + ld [wBattleScriptFlags], a ld a, MAPSETUP_RELOADMAP ld [hMapEntryMethod], a ld a, $1 call LoadMapStatus call StopScript ret -; 0x974a2 +; 974a2 -Script_2call: ; 0x974a2 +Script_scall: ; 974a2 ; script command 0x0 ; parameters: ; pointer (ScriptPointerLabelParam) @@ -1610,9 +1610,9 @@ Script_2call: ; 0x974a2 call GetScriptByte ld d, a jr ScriptCall -; 0x974b0 +; 974b0 -Script_3call: ; 0x974b0 +Script_farscall: ; 974b0 ; script command 0x1 ; parameters: ; pointer (ScriptPointerLabelBeforeBank) @@ -1624,9 +1624,9 @@ Script_3call: ; 0x974b0 call GetScriptByte ld d, a jr ScriptCall -; 0x974be +; 974be -Script_2ptcall: ; 0x974be +Script_ptcall: ; 974be ; script command 0x2 ; parameters: ; pointer (PointerLabelToScriptPointer) @@ -1642,13 +1642,19 @@ Script_2ptcall: ; 0x974be ld d, [hl] ; fallthrough -ScriptCall: ; 0x974cb +ScriptCall: ; 974cb +; Bug: The script stack has a capacity of 5 scripts, yet there is +; nothing to stop you from pushing a sixth script. The high part +; of the script address can then be overwritten by modifications +; to ScriptDelay, causing the script to return to the rst/interrupt +; space. + push de - ld hl, wd43c + ld hl, wScriptStackSize ld e, [hl] inc [hl] ld d, $0 - ld hl, wd43d + ld hl, wScriptStackBA1 rept 3 add hl, de endr @@ -1666,16 +1672,16 @@ endr ld a, d ld [ScriptPos + 1], a ret -; 0x974f3 +; 974f3 -CallCallback:: ; 0x974f3 +CallCallback:: ; 974f3 ld a, [ScriptBank] or $80 ld [ScriptBank], a jp ScriptCall -; 0x974fe +; 974fe -Script_2jump: ; 0x974fe +Script_jump: ; 974fe ; script command 0x3 ; parameters: ; pointer (ScriptPointerLabelParam) @@ -1687,9 +1693,9 @@ Script_2jump: ; 0x974fe ld a, [ScriptBank] ld b, a jp ScriptJump -; 0x9750d +; 9750d -Script_3jump: ; 0x9750d +Script_farjump: ; 9750d ; script command 0x4 ; parameters: ; pointer (ScriptPointerLabelBeforeBank) @@ -1701,9 +1707,9 @@ Script_3jump: ; 0x9750d call GetScriptByte ld h, a jp ScriptJump -; 0x9751c +; 9751c -Script_2ptjump: ; 0x9751c +Script_ptjump: ; 9751c ; script command 0x5 ; parameters: ; pointer (PointerLabelToScriptPointer) @@ -1718,9 +1724,9 @@ Script_2ptjump: ; 0x9751c ld h, [hl] ld l, a jp ScriptJump -; 0x9752c +; 9752c -Script_iffalse: ; 0x9752c +Script_iffalse: ; 9752c ; script command 0x8 ; parameters: ; pointer (ScriptPointerLabelParam) @@ -1728,21 +1734,21 @@ Script_iffalse: ; 0x9752c ld a, [ScriptVar] and a jp nz, SkipTwoScriptBytes - jp Script_2jump -; 0x97536 + jp Script_jump +; 97536 -Script_iftrue: ; 0x97536 +Script_iftrue: ; 97536 ; script command 0x9 ; parameters: ; pointer (ScriptPointerLabelParam) ld a, [ScriptVar] and a - jp nz, Script_2jump + jp nz, Script_jump jp SkipTwoScriptBytes -; 0x97540 +; 97540 -Script_if_equal: ; 0x97540 +Script_if_equal: ; 97540 ; script command 0x6 ; parameters: ; byte (SingleByteParam) @@ -1751,11 +1757,11 @@ Script_if_equal: ; 0x97540 call GetScriptByte ld hl, ScriptVar cp [hl] - jr z, Script_2jump ; 0x97547 $b5 - jr SkipTwoScriptBytes ; 0x97549 $4b -; 0x9754b + jr z, Script_jump + jr SkipTwoScriptBytes +; 9754b -Script_if_not_equal: ; 0x9754b +Script_if_not_equal: ; 9754b ; script command 0x7 ; parameters: ; byte (SingleByteParam) @@ -1764,11 +1770,11 @@ Script_if_not_equal: ; 0x9754b call GetScriptByte ld hl, ScriptVar cp [hl] - jr nz, Script_2jump ; 0x97552 $aa - jr SkipTwoScriptBytes ; 0x97554 $40 -; 0x97556 + jr nz, Script_jump + jr SkipTwoScriptBytes +; 97556 -Script_if_greater_than: ; 0x97556 +Script_if_greater_than: ; 97556 ; script command 0xa ; parameters: ; byte (SingleByteParam) @@ -1778,11 +1784,11 @@ Script_if_greater_than: ; 0x97556 ld b, a call GetScriptByte cp b - jr c, Script_2jump ; 0x9755e $9e - jr SkipTwoScriptBytes ; 0x97560 $34 -; 0x97562 + jr c, Script_jump + jr SkipTwoScriptBytes +; 97562 -Script_if_less_than: ; 0x97562 +Script_if_less_than: ; 97562 ; script command 0xb ; parameters: ; byte (SingleByteParam) @@ -1792,20 +1798,20 @@ Script_if_less_than: ; 0x97562 ld b, a ld a, [ScriptVar] cp b - jr c, Script_2jump ; 0x9756a $92 - jr SkipTwoScriptBytes ; 0x9756c $28 -; 0x9756e + jr c, Script_jump + jr SkipTwoScriptBytes +; 9756e -Script_jumpstd: ; 0x9756e +Script_jumpstd: ; 9756e ; script command 0xc ; parameters: ; predefined_script (MultiByteParam) call StdScript - jr ScriptJump ; 0x97571 $2a -; 0x97573 + jr ScriptJump +; 97573 -Script_callstd: ; 0x97573 +Script_callstd: ; 97573 ; script command 0xd ; parameters: ; predefined_script (MultiByteParam) @@ -1814,9 +1820,9 @@ Script_callstd: ; 0x97573 ld d, h ld e, l jp ScriptCall -; 0x9757b +; 9757b -StdScript: ; 0x9757b +StdScript: ; 9757b call GetScriptByte ld e, a call GetScriptByte @@ -1832,15 +1838,15 @@ endr ld a, BANK(StdScripts) call GetFarHalfword ret -; 0x97596 +; 97596 -SkipTwoScriptBytes: ; 0x97596 +SkipTwoScriptBytes: ; 97596 call GetScriptByte call GetScriptByte ret -; 0x9759d +; 9759d -ScriptJump: ; 0x9759d +ScriptJump: ; 9759d ld a, b ld [ScriptBank], a ld a, l @@ -1848,9 +1854,9 @@ ScriptJump: ; 0x9759d ld a, h ld [ScriptPos + 1], a ret -; 0x975aa +; 975aa -Script_priorityjump: ; 0x975aa +Script_priorityjump: ; 975aa ; script command 0x8d ; parameters: ; pointer (ScriptPointerLabelParam) @@ -1864,22 +1870,23 @@ Script_priorityjump: ; 0x975aa ld hl, ScriptFlags set 3, [hl] ret -; 0x975c2 +; 975c2 -Script_checktriggers: ; 0x975c2 +Script_checktriggers: ; 975c2 ; script command 0x13 call CheckTriggers - jr z, .asm_975cb ; 0x975c5 $4 + jr z, .no_triggers ld [ScriptVar], a ret -.asm_975cb + +.no_triggers ld a, $ff ld [ScriptVar], a ret -; 0x975d1 +; 975d1 -Script_checkmaptriggers: ; 0x975d1 +Script_checkmaptriggers: ; 975d1 ; script command 0x11 ; parameters: ; map_group (SingleByteParam) @@ -1892,17 +1899,18 @@ Script_checkmaptriggers: ; 0x975d1 call GetMapTrigger ld a, d or e - jr z, .asm_975e5 ; 0x975de $5 + jr z, .no_triggers ld a, [de] ld [ScriptVar], a ret -.asm_975e5 + +.no_triggers ld a, $ff ld [ScriptVar], a ret -; 0x975eb +; 975eb -Script_dotrigger: ; 0x975eb +Script_dotrigger: ; 975eb ; script command 0x14 ; parameters: ; trigger_id (SingleByteParam) @@ -1911,10 +1919,10 @@ Script_dotrigger: ; 0x975eb ld b, a ld a, [MapNumber] ld c, a - jr Unknown_975fd ; 0x975f3 $8 -; 0x975f5 + jr DoTrigger +; 975f5 -Script_domaptrigger: ; 0x975f5 +Script_domaptrigger: ; 975f5 ; script command 0x12 ; parameters: ; map_group (MapGroupParam) @@ -1925,20 +1933,18 @@ Script_domaptrigger: ; 0x975f5 ld b, a call GetScriptByte ld c, a - ; fallthrough - -Unknown_975fd: ; 0x975fd +DoTrigger: ; 975fd call GetMapTrigger ld a, d or e - jr z, .asm_97608 ; 0x97602 $4 + jr z, .no_trigger call GetScriptByte ld [de], a -.asm_97608 +.no_trigger ret -; 0x97609 +; 97609 -Script_copybytetovar: ; 0x97609 +Script_copybytetovar: ; 97609 ; script command 0x19 ; parameters: ; address (RAMAddressParam) @@ -1950,9 +1956,9 @@ Script_copybytetovar: ; 0x97609 ld a, [hl] ld [ScriptVar], a ret -; 0x97616 +; 97616 -Script_copyvartobyte: ; 0x97616 +Script_copyvartobyte: ; 97616 ; script command 0x1a ; parameters: ; address (RAMAddressParam) @@ -1964,9 +1970,9 @@ Script_copyvartobyte: ; 0x97616 ld a, [ScriptVar] ld [hl], a ret -; 0x97623 +; 97623 -Script_loadvar: ; 0x97623 +Script_loadvar: ; 97623 ; script command 0x1b ; parameters: ; address (RAMAddressParam) @@ -1979,9 +1985,9 @@ Script_loadvar: ; 0x97623 call GetScriptByte ld [hl], a ret -; 0x97630 +; 97630 -Script_writebyte: ; 0x97630 +Script_writebyte: ; 97630 ; script command 0x15 ; parameters: ; value (SingleByteParam) @@ -1989,9 +1995,9 @@ Script_writebyte: ; 0x97630 call GetScriptByte ld [ScriptVar], a ret -; 0x97637 +; 97637 -Script_addvar: ; 0x97637 +Script_addvar: ; 97637 ; script command 0x16 ; parameters: ; value (SingleByteParam) @@ -2001,9 +2007,9 @@ Script_addvar: ; 0x97637 add [hl] ld [hl], a ret -; 0x97640 +; 97640 -Script_random: ; 0x97640 +Script_random: ; 97640 ; script command 0x17 ; parameters: ; input (SingleByteParam) @@ -2012,28 +2018,31 @@ Script_random: ; 0x97640 ld [ScriptVar], a and a ret z + ld c, a - call Function97673 + call .Divide256byC and a - jr z, .asm_9765f ; 0x9764d $10 + jr z, .no_restriction ; 256 % b == 0 ld b, a xor a sub b ld b, a -.asm_97653 +.loop push bc call Random pop bc - ld a, [$ffe1] + ld a, [hRandomAdd] cp b - jr nc, .asm_97653 ; 0x9765b $f6 - jr .asm_97666 ; 0x9765d $7 -.asm_9765f + jr nc, .loop + jr .finish + +.no_restriction push bc call Random pop bc - ld a, [$ffe1] -.asm_97666 + ld a, [hRandomAdd] + +.finish push af ld a, [ScriptVar] ld c, a @@ -2041,22 +2050,22 @@ Script_random: ; 0x97640 call SimpleDivide ld [ScriptVar], a ret -; 0x97673 +; 97673 -Function97673: ; 0x97673 +.Divide256byC: ; 97673 xor a ld b, a sub c -.asm_97676 +.mod_loop inc b sub c - jr nc, .asm_97676 ; 0x97678 $fc + jr nc, .mod_loop dec b add c ret -; 0x9767d +; 9767d -Script_checkcode: ; 0x9767d +Script_checkcode: ; 9767d ; script command 0x1c ; parameters: ; variable_id (SingleByteParam) @@ -2066,9 +2075,9 @@ Script_checkcode: ; 0x9767d ld a, [de] ld [ScriptVar], a ret -; 0x97688 +; 97688 -Script_writevarcode: ; 0x97688 +Script_writevarcode: ; 97688 ; script command 0x1d ; parameters: ; variable_id (SingleByteParam) @@ -2078,9 +2087,9 @@ Script_writevarcode: ; 0x97688 ld a, [ScriptVar] ld [de], a ret -; 0x97693 +; 97693 -Script_writecode: ; 0x97693 +Script_writecode: ; 97693 ; script command 0x1e ; parameters: ; variable_id (SingleByteParam) @@ -2091,27 +2100,27 @@ Script_writecode: ; 0x97693 call GetScriptByte ld [de], a ret -; 0x9769e +; 9769e -GetVarAction: ; 0x9769e +GetVarAction: ; 9769e ld c, a callba _GetVarAction ret -; 0x976a6 +; 976a6 -Script_checkver: ; 0x976a6 +Script_checkver: ; 976a6 ; script command 0x18 ld a, [Version] ld [ScriptVar], a ret -; 0x976ad +; 976ad Version: ; 976ad db VERSION ; 976ae -Script_pokenamemem: ; 0x976ae +Script_pokenamemem: ; 976ae ; script command 0x40 ; parameters: ; pokemon (PokemonParam); leave $0 to draw from script var @@ -2119,14 +2128,14 @@ Script_pokenamemem: ; 0x976ae call GetScriptByte and a - jr nz, .gotit ; 0x976b2 $3 + jr nz, .gotit ld a, [ScriptVar] .gotit ld [wd265], a call GetPokemonName ld de, StringBuffer1 -ConvertMemToText: ; 0x976c0 +ConvertMemToText: ; 976c0 call GetScriptByte cp 3 jr c, .ok @@ -2139,26 +2148,26 @@ CopyConvertedText: ; 976c8 call AddNTimes call CopyName2 ret -; 0x976d5 +; 976d5 -Script_itemtotext: ; 0x976d5 +Script_itemtotext: ; 976d5 ; script command 0x41 ; parameters: -; item (ItemLabelByte) +; item (ItemLabelByte); use 0 to draw from ScriptVar ; memory (SingleByteParam) call GetScriptByte and a - jr nz, .ok ; 0x976d9 $3 + jr nz, .ok ld a, [ScriptVar] .ok ld [wd265], a call GetItemName ld de, StringBuffer1 - jr ConvertMemToText ; 0x976e7 $d7 -; 0x976e9 + jr ConvertMemToText +; 976e9 -Script_mapnametotext: ; 0x976e9 +Script_mapnametotext: ; 976e9 ; script command 0x42 ; parameters: ; memory (SingleByteParam) @@ -2169,24 +2178,24 @@ Script_mapnametotext: ; 0x976e9 ld c, a call GetWorldMapLocation -ConvertLandmarkToText: ; 0x976f4 +ConvertLandmarkToText: ; 976f4 ld e, a callba GetLandmarkName ld de, StringBuffer1 jp ConvertMemToText -; 0x97701 +; 97701 -Script_displaylocation: ; 0x97701 +Script_displaylocation: ; 97701 ; script command 0xa5 ; parameters: ; id (SingleByteParam) ; memory (SingleByteParam) call GetScriptByte - jr ConvertLandmarkToText ; 0x97704 $ee -; 0x97706 + jr ConvertLandmarkToText +; 97706 -Script_trainertotext: ; 0x97706 +Script_trainertotext: ; 97706 ; script command 0x43 ; parameters: ; trainer_id (TrainerGroupParam) @@ -2198,10 +2207,10 @@ Script_trainertotext: ; 0x97706 call GetScriptByte ld b, a callba GetTrainerName - jr ConvertMemToText ; 0x97714 $aa -; 0x97716 + jr ConvertMemToText +; 97716 -Script_name: ; 0x97716 +Script_name: ; 97716 ; script command 0xa7 ; parameters: ; type (SingleByteParam) @@ -2211,15 +2220,15 @@ Script_name: ; 0x97716 call GetScriptByte ld [wNamedObjectTypeBuffer], a -ContinueToGetName: ; 0x9771c +ContinueToGetName: ; 9771c call GetScriptByte ld [CurSpecies], a call GetName ld de, StringBuffer1 jp ConvertMemToText -; 0x9772b +; 9772b -Script_trainerclassname: ; 0x9772b +Script_trainerclassname: ; 9772b ; script command 0xa6 ; parameters: ; id (SingleByteParam) @@ -2227,10 +2236,10 @@ Script_trainerclassname: ; 0x9772b ld a, TRAINER_NAME ld [wNamedObjectTypeBuffer], a - jr ContinueToGetName ; 0x97730 $ea -; 0x97732 + jr ContinueToGetName +; 97732 -Script_readmoney: ; 0x97732 +Script_readmoney: ; 97732 ; script command 0x3d ; parameters: ; account (SingleByteParam) @@ -2243,9 +2252,9 @@ Script_readmoney: ; 0x97732 call PrintNum ld de, StringBuffer1 jp ConvertMemToText -; 0x97747 +; 97747 -Script_readcoins: ; 0x97747 +Script_readcoins: ; 97747 ; script command 0x3e ; parameters: ; memory (SingleByteParam) @@ -2257,9 +2266,9 @@ Script_readcoins: ; 0x97747 call PrintNum ld de, StringBuffer1 jp ConvertMemToText -; 0x9775c +; 9775c -Script_RAM2MEM: ; 0x9775c +Script_RAM2MEM: ; 9775c ; script command 0x3f ; parameters: ; memory (SingleByteParam) @@ -2271,17 +2280,17 @@ Script_RAM2MEM: ; 0x9775c call PrintNum ld de, StringBuffer1 jp ConvertMemToText -; 0x97771 +; 97771 -ResetStringBuffer1: ; 0x97771 +ResetStringBuffer1: ; 97771 ld hl, StringBuffer1 ld bc, NAME_LENGTH ld a, "@" call ByteFill ret -; 0x9777d +; 9777d -Script_stringtotext: ; 0x9777d +Script_stringtotext: ; 9777d ; script command 0x44 ; parameters: ; text_pointer (EncodedTextLabelParam) @@ -2296,9 +2305,9 @@ Script_stringtotext: ; 0x9777d rst FarCall ld de, StringBuffer2 jp ConvertMemToText -; 0x97792 +; 97792 -Script_givepokeitem: ; 0x97792 +Script_givepokeitem: ; 97792 ; script command 0x2f ; parameters: ; pointer (PointerParamToItemAndLetter) @@ -2319,9 +2328,9 @@ Script_givepokeitem: ; 0x97792 pop bc callba GivePokeItem ret -; 0x977b7 +; 977b7 -Script_checkpokeitem: ; 0x977b7 +Script_checkpokeitem: ; 977b7 ; script command 0x30 ; parameters: ; pointer (PointerParamToItemAndLetter) @@ -2332,11 +2341,11 @@ Script_checkpokeitem: ; 0x977b7 ld d, a ld a, [ScriptBank] ld b, a - callba Function44654 + callba CheckPokeItem ret -; 0x977ca +; 977ca -Script_giveitem: ; 0x977ca +Script_giveitem: ; 977ca ; script command 0x1f ; parameters: ; item (ItemLabelByte) @@ -2344,7 +2353,7 @@ Script_giveitem: ; 0x977ca call GetScriptByte cp ITEM_FROM_MEM - jr nz, .ok ; 0x977cf $3 + jr nz, .ok ld a, [ScriptVar] .ok ld [CurItem], a @@ -2352,7 +2361,7 @@ Script_giveitem: ; 0x977ca ld [wItemQuantityChangeBuffer], a ld hl, NumItems call ReceiveItem - jr nc, .full ; 0x977e3 $6 + jr nc, .full ld a, $1 ld [ScriptVar], a ret @@ -2360,9 +2369,9 @@ Script_giveitem: ; 0x977ca xor a ld [ScriptVar], a ret -; 0x977f0 +; 977f0 -Script_takeitem: ; 0x977f0 +Script_takeitem: ; 977f0 ; script command 0x20 ; parameters: ; item (ItemLabelByte) @@ -2382,9 +2391,9 @@ Script_takeitem: ; 0x977f0 ld a, $1 ld [ScriptVar], a ret -; 0x97812 +; 97812 -Script_checkitem: ; 0x97812 +Script_checkitem: ; 97812 ; script command 0x21 ; parameters: ; item (ItemLabelByte) @@ -2399,9 +2408,9 @@ Script_checkitem: ; 0x97812 ld a, 1 ld [ScriptVar], a ret -; 0x97829 +; 97829 -Script_givemoney: ; 0x97829 +Script_givemoney: ; 97829 ; script command 0x22 ; parameters: ; account (SingleByteParam) @@ -2411,9 +2420,9 @@ Script_givemoney: ; 0x97829 call LoadMoneyAmountToMem callba GiveMoney ret -; 0x97836 +; 97836 -Script_takemoney: ; 0x97836 +Script_takemoney: ; 97836 ; script command 0x23 ; parameters: ; account (SingleByteParam) @@ -2423,9 +2432,9 @@ Script_takemoney: ; 0x97836 call LoadMoneyAmountToMem callba TakeMoney ret -; 0x97843 +; 97843 -Script_checkmoney: ; 0x97843 +Script_checkmoney: ; 97843 ; script command 0x24 ; parameters: ; account (SingleByteParam) @@ -2434,9 +2443,9 @@ Script_checkmoney: ; 0x97843 call GetMoneyAccount call LoadMoneyAmountToMem callba CompareMoney -; 0x9784f +; 9784f -CompareMoneyAction: ; 0x9784f +CompareMoneyAction: ; 9784f jr c, .two jr z, .one ld a, 0 @@ -2449,18 +2458,18 @@ CompareMoneyAction: ; 0x9784f .done ld [ScriptVar], a ret -; 0x97861 +; 97861 -GetMoneyAccount: ; 0x97861 +GetMoneyAccount: ; 97861 call GetScriptByte and a ld de, Money ret z ld de, wMomsMoney ret -; 0x9786d +; 9786d -LoadMoneyAmountToMem: ; 0x9786d +LoadMoneyAmountToMem: ; 9786d ld bc, hMoneyTemp push bc call GetScriptByte @@ -2473,9 +2482,9 @@ LoadMoneyAmountToMem: ; 0x9786d ld [bc], a pop bc ret -; 0x97881 +; 97881 -Script_givecoins: ; 0x97881 +Script_givecoins: ; 97881 ; script command 0x25 ; parameters: ; coins (CoinByteParam) @@ -2483,9 +2492,9 @@ Script_givecoins: ; 0x97881 call LoadCoinAmountToMem callba GiveCoins ret -; 0x9788b +; 9788b -Script_takecoins: ; 0x9788b +Script_takecoins: ; 9788b ; script command 0x26 ; parameters: ; coins (CoinByteParam) @@ -2493,9 +2502,9 @@ Script_takecoins: ; 0x9788b call LoadCoinAmountToMem callba TakeCoins ret -; 0x97895 +; 97895 -Script_checkcoins: ; 0x97895 +Script_checkcoins: ; 97895 ; script command 0x27 ; parameters: ; coins (CoinByteParam) @@ -2512,9 +2521,9 @@ LoadCoinAmountToMem: ; 978a0 ld [hMoneyTemp], a ld bc, hMoneyTemp ret -; 0x978ae +; 978ae -Script_checktime: ; 0x978ae +Script_checktime: ; 978ae ; script command 0x2b ; parameters: ; time (SingleByteParam) @@ -2528,9 +2537,9 @@ Script_checktime: ; 0x978ae ld a, $1 ld [ScriptVar], a ret -; 0x978c3 +; 978c3 -Script_checkpoke: ; 0x978c3 +Script_checkpoke: ; 978c3 ; script command 0x2c ; parameters: ; pkmn (PokemonParam) @@ -2545,9 +2554,9 @@ Script_checkpoke: ; 0x978c3 ld a, 1 ld [ScriptVar], a ret -; 0x978da +; 978da -Script_addcellnum: ; 0x978da +Script_addcellnum: ; 978da ; script command 0x28 ; parameters: ; person (SingleByteParam) @@ -2561,9 +2570,9 @@ Script_addcellnum: ; 0x978da ld a, $1 ld [ScriptVar], a ret -; 0x978ef +; 978ef -Script_delcellnum: ; 0x978ef +Script_delcellnum: ; 978ef ; script command 0x29 ; parameters: ; person (SingleByteParam) @@ -2577,9 +2586,9 @@ Script_delcellnum: ; 0x978ef ld a, $1 ld [ScriptVar], a ret -; 0x97904 +; 97904 -Script_checkcellnum: ; 0x97904 +Script_checkcellnum: ; 97904 ; script command 0x2a ; parameters: ; person (SingleByteParam) @@ -2594,9 +2603,9 @@ Script_checkcellnum: ; 0x97904 ld a, $1 ld [ScriptVar], a ret -; 0x97919 +; 97919 -Script_specialphonecall: ; 0x97919 +Script_specialphonecall: ; 97919 ; script command 0x9c ; parameters: ; call_id (MultiByteParam) @@ -2606,9 +2615,9 @@ Script_specialphonecall: ; 0x97919 call GetScriptByte ld [wSpecialPhoneCallID + 1], a ret -; 0x97926 +; 97926 -Script_checkphonecall: ; 0x97926 +Script_checkphonecall: ; 97926 ; script command 0x9d ; returns false if no special phone call is stored @@ -2619,9 +2628,9 @@ Script_checkphonecall: ; 0x97926 .ok ld [ScriptVar], a ret -; 0x97932 +; 97932 -Script_givepoke: ; 0x97932 +Script_givepoke: ; 97932 ; script command 0x2d ; parameters: ; pokemon (PokemonParam) @@ -2654,9 +2663,9 @@ Script_givepoke: ; 0x97932 ld a, b ld [ScriptVar], a ret -; 0x97968 +; 97968 -Script_giveegg: ; 0x97968 +Script_giveegg: ; 97968 ; script command 0x2e ; parameters: ; pkmn (PokemonParam) @@ -2675,9 +2684,9 @@ Script_giveegg: ; 0x97968 ld a, 2 ld [ScriptVar], a ret -; 0x97988 +; 97988 -Script_setevent: ; 0x97988 +Script_setevent: ; 97988 ; script command 0x33 ; parameters: ; bit_number (MultiByteParam) @@ -2689,9 +2698,9 @@ Script_setevent: ; 0x97988 ld b, SET_FLAG call EventFlagAction ret -; 0x97996 +; 97996 -Script_clearevent: ; 0x97996 +Script_clearevent: ; 97996 ; script command 0x32 ; parameters: ; bit_number (MultiByteParam) @@ -2703,9 +2712,9 @@ Script_clearevent: ; 0x97996 ld b, RESET_FLAG call EventFlagAction ret -; 0x979a4 +; 979a4 -Script_checkevent: ; 0x979a4 +Script_checkevent: ; 979a4 ; script command 0x31 ; parameters: ; bit_number (MultiByteParam) @@ -2718,14 +2727,14 @@ Script_checkevent: ; 0x979a4 call EventFlagAction ld a, c and a - jr z, .false ; 0x979b3 $2 + jr z, .false ld a, 1 .false ld [ScriptVar], a ret -; 0x979bb +; 979bb -Script_setflag: ; 0x979bb +Script_setflag: ; 979bb ; script command 0x36 ; parameters: ; bit_number (MultiByteParam) @@ -2737,9 +2746,9 @@ Script_setflag: ; 0x979bb ld b, 1 ; set call _EngineFlagAction ret -; 0x979c9 +; 979c9 -Script_clearflag: ; 0x979c9 +Script_clearflag: ; 979c9 ; script command 0x35 ; parameters: ; bit_number (MultiByteParam) @@ -2751,9 +2760,9 @@ Script_clearflag: ; 0x979c9 ld b, 0 ; clear call _EngineFlagAction ret -; 0x979d7 +; 979d7 -Script_checkflag: ; 0x979d7 +Script_checkflag: ; 979d7 ; script command 0x34 ; parameters: ; bit_number (MultiByteParam) @@ -2766,35 +2775,35 @@ Script_checkflag: ; 0x979d7 call _EngineFlagAction ld a, c and a - jr z, .false ; 0x979e6 $2 + jr z, .false ld a, 1 .false ld [ScriptVar], a ret -; 0x979ee +; 979ee -_EngineFlagAction: ; 0x979ee +_EngineFlagAction: ; 979ee callba EngineFlagAction ret -; 0x979f5 +; 979f5 -Script_wildoff: ; 0x979f5 +Script_wildoff: ; 979f5 ; script command 0x38 ld hl, StatusFlags set 5, [hl] ret -; 0x979fb +; 979fb -Script_wildon: ; 0x979fb +Script_wildon: ; 979fb ; script command 0x37 ld hl, StatusFlags res 5, [hl] ret -; 0x97a01 +; 97a01 -Script_xycompare: ; 0x97a01 +Script_xycompare: ; 97a01 ; script command 0x39 ; parameters: ; pointer (MultiByteParam) @@ -2804,9 +2813,9 @@ Script_xycompare: ; 0x97a01 call GetScriptByte ld [wd454], a ret -; 0x97a0e +; 97a0e -Script_warpfacing: ; 0x97a0e +Script_warpfacing: ; 97a0e ; script command 0xa3 ; parameters: ; facing (SingleByteParam) @@ -2824,7 +2833,7 @@ Script_warpfacing: ; 0x97a0e ld [wPlayerSpriteSetupFlags], a ; fall through -Script_warp: ; 0x97a1d +Script_warp: ; 97a1d ; script command 0x3c ; parameters: ; map_group (MapGroupParam) @@ -2835,7 +2844,7 @@ Script_warp: ; 0x97a1d ; This seems to be some sort of error handling case. call GetScriptByte and a - jr z, .not_ok ; 0x97a21 $27 + jr z, .not_ok ld [MapGroup], a call GetScriptByte ld [MapNumber], a @@ -2864,9 +2873,9 @@ Script_warp: ; 0x97a1d call LoadMapStatus call StopScript ret -; 0x97a65 +; 97a65 -Script_warpmod: ; 0x97a65 +Script_warpmod: ; 97a65 ; script command 0x3a ; parameters: ; warp_id (SingleByteParam) @@ -2880,9 +2889,9 @@ Script_warpmod: ; 0x97a65 call GetScriptByte ld [BackupMapNumber], a ret -; 0x97a78 +; 97a78 -Script_blackoutmod: ; 0x97a78 +Script_blackoutmod: ; 97a78 ; script command 0x3b ; parameters: ; map_group (MapGroupParam) @@ -2893,17 +2902,17 @@ Script_blackoutmod: ; 0x97a78 call GetScriptByte ld [wLastSpawnMapNumber], a ret -; 0x97a85 +; 97a85 -Script_reloadmapmusic: ; 0x97a85 +Script_reloadmapmusic: ; 97a85 ; script command 0x83 ld a, 1 ld [wc2c1], a ret -; 0x97a8b +; 97a8b -Script_writecmdqueue: ; 0x97a8b +Script_writecmdqueue: ; 97a8b ; script command 0x7d ; parameters: ; queue_pointer (MultiByteParam) @@ -2914,11 +2923,11 @@ Script_writecmdqueue: ; 0x97a8b ld d, a ld a, [ScriptBank] ld b, a - callba Function97e31 + callba WriteCmdQueue ; no need to farcall ret -; 0x97a9e +; 97a9e -Script_delcmdqueue: ; 0x97a9e +Script_delcmdqueue: ; 97a9e ; script command 0x7e ; parameters: ; byte (SingleByteParam) @@ -2927,14 +2936,14 @@ Script_delcmdqueue: ; 0x97a9e ld [ScriptVar], a call GetScriptByte ld b, a - callba Function97e5c + callba DelCmdQueue ; no need to farcall ret c ld a, 1 ld [ScriptVar], a ret -; 0x97ab3 +; 97ab3 -Script_changemap: ; 0x97ab3 +Script_changemap: ; 97ab3 ; script command 0x79 ; parameters: ; map_data_pointer (MapDataPointerParam) @@ -2948,9 +2957,9 @@ Script_changemap: ; 0x97ab3 call ChangeMap call BufferScreen ret -; 0x97acc +; 97acc -Script_changeblock: ; 0x97acc +Script_changeblock: ; 97acc ; script command 0x7a ; parameters: ; x (SingleByteParam) @@ -2968,35 +2977,35 @@ Script_changeblock: ; 0x97acc ld [hl], a call BufferScreen ret -; 0x97ae3 +; 97ae3 -Script_reloadmappart:: ; 0x97ae3 +Script_reloadmappart:: ; 97ae3 ; script command 0x7c xor a ld [hBGMapMode], a call OverworldTextModeSwitch - call Function2914 - callba Function104061 + call GetMovementPermissions + callba ReloadMapPart call UpdateSprites ret -; 0x97af6 +; 97af6 -Script_warpcheck: ; 0x97af6 +Script_warpcheck: ; 97af6 ; script command 0x8e call WarpCheck ret nc - callba SetAll_ScriptFlags3 + callba EnableEvents ret -; 0x97b01 +; 97b01 -Function97b01: ; 0x97b01 - callba SetAll_ScriptFlags3 +Script_enableevents: ; unreferenced + callba EnableEvents ret -; 0x97b08 +; 97b08 -Script_newloadmap: ; 0x97b08 +Script_newloadmap: ; 97b08 ; script command 0x8a ; parameters: ; which_method (SingleByteParam) @@ -3007,23 +3016,23 @@ Script_newloadmap: ; 0x97b08 call LoadMapStatus call StopScript ret -; 0x97b16 +; 97b16 -Script_reloadandreturn: ; 0x97b16 +Script_reloadandreturn: ; 97b16 ; script command 0x92 call Script_newloadmap jp Script_end -; 0x97b1c +; 97b1c -Script_loadfont: ; 0x97b1c +Script_loadfont: ; 97b1c ; script command 0x47 call LoadFont ret -; 0x97b20 +; 97b20 -Script_refreshscreen: ; 0x97b20 +Script_refreshscreen: ; 97b20 ; script command 0x48 ; parameters: ; dummy (SingleByteParam) @@ -3031,9 +3040,9 @@ Script_refreshscreen: ; 0x97b20 call ResetWindow call GetScriptByte ret -; 0x97b27 +; 97b27 -Script_loadbytec1ce: ; 0x97b27 +Script_loadbytec2cf: ; 97b27 ; script command 0x4a ; parameters: ; byte (SingleByteParam) @@ -3041,23 +3050,23 @@ Script_loadbytec1ce: ; 0x97b27 call GetScriptByte ld [wc2cf], a ret -; 0x97b2e +; 97b2e LoadMoveSpritesScript: ; 97b2e loadmovesprites ; 97b2f -Script_loadmovesprites: ; 0x97b2f +Script_loadmovesprites: ; 97b2f ; script command 0x49 call Function2e20 call LoadMoveSprites ret -; 0x97b36 +; 97b36 -Script_passtoengine: ; 0x97b36 +Script_passtoengine: ; 97b36 ; script command 0x89 ; parameters: ; data_pointer (PointerLabelBeforeBank) @@ -3071,52 +3080,52 @@ Script_passtoengine: ; 0x97b36 pop af call StartAutoInput ret -; 0x97b47 +; 97b47 -Script_pause: ; 0x97b47 +Script_pause: ; 97b47 ; script command 0x8b ; parameters: ; length (DecimalParam) call GetScriptByte and a - jr z, .loop ; 0x97b4b $3 + jr z, .loop ld [ScriptDelay], a .loop ld c, 2 call DelayFrames ld hl, ScriptDelay dec [hl] - jr nz, .loop ; 0x97b59 $f5 + jr nz, .loop ret -; 0x97b5c +; 97b5c -Script_deactivatefacing: ; 0x97b5c +Script_deactivatefacing: ; 97b5c ; script command 0x8c ; parameters: ; time (SingleByteParam) call GetScriptByte and a - jr z, .no_time ; 0x97b60 $3 + jr z, .no_time ld [ScriptDelay], a .no_time ld a, SCRIPT_WAIT ld [ScriptMode], a call StopScript ret -; 0x97b6e +; 97b6e -Script_ptpriorityjump: ; 0x97b6e +Script_ptpriorityjump: ; 97b6e ; script command 0x8f ; parameters: ; pointer (ScriptPointerLabelParam) call StopScript - jp Script_2jump -; 0x97b74 + jp Script_jump +; 97b74 -Script_end: ; 0x97b74 +Script_end: ; 97b74 ; script command 0x91 call ExitScriptSubroutine @@ -3132,9 +3141,9 @@ Script_end: ; 0x97b74 res 0, [hl] call StopScript ret -; 0x97b8c +; 97b8c -Script_return: ; 0x97b8c +Script_return: ; 97b8c ; script command 0x90 call ExitScriptSubroutine @@ -3144,19 +3153,19 @@ Script_return: ; 0x97b8c res 0, [hl] call StopScript ret -; 0x97b9a +; 97b9a -ExitScriptSubroutine: ; 0x97b9a +ExitScriptSubroutine: ; 97b9a ; Return carry if there's no parent to return to. - ld hl, wd43c + ld hl, wScriptStackSize ld a, [hl] and a - jr z, .done ; 0x97b9f $1d + jr z, .done dec [hl] ld e, [hl] ld d, $0 - ld hl, wd43d + ld hl, wScriptStackBA1 rept 3 add hl,de endr @@ -3175,13 +3184,13 @@ endr .done scf ret -; 0x97bc0 +; 97bc0 -Script_resetfuncs: ; 0x97bc0 +Script_resetfuncs: ; 97bc0 ; script command 0x93 xor a - ld [wd43c], a + ld [wScriptStackSize], a ld [ScriptRunning], a ld a, SCRIPT_OFF ld [ScriptMode], a @@ -3189,9 +3198,9 @@ Script_resetfuncs: ; 0x97bc0 res 0, [hl] call StopScript ret -; 0x97bd5 +; 97bd5 -Script_halloffame: ; 0x97bd5 +Script_halloffame: ; 97bd5 ; script command 0xa1 ld hl, GameTimerPause @@ -3202,9 +3211,9 @@ Script_halloffame: ; 0x97bd5 ld hl, GameTimerPause set 0, [hl] jr DisplayCredits -; 0x97bf3 +; 97bf3 -Script_credits: ; 0x97bf3 +Script_credits: ; 97bf3 ; script command 0xa2 callba RedCredits @@ -3216,9 +3225,9 @@ DisplayCredits: call LoadMapStatus call StopScript ret -; 0x97c051 +; 97c051 -Script_wait: ; 0x97c05 +Script_wait: ; 97c05 ; script command 0xa8 ; parameters: ; unknown (SingleByteParam) @@ -3231,22 +3240,22 @@ Script_wait: ; 0x97c05 call DelayFrames pop af dec a - jr nz, .loop ; 0x97c11 $f6 + jr nz, .loop pop bc ret -; 0x97c15 +; 97c15 -Script_unknown0xa9: ; 0x97c15 +Script_check_save: ; 97c15 ; script command 0xa9 - callba Function4cffe + callba CheckSave ld a, c ld [ScriptVar], a ret -; 0x97c20 +; 97c20 -Function97c20: ; 97c20 unreferenced +; 97c20 unreferenced ld a, [.byte] ld [ScriptVar], a ret diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm index e73f397a5..916e48b3c 100755 --- a/engine/selectmenu.asm +++ b/engine/selectmenu.asm @@ -158,7 +158,7 @@ UseRegisteredItem: ; 133c3 call ResetWindow call FadeToMenu call DoItemEffect - call Function2b3c + call ReturnToCallingMenu call LoadMoveSprites and a ret diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm index 075b1ba78..afd038588 100755 --- a/engine/slot_machine.asm +++ b/engine/slot_machine.asm @@ -26,11 +26,11 @@ Function926f7: ; 926f7 (24:66f7) call PlayMusic call DelayFrame call DisableLCD - ld hl, VBGMap0 tile $00 + hlbgcoord 0, 0 lb bc, 4, 0 - ld a, $7f + ld a, " " call ByteFill - ld b, $5 + ld b, SCGB_05 call GetSGBLayout callab Function8cf53 ld hl, wc6d0 @@ -1037,9 +1037,9 @@ Function92d20: ; 92d20 call Function92fc0 push bc push af - ld de, $6068 - ld a, $6 - call Function3b2a + depixel 12, 13 + ld a, SPRITE_ANIM_INDEX_06 + call _InitSpriteAnimStruct ld hl, $e add hl, bc pop af @@ -1096,9 +1096,9 @@ Function92d7e: ; 92d7e add hl, bc ld [hl], $0 push bc - ld de, $6000 - ld a, $7 - call Function3b2a + depixel 12, 0 + ld a, SPRITE_ANIM_INDEX_07 + call _InitSpriteAnimStruct pop bc xor a ld [wcf64], a @@ -2063,9 +2063,9 @@ Function932fc: ; 932fc (24:72fc) add hl, bc dec [hl] push bc - ld de, $606c - ld a, $8 - call Function3b2a + depixel 12, 13, 0, 4 + ld a, SPRITE_ANIM_INDEX_08 + call _InitSpriteAnimStruct pop bc ret ; 93316 (24:7316) diff --git a/engine/specials.asm b/engine/specials.asm index 21d391faa..09edbb263 100644 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -101,14 +101,14 @@ SpecialsPointers:: ; c029 add_special SpecialCheckPokerus add_special Special_DisplayCoinCaseBalance add_special Special_DisplayMoneyAndCoinBalance - add_special Function24ae8 + add_special PlaceMoneyTopRightOW add_special Special_CheckForLuckyNumberWinners add_special Special_CheckLuckyNumberShowFlag add_special Special_ResetLuckyNumberShowFlag add_special Special_PrintTodaysLuckyNumber add_special Special_SelectApricornForKurt add_special SpecialNameRater - add_special Functionc2da + add_special Special_DisplayLinkRecord add_special GetFirstPokemonHappiness add_special CheckFirstMonIsEgg add_special RandomPhoneRareWildMon @@ -120,15 +120,17 @@ SpecialsPointers:: ; c029 add_special Special_YoungerHaircutBrother add_special Special_OlderHaircutBrother add_special Special_DaisyMassage - add_special Functionc472 + add_special PlayCurMonCry add_special ProfOaksPCBoot add_special SpecialGameboyCheck add_special SpecialTrainerHouse add_special PhotoStudio add_special InitRoamMons - add_special Functionc48f - add_special Functionc49f - add_special Functionc4ac + add_special Special_RotatePalettesRightMusic + add_special Diploma + add_special PrintDiploma + + ; Crystal add_special Function11ac3e add_special Function11b444 add_special Function11b5e8 @@ -151,7 +153,7 @@ SpecialsPointers:: ; c029 add_special Function101220 add_special Function101225 add_special Function101231 - add_special Function4925b + add_special Special_MoveTutor add_special SpecialOmanyteChamber add_special Function11c1ab add_special BattleTowerAction @@ -160,11 +162,11 @@ SpecialsPointers:: ; c029 add_special Function17d2b6 add_special Function17d2ce add_special Function17f53d - add_special Function103612 + add_special AskMobileOrCable add_special SpecialHoOhChamber add_special Function102142 add_special Special_CelebiShrineEvent - add_special Function49bf9 + add_special CheckCaughtCelebi add_special SpecialPokeSeer add_special SpecialBuenasPassword add_special SpecialBuenaPrize @@ -172,7 +174,7 @@ SpecialsPointers:: ; c029 add_special Special_SampleKenjiBreakCountdown add_special SpecialBeastsCheck add_special SpecialMonCheck - add_special Functionc225 + add_special Special_SetPlayerPalette add_special Function170bd2 add_special Mobile_SelectThreeMons add_special Function1037eb @@ -180,12 +182,12 @@ SpecialsPointers:: ; c029 add_special Mobile_HealParty add_special RefreshSprites add_special Function1037c2 - add_special Function10630f + add_special Mobile_DummyReturnFalse add_special Function103780 add_special Function10387b - add_special Function4ae12 + add_special AskRememberPassword add_special LoadMapPalettes - add_special Function4a927 + add_special FindItemInPCOrBag add_special Special_InitialSetDSTFlag add_special Special_InitialClearDSTFlag add_special SpecialNone @@ -195,10 +197,10 @@ SpecialNone: ; c224 ret ; c225 -Functionc225: ; c225 +Special_SetPlayerPalette: ; c225 ld a, [ScriptVar] ld d, a - callba Function57e2 + callba SetPlayerPalette ret ; c230 @@ -213,8 +215,8 @@ Special_GameCornerPrizeMonCheckDex: ; c230 call FadeToMenu ld a, [ScriptVar] ld [wd265], a - callba Functionfb877 - call Function2b4d + callba NewPokedexEntry + call ExitAllMenus ret ; c252 @@ -285,29 +287,29 @@ SpecialNameRater: ; c2b9 Special_TownMap: ; c2c0 call FadeToMenu - callba Function9191c - call Function2b4d + callba _TownMap + call ExitAllMenus ret ; c2cd Special_UnownPrinter: ; c2cd call FadeToMenu - callba Function16be4 - call Function2b4d + callba UnownPrinter + call ExitAllMenus ret ; c2da -Functionc2da: ; c2da +Special_DisplayLinkRecord: ; c2da call FadeToMenu - callba Function3f836 - call Function2b4d + callba DisplayLinkRecord + call ExitAllMenus ret ; c2e7 Special_KrissHousePC: ; c2e7 xor a ld [ScriptVar], a - callba Function156d9 + callba _KrissHousePC ld a, c ld [ScriptVar], a ret @@ -381,7 +383,7 @@ Special_UnownPuzzle: ; c360 callba Functione1190 ld a, [wd0ec] ld [ScriptVar], a - call Function2b4d + call ExitAllMenus ret ; c373 @@ -423,7 +425,7 @@ Special_StartGameCornerGame: ; c39a ld l, a pop af rst FarCall - call Function2b4d + call ExitAllMenus ret ; c3ae @@ -586,7 +588,7 @@ SpecialSnorlaxAwake: ; 0xc43d db $ff -Functionc472: ; c472 +PlayCurMonCry: ; c472 ld a, [CurPartySpecies] jp PlayCry ; c478 @@ -614,7 +616,7 @@ SpecialGameboyCheck: ; c478 ret -Functionc48f: ; c48f +Special_RotatePalettesRightMusic: ; c48f ld a, MUSIC_NONE % $100 ld [MusicFadeIDLo], a ld a, MUSIC_NONE / $100 @@ -624,17 +626,17 @@ Functionc48f: ; c48f ret ; c49f -Functionc49f: ; c49f +Diploma: ; c49f call FadeToMenu - callba Function1dd702 - call Function2b4d + callba _Diploma + call ExitAllMenus ret ; c4ac -Functionc4ac: ; c4ac +PrintDiploma: ; c4ac call FadeToMenu - callba Function84688 - call Function2b4d + callba _PrintDiploma + call ExitAllMenus ret ; c4b9 diff --git a/engine/sprites.asm b/engine/sprites.asm index 517428007..f12ed1de8 100755 --- a/engine/sprites.asm +++ b/engine/sprites.asm @@ -1,1480 +1,3424 @@ -GetEmote2bpp: ; 1412a - ld a, $1 - ld [rVBK], a - call Get2bpp - xor a - ld [rVBK], a +Function8cf53: ; 8cf53 + ld hl, wc300 + ld bc, wc3c1 - wc300 +.loop + ld [hl], $0 + inc hl + dec bc + ld a, c + or b + jr nz, .loop ret -; 14135 +; 8cf62 -_ReplaceKrisSprite:: ; 14135 - call GetPlayerSprite - ld a, [UsedSprites] - ld [hUsedSpriteIndex], a - ld a, [UsedSprites + 1] - ld [hUsedSpriteTile], a - call Function143c8 +Function8cf62: ; 8cf62 + call Function8cf69 + call DelayFrame ret -; 14146 +; 8cf69 -Function14146: ; 14146 - ld hl, wSpriteFlags - ld a, [hl] +Function8cf69: ; 8cf69 + push hl + push de + push bc push af - res 7, [hl] - set 6, [hl] - call RunCallback_04 - pop af - ld [wSpriteFlags], a - ret -; 14157 -Function14157: ; 14157 - ld hl, wSpriteFlags - ld a, [hl] - push af - set 7, [hl] - res 6, [hl] - call RunCallback_04 + ld a, $0 + ld [wc3b5], a + call Function8cf7a + pop af - ld [wSpriteFlags], a + pop bc + pop de + pop hl ret -; 14168 +; 8cf7a -RefreshSprites:: ; 14168 - call .Refresh - call RunCallback_04 - ret -; 1416f +Function8cf7a: ; 8cf7a + ld hl, wc314 + ld e, 10 ; There are 10 structs here. -.Refresh: ; 1416f - xor a - ld bc, UsedSpritesEnd - UsedSprites - ld hl, UsedSprites - call ByteFill - call GetPlayerSprite - call AddMapSprites - call LoadAndSortSprites - ret -; 14183 - -GetPlayerSprite: ; 14183 -; Get Chris or Kris's sprite. - ld hl, .Chris - ld a, [wPlayerSpriteSetupFlags] - bit 2, a - jr nz, .go - ld a, [PlayerGender] - bit 0, a - jr z, .go - ld hl, .Kris - -.go - ld a, [PlayerState] - ld c, a .loop - ld a, [hli] - cp c - jr z, .good - inc hl - cp $ff + ld a, [hl] + and a + jr z, .next ; This struct is deinitialized. + ld c, l + ld b, h + push hl + push de + call Function8d24b ; Uses a massive jumptable + call Function8d04c + pop de + pop hl + jr c, .done + +.next + ld bc, $10 + add hl, bc + dec e jr nz, .loop -; Any player state not in the array defaults to Chris's sprite. - xor a ; ld a, PLAYER_NORMAL - ld [PlayerState], a - ld a, SPRITE_CHRIS - jr .finish + ld a, [wc3b5] + ld l, a + ld h, Sprites / $0100 -.good - ld a, [hl] +.loop2 ; Clear (Sprites + [wc3b5] --> SpritesEnd) + ld a, l + cp SpritesEnd % $100 + jr nc, .done + xor a + ld [hli], a + jr .loop2 -.finish - ld [UsedSprites + 0], a - ld [PlayerSprite], a - ld [PlayerObjectSprite], a +.done ret +; 8cfa8 -.Chris - db PLAYER_NORMAL, SPRITE_CHRIS - db PLAYER_BIKE, SPRITE_CHRIS_BIKE - db PLAYER_SURF, SPRITE_SURF - db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU - db $ff +Function8cfa8: ; 8cfa8 (23:4fa8) + ld hl, wSpriteAnimationStructs + ld e, 10 -.Kris - db PLAYER_NORMAL, SPRITE_KRIS - db PLAYER_BIKE, SPRITE_KRIS_BIKE - db PLAYER_SURF, SPRITE_SURF - db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU - db $ff -; 141c9 +.loop + ld a, [hl] + and a + jr z, .next + ld c, l + ld b, h + push hl + push de + call Function8d24b ; Uses a massive jumptable + call Function8d04c + pop de + pop hl + jr c, .done +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop -AddMapSprites: ; 141c9 - call GetMapPermission - call CheckOutdoorMap - jr z, .outdoor - call AddIndoorSprites - ret + ld a, [wc3b5] + ld l, a + ld h, (Sprites + $40) / $100 -.outdoor - call AddOutdoorSprites - ret -; 141d9 +.loop2 ; Clear (Sprites + [wc3b5] --> Sprites + $40) + ld a, l + cp (Sprites + $40) % $100 + jr nc, .done + xor a + ld [hli], a + jr .loop2 +.done + ret -AddIndoorSprites: ; 141d9 - ld hl, Map1ObjectSprite - ld a, 1 -.loop +InitSpriteAnimStruct:: ; 8cfd6 +; Find if there's any room in the wc314 array, which is 10x16 + push de push af + ld hl, wc314 + ld e, 10 +.loop ld a, [hl] - call AddSpriteGFX - ld de, OBJECT_LENGTH - add hl, de - pop af - inc a - cp NUM_OBJECTS + and a + jr z, .found + ld bc, $10 + add hl, bc + dec e jr nz, .loop +; We've reached the end. There is no more room here. +; Return carry. + pop af + pop de + scf ret -; 141ee +.found +; Back up the structure address to bc. + ld c, l + ld b, h +; Value [wc3b4] is initially set to -1. Set it to +; the number of objects loaded into this array. + ld hl, wc3b4 + inc [hl] + ld a, [hl] + and a + jr nz, .initialized + inc [hl] -AddOutdoorSprites: ; 141ee - ld a, [MapGroup] - dec a - ld c, a - ld b, 0 - ld hl, OutdoorSprites -rept 2 +.initialized +; Get row a of Unknown_8d1c4, copy the pointer into de + pop af + ld e, a + ld d, 0 + ld hl, Unknown_8d1c4 +rept 3 + add hl, de +endr + ld e, l + ld d, h +; Set hl to the first field (field 0) in the current structure. + ld hl, 0 + add hl, bc +; Load the index. + ld a, [wc3b4] + ld [hli], a +; Copy the table entry to the next two fields. + ld a, [de] + ld [hli], a + inc de + ld a, [de] + ld [hli], a + inc de +; Look up the third field from the table in the wc300 array (10x2). +; Take the value and load it in + ld a, [de] + call LookUpInwSpriteAnimDict + ld [hli], a + pop de +; Set hl to field 4. Kinda pointless, because we're presumably already here. + ld hl, $4 add hl, bc +; Load the original value of de into here. + ld a, e + ld [hli], a + ld a, d + ld [hli], a +; load 0 into the next four fields + xor a +rept 2 + ld [hli], a +endr + xor a +rept 2 + ld [hli], a +endr +; load -1 into the next field + dec a + ld [hli], a +; load 0 into the last five fields + xor a +rept 4 + ld [hli], a endr + ld [hl], a +; back up the address of the first field to wc3b8 + ld a, c + ld [wc3b8], a + ld a, b + ld [wc3b8 + 1], a + ret +; 8d036 + +Function8d036: ; 8d036 +; Clear the index field of the struct in bc. + ld hl, 0 + add hl, bc + ld [hl], $0 + ret +; 8d03d + + +Function8d03d: ; 8d03d (23:503d) +; Clear the index field of every struct in the wc314 array. + ld hl, wc314 + ld bc, $10 + ld e, 10 + xor a +.loop + ld [hl], a + add hl, bc + dec e + jr nz, .loop + ret + + +Function8d04c: ; 8d04c + call Function8d0ec ; init WRAM + call Function8d132 ; read from a memory array + cp -3 + jr z, .done + cp -4 + jr z, .almost + call Function8d1a2 ; read from a pointer table + ld a, [wc3ba] + add [hl] + ld [wc3ba], a + inc hl ld a, [hli] ld h, [hl] ld l, a - ld c, MAX_OUTDOOR_SPRITES -.loop push bc + ld a, [wc3b5] + ld e, a + ld d, Sprites / $100 ld a, [hli] - call AddSpriteGFX - pop bc + ld c, a +.loop + ld a, [wc3bc] + ld b, a + ld a, [wc3be] + add b + ld b, a + ld a, [wc3bf] + add b + ld b, a + call Function8d0be + add b + ld [de], a + inc hl + inc de + ld a, [wc3bb] + ld b, a + ld a, [wc3bd] + add b + ld b, a + ld a, [wc3c0] + add b + ld b, a + call Function8d0ce + add b + ld [de], a + inc hl + inc de + ld a, [wc3ba] + add [hl] + ld [de], a + inc hl + inc de + call Function8d0de + ld [de], a + inc hl + inc de + ld a, e + ld [wc3b5], a + cp SpritesEnd % $100 + jr nc, .outofroom dec c jr nz, .loop - ret -; 14209 + pop bc + jr .done +.almost + call Function8d036 -RunCallback_04: ; 14209 - ld a, $4 - call RunMapCallback - call Function1439b - call Function14215 +.done + and a ret -; 14215 -Function14215: ; 14215 - ld a, [wSpriteFlags] - bit 6, a - ret nz - ld c, EMOTE_08 - callba LoadEmote - call GetMapPermission - call CheckOutdoorMap - ld c, EMOTE_0B - jr z, .outdoor - ld c, EMOTE_0A - -.outdoor - callba LoadEmote +.outofroom + pop bc + scf ret -; 14236 +; 8d0be +Function8d0be: ; 8d0be + push hl + ld a, [hl] + ld hl, wc3b8 + bit 6, [hl] + jr z, .ok + add $8 + xor $ff + inc a +.ok + pop hl + ret +; 8d0ce -SafeGetSprite: ; 14236 +Function8d0ce: ; 8d0ce push hl - call GetSprite + ld a, [hl] + ld hl, wc3b8 + bit 5, [hl] + jr z, .ok + add $8 + xor $ff + inc a + +.ok pop hl ret -; 1423c +; 8d0de -GetSprite: ; 1423c - call GetMonSprite - ret c +Function8d0de: ; 8d0de + ld a, [wc3b8] + ld b, a + ld a, [hl] + xor b + and $e0 + ld b, a + ld a, [hl] + and $1f + or b + ret +; 8d0ec - ld hl, SpriteHeaders ; address - dec a - ld c, a - ld b, 0 - ld a, 6 - call AddNTimes - ; load the address into de +Function8d0ec: ; 8d0ec + xor a + ld [wc3b8], a + ld hl, $3 + add hl, bc ld a, [hli] - ld e, a + ld [wc3ba], a ld a, [hli] - ld d, a - ; load the length into c + ld [wc3bb], a ld a, [hli] - swap a - ld c, a - ; load the sprite bank into both b and h - ld b, [hl] + ld [wc3bc], a ld a, [hli] - ; load the sprite type into l - ld l, [hl] - ld h, a + ld [wc3bd], a + ld a, [hli] + ld [wc3be], a ret -; 14259 +; 8d109 +LookUpInwSpriteAnimDict: ; 8d109 +; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0 + push hl + push bc + ld hl, wSpriteAnimDict + ld b, a + ld c, 10 +.loop + ld a, [hli] + cp b + jr z, .ok + inc hl + dec c + jr nz, .loop + xor a + jr .done -GetMonSprite: ; 14259 -; Return carry if a monster sprite was loaded. +.ok + ld a, [hl] - cp SPRITE_POKEMON - jr c, .Normal - cp SPRITE_DAYCARE_MON_1 - jr z, .wBreedMon1 - cp SPRITE_DAYCARE_MON_2 - jr z, .wBreedMon2 - cp SPRITE_VARS - jr nc, .Variable - jr .Icon +.done + pop bc + pop hl + ret +; 8d120 -.Normal - and a +Function8d120:: ; 8d120 + ld hl, $1 + add hl, bc + ld [hl], a + ld hl, $8 + add hl, bc + ld [hl], $0 + ld hl, $a + add hl, bc + ld [hl], $ff ret +; 8d132 -.Icon - sub SPRITE_POKEMON - ld e, a - ld d, 0 - ld hl, SpriteMons - add hl, de - ld a, [hl] - jr .Mon -.wBreedMon1 - ld a, [wBreedMon1Species] - jr .Mon +Function8d132: ; 8d132 +.loop + ld hl, $8 + add hl, bc + ld a, [hl] + and a + jr z, .ok + dec [hl] + call Function8d189 + ld a, [hli] + push af + jr .skip -.wBreedMon2 - ld a, [wBreedMon2Species] +.ok + ld hl, $a + add hl, bc + inc [hl] + call Function8d189 + ld a, [hli] + cp $fe + jr z, .minus_2 + cp $ff + jr z, .minus_1 + push af + ld a, [hl] + push hl + and $3f + ld hl, $9 + add hl, bc + add [hl] + ld hl, $8 + add hl, bc + ld [hl], a + pop hl -.Mon - ld e, a - and a - jr z, .NoBreedmon +.skip + ld a, [hl] + and $c0 + srl a + ld [wc3b8], a + pop af + ret - callba Function8e82b +.minus_1 + xor a + ld hl, $8 + add hl, bc + ld [hl], a + ld hl, $a + add hl, bc +rept 2 + dec [hl] +endr + jr .loop - ld l, 1 +.minus_2 + xor a + ld hl, $8 + add hl, bc + ld [hl], a + dec a + ld hl, $a + add hl, bc + ld [hl], a + jr .loop +; 8d189 + +Function8d189: ; 8d189 + ; Get the [bc+10]th entry in the data table + ; indexed at [bc+1] in Unknown_8d6e6 + ld hl, $1 + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Unknown_8d6e6 +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $a + add hl, bc + ld l, [hl] ld h, 0 - scf + add hl, hl + add hl, de ret +; 8d1a2 -.Variable - sub SPRITE_VARS +Function8d1a2: ; 8d1a2 ld e, a ld d, 0 - ld hl, VariableSprites + ld hl, Unknown_8d94d +rept 3 add hl, de - ld a, [hl] - and a - jp nz, GetMonSprite - -.NoBreedmon - ld a, 1 - ld l, 1 - ld h, 0 - and a +endr ret -; 142a7 - - -_DoesSpriteHaveFacings:: ; 142a7 -; Checks to see whether we can apply a facing to a sprite. -; Returns carry unless the sprite is a Pokemon or a Still Sprite. - cp SPRITE_POKEMON - jr nc, .only_down +; 8d1ac +Function8d1ac: ; unreferenced push hl + ld l, a + ld h, 0 +rept 2 + add hl, hl +endr + ld de, Unknown_8e706 ; broken 2bpp pointers + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + inc hl + ld e, [hl] + inc hl + ld d, [hl] + pop hl push bc - ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type - dec a - ld c, a - ld b, 0 - ld a, NUM_SPRITEHEADER_FIELDS - call AddNTimes - ld a, [hl] + call Request2bpp pop bc - pop hl - cp STILL_SPRITE - jr nz, .only_down - scf + ret +; 8d1c4 + +Unknown_8d1c4: ; 8d1c4 + db $01, SPRITE_ANIM_SEQ_01, $00 ; 00 + db $07, SPRITE_ANIM_SEQ_04, $00 ; 01 + db $08, SPRITE_ANIM_SEQ_05, $05 ; 02 + db $0a, SPRITE_ANIM_SEQ_06, $00 ; 03 + db $0b, SPRITE_ANIM_SEQ_07, $06 ; 04 + db $0c, SPRITE_ANIM_SEQ_08, $06 ; 05 + db $0d, SPRITE_ANIM_SEQ_09, $07 ; 06 + db $0e, SPRITE_ANIM_SEQ_0A, $07 ; 07 + db $10, SPRITE_ANIM_SEQ_0B, $07 ; 08 + db $08, SPRITE_ANIM_SEQ_0C, $05 ; 09 + db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a + db $12, SPRITE_ANIM_SEQ_0D, $08 ; 0b + db $12, SPRITE_ANIM_SEQ_0E, $08 ; 0c + db $12, SPRITE_ANIM_SEQ_0F, $08 ; 0d + db $13, SPRITE_ANIM_SEQ_10, $00 ; 0e + db $15, SPRITE_ANIM_SEQ_00, $00 ; 0f + db $16, SPRITE_ANIM_SEQ_11, $00 ; 10 + db $17, SPRITE_ANIM_SEQ_12, $00 ; 11 + db $18, SPRITE_ANIM_SEQ_12, $00 ; 12 + db $19, SPRITE_ANIM_SEQ_13, $00 ; 13 + db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14 + db $1b, SPRITE_ANIM_SEQ_00, $00 ; 15 + db $1d, SPRITE_ANIM_SEQ_15, $00 ; 16 + db $1e, SPRITE_ANIM_SEQ_00, $00 ; 17 + db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18 + db $1f, SPRITE_ANIM_SEQ_00, $00 ; 19 + db $24, SPRITE_ANIM_SEQ_19, $00 ; 1a + db $25, SPRITE_ANIM_SEQ_00, $00 ; 1b + db $20, SPRITE_ANIM_SEQ_13, $00 ; 1c + db $26, SPRITE_ANIM_SEQ_1A, $00 ; 1d + db $2d, SPRITE_ANIM_SEQ_00, $00 ; 1e + db $2e, SPRITE_ANIM_SEQ_00, $00 ; 1f + db $2f, SPRITE_ANIM_SEQ_00, $00 ; 20 + db $30, SPRITE_ANIM_SEQ_00, $00 ; 21 + db $31, SPRITE_ANIM_SEQ_00, $00 ; 22 + db $32, SPRITE_ANIM_SEQ_1B, $00 ; 23 + db $33, SPRITE_ANIM_SEQ_1C, $00 ; 24 + db $34, SPRITE_ANIM_SEQ_00, $00 ; 25 + db $35, SPRITE_ANIM_SEQ_1D, $00 ; 26 + db $37, SPRITE_ANIM_SEQ_1E, $00 ; 27 + db $38, SPRITE_ANIM_SEQ_1E, $00 ; 28 + db $39, SPRITE_ANIM_SEQ_20, $00 ; 29 + db $3f, SPRITE_ANIM_SEQ_21, $00 ; 2a + db $3e, SPRITE_ANIM_SEQ_22, $00 ; 2b + db $40, SPRITE_ANIM_SEQ_00, $00 ; 2c +; 8d24b + + +Function8d24b: ; 8d24b + ld hl, $2 ; field 2, see the second column in the above table + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .Jumptable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 8d25b + + +.Jumptable: ; 8d25b (23:525b) + dw .zero ; town map + dw .one ; bouncing mon icons + dw .two + dw .three + dw .four + dw .five + dw .six ; Game Freak logo + dw .seven + dw .eight + dw .nine + dw .ten + dw .eleven + dw .twelve ; blinking cursor + dw .thirteen + dw .fourteen + dw .fifteen + dw .sixteen + dw .seventeen + dw .eighteen + dw .nineteen + dw .twenty + dw .twentyone + dw .twentytwo ; flying sprite + dw .twentythree ; flying leaves + dw .twentyfour + dw .twentyfive + dw .twentysix + dw .twentyseven + dw .twentyeight + dw .twentynine ; intro suicune + dw .thirty ; intro pichu wooper + dw .thirtyone + dw .thirtytwo ; intro unown + dw .thirtythree ; intro unown F with suicune leaping up + dw .thirtyfour ; intro suicune facing away from us + + +.zero: ; 8d2a1 (23:52a1) + ret + +.one: ; 8d2a2 (23:52a2) + ld a, [MenuSelection2] + ld hl, 0 + add hl, bc + cp [hl] + jr z, .two + ld hl, $4 + add hl, bc + ld [hl], $10 + ld hl, $7 + add hl, bc + ld [hl], $0 ret -.only_down +.two: ; 8d2b9 (23:52b9) + ld hl, $4 + add hl, bc + ld [hl], $18 + ld hl, $c + add hl, bc + ld a, [hl] + ld d, a + inc [hl] + and $f + ret nz + ld hl, $d + add hl, bc + ld e, [hl] + ld hl, $7 + add hl, bc + ld a, d + and $10 ; bit 4 + jr z, .asm_8d2df + ld a, e and a + jr z, .asm_8d2e6 + cp $1 + jr z, .asm_8d2e2 +.asm_8d2df + xor a + ld [hl], a + ret +.asm_8d2e2 + ld a, $ff + ld [hl], a + ret +.asm_8d2e6 + ld a, $fe + ld [hl], a ret -; 142c4 +.three: ; 8d2ea (23:52ea) + ld a, [MenuSelection2] + ld hl, 0 + add hl, bc + cp [hl] + jr z, .asm_8d2fb + ld hl, $4 + add hl, bc + ld [hl], $10 + ret +.asm_8d2fb + ld hl, $4 + add hl, bc + ld [hl], $18 + ret -_GetSpritePalette:: ; 142c4 - ld a, c - call GetMonSprite - jr c, .is_pokemon +.four: ; 8d302 (23:5302) + call .anonymous_jumptable + jp [hl] +; 8d306 (23:5306) - ld hl, SpriteHeaders + 5 ; palette - dec a - ld c, a - ld b, 0 - ld a, 6 - call AddNTimes - ld c, [hl] +; Anonymous jumptable (see .anonymous_jumptable) + dw .four_zero + dw .four_one +; 8d30a + +.four_zero: ; 8d30a + call .asm_8d6d8 + ld hl, 0 + add hl, bc + ld a, [hl] + ld hl, $d + add hl, bc + and $3 + ld [hl], a + inc [hl] + swap a + ld hl, $c + add hl, bc + ld [hl], a + +.four_one: ; 8d321 + ld hl, $4 + add hl, bc + ld a, [hl] + cp $a4 + jr nc, .asm_8d356 + ld hl, $d + add hl, bc + add $4 + ld hl, $4 + add hl, bc + ld [hl], a + ld hl, $5 + add hl, bc + inc [hl] + ld hl, $d + add hl, bc + ld a, [hl] + sla a + sla a + ld d, $2 + ld hl, $c + add hl, bc + ld a, [hl] + add $3 + ld [hl], a + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a ret -.is_pokemon - xor a - ld c, a +.asm_8d356 + call Function8d036 ret -; 142db +; 8d35a +.twentyfive: ; 8d35a (23:535a) + ld hl, $c + add hl, bc + ld a, [hl] + inc a + ld [hl], a + ld d, $2 + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + ret -LoadAndSortSprites: ; 142db - call LoadSpriteGFX - call SortUsedSprites - call ArrangeUsedSprites +.five: ; 8d36c (23:536c) + callab Function11a3b ret -; 142e5 +.twelve: ; 8d373 (23:5373) + callab Function120c1 + ret -AddSpriteGFX: ; 142e5 -; Add any new sprite ids to a list of graphics to be loaded. -; Return carry if the list is full. +.six: ; 8d37a (23:537a) + callab GameFreakLogoJumper + ret - push hl - push bc - ld b, a - ld hl, UsedSprites + 2 - ld c, SPRITE_GFX_LIST_CAPACITY - 1 -.loop +.seven: ; 8d381 (23:5381) + ld hl, $c + add hl, bc ld a, [hl] - cp b - jr z, .exists and a - jr z, .new + jr z, .asm_8d3ba rept 2 - inc hl + dec [hl] endr - dec c - jr nz, .loop + ld d, a + and $1f + jr nz, .asm_8d395 + ld hl, $d + add hl, bc + dec [hl] +.asm_8d395 + ld hl, $b + add hl, bc + ld a, [hl] + push af + push de + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + pop de + pop af + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ld hl, $d + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + add [hl] + ld [hl], a + ret +.asm_8d3ba + ld a, $1 + ld [wcf64], a + call Function8d036 + ret - pop bc - pop hl - scf +.eight: ; 8d3c3 (23:53c3) + ld hl, $c + add hl, bc + ld a, [hli] + or [hl] + jr z, .asm_8d41e + ld hl, $f + add hl, bc + ld d, [hl] + ld hl, $b + add hl, bc + ld a, [hl] + push af + push de + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + pop de + pop af + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ld hl, $c + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $e + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $e + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $c + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, -$10 + add hl, de + ld e, l + ld d, h + ld hl, $c + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $b + add hl, bc + ld a, [hl] + xor $20 + ld [hl], a + ret +.asm_8d41e + call Function8d036 ret -.exists - pop bc - pop hl - and a +.nine: ; 8d422 (23:5422) + callab Function9321d ret -.new - ld [hl], b - pop bc - pop hl - and a +.ten: ; 8d429 (23:5429) + callab Function932ac + ld hl, wcf64 + ld a, [hl] + cp $2 + ret nz + ld [hl], $3 + ld a, $f + call Function8d120 ret -; 14306 +.eleven: ; 8d43e (23:543e) + ld hl, $b + add hl, bc + ld a, [hl] + dec [hl] + ld e, a + and $1 + jr z, .asm_8d462 + ld hl, $4 + add hl, bc + ld a, [hl] + cp $78 + jr c, .asm_8d461 + call Function8d036 + ld a, $4 + ld [wcf64], a + ld de, SFX_PLACE_PUZZLE_PIECE_DOWN + call PlaySFX + ret +.asm_8d461 + inc [hl] +.asm_8d462 + ld a, e + ld d, $20 + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + ret -LoadSpriteGFX: ; 14306 -; Bug: b is not preserved, so -; it's useless as a next count. +.thirteen: ; 8d46e (23:546e) + callab Functione00ed + ret - ld hl, UsedSprites - ld b, SPRITE_GFX_LIST_CAPACITY -.loop - ld a, [hli] - and a - jr z, .done - push hl - call .LoadSprite - pop hl - ld [hli], a - dec b - jr nz, .loop +.fifteen: ; 8d475 (23:5475) + callab Function90d41 + ret -.done +.fourteen: ; 8d47c (23:547c) + callab Functione21a1 ret -.LoadSprite - call GetSprite - ld a, l +.sixteen: ; 8d483 (23:5483) + call .anonymous_jumptable + jp [hl] +; 8d487 (23:5487) + +; Anonymous jumptable (see .anonymous_jumptable) + dw .sixteen_zero + dw .sixteen_one + dw .sixteen_two + dw .sixteen_three + dw .sixteen_four + dw .sixteen_five +; 8d493 + +.sixteen_zero: ; 8d493 + ld a, $14 + call Function8d120 + ld hl, $b + add hl, bc + ld [hl], $2 + ld hl, $c + add hl, bc + ld [hl], $20 + ret +; 8d4a5 + +.sixteen_two: ; 8d4a5 + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_8d4af + dec [hl] ret -; 1431e +.asm_8d4af + call .asm_8d6d8 + ld hl, $c + add hl, bc + ld [hl], $40 -SortUsedSprites: ; 1431e -; Bubble-sort sprites by type. +.sixteen_three: ; 8d4b8 + ld hl, $c + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_8d4cd + dec [hl] + ld d, $28 + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + ret -; Run backwards through UsedSprites to find the last one. +.asm_8d4cd + ld de, SFX_GOT_SAFARI_BALLS + call PlaySFX + jr .sixteen_five +; 8d4d5 - ld c, SPRITE_GFX_LIST_CAPACITY - ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2 -.FindLastSprite - ld a, [de] +.sixteen_one: ; 8d4d5 + ld hl, $b + add hl, bc + ld [hl], $4 + ld hl, $c + add hl, bc + ld [hl], $30 + ld hl, $d + add hl, bc + ld [hl], $24 + ret +; 8d4e8 + +.sixteen_four: ; 8d4e8 + ld hl, $d + add hl, bc + ld a, [hl] and a - jr nz, .FoundLastSprite + jr z, .asm_8d51c + ld d, a + ld hl, $c + add hl, bc + ld a, [hl] + call Function8e72c + ld hl, $7 + add hl, bc + ld [hl], a + ld hl, $c + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + ld hl, $c + add hl, bc + ld [hl], $20 + ld hl, $d + add hl, bc + ld a, [hl] + sub $c + ld [hl], a + ld de, SFX_SWITCH_POKEMON + call PlaySFX + ret + +.asm_8d51c + xor a + ld hl, $7 + add hl, bc + ld [hl], a + call .asm_8d6d8 + ret + +.sixteen_five: ; 8d526 + call Function8d036 + ret +; 8d52a + +.seventeen: ; 8d52a (23:552a) + ld hl, $4 + add hl, bc + ld a, [hl] rept 2 - dec de + inc [hl] endr - dec c - jr nz, .FindLastSprite -.FoundLastSprite - dec c - jr z, .quit + cp $b0 + jr nc, .asm_8d53f + and $3 + ret nz + ld de, SFX_POKEBALLS_PLACED_ON_TABLE + call PlaySFX + ret -; If the length of the current sprite is -; higher than a later one, swap them. +.asm_8d53f + call Function8d036 + ret - inc de - ld hl, UsedSprites + 1 +.eighteen: ; 8d543 (23:5543) + callab Function29676 + ret -.CheckSprite - push bc +.nineteen: ; 8d54a (23:554a) + ld hl, $c + add hl, bc + ld a, [hl] + cp $80 + jr nc, .asm_8d574 + ld d, a + add $8 + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + xor $20 + ld [hl], a + push af push de - push hl + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + pop de + pop af + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ret +.asm_8d574 + call Function8d036 + ret -.CheckFollowing - ld a, [de] - cp [hl] - jr nc, .loop +.twenty: ; 8d578 (23:5578) + callab Function91640 + ret -; Swap the two sprites. +.twentyone: ; 8d57f (23:557f) + ld hl, $d + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $80 + add hl, de + ld e, l + ld d, h + ld hl, $d + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ld hl, $c + add hl, bc + ld a, [hl] +rept 3 + inc [hl] +endr + push af + push de + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + pop de + pop af + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ret - ld b, a +.twentytwo: ; 8d5b0 (23:55b0) + ld hl, $5 + add hl, bc ld a, [hl] - ld [hl], b - ld [de], a - dec de - dec hl - ld a, [de] - ld b, a + and a + ret z + ld hl, $d + add hl, bc ld a, [hl] - ld [hl], b - ld [de], a - inc de - inc hl - -; Keep doing this until everything's in order. - -.loop + inc [hl] + cp $40 + ret c + ld hl, $5 + add hl, bc rept 2 - dec de + dec [hl] endr - dec c - jr nz, .CheckFollowing + ld hl, $f + add hl, bc + ld a, [hl] + ld d, a + cp $40 + jr nc, .asm_8d5d3 + add $8 + ld [hl], a +.asm_8d5d3 + ld hl, $e + add hl, bc + ld a, [hl] + inc [hl] + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ret - pop hl +.twentythree: ; 8d5e2 (23:55e2) + ld hl, $4 + add hl, bc + ld a, [hl] + cp $b8 + jr nc, .asm_8d603 rept 2 - inc hl + inc [hl] endr - pop de - pop bc - dec c - jr nz, .CheckSprite + ld hl, $5 + add hl, bc + dec [hl] + ld d, $40 + ld hl, $c + add hl, bc + ld a, [hl] + inc [hl] + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ret +.asm_8d603 + call Function8d036 + ret -.quit +.twentyfour: ; 8d607 (23:5607) + ld hl, $5 + add hl, bc + ld a, [hl] + cp $54 + ret z + ld hl, $5 + add hl, bc +rept 2 + inc [hl] +endr + ld hl, $f + add hl, bc + ld a, [hl] + ld d, a + and a + jr z, .asm_8d621 + sub $2 + ld [hl], a +.asm_8d621 + ld hl, $e + add hl, bc + ld a, [hl] + inc [hl] + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a ret -; 14355 +.twentyseven: ; 8d630 (23:5630) + callba Function108bc7 + ret -ArrangeUsedSprites: ; 14355 -; Get the length of each sprite and space them out in VRAM. -; Crystal introduces a second table in VRAM bank 0. +.twentyeight: ; 8d637 (23:5637) + callba Function108be0 + ret - ld hl, UsedSprites - ld c, SPRITE_GFX_LIST_CAPACITY - ld b, 0 -.FirstTableLength -; Keep going until the end of the list. - ld a, [hli] +.twentynine: ; 8d63e (23:563e) + ld a, [wcf65] and a - jr z, .quit - + jr nz, .asm_8d645 + ret +.asm_8d645 + ld hl, $7 + add hl, bc + ld [hl], $0 + ld hl, $d + add hl, bc ld a, [hl] - call GetSpriteLength + add $2 + ld [hl], a + xor $ff + inc a + ld d, $20 + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + ld a, $36 + call Function8d120 + ret -; Spill over into the second table after $80 tiles. - add b - cp $80 - jr z, .loop - jr nc, .SecondTable +.thirty: ; 8d666 (23:5666) + ld hl, $c + add hl, bc + ld a, [hl] + cp $14 + jr nc, .asm_8d67f + add $2 + ld [hl], a + xor $ff + inc a + ld d, $20 + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a +.asm_8d67f + ret -.loop - ld [hl], b - inc hl - ld b, a +.thirtytwo: ; 8d680 (23:5680) + ld hl, $b + add hl, bc + ld d, [hl] +rept 3 + inc [hl] +endr + ld hl, $c + add hl, bc + ld a, [hl] + push af + push de + call .asm_8d6de + ld hl, $7 + add hl, bc + ld [hl], a + pop de + pop af + call .asm_8d6e2 + ld hl, $6 + add hl, bc + ld [hl], a + ret -; Assumes the next table will be reached before c hits 0. - dec c - jr nz, .FirstTableLength - -.SecondTable -; The second tile table starts at tile $80. - ld b, $80 - dec hl -.SecondTableLength -; Keep going until the end of the list. - ld a, [hli] - and a - jr z, .quit +.thirtythree: ; 8d6a2 (23:56a2) + ld a, [wcf64] + cp $40 + ret nz + ld a, $3d + call Function8d120 + ret +.thirtyfour: ; 8d6ae (23:56ae) + ld hl, $5 + add hl, bc ld a, [hl] - call GetSpriteLength + add $10 + ld [hl], a + ret -; There are only two tables, so don't go any further than that. - add b - jr c, .quit +.twentysix: ; 8d6b7 (23:56b7) + callba Function11d0b6 + ret - ld [hl], b - ld b, a +.thirtyone: ; 8d6be (23:56be) + callba Function49aa2 + ret + +.anonymous_jumptable: ; 8d6c5 (23:56c5) + ld hl, [sp+$0] + ld e, [hl] inc hl + ld d, [hl] + inc de + ld hl, $b + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 8d6d8 (23:56d8) - dec c - jr nz, .SecondTableLength +.asm_8d6d8: ; 8d6d8 + ld hl, $b + add hl, bc + inc [hl] + ret +; 8d6de -.quit +.asm_8d6de: ; 8d6de (23:56de) + call Function8e72c ret -; 14386 +.asm_8d6e2: ; 8d6e2 (23:56e2) + call Function8e72a + ret +; 8d6e6 (23:56e6) + +Unknown_8d6e6: ; 8d6e6 + dw Unknown_8d76a + dw Unknown_8d76d + dw Unknown_8d772 + dw Unknown_8d777 + dw Unknown_8d77c + dw Unknown_8d781 + dw Unknown_8d786 + dw Unknown_8d7a6 + dw Unknown_8d7ab + dw Unknown_8d7b0 + dw Unknown_8d7b5 + dw Unknown_8d7d4 + dw Unknown_8d7d9 + dw Unknown_8d7e2 + dw Unknown_8d7eb + dw Unknown_8d7f4 + dw Unknown_8d7ff + dw Unknown_8d78b + dw Unknown_8d802 + dw Unknown_8d805 + dw Unknown_8d808 + dw Unknown_8d811 + dw Unknown_8d818 + dw Unknown_8d81d + dw Unknown_8d822 + dw Unknown_8d825 + dw Unknown_8d82c + dw Unknown_8d82f + dw Unknown_8d861 + dw Unknown_8d864 + dw Unknown_8d867 + dw Unknown_8d874 + dw Unknown_8d877 + dw Unknown_8d87a + dw Unknown_8d87d + dw Unknown_8d880 + dw Unknown_8d883 + dw Unknown_8d890 + dw Unknown_8d899 + dw Unknown_8d89c + dw Unknown_8d89f + dw Unknown_8d8a2 + dw Unknown_8d8a5 + dw Unknown_8d8a8 + dw Unknown_8d8ab + dw Unknown_8d794 + dw Unknown_8d79d + dw Unknown_8d8ae + dw Unknown_8d8cd + dw Unknown_8d8ec + dw Unknown_8d8f1 + dw Unknown_8d8f4 + dw Unknown_8d8f7 + dw Unknown_8d8fe + dw Unknown_8d907 + dw Unknown_8d90c + dw Unknown_8d913 + dw Unknown_8d916 + dw Unknown_8d91d + dw Unknown_8d924 + dw Unknown_8d92b + dw Unknown_8d932 + dw Unknown_8d93d + dw Unknown_8d940 + dw Unknown_8d943 + dw Unknown_8d948 +; 8d76a + +Unknown_8d76a: dw $2000 + db -1 +Unknown_8d76d: dw $0800, $0801 + db -2 +Unknown_8d772: dw $083d, $083e + db -2 +Unknown_8d777: dw $083f, $0840 + db -2 +Unknown_8d77c: dw $0400, $0401 + db -2 +Unknown_8d781: dw $043d, $043e + db -2 +Unknown_8d786: dw $043f, $0440 + db -2 +Unknown_8d78b: dw $0800, $0801, $0800, $4801 + db -2 +Unknown_8d794: dw $0863, $0864, $0863, $4864 + db -2 +Unknown_8d79d: dw $0865, $0866, $0865, $4866 + db -2 +Unknown_8d7a6: dw $011e, $011f + db -2 +Unknown_8d7ab: dw $0120, $01fd + db -2 +Unknown_8d7b0: dw $0121, $01fd + db -2 +Unknown_8d7b5: dw $0c81, $0182, $0183, $0482, $0c81, $0c82, $0483, $2084, $0385, $0386, $0487, $0488, $0489, $0a8a, $078b + db -1 +Unknown_8d7d4: dw $0323, $8323 + db -2 +Unknown_8d7d9: dw $0224, $0225, $0226, $0225 + db -2 +Unknown_8d7e2: dw $0727, $0728, $8727, $4728 + db -2 +Unknown_8d7eb: dw $0729, $072a, $0729, $072b + db -2 +Unknown_8d7f4: dw $0729, $072c, $072d, $072c, $0729 + db -1 +Unknown_8d7ff: dw $142e + db -1 +Unknown_8d802: dw $202f + db -1 +Unknown_8d805: dw $2030 + db -1 +Unknown_8d808: dw $0330, $0331, $0330, $4331 + db -2 +Unknown_8d811: dw $0432, $0433, $0434 + db -4 +Unknown_8d818: dw $0335, $0336 + db -2 +Unknown_8d81d: dw $0737, $0738 + db -2 +Unknown_8d822: dw $2039 + db -1 +Unknown_8d825: dw $023b, $023a, $023b + db -1 +Unknown_8d82c: dw $203c + db -1 +Unknown_8d82f: dw $0841, $0842, $0841, $4842 + db -2 + dw $0843, $0844 + db -2 + dw $0845, $0846 + db -2 + dw $0847, $0848 + db -2 + dw $0149, $4149, $c149, $8149 + db -2 + dw $204a + db -1 + dw $204b + db -1 + dw $204c + db -1 + dw $204d + db -1 + dw $034e, $03fd + db -2 +Unknown_8d861: dw $20fd + db -1 +Unknown_8d864: dw $204f + db -1 +Unknown_8d867: dw $0250, $1051, $01fd, $0152, $01fd, $0153 + db -4 +Unknown_8d874: dw $2054 + db -1 +Unknown_8d877: dw $2055 + db -1 +Unknown_8d87a: dw $6055 + db -1 +Unknown_8d87d: dw $a055 + db -1 +Unknown_8d880: dw $e055 + db -1 +Unknown_8d883: dw $0a56, $0957, $0a58, $0a59, $0958, $0a5a + db -2 +Unknown_8d890: dw $0250, $025b, $0250, $425b + db -2 +Unknown_8d899: dw $025c + db -1 +Unknown_8d89c: dw $025d + db -1 +Unknown_8d89f: dw $025e + db -1 +Unknown_8d8a2: dw $025f + db -1 +Unknown_8d8a5: dw $0260 + db -1 +Unknown_8d8a8: dw $0261 + db -1 +Unknown_8d8ab: dw $0262 + db -1 +Unknown_8d8ae: dw $0332, $0333, $0334, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331 + db -1 +Unknown_8d8cd: dw $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0332, $0333, $0334 + db -4 +Unknown_8d8ec: dw $0367, $0368 + db -2 +Unknown_8d8f1: dw $036c + db -1 +Unknown_8d8f4: dw $036d + db -1 +Unknown_8d8f7: dw $0269, $026a, $026b + db -4 +Unknown_8d8fe: dw $036e, $036f, $0370, $0371 + db -2 +Unknown_8d907: dw $0371, $076e + db -1 +Unknown_8d90c: dw $2072, $0773, $0774 + db -1 +Unknown_8d913: dw $0375 + db -1 +Unknown_8d916: dw $0376, $0377, $0778 + db -4 +Unknown_8d91d: dw $4376, $4377, $4778 + db -4 +Unknown_8d924: dw $8376, $8377, $8778 + db -4 +Unknown_8d92b: dw $c376, $c377, $c778 + db -4 +Unknown_8d932: dw $0379, $037a, $037b, $077c, $077d + db -1 +Unknown_8d93d: dw $037e + db -1 +Unknown_8d940: dw $00fd + db -1 +Unknown_8d943: dw $087f, $0880 + db -1 +Unknown_8d948: dw $487f, $4880 + db -1 +; 8d94d + +Unknown_8d94d: ; 8d94d + dbw $00, Unknown_8dd8a ; 00 + dbw $04, Unknown_8dd8a ; 01 + dbw $4c, Unknown_8daf1 ; 02 + dbw $5c, Unknown_8daf1 ; 03 + dbw $6c, Unknown_8daf6 ; 04 + dbw $6e, Unknown_8daf6 ; 05 + dbw $2d, Unknown_8ddf0 ; 06 + dbw $4d, Unknown_8ddf0 ; 07 + dbw $60, Unknown_8de09 ; 08 + dbw $00, Unknown_8de09 ; 09 + dbw $00, Unknown_8de09 ; 0a + dbw $06, Unknown_8de09 ; 0b + dbw $0c, Unknown_8de7e ; 0c + dbw $0d, Unknown_8daf1 ; 0d + dbw $00, Unknown_8dc53 ; 0e + dbw $04, Unknown_8dc53 ; 0f + dbw $08, Unknown_8dc53 ; 10 + dbw $40, Unknown_8dc53 ; 11 + dbw $44, Unknown_8dc53 ; 12 + dbw $48, Unknown_8dc53 ; 13 + dbw $4c, Unknown_8dc53 ; 14 + dbw $80, Unknown_8de87 ; 15 + dbw $85, Unknown_8de87 ; 16 + dbw $8a, Unknown_8de87 ; 17 + dbw $00, Unknown_8db29 ; 18 + dbw $01, Unknown_8db5c ; 19 + dbw $09, Unknown_8db9d ; 1a + dbw $10, Unknown_8dc94 ; 1b + dbw $29, Unknown_8dc94 ; 1c + dbw $42, Unknown_8dc94 ; 1d + dbw $f8, Unknown_8e17e ; 1e + dbw $fa, Unknown_8e17e ; 1f + dbw $00, Unknown_8deb2 ; 20 + dbw $00, Unknown_8dec3 ; 21 + dbw $00, Unknown_8deec ; 22 + dbw $0f, Unknown_8db07 ; 23 + dbw $11, Unknown_8daf1 ; 24 + dbw $12, Unknown_8daf1 ; 25 + dbw $13, Unknown_8daf1 ; 26 + dbw $00, Unknown_8df29 ; 27 + dbw $08, Unknown_8df29 ; 28 + dbw $10, Unknown_8df42 ; 29 + dbw $10, Unknown_8df5b ; 2a + dbw $10, Unknown_8df74 ; 2b + dbw $10, Unknown_8df8d ; 2c + dbw $10, Unknown_8dfa6 ; 2d + dbw $3a, Unknown_8daf1 ; 2e + dbw $00, Unknown_8dd8a ; 2f + dbw $00, Unknown_8db18 ; 30 + dbw $02, Unknown_8dd9b ; 31 + dbw $06, Unknown_8db5c ; 32 + dbw $0a, Unknown_8db5c ; 33 + dbw $0e, Unknown_8db5c ; 34 + dbw $12, Unknown_8db3a ; 35 + dbw $13, Unknown_8db3a ; 36 + dbw $00, Unknown_8dd8a ; 37 + dbw $04, Unknown_8dd8a ; 38 + dbw $10, Unknown_8db5c ; 39 + dbw $00, Unknown_8dd9b ; 3a + dbw $04, Unknown_8daf1 ; 3b + dbw $00, Unknown_8dfbf ; 3c + dbw $00, Unknown_8ddac ; 3d + dbw $00, Unknown_8ddbd ; 3e + dbw $00, Unknown_8ddce ; 3f + dbw $00, Unknown_8dddf ; 40 + dbw $00, Unknown_8dd9b ; 41 + dbw $04, Unknown_8dd9b ; 42 + dbw $00, Unknown_8dc2e ; 43 + dbw $30, Unknown_8dc2e ; 44 + dbw $03, Unknown_8dc2e ; 45 + dbw $33, Unknown_8dc2e ; 46 + dbw $06, Unknown_8dc2e ; 47 + dbw $36, Unknown_8dc2e ; 48 + dbw $09, Unknown_8dc2e ; 49 + dbw $39, Unknown_8dc2e ; 4a + dbw $0c, Unknown_8dfcc ; 4b + dbw $0c, Unknown_8dfe5 ; 4c + dbw $3c, Unknown_8daf1 ; 4d + dbw $3e, Unknown_8daf1 ; 4e + dbw $00, Unknown_8de9c ; 4f + dbw $00, Unknown_8dea1 ; 50 + dbw $00, Unknown_8dff6 ; 51 + dbw $00, Unknown_8e007 ; 52 + dbw $00, Unknown_8e018 ; 53 + dbw $00, Unknown_8daf1 ; 54 + dbw $01, Unknown_8daf1 ; 55 + dbw $00, Unknown_8e029 ; 56 + dbw $00, Unknown_8e076 ; 57 + dbw $00, Unknown_8e0b7 ; 58 + dbw $00, Unknown_8e0f4 ; 59 + dbw $00, Unknown_8e139 ; 5a + dbw $04, Unknown_8dea1 ; 5b + dbw $00, Unknown_8e183 ; 5c + dbw $00, Unknown_8e1b4 ; 5d + dbw $00, Unknown_8e1b9 ; 5e + dbw $00, Unknown_8e1ca ; 5f + dbw $00, Unknown_8e1eb ; 60 + dbw $00, Unknown_8e1f0 ; 61 + dbw $00, Unknown_8e1f9 ; 62 + dbw $00, Unknown_8e202 ; 63 + dbw $04, Unknown_8e202 ; 64 + dbw $00, Unknown_8e213 ; 65 + dbw $04, Unknown_8e213 ; 66 + dbw $20, Unknown_8e224 ; 67 + dbw $21, Unknown_8e224 ; 68 + dbw $22, Unknown_8e24b ; 69 + dbw $23, Unknown_8e25c ; 6a + dbw $27, Unknown_8e27d ; 6b + dbw $2a, Unknown_8e229 ; 6c + dbw $2a, Unknown_8e23a ; 6d + dbw $00, Unknown_8e2ae ; 6e + dbw $08, Unknown_8e33f ; 6f + dbw $60, Unknown_8e3b0 ; 70 + dbw $68, Unknown_8e429 ; 71 + dbw $00, Unknown_8e4a6 ; 72 + dbw $05, Unknown_8e4a6 ; 73 + dbw $0a, Unknown_8e4a6 ; 74 + dbw $50, Unknown_8e50b ; 75 + dbw $00, Unknown_8e54c ; 76 + dbw $01, Unknown_8e551 ; 77 + dbw $04, Unknown_8e55e ; 78 + dbw $00, Unknown_8db29 ; 79 + dbw $01, Unknown_8e57b ; 7a + dbw $03, Unknown_8e59c ; 7b + dbw $08, Unknown_8e5cd ; 7c + dbw $1c, Unknown_8e5cd ; 7d + dbw $80, Unknown_8e61e ; 7e + dbw $00, Unknown_8e66f ; 7f + dbw $04, Unknown_8e66f ; 80 + dbw $d0, Unknown_8e680 ; 81 + dbw $d3, Unknown_8e680 ; 82 + dbw $d6, Unknown_8e680 ; 83 + dbw $6c, Unknown_8e6a5 ; 84 + dbw $68, Unknown_8e6a5 ; 85 + dbw $64, Unknown_8e6a5 ; 86 + dbw $60, Unknown_8e6a5 ; 87 + dbw $0c, Unknown_8e6a5 ; 88 + dbw $08, Unknown_8e6a5 ; 89 + dbw $04, Unknown_8e6a5 ; 8a + dbw $00, Unknown_8e6a5 ; 8b +; 8daf1 + + +Unknown_8daf1: ; 8daf1 + db 1 + db $fc, $fc, $00, $00 +; 8daf6 + +Unknown_8daf6: ; 8daf6 + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $01, $00 + db $00, $f8, $10, $00 + db $00, $00, $11, $00 +; 8db07 + +Unknown_8db07: ; 8db07 + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $00, $20 + db $00, $f8, $01, $00 + db $00, $00, $01, $20 +; 8db18 + +Unknown_8db18: ; 8db18 + db 4 + db $f8, $f8, $00, $80 + db $f8, $00, $00, $a0 + db $00, $f8, $01, $80 + db $00, $00, $01, $a0 +; 8db29 + +Unknown_8db29: ; 8db29 + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $00, $20 + db $00, $f8, $00, $40 + db $00, $00, $00, $60 +; 8db3a + +Unknown_8db3a: ; 8db3a + db 4 + db $f8, $f8, $00, $07 + db $f8, $00, $00, $27 + db $00, $f8, $00, $47 + db $00, $00, $00, $67 +; 8db4b + +; 8db4b + db 4 + db $f8, $f8, $00, $80 + db $f8, $00, $00, $a0 + db $00, $f8, $00, $c0 + db $00, $00, $00, $e0 +; 8db5c + +Unknown_8db5c: ; 8db5c + db 16 + db $f0, $f0, $00, $00 + db $f0, $f8, $01, $00 + db $f8, $f0, $02, $00 + db $f8, $f8, $03, $00 + db $f0, $00, $01, $20 + db $f0, $08, $00, $20 + db $f8, $00, $03, $20 + db $f8, $08, $02, $20 + db $00, $f0, $02, $40 + db $00, $f8, $03, $40 + db $08, $f0, $00, $40 + db $08, $f8, $01, $40 + db $00, $00, $03, $60 + db $00, $08, $02, $60 + db $08, $00, $01, $60 + db $08, $08, $00, $60 +; 8db9d + +Unknown_8db9d: ; 8db9d + db 36 + db $e8, $e8, $00, $00 + db $e8, $f0, $01, $00 + db $e8, $f8, $02, $00 + db $f0, $e8, $03, $00 + db $f0, $f0, $04, $00 + db $f0, $f8, $05, $00 + db $f8, $e8, $06, $00 + db $f8, $f0, $05, $00 + db $f8, $f8, $05, $00 + db $e8, $00, $02, $20 + db $e8, $08, $01, $20 + db $e8, $10, $00, $20 + db $f0, $00, $05, $20 + db $f0, $08, $04, $20 + db $f0, $10, $03, $20 + db $f8, $00, $05, $20 + db $f8, $08, $05, $20 + db $f8, $10, $06, $20 + db $00, $e8, $06, $40 + db $00, $f0, $05, $40 + db $00, $f8, $05, $40 + db $08, $e8, $03, $40 + db $08, $f0, $04, $40 + db $08, $f8, $05, $40 + db $10, $e8, $00, $40 + db $10, $f0, $01, $40 + db $10, $f8, $02, $40 + db $00, $00, $05, $60 + db $00, $08, $05, $60 + db $00, $10, $06, $60 + db $08, $00, $05, $60 + db $08, $08, $04, $60 + db $08, $10, $03, $60 + db $10, $00, $02, $60 + db $10, $08, $01, $60 + db $10, $10, $00, $60 +; 8dc2e + +Unknown_8dc2e: ; 8dc2e + db 9 + db $f4, $f4, $00, $00 + db $f4, $fc, $01, $00 + db $f4, $04, $02, $00 + db $fc, $f4, $10, $00 + db $fc, $fc, $11, $00 + db $fc, $04, $12, $00 + db $04, $f4, $20, $00 + db $04, $fc, $21, $00 + db $04, $04, $22, $00 +; 8dc53 + +Unknown_8dc53: ; 8dc53 + db 16 + db $f0, $f0, $00, $00 + db $f0, $f8, $01, $00 + db $f0, $00, $02, $00 + db $f0, $08, $03, $00 + db $f8, $f0, $10, $00 + db $f8, $f8, $11, $00 + db $f8, $00, $12, $00 + db $f8, $08, $13, $00 + db $00, $f0, $20, $00 + db $00, $f8, $21, $00 + db $00, $00, $22, $00 + db $00, $08, $23, $00 + db $08, $f0, $30, $00 + db $08, $f8, $31, $00 + db $08, $00, $32, $00 + db $08, $08, $33, $00 +; 8dc94 + +Unknown_8dc94: ; 8dc94 + db 25 + db $ec, $ec, $00, $00 + db $f4, $ec, $01, $00 + db $fc, $ec, $02, $00 + db $04, $ec, $03, $00 + db $0c, $ec, $04, $00 + db $ec, $f4, $05, $00 + db $f4, $f4, $06, $00 + db $fc, $f4, $07, $00 + db $04, $f4, $08, $00 + db $0c, $f4, $09, $00 + db $ec, $fc, $0a, $00 + db $f4, $fc, $0b, $00 + db $fc, $fc, $0c, $00 + db $04, $fc, $0d, $00 + db $0c, $fc, $0e, $00 + db $ec, $04, $0f, $00 + db $f4, $04, $10, $00 + db $fc, $04, $11, $00 + db $04, $04, $12, $00 + db $0c, $04, $13, $00 + db $ec, $0c, $14, $00 + db $f4, $0c, $15, $00 + db $fc, $0c, $16, $00 + db $04, $0c, $17, $00 + db $0c, $0c, $18, $00 +; 8dcf9 + +; 8dcf9 + db 36 + db $e8, $e8, $00, $00 + db $e8, $f0, $01, $00 + db $e8, $f8, $02, $00 + db $e8, $00, $03, $00 + db $e8, $08, $04, $00 + db $e8, $10, $05, $00 + db $f0, $e8, $06, $00 + db $f0, $f0, $07, $00 + db $f0, $f8, $08, $00 + db $f0, $00, $09, $00 + db $f0, $08, $0a, $00 + db $f0, $10, $0b, $00 + db $f8, $e8, $0c, $00 + db $f8, $f0, $0d, $00 + db $f8, $f8, $0e, $00 + db $f8, $00, $0f, $00 + db $f8, $08, $10, $00 + db $f8, $10, $11, $00 + db $00, $e8, $12, $00 + db $00, $f0, $13, $00 + db $00, $f8, $14, $00 + db $00, $00, $15, $00 + db $00, $08, $16, $00 + db $00, $10, $17, $00 + db $08, $e8, $18, $00 + db $08, $f0, $19, $00 + db $08, $f8, $1a, $00 + db $08, $00, $1b, $00 + db $08, $08, $1c, $00 + db $08, $10, $1d, $00 + db $10, $e8, $1e, $00 + db $10, $f0, $1f, $00 + db $10, $f8, $20, $00 + db $10, $00, $21, $00 + db $10, $08, $22, $00 + db $10, $10, $23, $00 +; 8dd8a + +Unknown_8dd8a: ; 8dd8a + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $01, $00 + db $00, $f8, $02, $00 + db $00, $00, $03, $00 +; 8dd9b + +Unknown_8dd9b: ; 8dd9b + db 4 + db $f8, $f8, $00, $80 + db $f8, $00, $01, $80 + db $00, $f8, $02, $80 + db $00, $00, $03, $80 +; 8ddac + +Unknown_8ddac: ; 8ddac + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $01, $00 + db $00, $f8, $08, $00 + db $00, $00, $03, $00 +; 8ddbd + +Unknown_8ddbd: ; 8ddbd + db 4 + db $f8, $f8, $04, $00 + db $f8, $00, $05, $00 + db $00, $f8, $08, $00 + db $00, $00, $07, $00 +; 8ddce + +Unknown_8ddce: ; 8ddce + db 4 + db $f8, $f8, $00, $00 + db $f8, $00, $01, $00 + db $00, $f8, $09, $00 + db $00, $00, $03, $00 +; 8dddf + +Unknown_8dddf: ; 8dddf + db 4 + db $f8, $f8, $04, $00 + db $f8, $00, $05, $00 + db $00, $f8, $09, $00 + db $00, $00, $07, $00 +; 8ddf0 + +Unknown_8ddf0: ; 8ddf0 + db 6 + db $f8, $f4, $00, $01 + db $f8, $fc, $01, $01 + db $f8, $04, $02, $01 + db $00, $f4, $10, $01 + db $00, $fc, $11, $01 + db $00, $04, $12, $01 +; 8de09 + +Unknown_8de09: ; 8de09 + db 29 + db $e8, $e8, $00, $00 + db $e8, $f0, $01, $00 + db $e8, $f8, $02, $00 + db $e8, $00, $03, $00 + db $f0, $e8, $10, $00 + db $f0, $f0, $11, $00 + db $f0, $f8, $12, $00 + db $f0, $00, $13, $00 + db $f8, $e8, $20, $00 + db $f8, $f0, $21, $00 + db $f8, $f8, $22, $00 + db $f8, $00, $23, $00 + db $f8, $08, $24, $00 + db $00, $e8, $30, $80 + db $00, $f0, $31, $80 + db $00, $f8, $32, $80 + db $00, $00, $33, $80 + db $00, $08, $34, $80 + db $08, $e8, $40, $80 + db $08, $f0, $41, $80 + db $08, $f8, $42, $80 + db $08, $00, $43, $80 + db $08, $08, $44, $80 + db $08, $10, $45, $80 + db $10, $f0, $51, $80 + db $10, $f8, $52, $80 + db $10, $00, $53, $80 + db $10, $08, $54, $80 + db $10, $10, $55, $80 +; 8de7e + +Unknown_8de7e: ; 8de7e + db 2 + db $f8, $fc, $00, $00 + db $00, $fc, $10, $00 +; 8de87 + +Unknown_8de87: ; 8de87 + db 5 + db $f0, $18, $00, $00 + db $f0, $20, $01, $00 + db $f8, $10, $02, $00 + db $f8, $18, $03, $00 + db $00, $10, $04, $00 +; 8de9c + +Unknown_8de9c: ; 8de9c + db 1 + db $fc, $fc, $00, $06 +; 8dea1 + +Unknown_8dea1: ; 8dea1 + db 4 + db $f8, $f8, $00, $06 + db $f8, $00, $01, $06 + db $00, $f8, $02, $06 + db $00, $00, $03, $06 +; 8deb2 + +Unknown_8deb2: ; 8deb2 + db 4 + db $ff, $ff, $00, $00 + db $ff, $00, $00, $20 + db $00, $ff, $00, $40 + db $00, $00, $00, $60 +; 8dec3 + +Unknown_8dec3: ; 8dec3 + db 10 + db $ff, $00, $00, $00 + db $ff, $08, $01, $00 + db $ff, $10, $01, $00 + db $ff, $18, $01, $00 + db $ff, $20, $00, $20 + db $00, $00, $00, $40 + db $00, $08, $01, $40 + db $00, $10, $01, $40 + db $00, $18, $01, $40 + db $00, $20, $00, $60 +; 8deec + +Unknown_8deec: ; 8deec + db 15 + db $ec, $f4, $00, $11 + db $ec, $fc, $01, $11 + db $ec, $04, $02, $11 + db $f4, $f4, $03, $11 + db $f4, $fc, $04, $11 + db $f4, $04, $05, $11 + db $fc, $f4, $06, $11 + db $fc, $fc, $07, $11 + db $fc, $04, $08, $11 + db $04, $f4, $09, $11 + db $04, $fc, $0a, $11 + db $04, $04, $0b, $11 + db $0c, $f4, $0c, $11 + db $0c, $fc, $0d, $11 + db $0c, $04, $0e, $11 +; 8df29 + +Unknown_8df29: ; 8df29 + db 6 + db $f4, $f4, $00, $15 + db $f4, $fc, $02, $15 + db $f4, $04, $00, $35 + db $04, $f4, $04, $15 + db $04, $fc, $06, $15 + db $04, $04, $04, $35 +; 8df42 + +Unknown_8df42: ; 8df42 + db 6 + db $f4, $f4, $00, $16 + db $f4, $fc, $02, $16 + db $f4, $04, $04, $16 + db $04, $f4, $06, $16 + db $04, $fc, $08, $16 + db $04, $04, $0a, $16 +; 8df5b + +Unknown_8df5b: ; 8df5b + db 6 + db $f4, $f4, $00, $16 + db $f4, $fc, $02, $16 + db $f4, $04, $04, $16 + db $04, $f4, $0c, $16 + db $04, $fc, $0e, $16 + db $04, $04, $10, $16 +; 8df74 + +Unknown_8df74: ; 8df74 + db 6 + db $f4, $f4, $00, $16 + db $f4, $fc, $02, $16 + db $f4, $04, $04, $16 + db $04, $f4, $12, $16 + db $04, $fc, $14, $16 + db $04, $04, $16, $16 +; 8df8d + +Unknown_8df8d: ; 8df8d + db 6 + db $f4, $f4, $00, $16 + db $f4, $fc, $02, $16 + db $f4, $04, $04, $16 + db $04, $f4, $18, $16 + db $04, $fc, $1a, $16 + db $04, $04, $1c, $16 +; 8dfa6 + +Unknown_8dfa6: ; 8dfa6 + db 6 + db $f4, $f4, $1e, $16 + db $f4, $fc, $20, $16 + db $f4, $04, $22, $16 + db $04, $f4, $24, $16 + db $04, $fc, $26, $16 + db $04, $04, $28, $16 +; 8dfbf + +Unknown_8dfbf: ; 8dfbf + db 3 + db $f4, $fc, $00, $10 + db $fc, $fc, $00, $10 + db $04, $fc, $00, $10 +; 8dfcc + +Unknown_8dfcc: ; 8dfcc + db 6 + db $00, $00, $00, $00 + db $00, $08, $01, $00 + db $00, $10, $01, $00 + db $00, $18, $01, $00 + db $00, $20, $02, $00 + db $00, $28, $03, $00 +; 8dfe5 + +Unknown_8dfe5: ; 8dfe5 + db 4 + db $00, $00, $00, $00 + db $00, $08, $01, $00 + db $00, $10, $02, $00 + db $00, $18, $03, $00 +; 8dff6 + +Unknown_8dff6: ; 8dff6 + db 4 + db $f8, $f6, $00, $06 + db $f8, $02, $01, $06 + db $00, $f6, $02, $06 + db $00, $02, $03, $06 +; 8e007 + +Unknown_8e007: ; 8e007 + db 4 + db $f8, $f4, $00, $06 + db $f8, $04, $01, $06 + db $00, $f4, $02, $06 + db $00, $04, $03, $06 +; 8e018 + +Unknown_8e018: ; 8e018 + db 4 + db $f8, $f0, $00, $06 + db $f8, $08, $01, $06 + db $00, $f0, $02, $06 + db $00, $08, $03, $06 +; 8e029 + +Unknown_8e029: ; 8e029 + db 19 + db $f8, $e0, $00, $00 + db $f0, $e8, $02, $00 + db $00, $e8, $04, $00 + db $e8, $f0, $06, $00 + db $f8, $f0, $08, $00 + db $08, $f0, $0a, $00 + db $e8, $f8, $0c, $00 + db $f8, $f8, $0e, $00 + db $08, $f8, $10, $00 + db $e8, $00, $12, $00 + db $f8, $00, $14, $00 + db $08, $00, $16, $00 + db $e8, $08, $18, $00 + db $f8, $08, $1a, $00 + db $08, $08, $1c, $00 + db $f8, $10, $1e, $00 + db $08, $10, $20, $00 + db $f0, $18, $22, $00 + db $00, $18, $24, $00 +; 8e076 + +Unknown_8e076: ; 8e076 + db 16 + db $f8, $e0, $00, $00 + db $f0, $e8, $02, $00 + db $00, $e8, $04, $00 + db $f8, $f0, $26, $00 + db $08, $f0, $0a, $00 + db $e8, $f8, $28, $00 + db $f8, $f8, $2a, $00 + db $08, $f8, $10, $00 + db $f8, $00, $2c, $00 + db $08, $00, $16, $00 + db $f8, $08, $30, $00 + db $08, $08, $1c, $00 + db $f8, $10, $1e, $00 + db $08, $10, $20, $00 + db $f0, $18, $22, $00 + db $00, $18, $24, $00 +; 8e0b7 + +Unknown_8e0b7: ; 8e0b7 + db 15 + db $f8, $e0, $00, $00 + db $f0, $e8, $02, $00 + db $00, $e8, $32, $00 + db $f8, $f0, $34, $00 + db $08, $f0, $36, $00 + db $f8, $f8, $38, $00 + db $08, $f8, $3a, $00 + db $f8, $00, $3c, $00 + db $08, $00, $3e, $00 + db $f8, $08, $30, $00 + db $08, $08, $1c, $00 + db $f8, $10, $1e, $00 + db $08, $10, $20, $00 + db $f0, $18, $22, $00 + db $00, $18, $24, $00 +; 8e0f4 + +Unknown_8e0f4: ; 8e0f4 + db 17 + db $f8, $e0, $00, $00 + db $f0, $e8, $02, $00 + db $00, $e8, $04, $00 + db $f8, $f0, $40, $00 + db $08, $f0, $42, $00 + db $18, $f0, $44, $00 + db $f8, $f8, $46, $00 + db $08, $f8, $48, $00 + db $18, $f8, $4a, $00 + db $f8, $00, $4c, $00 + db $08, $00, $4e, $00 + db $f8, $08, $30, $00 + db $08, $08, $1c, $00 + db $f8, $10, $1e, $00 + db $08, $10, $20, $00 + db $f0, $18, $22, $00 + db $00, $18, $24, $00 +; 8e139 + +Unknown_8e139: ; 8e139 + db 17 + db $f8, $e0, $00, $00 + db $f0, $e8, $02, $00 + db $00, $e8, $04, $00 + db $f8, $f0, $50, $00 + db $08, $f0, $0a, $00 + db $e8, $f8, $52, $00 + db $f8, $f8, $54, $00 + db $08, $f8, $10, $00 + db $e8, $00, $56, $00 + db $f8, $00, $2e, $00 + db $08, $00, $16, $00 + db $f8, $08, $30, $00 + db $08, $08, $1c, $00 + db $f8, $10, $1e, $00 + db $08, $10, $20, $00 + db $f0, $18, $22, $00 + db $00, $18, $24, $00 +; 8e17e + +Unknown_8e17e: ; 8e17e + db 1 + db $fc, $fc, $00, $11 +; 8e183 + +Unknown_8e183: ; 8e183 + db 12 + db $00, $00, $30, $00 + db $00, $08, $31, $00 + db $00, $10, $31, $00 + db $00, $18, $31, $00 + db $00, $20, $31, $00 + db $00, $28, $32, $00 + db $08, $00, $33, $00 + db $08, $08, $34, $00 + db $08, $10, $34, $00 + db $08, $18, $34, $00 + db $08, $20, $34, $00 + db $08, $28, $35, $00 +; 8e1b4 + +Unknown_8e1b4: ; 8e1b4 + db 1 + db $00, $00, $ed, $00 +; 8e1b9 + +Unknown_8e1b9: ; 8e1b9 + db 4 + db $ff, $ff, $30, $00 + db $ff, $01, $32, $00 + db $01, $ff, $33, $00 + db $01, $01, $35, $00 +; 8e1ca + +Unknown_8e1ca: ; 8e1ca + db 8 + db $ff, $ff, $30, $00 + db $ff, $04, $31, $00 + db $ff, $0c, $31, $00 + db $ff, $11, $32, $00 + db $01, $ff, $33, $00 + db $01, $04, $34, $00 + db $01, $0c, $34, $00 + db $01, $11, $35, $00 +; 8e1eb + +Unknown_8e1eb: ; 8e1eb + db 1 + db $00, $00, $34, $00 +; 8e1f0 + +Unknown_8e1f0: ; 8e1f0 + db 2 + db $00, $00, $30, $00 + db $08, $00, $33, $00 +; 8e1f9 + +Unknown_8e1f9: ; 8e1f9 + db 2 + db $00, $00, $32, $00 + db $08, $00, $35, $00 +; 8e202 + +Unknown_8e202: ; 8e202 + db 4 + db $f8, $f8, $00, $01 + db $f8, $00, $01, $01 + db $00, $f8, $02, $01 + db $00, $00, $03, $01 +; 8e213 + +Unknown_8e213: ; 8e213 + db 4 + db $f8, $f8, $00, $81 + db $f8, $00, $01, $81 + db $00, $f8, $02, $81 + db $00, $00, $03, $81 +; 8e224 + +Unknown_8e224: ; 8e224 + db 1 + db $fc, $fc, $00, $02 +; 8e229 + +Unknown_8e229: ; 8e229 + db 4 + db $f0, $fc, $00, $03 + db $f8, $fc, $01, $03 + db $00, $fc, $02, $03 + db $08, $fc, $03, $03 +; 8e23a + +Unknown_8e23a: ; 8e23a + db 4 + db $f0, $fc, $03, $44 + db $f8, $fc, $02, $44 + db $00, $fc, $01, $44 + db $08, $fc, $00, $44 +; 8e24b + +Unknown_8e24b: ; 8e24b + db 4 + db $f8, $f8, $00, $01 + db $f8, $00, $00, $21 + db $00, $f8, $00, $41 + db $00, $00, $00, $61 +; 8e25c + +Unknown_8e25c: ; 8e25c + db 8 + db $f4, $f4, $00, $01 + db $f4, $fc, $01, $01 + db $f4, $04, $00, $21 + db $fc, $f4, $02, $01 + db $fc, $04, $02, $21 + db $04, $f4, $00, $41 + db $04, $fc, $01, $41 + db $04, $04, $00, $61 +; 8e27d + +Unknown_8e27d: ; 8e27d + db 12 + db $f0, $f0, $00, $01 + db $f0, $f8, $01, $01 + db $f8, $f0, $02, $01 + db $f0, $00, $01, $21 + db $f0, $08, $00, $21 + db $f8, $08, $02, $21 + db $00, $f0, $02, $41 + db $08, $f0, $00, $41 + db $08, $f8, $01, $41 + db $00, $08, $02, $61 + db $08, $00, $01, $61 + db $08, $08, $00, $61 +; 8e2ae + +Unknown_8e2ae: ; 8e2ae + db 36 + db $e8, $08, $05, $00 + db $e8, $10, $06, $00 + db $e8, $18, $07, $00 + db $f0, $e8, $11, $00 + db $f0, $f0, $12, $00 + db $f0, $f8, $13, $00 + db $f0, $00, $14, $00 + db $f0, $08, $15, $00 + db $f0, $10, $16, $00 + db $f0, $18, $17, $00 + db $f8, $e0, $20, $00 + db $f8, $e8, $21, $00 + db $f8, $f0, $22, $00 + db $f8, $f8, $23, $00 + db $f8, $00, $24, $00 + db $f8, $08, $25, $00 + db $f8, $10, $26, $00 + db $f8, $18, $27, $00 + db $00, $e0, $30, $00 + db $00, $e8, $31, $00 + db $00, $f0, $32, $00 + db $00, $f8, $33, $00 + db $00, $00, $34, $00 + db $00, $08, $35, $00 + db $00, $10, $36, $00 + db $08, $e0, $40, $00 + db $08, $e8, $41, $00 + db $08, $f0, $42, $00 + db $08, $f8, $43, $00 + db $08, $00, $44, $00 + db $08, $08, $45, $00 + db $08, $10, $46, $00 + db $08, $18, $47, $00 + db $10, $e0, $50, $00 + db $10, $e8, $51, $00 + db $10, $18, $57, $00 +; 8e33f + +Unknown_8e33f: ; 8e33f + db 28 + db $e8, $00, $04, $00 + db $e8, $08, $05, $00 + db $e8, $10, $06, $00 + db $f0, $e8, $11, $00 + db $f0, $f0, $12, $00 + db $f0, $f8, $13, $00 + db $f0, $00, $14, $00 + db $f0, $08, $15, $00 + db $f0, $10, $16, $00 + db $f8, $e8, $21, $00 + db $f8, $f0, $22, $00 + db $f8, $f8, $23, $00 + db $f8, $00, $24, $00 + db $f8, $08, $25, $00 + db $f8, $10, $26, $00 + db $00, $e0, $30, $00 + db $00, $e8, $31, $00 + db $00, $f0, $32, $00 + db $00, $f8, $33, $00 + db $00, $00, $34, $00 + db $00, $08, $35, $00 + db $08, $f0, $42, $00 + db $08, $f8, $43, $00 + db $08, $00, $44, $00 + db $08, $08, $45, $00 + db $10, $f8, $53, $00 + db $10, $00, $54, $00 + db $10, $08, $55, $00 +; 8e3b0 + +Unknown_8e3b0: ; 8e3b0 + db 30 + db $e8, $00, $04, $00 + db $e8, $08, $05, $00 + db $f0, $e8, $11, $00 + db $f0, $f0, $12, $00 + db $f0, $f8, $13, $00 + db $f0, $00, $14, $00 + db $f0, $08, $15, $00 + db $f0, $10, $16, $00 + db $f0, $18, $17, $00 + db $f8, $e0, $20, $00 + db $f8, $e8, $21, $00 + db $f8, $f0, $22, $00 + db $f8, $f8, $23, $00 + db $f8, $00, $24, $00 + db $f8, $08, $25, $00 + db $f8, $10, $26, $00 + db $00, $e0, $30, $00 + db $00, $e8, $31, $00 + db $00, $f0, $32, $00 + db $00, $f8, $33, $00 + db $00, $00, $34, $00 + db $00, $08, $35, $00 + db $08, $f0, $42, $00 + db $08, $f8, $43, $00 + db $08, $00, $44, $00 + db $08, $08, $45, $00 + db $10, $f0, $52, $00 + db $10, $f8, $53, $00 + db $10, $00, $54, $00 + db $10, $08, $55, $00 +; 8e429 + +Unknown_8e429: ; 8e429 + db 31 + db $f0, $e8, $11, $00 + db $f0, $f0, $12, $00 + db $f0, $f8, $13, $00 + db $f0, $00, $14, $00 + db $f0, $08, $15, $00 + db $f0, $10, $16, $00 + db $f0, $18, $17, $00 + db $f8, $e0, $20, $00 + db $f8, $e8, $21, $00 + db $f8, $f0, $22, $00 + db $f8, $f8, $23, $00 + db $f8, $00, $24, $00 + db $f8, $08, $25, $00 + db $f8, $10, $26, $00 + db $f8, $18, $27, $00 + db $00, $e0, $30, $00 + db $00, $e8, $31, $00 + db $00, $f0, $32, $00 + db $00, $f8, $33, $00 + db $00, $00, $34, $00 + db $00, $08, $35, $00 + db $00, $10, $36, $00 + db $08, $e8, $41, $00 + db $08, $f0, $42, $00 + db $08, $f8, $43, $00 + db $08, $00, $44, $00 + db $08, $08, $45, $00 + db $10, $e8, $51, $00 + db $10, $f0, $52, $00 + db $10, $00, $54, $00 + db $10, $08, $55, $00 +; 8e4a6 + +Unknown_8e4a6: ; 8e4a6 + db 25 + db $ec, $ec, $00, $09 + db $ec, $f4, $01, $09 + db $ec, $fc, $02, $09 + db $ec, $04, $03, $09 + db $ec, $0c, $04, $09 + db $f4, $ec, $10, $09 + db $f4, $f4, $11, $09 + db $f4, $fc, $12, $09 + db $f4, $04, $13, $09 + db $f4, $0c, $14, $09 + db $fc, $ec, $20, $09 + db $fc, $f4, $21, $09 + db $fc, $fc, $22, $09 + db $fc, $04, $23, $09 + db $fc, $0c, $24, $09 + db $04, $ec, $30, $09 + db $04, $f4, $31, $09 + db $04, $fc, $32, $09 + db $04, $04, $33, $09 + db $04, $0c, $34, $09 + db $0c, $ec, $40, $09 + db $0c, $f4, $41, $09 + db $0c, $fc, $42, $09 + db $0c, $04, $43, $09 + db $0c, $0c, $44, $09 +; 8e50b + +Unknown_8e50b: ; 8e50b + db 16 + db $f0, $ec, $00, $0a + db $f0, $f4, $01, $0a + db $f0, $fc, $02, $0a + db $f0, $04, $03, $0a + db $f8, $ec, $04, $0a + db $f8, $f4, $05, $0a + db $f8, $fc, $06, $0a + db $f8, $04, $07, $0a + db $00, $ec, $08, $0a + db $00, $f4, $09, $0a + db $00, $fc, $0a, $0a + db $00, $04, $0b, $0a + db $08, $ec, $0c, $0a + db $08, $f4, $0d, $0a + db $08, $fc, $0e, $0a + db $08, $04, $0f, $0a +; 8e54c + +Unknown_8e54c: ; 8e54c + db 1 + db $fc, $fc, $00, $00 +; 8e551 + +Unknown_8e551: ; 8e551 + db 3 + db $00, $f8, $00, $00 + db $f8, $f8, $01, $00 + db $f8, $00, $02, $00 +; 8e55e + +Unknown_8e55e: ; 8e55e + db 7 + db $08, $f0, $00, $00 + db $00, $f0, $01, $00 + db $f8, $f0, $02, $00 + db $f8, $f8, $03, $00 + db $f0, $f8, $04, $00 + db $f0, $00, $05, $00 + db $f0, $08, $06, $00 +; 8e57b + +Unknown_8e57b: ; 8e57b + db 8 + db $f8, $f0, $00, $00 + db $f8, $f8, $01, $00 + db $f8, $00, $01, $20 + db $f8, $08, $00, $20 + db $00, $f0, $00, $40 + db $00, $f8, $01, $40 + db $00, $00, $01, $60 + db $00, $08, $00, $60 +; 8e59c + +Unknown_8e59c: ; 8e59c + db 12 + db $e8, $f8, $00, $00 + db $f0, $f8, $01, $00 + db $f8, $f8, $02, $00 + db $e8, $00, $00, $20 + db $f0, $00, $01, $20 + db $f8, $00, $02, $20 + db $00, $f8, $02, $40 + db $08, $f8, $01, $40 + db $10, $f8, $00, $40 + db $00, $00, $02, $60 + db $08, $00, $01, $60 + db $10, $00, $00, $60 +; 8e5cd + +Unknown_8e5cd: ; 8e5cd + db 20 + db $ec, $f0, $00, $00 + db $ec, $f8, $01, $00 + db $ec, $00, $02, $00 + db $ec, $08, $03, $00 + db $f4, $f0, $04, $00 + db $f4, $f8, $05, $00 + db $f4, $00, $06, $00 + db $f4, $08, $07, $00 + db $fc, $f0, $08, $00 + db $fc, $f8, $09, $00 + db $fc, $00, $0a, $00 + db $fc, $08, $0b, $00 + db $04, $f0, $0c, $00 + db $04, $f8, $0d, $00 + db $04, $00, $0e, $00 + db $04, $08, $0f, $00 + db $0c, $f0, $10, $00 + db $0c, $f8, $11, $00 + db $0c, $00, $12, $00 + db $0c, $08, $13, $00 +; 8e61e + +Unknown_8e61e: ; 8e61e + db 20 + db $00, $08, $00, $81 + db $08, $10, $00, $81 + db $10, $18, $00, $81 + db $18, $20, $00, $81 + db $20, $28, $00, $81 + db $18, $30, $00, $81 + db $10, $38, $00, $81 + db $08, $40, $00, $81 + db $00, $48, $00, $81 + db $08, $50, $00, $81 + db $10, $58, $00, $81 + db $18, $60, $00, $81 + db $20, $68, $00, $81 + db $18, $70, $00, $81 + db $10, $78, $00, $81 + db $08, $80, $00, $81 + db $00, $88, $00, $81 + db $08, $90, $00, $81 + db $10, $98, $00, $81 + db $18, $a0, $00, $81 +; 8e66f + +Unknown_8e66f: ; 8e66f + db 4 + db $f8, $f8, $00, $02 + db $f8, $00, $01, $02 + db $00, $f8, $02, $02 + db $00, $00, $03, $02 +; 8e680 + +Unknown_8e680: ; 8e680 + db 9 + db $f0, $f4, $00, $01 + db $f0, $fc, $01, $01 + db $f0, $04, $02, $01 + db $f8, $f4, $10, $01 + db $f8, $fc, $11, $01 + db $f8, $04, $12, $01 + db $00, $f4, $20, $01 + db $00, $fc, $21, $01 + db $00, $04, $22, $01 +; 8e6a5 + +Unknown_8e6a5: ; 8e6a5 + db 24 + db $d8, $f4, $00, $01 + db $d8, $fc, $01, $01 + db $d8, $04, $02, $01 + db $d8, $0c, $03, $01 + db $e0, $f4, $10, $01 + db $e0, $fc, $11, $01 + db $e0, $04, $12, $01 + db $e0, $0c, $13, $01 + db $e8, $f4, $20, $01 + db $e8, $fc, $21, $01 + db $e8, $04, $22, $01 + db $e8, $0c, $23, $01 + db $f0, $f4, $30, $01 + db $f0, $fc, $31, $01 + db $f0, $04, $32, $01 + db $f0, $0c, $33, $01 + db $f8, $f4, $40, $01 + db $f8, $fc, $41, $01 + db $f8, $04, $42, $01 + db $f8, $0c, $43, $01 + db $00, $f4, $50, $01 + db $00, $fc, $51, $01 + db $00, $04, $52, $01 + db $00, $0c, $53, $01 +; 8e706 +Unknown_8e706: ; Broken 2bpp pointers + dbbw $80, $01, $672a ; 128-tile 2bpp at 1:672a (inside Multiply) + dbbw $80, $01, $672a + dbbw $80, $01, $672a + dbbw $80, $01, $672a + dbbw $10, $37, $672a ; 16-tile 2bpp at 37:672a (within Tileset11GFX) + dbbw $10, $11, $672a ; 16-tile 2bpp at 11:672a (empty data) + dbbw $10, $39, $672a ; 16-tile 2bpp at 39:672a (empty data) + dbbw $10, $24, $672a ; 16-tile 2bpp at 24:672a (inside Function926f7) + dbbw $10, $21, $672a ; 16-tile 2bpp at 21:672a (inside Function8671c) + +Function8e72a: ; 8e72a + add $10 +Function8e72c: ; 8e72c + and $3f + cp $20 + jr nc, .asm_8e737 + call Function8e741 + ld a, h + ret -GetSpriteLength: ; 14386 -; Return the length of sprite type a in tiles. +.asm_8e737 + and $1f + call Function8e741 + ld a, h + xor $ff ; cpl + inc a + ret +; 8e741 - cp WALKING_SPRITE - jr z, .AnyDirection - cp STANDING_SPRITE - jr z, .AnyDirection - cp STILL_SPRITE - jr z, .OneDirection +Function8e741: ; 8e741 + ld e, a + ld a, d + ld d, 0 + ld hl, Unknown_8e75d +rept 2 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 +.asm_8e750 + srl a + jr nc, .asm_8e755 + add hl, de - ld a, 12 +.asm_8e755 + sla e + rl d + and a + jr nz, .asm_8e750 ret +; 8e75d + +Unknown_8e75d: ; 8e75d + sine_wave $100 -.AnyDirection - ld a, 12 - ret -.OneDirection - ld a, 4 +Function8e79d: ; 8e79d + ld a, [hSGB] + ld de, GFX_8e7f4 + and a + jr z, .asm_8e7a8 + ld de, GFX_8e804 + +.asm_8e7a8 + ld hl, VTiles0 + lb bc, BANK(GFX_8e7f4), 1 + call Request2bpp + ld c, $8 + ld d, $0 +.asm_8e7b5 + push bc + call Function8e7c6 + call DelayFrame + pop bc +rept 2 + inc d +endr + dec c + jr nz, .asm_8e7b5 + call ClearSprites ret -; 1439b +; 8e7c6 +Function8e7c6: ; 8e7c6 + ld hl, Sprites + ld c, $8 +.asm_8e7cb + ld a, c + and a + ret z + dec c + ld a, c + sla a + sla a + sla a + push af + push de + push hl + call Function8e72c + pop hl + pop de + add $68 + ld [hli], a + pop af + push de + push hl + call Function8e72a + pop hl + pop de + add $54 + ld [hli], a + ld a, $0 + ld [hli], a + ld a, $6 + ld [hli], a + jr .asm_8e7cb +; 8e7f4 + +GFX_8e7f4: ; 8e7f4 +INCBIN "gfx/unknown/08e7f4.2bpp" +GFX_8e804: ; 8e804 +INCBIN "gfx/unknown/08e804.2bpp" -Function1439b: ; 1439b - ld hl, UsedSprites - ld c, SPRITE_GFX_LIST_CAPACITY +ClearSpriteAnims: ; 8e814 + push hl + push de + push bc + push af + ld hl, wSpriteAnimDict + ld bc, wSpriteAnimsEnd - wSpriteAnimDict .loop - ld a, [wSpriteFlags] - res 5, a - ld [wSpriteFlags], a + ld [hl], $0 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + pop af + pop bc + pop de + pop hl + ret +; 8e82b + +Function8e82b: ; 8e82b + ld a, e + call ReadMonMenuIcon + ld l, a + ld h, 0 + add hl, hl + ld de, IconPointers + add hl, de ld a, [hli] - and a - jr z, .done - ld [hUsedSpriteIndex], a + ld e, a + ld d, [hl] + ld b, BANK(Icons) + ld c, 8 + ret +; 8e83f + +Function8e83f: ; 8e83f + push hl + push de + push bc + call Function8e849 + pop bc + pop de + pop hl + ret +; 8e849 + +Function8e849: ; 8e849 + ld d, 0 + ld hl, Jumptable_8e854 +rept 2 + add hl, de +endr ld a, [hli] - ld [hUsedSpriteTile], a - bit 7, a - jr z, .dont_set - ld a, [wSpriteFlags] - set 5, a - ld [wSpriteFlags], a - -.dont_set + ld h, [hl] + ld l, a + jp [hl] +; 8e854 + + +Jumptable_8e854: ; 8e854 (23:6854) + dw Function8e8d5 + dw Function8e961 + dw Function8e97d + dw Function8e99a + dw Function8e898 + dw Function8e8b1 + dw Function8e862 + + +Function8e862: ; 8e862 (23:6862) + call Function8e908 + call Function8e86c + call Function8e936 + ret + +Function8e86c: ; 8e86c (23:686c) push bc + ld a, [hObjectStructIndexBuffer] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + ld a, [hl] + and a + jr z, .asm_8e890 push hl - call Function143c8 - pop hl + push bc + ld d, a + callab ItemIsMail pop bc - dec c - jr nz, .loop + pop hl + jr c, .asm_8e88e + ld a, $6 + jr .asm_8e892 +.asm_8e88e + ld a, $5 +.asm_8e890 + ld a, $4 +.asm_8e892 + ld hl, $1 + add hl, bc + ld [hl], a + ret -.done +Function8e898: ; 8e898 (23:6898) + call Function8e8d5 + ld hl, $2 + add hl, bc + ld a, $0 + ld [hl], a + ld hl, $4 + add hl, bc + ld a, $48 + ld [hl], a + ld hl, $5 + add hl, bc + ld a, $48 + ld [hl], a + ret + +Function8e8b1: ; 8e8b1 (23:68b1) + call Function8e908 + call Function8e936 + ld hl, $2 + add hl, bc + ld a, $0 + ld [hl], a + ld hl, $4 + add hl, bc + ld a, $18 + ld [hl], a + ld hl, $5 + add hl, bc + ld a, $60 + ld [hl], a + ld a, c + ld [wc608], a + ld a, b + ld [wc608 + 1], a + ret + +Function8e8d5: ; 8e8d5 (23:68d5) + call Function8e908 + call Function8e8df + call Function8e936 ret -; 143c8 -Function143c8: ; 143c8 - ld a, [hUsedSpriteIndex] - call SafeGetSprite - ld a, [hUsedSpriteTile] - call .GetTileAddr +Function8e8df: ; 8e8df (23:68df) + push bc + ld a, [hObjectStructIndexBuffer] + ld hl, PartyMon1Item + ld bc, $30 + call AddNTimes + pop bc + ld a, [hl] + and a + ret z push hl - push de push bc - ld a, [wSpriteFlags] - bit 7, a - jr nz, .skip - call .CopyToVram - -.skip + ld d, a + callab ItemIsMail pop bc - ld l, c - ld h, $0 + pop hl + jr c, .asm_8e900 + ld a, $3 + jr .asm_8e902 +.asm_8e900 + ld a, $2 +.asm_8e902 + ld hl, $1 + add hl, bc + ld [hl], a + ret + +Function8e908: ; 8e908 (23:6908) + ld a, [wc3b7] + push af + ld a, [hObjectStructIndexBuffer] + ld hl, PartySpecies + ld e, a + ld d, $0 + add hl, de + ld a, [hl] + call ReadMonMenuIcon + ld [CurIcon], a + call Function8e9db + ld a, [hObjectStructIndexBuffer] +; y coord rept 4 - add hl, hl + add a endr - pop de + add $1c + ld d, a +; x coord + ld e, $10 +; type is partymon icon + ld a, SPRITE_ANIM_INDEX_00 + call InitSpriteAnimStruct + pop af + ld hl, $3 + add hl, bc + ld [hl], a + ret + +Function8e936: ; 8e936 (23:6936) + push bc + ld a, [hObjectStructIndexBuffer] + ld b, a + call Function8e94c + ld a, b + pop bc + ld hl, $9 + add hl, bc + ld [hl], a + rlca + rlca + ld hl, $d + add hl, bc + ld [hl], a + ret + +Function8e94c: ; 8e94c (23:694c) + callba PlacePartymonHPBar + call GetHPPal + ld e, d + ld d, 0 + ld hl, Unknown_8e95e add hl, de - ld d, h - ld e, l - pop hl - ld a, [wSpriteFlags] - bit 5, a - jr nz, .done - bit 6, a - jr nz, .done - ld a, [hUsedSpriteIndex] - call _DoesSpriteHaveFacings - jr c, .done - ld a, h - add $8 - ld h, a - call .CopyToVram + ld b, [hl] + ret +; 8e95e (23:695e) -.done +Unknown_8e95e: ; 8e95e + db $00, $40, $80 +; 8e961 + +Function8e961: ; 8e961 (23:6961) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + xor a + call GetIconGFX + lb de, $24, $20 + ld a, SPRITE_ANIM_INDEX_00 + call InitSpriteAnimStruct + ld hl, $2 + add hl, bc + ld [hl], $0 + ret + +Function8e97d: ; 8e97d (23:697d) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + xor a + call GetIconGFX + ld d, $1a + ld e, $24 + ld a, SPRITE_ANIM_INDEX_00 + call InitSpriteAnimStruct + ld hl, $2 + add hl, bc + ld [hl], $0 + ret + +Function8e99a: ; 8e99a (23:699a) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + ld a, $62 + ld [wc3b7], a + call Function8e9db + ret + +GetSpeciesIcon: ; 8e9ac +; Load species icon into VRAM at tile a + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + ld a, e + call GetIconGFX + ret +; 8e9bc + + +Function8e9bc: ; 8e9bc (23:69bc) + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + ld a, e + call GetIcon_a + ret +; 8e9cc (23:69cc) + +Function8e9cc: ; 8e9cc + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + call GetIcon_de + ret +; 8e9db + +Function8e9db: ; 8e9db (23:69db) + ld a, [wc3b7] + +GetIconGFX: ; 8e9de + call GetIcon_a + ld de, $80 ; 8 tiles + add hl, de + ld de, HeldItemIcons + lb bc, BANK(HeldItemIcons), 2 + call GetGFXUnlessMobile + ld a, [wc3b7] + add 10 + ld [wc3b7], a ret -; 14406 -.GetTileAddr: ; 14406 -; Return the address of tile (a) in (hl). - and $7f +HeldItemIcons: +INCBIN "gfx/icon/mail.2bpp" +INCBIN "gfx/icon/item.2bpp" +; 8ea17 + +GetIcon_de: ; 8ea17 +; Load icon graphics into VRAM starting from tile de. + ld l, e + ld h, d + jr GetIcon + +GetIcon_a: ; 8ea1b +; Load icon graphics into VRAM starting from tile a. ld l, a ld h, 0 + +GetIcon: ; 8ea1e +; Load icon graphics into VRAM starting from tile hl. + +; One tile is 16 bytes long. rept 4 add hl, hl endr - ld a, l - add VTiles0 % $100 + + ld de, VTiles0 + add hl, de + push hl + +; The icons are contiguous, in order and of the same +; size, so the pointer table is somewhat redundant. + ld a, [CurIcon] + push hl ld l, a - ld a, h - adc VTiles0 / $100 - ld h, a - ret -; 14418 + ld h, 0 + add hl, hl + ld de, IconPointers + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + pop hl -.CopyToVram: ; 14418 - ld a, [rVBK] - push af - ld a, [wSpriteFlags] - bit 5, a - ld a, $1 - jr z, .bankswitch + lb bc, BANK(Icons), 8 + call GetGFXUnlessMobile + + pop hl + ret +; 8ea3f + +GetGFXUnlessMobile: ; 8ea3f + ld a, [wLinkMode] + cp LINK_MOBILE + jp nz, Request2bpp + jp Get2bpp_2 +; 8ea4a + +Function8ea4a: ; 8ea4a + ld hl, wSpriteAnimationStructs + ld e, $6 + ld a, [MenuSelection2] + ld d, a +.loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .loadwithtwo ld a, $0 + jr .ok -.bankswitch - ld [rVBK], a - call Get2bpp - pop af - ld [rVBK], a +.loadwithtwo + ld a, $2 + +.ok + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], a + pop hl + +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop ret -; 1442f +; 8ea71 -LoadEmote:: ; 1442f -; Get the address of the pointer to emote c. - ld a, c - ld bc, 6 - ld hl, EmotesPointers - call AddNTimes -; Load the emote address into de - ld e, [hl] - inc hl - ld d, [hl] -; load the length of the emote (in tiles) into c - inc hl - ld c, [hl] - swap c -; load the emote pointer bank into b - inc hl - ld b, [hl] -; load the VRAM destination into hl - inc hl - ld a, [hli] - ld h, [hl] - ld l, a -; if the emote has a length of 0, do not proceed (error handling) - ld a, c +Function8ea71: ; 8ea71 + ld hl, wSpriteAnimationStructs + ld e, $6 +.loop + ld a, [hl] and a - ret z - call GetEmote2bpp - ret -; 1444d - -emote_header: MACRO - dw \1 - db \2 tiles, BANK(\1) - dw \3 -ENDM - -EmotesPointers: ; 144d -; dw source address -; db length, bank -; dw dest address - - emote_header ShockEmote, 4, VTiles1 tile $78 - emote_header QuestionEmote, 4, VTiles1 tile $78 - emote_header HappyEmote, 4, VTiles1 tile $78 - emote_header SadEmote, 4, VTiles1 tile $78 - emote_header HeartEmote, 4, VTiles1 tile $78 - emote_header BoltEmote, 4, VTiles1 tile $78 - emote_header SleepEmote, 4, VTiles1 tile $78 - emote_header FishEmote, 4, VTiles1 tile $78 - emote_header FishingRodGFX1, 1, VTiles1 tile $7c - emote_header FishingRodGFX2, 2, VTiles1 tile $7c - emote_header FishingRodGFX3, 2, VTiles1 tile $7e - emote_header FishingRodGFX4, 1, VTiles1 tile $7e -; 14495 - - -SpriteMons: ; 14495 - db UNOWN - db GEODUDE - db GROWLITHE - db WEEDLE - db SHELLDER - db ODDISH - db GENGAR - db ZUBAT - db MAGIKARP - db SQUIRTLE - db TOGEPI - db BUTTERFREE - db DIGLETT - db POLIWAG - db PIKACHU - db CLEFAIRY - db CHARMANDER - db JYNX - db STARMIE - db BULBASAUR - db JIGGLYPUFF - db GRIMER - db EKANS - db PARAS - db TENTACOOL - db TAUROS - db MACHOP - db VOLTORB - db LAPRAS - db RHYDON - db MOLTRES - db SNORLAX - db GYARADOS - db LUGIA - db HO_OH -; 144b8 - - -OutdoorSprites: ; 144b8 -; Valid sprite IDs for each map group. - - dw Group1Sprites - dw Group2Sprites - dw Group3Sprites - dw Group4Sprites - dw Group5Sprites - dw Group6Sprites - dw Group7Sprites - dw Group8Sprites - dw Group9Sprites - dw Group10Sprites - dw Group11Sprites - dw Group12Sprites - dw Group13Sprites - dw Group14Sprites - dw Group15Sprites - dw Group16Sprites - dw Group17Sprites - dw Group18Sprites - dw Group19Sprites - dw Group20Sprites - dw Group21Sprites - dw Group22Sprites - dw Group23Sprites - dw Group24Sprites - dw Group25Sprites - dw Group26Sprites -; 144ec - - -Group13Sprites: ; 144ec - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14503 - -Group23Sprites: ; 14503 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1451a - -Group14Sprites: ; 1451a - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14531 - -Group6Sprites: ; 14531 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14548 - -Group7Sprites: ; 14548 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_COOLTRAINER_M - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_POKEFAN_M - db SPRITE_ROCKET - db SPRITE_MISTY - db SPRITE_POKE_BALL - db SPRITE_SLOWPOKE -; 1455f - -Group25Sprites: ; 1455f - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_COOLTRAINER_M - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_POKEFAN_M - db SPRITE_ROCKET - db SPRITE_MISTY - db SPRITE_POKE_BALL - db SPRITE_SLOWPOKE -; 14576 - -Group21Sprites: ; 14576 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_POLIWAG - db SPRITE_TEACHER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_BIKER - db SPRITE_SILVER - db SPRITE_BLUE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1458d - -Group18Sprites: ; 1458d - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_MACHOP - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_BIG_SNORLAX - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 145a4 - -Group12Sprites: ; 145a4 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_MACHOP - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_BIG_SNORLAX - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 145bb - -Group17Sprites: ; 145bb - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_MACHOP - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_BIG_SNORLAX - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 145d2 - -Group16Sprites: ; 145d2 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_BUENA - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_MACHOP - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_BOULDER -; 145e9 - -Group24Sprites: ; 145e9 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14600 - -Group26Sprites: ; 14600 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14617 - -Group19Sprites: ; 14617 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1462e - -Group10Sprites: ; 1462e - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_LASS - db SPRITE_OFFICER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_COOLTRAINER_M - db SPRITE_BUG_CATCHER - db SPRITE_SUPER_NERD - db SPRITE_WEIRD_TREE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14645 - -Group4Sprites: ; 14645 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_LASS - db SPRITE_OFFICER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_COOLTRAINER_M - db SPRITE_BUG_CATCHER - db SPRITE_SUPER_NERD - db SPRITE_WEIRD_TREE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1465c - -Group8Sprites: ; 1465c - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_KURT_OUTSIDE - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_OFFICER - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_TEACHER - db SPRITE_AZALEA_ROCKET - db SPRITE_LASS - db SPRITE_SILVER - db SPRITE_FRUIT_TREE - db SPRITE_SLOWPOKE -; 14673 - -Group11Sprites: ; 14673 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_POKE_BALL - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_OFFICER - db SPRITE_POKEFAN_M - db SPRITE_DAYCARE_MON_1 - db SPRITE_COOLTRAINER_F - db SPRITE_ROCKET - db SPRITE_LASS - db SPRITE_DAYCARE_MON_2 - db SPRITE_FRUIT_TREE - db SPRITE_SLOWPOKE -; 1468a - -Group22Sprites: ; 1468a - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_STANDING_YOUNGSTER - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_OLIVINE_RIVAL - db SPRITE_POKEFAN_M - db SPRITE_LASS - db SPRITE_BUENA - db SPRITE_SWIMMER_GIRL - db SPRITE_SAILOR - db SPRITE_POKEFAN_F - db SPRITE_SUPER_NERD - db SPRITE_TAUROS - db SPRITE_FRUIT_TREE - db SPRITE_ROCK -; 146a1 - -Group1Sprites: ; 146a1 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_STANDING_YOUNGSTER - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_OLIVINE_RIVAL - db SPRITE_POKEFAN_M - db SPRITE_LASS - db SPRITE_BUENA - db SPRITE_SWIMMER_GIRL - db SPRITE_SAILOR - db SPRITE_POKEFAN_F - db SPRITE_SUPER_NERD - db SPRITE_TAUROS - db SPRITE_FRUIT_TREE - db SPRITE_ROCK -; 146b8 - -Group9Sprites: ; 146b8 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_LANCE - db SPRITE_GRAMPS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_LASS - db SPRITE_YOUNGSTER - db SPRITE_GYARADOS - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146cf - -Group2Sprites: ; 146cf - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_M - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146e6 - -Group5Sprites: ; 146e6 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_M - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146fd - -Group3Sprites: ; 146fd - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_GAMEBOY_KID - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_LASS - db SPRITE_POKEFAN_F - db SPRITE_TEACHER - db SPRITE_YOUNGSTER - db SPRITE_GROWLITHE - db SPRITE_POKEFAN_M - db SPRITE_ROCKER - db SPRITE_FISHER - db SPRITE_SCIENTIST - db SPRITE_POKE_BALL - db SPRITE_BOULDER -; 14714 - -Group15Sprites: ; 14714 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SAILOR - db SPRITE_FISHING_GURU - db SPRITE_GENTLEMAN - db SPRITE_SUPER_NERD - db SPRITE_HO_OH - db SPRITE_TEACHER - db SPRITE_COOLTRAINER_F - db SPRITE_YOUNGSTER - db SPRITE_FAIRY - db SPRITE_POKE_BALL - db SPRITE_ROCK -; 1472b - -Group20Sprites: ; 1472b - db SPRITE_OAK - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_TWIN - db SPRITE_POKEFAN_M - db SPRITE_GRAMPS - db SPRITE_FAIRY - db SPRITE_SILVER - db SPRITE_FISHING_GURU - db SPRITE_POKE_BALL - db SPRITE_POKEDEX -; 14736 - - -SpriteHeaders: ; 14736 -INCLUDE "gfx/overworld/sprite_headers.asm" -; 1499a + jr z, .zero + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], $1 + pop hl +.zero + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret +; 8ea8c (23:6a8c) + +Function8ea8c: ; 8ea8c + ld hl, wSpriteAnimationStructs + ld e, $6 + ld a, [wd0e3] + ld d, a +.asm_8ea95 + ld a, [hl] + and a + jr z, .asm_8eaab + cp d + jr z, .asm_8eaa0 + ld a, $3 + jr .asm_8eaa2 +.asm_8eaa0 + ld a, $2 +.asm_8eaa2 + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], a + pop hl +.asm_8eaab + ld bc, $10 + add hl, bc + dec e + jr nz, .asm_8ea95 + ret + +INCLUDE "menu/mon_icons.asm" diff --git a/engine/startmenu.asm b/engine/startmenu.asm index 1c7768850..a40aa734e 100755 --- a/engine/startmenu.asm +++ b/engine/startmenu.asm @@ -422,7 +422,7 @@ StartMenu_Quit: ; 128f0 ; Retire from the bug catching contest. ld hl, .EndTheContestText - call Function12cf5 + call StartMenuYesNo jr c, .DontEndContest ld a, BANK(BugCatchingContestReturnToGateScript) ld hl, BugCatchingContestReturnToGateScript @@ -444,7 +444,7 @@ StartMenu_Save: ; 1290b ; Save the game. call BufferScreen - callba Function14a1a + callba SaveMenu jr nc, .asm_12919 ld a, 0 ret @@ -468,8 +468,8 @@ StartMenu_Status: ; 12928 ; Player status. call FadeToMenu - callba Function25105 - call Function2b3c + callba TrainerCard + call ReturnToCallingMenu ld a, 0 ret ; 12937 @@ -483,7 +483,7 @@ StartMenu_Pokedex: ; 12937 call FadeToMenu callba Pokedex - call Function2b3c + call ReturnToCallingMenu .asm_12949 ld a, 0 @@ -494,8 +494,8 @@ StartMenu_Pokedex: ; 12937 StartMenu_Pokegear: ; 1294c call FadeToMenu - callba Function90b8d - call Function2b3c + callba PokeGear + call ReturnToCallingMenu ld a, 0 ret ; 1295b @@ -507,12 +507,13 @@ StartMenu_Pack: ; 1295b callba Pack ld a, [wcf66] and a - jr nz, .asm_12970 - call Function2b3c + jr nz, .used_item + call ReturnToCallingMenu ld a, 0 ret -.asm_12970 - call Function2b4d + +.used_item + call ExitAllMenus ld a, 4 ret ; 12976 @@ -532,9 +533,9 @@ StartMenu_Pokemon: ; 12976 call ClearBGPalettes .menu - callba Function5004f - callba Function50405 - callba Function503e0 + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX .menunoreload callba WritePartyMenuTilemap @@ -556,19 +557,19 @@ StartMenu_Pokemon: ; 12976 jr z, .quit .return - call Function2b3c + call ReturnToCallingMenu ld a, 0 ret .quit ld a, b push af - call Function2b4d + call ExitAllMenus pop af ret ; 129d5 -Function129d5: ; 129d5 +HasNoItems: ; 129d5 ld a, [NumItems] and a ret nz @@ -580,15 +581,15 @@ Function129d5: ; 129d5 ret nz ld hl, TMsHMs ld b, NUM_TMS + NUM_HMS -.asm_129e9 +.loop ld a, [hli] and a - jr nz, .asm_129f2 + jr nz, .done dec b - jr nz, .asm_129e9 + jr nz, .loop scf ret -.asm_129f2 +.done and a ret @@ -663,7 +664,7 @@ UnknownText_0x12a5b: ; 0x12a5b CantUseItem: ; 12a60 ld hl, CantUseItemText - call Function2012 + call MenuTextBoxWaitButton ret ; 12a67 @@ -683,7 +684,7 @@ PartyMonItemName: ; 12a6c CancelPokemonAction: ; 12a79 - callba Function50405 + callba InitPartyMenuWithCancel callba Function8ea71 ld a, 1 ret @@ -745,10 +746,10 @@ SwitchPartyMons: ; 12aec ld a, [CurPartyMon] inc a - ld [wd0e3], a + ld [wSwitchMon], a callba Function8ea8c - callba Function5042d + callba InitPartyMenuNoCancel ld a, 4 ld [PartyMenuActionText], a @@ -757,7 +758,7 @@ SwitchPartyMons: ; 12aec hlcoord 0, 1 ld bc, 20 * 2 - ld a, [wd0e3] + ld a, [wSwitchMon] dec a call AddNTimes ld [hl], "▷" @@ -774,9 +775,9 @@ SwitchPartyMons: ; 12aec xor a ld [PartyMenuActionText], a - callba Function5004f - callba Function50405 - callba Function503e0 + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX ld a, 1 ret @@ -882,7 +883,7 @@ Function12bd9: ; 12bd9 jr .asm_12c08 .asm_12bf4 - call Function12cea + call GiveItemToPokemon ld hl, MadeHoldText call MenuTextBoxBackup call GivePartyItem @@ -897,17 +898,17 @@ Function12bd9: ; 12bd9 ld [wd265], a call GetItemName ld hl, SwitchAlreadyHoldingText - call Function12cf5 + call StartMenuYesNo jr c, .asm_12c4b - call Function12cea + call GiveItemToPokemon ld a, [wd265] push af ld a, [CurItem] ld [wd265], a pop af ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .asm_12c3c ld hl, TookAndMadeHoldText @@ -920,7 +921,7 @@ Function12bd9: ; 12bd9 .asm_12c3c ld a, [wd265] ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon ld hl, ItemStorageIsFullText call MenuTextBoxBackup @@ -936,10 +937,10 @@ GivePartyItem: ; 12c4c ld [hl], a ld d, a callba ItemIsMail - jr nc, .asm_12c5f - call Function12cfe + jr nc, .done + call ComposeMailMessage -.asm_12c5f +.done ret ; 12c60 @@ -953,7 +954,7 @@ TakePartyItem: ; 12c60 jr z, .asm_12c8c ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .asm_12c94 callba ItemIsMail @@ -1045,7 +1046,7 @@ GetPartyItemLocation: ; 12cd7 ; 12cdf -Function12cdf: ; 12cdf +ReceiveItemFromPokemon: ; 12cdf ld a, $1 ld [wItemQuantityChangeBuffer], a ld hl, NumItems @@ -1053,28 +1054,28 @@ Function12cdf: ; 12cdf ; 12cea -Function12cea: ; 12cea (4:6cea) +GiveItemToPokemon: ; 12cea (4:6cea) ld a, $1 ld [wItemQuantityChangeBuffer], a ld hl, NumItems jp TossItem -Function12cf5: ; 12cf5 +StartMenuYesNo: ; 12cf5 call MenuTextBox call YesNoBox jp ExitMenu ; 12cfe -Function12cfe: ; 12cfe (4:6cfe) - ld de, wd002 - callba Function11e75 +ComposeMailMessage: ; 12cfe (4:6cfe) + ld de, wTempMailMessage + callba _ComposeMailMessage ld hl, PlayerName - ld de, wd023 - ld bc, $a + ld de, wTempMailAuthor + ld bc, NAME_LENGTH - 1 call CopyBytes ld hl, PlayerID - ld bc, $2 + ld bc, 2 call CopyBytes ld a, [CurPartySpecies] ld [de], a @@ -1082,14 +1083,14 @@ Function12cfe: ; 12cfe (4:6cfe) ld a, [CurItem] ld [de], a ld a, [CurPartyMon] - ld hl, sPartyScratch1 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH call AddNTimes ld d, h ld e, l - ld hl, wd002 - ld bc, SCRATCHMON_STRUCT_LENGTH - ld a, BANK(sPartyScratch1) + ld hl, wTempMail + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) call GetSRAMBank call CopyBytes call CloseSRAM @@ -1127,11 +1128,11 @@ MonMailAction: ; 12d45 .take ld hl, .sendmailtopctext - call Function12cf5 + call StartMenuYesNo jr c, .RemoveMailToBag ld a, [CurPartyMon] ld b, a - callba Function4456e + callba SendMailToPC jr c, .MailboxFull ld hl, .sentmailtopctext call MenuTextBoxBackup @@ -1144,12 +1145,12 @@ MonMailAction: ; 12d45 .RemoveMailToBag ld hl, .mailwilllosemessagetext - call Function12cf5 + call StartMenuYesNo jr c, .done call GetPartyItemLocation ld a, [hl] ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .BagIsFull call GetPartyItemLocation ld [hl], $0 @@ -1240,14 +1241,14 @@ OpenPartyStats: ; 12e00 MonMenu_Cut: ; 12e1b callba CutFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12e2d + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12e2d +.Fail ld a, $3 ret ; 12e30 @@ -1255,160 +1256,161 @@ MonMenu_Cut: ; 12e1b MonMenu_Fly: ; 12e30 callba FlyFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $2 - jr z, .asm_12e4c + jr z, .Fail cp $0 - jr z, .asm_12e4f + jr z, .Error callba MobileFn_1060b5 ld b, $4 ld a, $2 ret -.asm_12e4c +.Fail ld a, $3 ret -.asm_12e4f +.Error ld a, $0 ret -.asm_12e52 +.Unused ld a, $1 ret ; 12e55 MonMenu_Flash: ; 12e55 callba Functionc8ac - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12e67 + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12e67 +.Fail ld a, $3 ret ; 12e6a MonMenu_Strength: ; 12e6a callba StrengthFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12e7c + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12e7c +.Fail ld a, $3 ret ; 12e7f MonMenu_Whirlpool: ; 12e7f callba WhirlpoolFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12e91 + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12e91 +.Fail ld a, $3 ret ; 12e94 MonMenu_Waterfall: ; 12e94 callba Functioncade - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12ea6 + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12ea6 +.Fail ld a, $3 ret ; 12ea9 MonMenu_Teleport: ; 12ea9 callba TeleportFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] and a - jr z, .asm_12eba + jr z, .Fail ld b, $4 ld a, $2 ret -.asm_12eba +.Fail ld a, $3 ret ; 12ebd MonMenu_Surf: ; 12ebd callba SurfFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] and a - jr z, .asm_12ece + jr z, .Fail ld b, $4 ld a, $2 ret -.asm_12ece +.Fail ld a, $3 ret ; 12ed1 MonMenu_Dig: ; 12ed1 callba DigFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12ee3 + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12ee3 +.Fail ld a, $3 ret ; 12ee6 MonMenu_Softboiled_MilkDrink: ; 12ee6 - call Function12f05 - jr nc, .asm_12ef3 - callba Functionf3df - jr .asm_12ef9 + call .CheckMonHasEnoughHP + jr nc, .NotEnoughHP + callba Softboiled_MilkDrinkFunction + jr .finish -.asm_12ef3 - ld hl, UnknownText_0x12f00 +.NotEnoughHP + ld hl, .Text_NotEnoughHP call PrintText -.asm_12ef9 +.finish xor a ld [PartyMenuActionText], a ld a, $3 ret ; 12f00 -UnknownText_0x12f00: ; 0x12f00 +.Text_NotEnoughHP: ; 0x12f00 ; Not enough HP! text_jump UnknownText_0x1c1ce3 db "@" ; 0x12f05 -Function12f05: ; 12f05 +.CheckMonHasEnoughHP: ; 12f05 +; Need to have at least (MaxHP / 5) HP left. ld a, MON_MAXHP call GetPartyParamLocation ld a, [hli] ld [hDividend + 0], a ld a, [hl] ld [hDividend + 1], a - ld a, $5 + ld a, 5 ld [hDivisor], a - ld b, $2 + ld b, 2 call Divide ld a, MON_HP + 1 call GetPartyParamLocation @@ -1422,28 +1424,28 @@ Function12f05: ; 12f05 MonMenu_Headbutt: ; 12f26 callba HeadbuttFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12f38 + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12f38 +.Fail ld a, $3 ret ; 12f3b MonMenu_RockSmash: ; 12f3b callba RockSmashFunction - ld a, [wd0ec] + ld a, [wFieldMoveSucceeded] cp $1 - jr nz, .asm_12f4d + jr nz, .Fail ld b, $4 ld a, $2 ret -.asm_12f4d +.Fail ld a, $3 ret ; 12f50 @@ -1474,7 +1476,7 @@ Function12f5b: ; 12f5b Function12f73: ; 12f73 call SetUpMoveScreenBG ld de, Unknown_12fb2 - call Function1bb1 + call InitMenu3 call Function131ef ld hl, wcfa5 set 6, [hl] @@ -1503,7 +1505,7 @@ Function12f9f: ; 12f9f Function12fa0: ; 12fa0 push af xor a - ld [wd0e3], a + ld [wSwitchMon], a ld hl, wcfa5 res 6, [hl] call ClearSprites @@ -1541,7 +1543,7 @@ MoveScreenLoop: ; 12fd5 call SetUpMoveScreenBG call Function132d3 ld de, Unknown_13163 - call Function1bb1 + call InitMenu3 .loop call Function131ef ld hl, wcfa5 @@ -1759,7 +1761,7 @@ SetUpMoveScreenBG: ; 13172 xor a ld [hBGMapMode], a callba Functionfb571 - callba InefficientlyClear121BytesAtwc300 + callba ClearSpriteAnims ld a, [CurPartyMon] ld e, a ld d, $0 @@ -1793,7 +1795,7 @@ SetUpMoveScreenBG: ; 13172 call PrintLevel ld hl, PlayerHPPal call SetHPPal - ld b, $e + ld b, SCGB_0E call GetSGBLayout hlcoord 16, 0 lb bc, 1, 3 diff --git a/engine/stats_screen.asm b/engine/stats_screen.asm new file mode 100755 index 000000000..766e05fe7 --- /dev/null +++ b/engine/stats_screen.asm @@ -0,0 +1,1150 @@ +Function4dc7b: ; 4dc7b (13:5c7b) + ld a, [wLinkMode] + cp LINK_MOBILE + jr nz, StatsScreenInit + + ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd) + and a + jr z, StatsScreenInit + jr Function4dc8f + +StatsScreenInit: ; 4dc8a + ld hl, StatsScreenMain + jr StatsScreenInit_gotaddress + +Function4dc8f: ; 4dc8f + ld hl, StatsScreenBattle + jr StatsScreenInit_gotaddress + +StatsScreenInit_gotaddress: ; 4dc94 + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a ; disable overworld tile animations + ld a, [wc2c6] ; whether sprite is to be mirrorred + push af + ld a, [wJumptableIndex] + ld b, a + ld a, [wcf64] + ld c, a + + push bc + push hl + call ClearBGPalettes + call ClearTileMap + call UpdateSprites + callba Functionfb53e + pop hl + call _hl_ + call ClearBGPalettes + call ClearTileMap + pop bc + + ; restore old values + ld a, b + ld [wJumptableIndex], a + ld a, c + ld [wcf64], a + pop af + ld [wc2c6], a + pop af + ld [hMapAnims], a + ret +; 0x4dcd2 + +StatsScreenMain: ; 0x4dcd2 + xor a + ld [wJumptableIndex], a + ; stupid interns + ld [wcf64], a + ld a, [wcf64] + and $fc + or $1 + ld [wcf64], a +.loop ; 4dce3 + ld a, [wJumptableIndex] + and $7f + ld hl, StatsScreenPointerTable + rst JumpTable + call Function4dd3a ; check for keys? + ld a, [wJumptableIndex] + bit 7, a + jr z, .loop + ret +; 0x4dcf7 + +StatsScreenBattle: ; 4dcf7 + xor a + ld [wJumptableIndex], a + ; stupid interns + ld [wcf64], a + ld a, [wcf64] + and $fc + or $1 + ld [wcf64], a +.loop + callba Function100dd2 + ld a, [wJumptableIndex] + and $7f + ld hl, StatsScreenPointerTable + rst JumpTable + call Function4dd3a + callba Function100dfd + jr c, .exit + ld a, [wJumptableIndex] + bit 7, a + jr z, .loop + +.exit + ret +; 4dd2a + +StatsScreenPointerTable: ; 4dd2a + dw MonStatsInit ; regular pokémon + dw EggStatsInit ; egg + dw StatsScreenWaitCry + dw Function4ddac + dw Function4ddc6 + dw StatsScreenWaitCry + dw Function4ddd6 + dw Function4dd6c +; 4dd3a + + +Function4dd3a: ; 4dd3a (13:5d3a) + ld hl, wcf64 + bit 6, [hl] + jr nz, .asm_4dd49 + bit 5, [hl] + jr nz, .asm_4dd56 + call DelayFrame + ret +.asm_4dd49 + callba Functiond00b4 + jr nc, .asm_4dd56 + ld hl, wcf64 + res 6, [hl] +.asm_4dd56 + ld hl, wcf64 + res 5, [hl] + callba Function10402d + ret + +Function4dd62: ; 4dd62 (13:5d62) + ld a, [wJumptableIndex] + and $80 + or h + ld [wJumptableIndex], a + ret + +Function4dd6c: ; 4dd6c (13:5d6c) + ld hl, wJumptableIndex + set 7, [hl] + ret + +MonStatsInit: ; 4dd72 (13:5d72) + ld hl, wcf64 + res 6, [hl] + call ClearBGPalettes + call ClearTileMap + callba Function10402d + call Function4ddf2 + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_4dd9b + call Function4deea + ld hl, wcf64 + set 4, [hl] + ld h, $4 + call Function4dd62 + ret +.asm_4dd9b + ld h, $1 + call Function4dd62 + ret + +EggStatsInit: ; 4dda1 + call EggStatsScreen + ld a, [wJumptableIndex] + inc a + ld [wJumptableIndex], a + ret +; 0x4ddac + + +Function4ddac: ; 4ddac (13:5dac) + call Function4de2c + jr nc, .asm_4ddb7 + ld h, $0 + call Function4dd62 + ret +.asm_4ddb7 + bit 0, a + jr nz, .asm_4ddc0 + and $c3 + jp Function4de54 +.asm_4ddc0 + ld h, $7 + call Function4dd62 + ret + +Function4ddc6: ; 4ddc6 (13:5dc6) + call Function4dfb6 + ld hl, wcf64 + res 4, [hl] + ld a, [wJumptableIndex] + inc a + ld [wJumptableIndex], a + ret + +Function4ddd6: ; 4ddd6 (13:5dd6) + call Function4de2c + jr nc, .asm_4dde1 + ld h, $0 + call Function4dd62 + ret + +.asm_4dde1 + and $f3 + jp Function4de54 + +StatsScreenWaitCry: ; 4dde6 (13:5de6) + call IsSFXPlaying + ret nc + ld a, [wJumptableIndex] + inc a + ld [wJumptableIndex], a + ret + +Function4ddf2: ; 4ddf2 (13:5df2) + ld a, [MonType] + cp BREEDMON + jr nz, .asm_4de10 + ld a, [wd018_Mon] + ld [CurSpecies], a + call GetBaseData + ld hl, wd018_Mon + ld de, TempMon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + jr .asm_4de2a +.asm_4de10 + callba CopyPkmnToTempMon + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_4de2a + ld a, [MonType] + cp BOXMON + jr c, .asm_4de2a + callba Function50890 +.asm_4de2a + and a + ret + +Function4de2c: ; 4de2c (13:5e2c) + call GetJoypad + ld a, [MonType] + cp BREEDMON + jr nz, .notbreedmon + push hl + push de + push bc + callba Functione2f95 + pop bc + pop de + pop hl + ld a, [wcf73] + and $c0 + jr nz, .set_carry + ld a, [wcf73] + jr .clear_flags + +.notbreedmon + ld a, [hJoyPressed] +.clear_flags + and a + ret + +.set_carry + scf + ret + +Function4de54: ; 4de54 (13:5e54) + push af + ld a, [wcf64] + and $3 + ld c, a + pop af + bit 1, a + jp nz, Function4dee4 + bit 5, a + jr nz, .asm_4dec7 + bit 4, a + jr nz, .asm_4debd + bit 0, a + jr nz, .asm_4deb8 + bit 6, a + jr nz, .asm_4dea0 + bit 7, a + jr nz, .asm_4de77 + jr .asm_4dece +.asm_4de77 + ld a, [MonType] + cp BOXMON + jr nc, .asm_4dece + and a + ld a, [PartyCount] + jr z, .asm_4de87 + ld a, [OTPartyCount] +.asm_4de87 + ld b, a + ld a, [CurPartyMon] + inc a + cp b + jr z, .asm_4dece + ld [CurPartyMon], a + ld b, a + ld a, [MonType] + and a + jr nz, .asm_4dede + ld a, b + inc a + ld [wd0d8], a + jr .asm_4dede +.asm_4dea0 + ld a, [CurPartyMon] + and a + jr z, .asm_4dece + dec a + ld [CurPartyMon], a + ld b, a + ld a, [MonType] + and a + jr nz, .asm_4dede + ld a, b + inc a + ld [wd0d8], a + jr .asm_4dede +.asm_4deb8 + ld a, c + cp $3 + jr z, Function4dee4 +.asm_4debd + inc c + ld a, $3 + cp c + jr nc, .asm_4decf + ld c, $1 + jr .asm_4decf +.asm_4dec7 + dec c + jr nz, .asm_4decf + ld c, $3 + jr .asm_4decf +.asm_4dece + ret +.asm_4decf + ld a, [wcf64] + and $fc + or c + ld [wcf64], a + ld h, $4 + call Function4dd62 + ret +.asm_4dede + ld h, $0 + call Function4dd62 + ret + +Function4dee4: ; 4dee4 (13:5ee4) + ld h, $7 + call Function4dd62 + ret + +Function4deea: ; 4deea (13:5eea) + call Function4df45 + xor a + ld [hBGMapMode], a + ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo) + ld [wd265], a + ld [CurSpecies], a + hlcoord 8, 0 + ld [hl], "№" + inc hl + ld [hl], "." + inc hl + hlcoord 10, 0 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + ld de, wd265 + call PrintNum + hlcoord 14, 0 + call PrintLevel + ld hl, Unknown_4df77 + call Function4e528 + call Function4e505 + hlcoord 8, 2 + call PlaceString + hlcoord 18, 0 + call Function4df66 + hlcoord 9, 4 + ld a, "/" + ld [hli], a + ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo) + ld [wd265], a + call GetPokemonName + call PlaceString + call Function4df8f + call Function4df9b + call Function4dfa6 + ret + +Function4df45: ; 4df45 (13:5f45) + ld hl, TempMonHP + ld a, [hli] + ld b, a + ld c, [hl] + ld hl, TempMonMaxHP + ld a, [hli] + ld d, a + ld e, [hl] + callba DrawPartyMenuHPBar + ld hl, wcda1 + call SetHPPal + ld b, SCGB_03 + call GetSGBLayout + call DelayFrame + ret + +Function4df66: ; 4df66 (13:5f66) + push hl + callba GetGender + pop hl + ret c + ld a, "♂" + jr nz, .got_gender + ld a, "♀" +.got_gender + ld [hl], a + ret +; 4df77 (13:5f77) + +Unknown_4df77: ; 4df77 + dw PartyMonNicknames + dw OTPartyMonNicknames + dw sBoxMonNicknames + dw wd002 +; 4df7f + +Function4df7f: ; 4df7f + hlcoord 7, 0 + ld bc, SCREEN_WIDTH + ld d, SCREEN_HEIGHT +.loop + ld a, $31 + ld [hl], a + add hl, bc + dec d + jr nz, .loop + ret +; 4df8f + +Function4df8f: ; 4df8f (13:5f8f) + hlcoord 0, 7 + ld b, SCREEN_WIDTH + ld a, "_" +.loop + ld [hli], a + dec b + jr nz, .loop + ret + +Function4df9b: ; 4df9b (13:5f9b) + hlcoord 12, 6 + ld [hl], "◀" + hlcoord 19, 6 + ld [hl], "▶" + ret + +Function4dfa6: ; 4dfa6 (13:5fa6) + ld bc, TempMonDVs + callba CheckShininess + ret nc + hlcoord 19, 0 + ld [hl], "<SHINY>" + ret + +Function4dfb6: ; 4dfb6 (13:5fb6) + ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo) + ld [wd265], a + ld [CurSpecies], a + xor a + ld [hBGMapMode], a + call Function4dfda + call Function4e002 + call Function4dfed + ld hl, wcf64 + bit 4, [hl] + jr nz, .asm_4dfd6 + call SetPalettes + ret + +.asm_4dfd6 + call Function4e226 + ret + +Function4dfda: ; 4dfda (13:5fda) + ld a, [wcf64] + and $3 + ld c, a + call Function4e4cd + hlcoord 0, 8 + lb bc, 10, 20 + call ClearBox + ret + +Function4dfed: ; 4dfed (13:5fed) + ld a, [wcf64] + and $3 + ld c, a + callba Function8c8a + call DelayFrame + ld hl, wcf64 + set 5, [hl] + ret + +Function4e002: ; 4e002 (13:6002) + ld a, [wcf64] + and $3 + dec a + ld hl, Jumptable_4e00d + rst JumpTable + ret + +Jumptable_4e00d: ; 4e00d (13:600d) + dw Function4e013 + dw Function4e147 + dw Function4e1ae + + +Function4e013: ; 4e013 (13:6013) + hlcoord 0, 9 + ld b, $0 + predef DrawPlayerHP + hlcoord 8, 9 + ld [hl], $41 + ld de, String_4e119 + hlcoord 0, 12 + call PlaceString + ld a, [TempMonPokerusStatus] + ld b, a + and $f + jr nz, .asm_4e055 + ld a, b + and $f0 + jr z, .asm_4e03d + hlcoord 8, 8 + ld [hl], $e8 +.asm_4e03d + ld a, [MonType] + cp $2 + jr z, .asm_4e060 + hlcoord 6, 13 + push hl + ld de, TempMonStatus + predef PlaceStatusString + pop hl + jr nz, .asm_4e066 + jr .asm_4e060 +.asm_4e055 + ld de, String_4e142 + hlcoord 1, 13 + call PlaceString + jr .asm_4e066 +.asm_4e060 + ld de, String_4e127 + call PlaceString +.asm_4e066 + hlcoord 1, 15 + predef PrintMonTypes + hlcoord 9, 8 + ld de, $14 + ld b, $a + ld a, $31 +.asm_4e078 + ld [hl], a + add hl, de + dec b + jr nz, .asm_4e078 + ld de, String_4e12b + hlcoord 10, 9 + call PlaceString + hlcoord 17, 14 + call Function4e0d3 + hlcoord 13, 10 + lb bc, 3, 7 + ld de, TempMonExp + call PrintNum + call Function4e0e7 + hlcoord 13, 13 + lb bc, 3, 7 + ld de, Buffer1 ; wd1ea (aliases: MagikarpLength) + call PrintNum + ld de, String_4e136 + hlcoord 10, 12 + call PlaceString + ld de, String_4e13f + hlcoord 14, 14 + call PlaceString + hlcoord 11, 16 + ld a, [TempMonLevel] + ld b, a + ld de, TempMonExp + 2 + predef FillInExpBar + hlcoord 10, 16 + ld [hl], $40 + hlcoord 19, 16 + ld [hl], $41 + ret + +Function4e0d3: ; 4e0d3 (13:60d3) + ld a, [TempMonLevel] + push af + cp MAX_LEVEL + jr z, .asm_4e0df + inc a + ld [TempMonLevel], a +.asm_4e0df + call PrintLevel + pop af + ld [TempMonLevel], a + ret + +Function4e0e7: ; 4e0e7 (13:60e7) + ld a, [TempMonLevel] + cp MAX_LEVEL + jr z, .asm_4e111 + inc a + ld d, a + callba CalcExpAtLevel +rept 2 + ld hl, TempMonExp + 2 +endr + ld a, [$ffb6] + sub [hl] + dec hl + ld [wd1ec], a + ld a, [$ffb5] + sbc [hl] + dec hl + ld [Buffer2], a ; wd1eb (aliases: MovementType) + ld a, [hQuotient] + sbc [hl] + ld [Buffer1], a ; wd1ea (aliases: MagikarpLength) + ret +.asm_4e111 + ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength) + xor a +rept 2 + ld [hli], a +endr + ld [hl], a + ret +; 4e119 (13:6119) + +String_4e119: ; 4e119 + db "STATUS/" + next "TYPE/@" +; 4e127 + +String_4e127: ; 4e127 + db "OK @" +; 4e12b + +String_4e12b: ; 4e12b + db "EXP POINTS@" +; 4e136 + +String_4e136: ; 4e136 + db "LEVEL UP@" +; 4e13f + +String_4e13f: ; 4e13f + db "TO@" +; 4e142 + +String_4e142: ; 4e142 + db "#RUS@" +; 4e147 + +Function4e147: ; 4e147 (13:6147) + ld de, String_4e1a0 + hlcoord 0, 8 + call PlaceString + call Function4e189 + hlcoord 8, 8 + call PlaceString + ld de, String_4e1a9 + hlcoord 0, 10 + call PlaceString + ld hl, TempMonMoves + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + hlcoord 8, 10 + ld a, SCREEN_WIDTH * 2 + ld [Buffer1], a + predef ListMoves + hlcoord 12, 11 + ld a, $28 + ld [Buffer1], a + predef Function50c50 + ret + +Function4e189: ; 4e189 (13:6189) + ld de, String_4e1a5 + ld a, [TempMonItem] + and a + ret z + ld b, a + callba Function28771 + ld a, b + ld [wd265], a + call GetItemName + ret +; 4e1a0 (13:61a0) + +String_4e1a0: ; 4e1a0 + db "ITEM@" +; 4e1a5 + +String_4e1a5: ; 4e1a5 + db "---@" +; 4e1a9 + +String_4e1a9: ; 4e1a9 + db "MOVE@" +; 4e1ae + +Function4e1ae: ; 4e1ae (13:61ae) + call Function4e1cc + hlcoord 10, 8 + ld de, $14 + ld b, $a + ld a, $31 +.asm_4e1bb + ld [hl], a + add hl, de + dec b + jr nz, .asm_4e1bb + hlcoord 11, 8 + ld bc, $6 + predef PrintTempMonStats + ret + +Function4e1cc: ; 4e1cc (13:61cc) + ld de, IDNoString + hlcoord 0, 9 + call PlaceString + ld de, OTString + hlcoord 0, 12 + call PlaceString + hlcoord 2, 10 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + ld de, TempMonID + call PrintNum + ld hl, Unknown_4e216 + call Function4e528 + call Function4e505 + callba CheckNickErrors + hlcoord 2, 13 + call PlaceString + ld a, [TempMonCaughtGender] + and a + jr z, .asm_4e215 + cp $7f + jr z, .asm_4e215 + and $80 + ld a, "♂" + jr z, .asm_4e211 + ld a, "♀" +.asm_4e211 + hlcoord 9, 13 + ld [hl], a +.asm_4e215 + ret +; 4e216 (13:6216) + +Unknown_4e216: ; 4e216 + dw PartyMonOT + dw OTPartyMonOT + dw sBoxMonOT + dw wd00d +; 4e21e + +IDNoString: ; 4e21e + db $73, "№.@" + +OTString: ; 4e222 + db "OT/@" +; 4e226 + + +Function4e226: ; 4e226 (13:6226) + ld hl, TempMonDVs + predef GetUnownLetter + call Function4e2ad + jr c, .asm_4e238 + and a + jr z, .asm_4e23f + jr .asm_4e246 +.asm_4e238 + call Function4e271 + call SetPalettes + ret +.asm_4e23f + call Function4e253 + call SetPalettes + ret +.asm_4e246 + call SetPalettes + call Function4e253 + ld a, [CurPartySpecies] + call PlayCry2 + ret + +Function4e253: ; 4e253 (13:6253) + ld hl, wcf64 + set 5, [hl] + ld a, [CurPartySpecies] + cp UNOWN + jr z, .asm_4e266 + hlcoord 0, 0 + call PrepMonFrontpic + ret +.asm_4e266 + xor a + ld [wc2c6], a + hlcoord 0, 0 + call _PrepMonFrontpic + ret + +Function4e271: ; 4e271 (13:6271) + ld a, [CurPartySpecies] + cp UNOWN + jr z, .asm_4e281 + ld a, $1 + ld [wc2c6], a + call Function4e289 + ret +.asm_4e281 + xor a + ld [wc2c6], a + call Function4e289 + ret + +Function4e289: ; 4e289 (13:6289) + ld a, [CurPartySpecies] + call IsAPokemon + ret c + call Function4e307 + ld de, VTiles2 tile $00 + predef FrontpicPredef + hlcoord 0, 0 + ld d, $0 + ld e, $2 + predef LoadMonAnimation + ld hl, wcf64 + set 6, [hl] + ret + +Function4e2ad: ; 4e2ad (13:62ad) + ld a, [MonType] + ld hl, .Jumptable + rst JumpTable + ret + +.Jumptable: ; 4e2b5 (13:62b5) + dw Function4e2bf + dw Function4e2cf + dw Function4e2d1 + dw Function4e2ed + dw Function4e301 + + +Function4e2bf: ; 4e2bf (13:62bf) + ld a, [CurPartyMon] + ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld b, h + ld c, l + jr Function4e2f2 + +Function4e2cf: ; 4e2cf (13:62cf) + xor a + ret + +Function4e2d1: ; 4e2d1 (13:62d1) + ld hl, sBoxMons + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld b, h + ld c, l + ld a, BANK(sBoxMons) + call GetSRAMBank + call Function4e2f2 + push af + call CloseSRAM + pop af + ret + +Function4e2ed: ; 4e2ed (13:62ed) + ld bc, TempMonSpecies ; wd10e (aliases: TempMon) + jr Function4e2f2 ; utterly pointless + +Function4e2f2: ; 4e2f2 (13:62f2) + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + call CheckFaintedFrzSlp + jr c, Function4e305 +.egg + xor a + scf + ret + +Function4e301: ; 4e301 (13:6301) + ld a, $1 + and a + ret +Function4e305: ; 4e305 (13:6305) + xor a + ret + +Function4e307: ; 4e307 (13:6307) + nop + push hl + push de + push bc + push af + call DelayFrame + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld de, TextBoxSpaceGFX + lb bc, BANK(TextBoxSpaceGFX), 1 + ld hl, VTiles2 tile $7f + call Get2bpp + pop af + ld [rVBK], a + pop af + pop bc + pop de + pop hl + ret +; 4e32a (13:632a) + +Unknown_4e32a: ; 4e32a +; A blank tile? + ds 16 +; 4e33a + +EggStatsScreen: ; 4e33a + xor a + ld [hBGMapMode], a + ld hl, wcda1 + call SetHPPal + ld b, SCGB_03 + call GetSGBLayout + call Function4df8f + ld de, EggString + hlcoord 8, 1 + call PlaceString + ld de, IDNoString + hlcoord 8, 3 + call PlaceString + ld de, OTString + hlcoord 8, 5 + call PlaceString + ld de, FiveQMarkString + hlcoord 11, 3 + call PlaceString + ld de, FiveQMarkString + hlcoord 11, 5 + call PlaceString + ld a, [TempMonHappiness] ; egg status + ld de, EggSoonString + cp $6 + jr c, .picked + ld de, EggCloseString + cp $b + jr c, .picked + ld de, EggMoreTimeString + cp $29 + jr c, .picked + ld de, EggALotMoreTimeString +.picked + hlcoord 1, 9 + call PlaceString + ld hl, wcf64 + set 5, [hl] + call SetPalettes ; pals + call DelayFrame + hlcoord 0, 0 + call PrepMonFrontpic + callba Function10402d + call Function4e497 + + ld a, [TempMonHappiness] + cp 6 + ret nc + ld de, SFX_2_BOOPS + call PlaySFX + ret +; 0x4e3c0 + +EggString: ; 4e3c0 + db "EGG@" + +FiveQMarkString: ; 4e3c4 + db "?????@" + +EggSoonString: ; 0x4e3ca + db "It's making sounds" + next "inside. It's going" + next "to hatch soon!@" + +EggCloseString: ; 0x4e3fd + db "It moves around" + next "inside sometimes." + next "It must be close" + next "to hatching.@" + +EggMoreTimeString: ; 0x4e43d + db "Wonder what's" + next "inside? It needs" + next "more time, though.@" + +EggALotMoreTimeString: ; 0x4e46e + db "This EGG needs a" + next "lot more time to" + next "hatch.@" +; 0x4e497 + + +Function4e497: ; 4e497 (13:6497) + call Function4e2ad + ret nc + ld a, [TempMonHappiness] + ld e, $7 + cp $6 + jr c, .asm_4e4ab + ld e, $8 + cp $b + jr c, .asm_4e4ab + ret +.asm_4e4ab + push de + ld a, $1 + ld [wc2c6], a + call Function4e307 + ld de, VTiles2 tile $00 + predef FrontpicPredef + pop de + hlcoord 0, 0 + ld d, $0 + predef LoadMonAnimation + ld hl, wcf64 + set 6, [hl] + ret + +Function4e4cd: ; 4e4cd (13:64cd) + hlcoord 13, 5 + ld a, $36 + call .load_square + hlcoord 15, 5 + ld a, $36 + call .load_square + hlcoord 17, 5 + ld a, $36 + call .load_square + ld a, c + cp $2 + ld a, $3a + hlcoord 13, 5 + jr c, .load_square + hlcoord 15, 5 + jr z, .load_square + hlcoord 17, 5 +.load_square: ; 4e4f7 (13:64f7) + push bc + ld [hli], a + inc a + ld [hld], a + ld bc, SCREEN_WIDTH + add hl, bc + inc a + ld [hli], a + inc a + ld [hl], a + pop bc + ret + +Function4e505: ; 4e505 (13:6505) + ld de, StringBuffer1 + ld bc, PKMN_NAME_LENGTH + jr .okay ; uuterly pointless +.okay + ld a, [MonType] + cp BOXMON + jr nz, .partymon + ld a, BANK(sBoxMonNicknames) + call GetSRAMBank + push de + call CopyBytes + pop de + call CloseSRAM + ret + +.partymon + push de + call CopyBytes + pop de + ret + +Function4e528: ; 4e528 (13:6528) + ld a, [MonType] + add a + ld c, a + ld b, 0 + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [MonType] + cp $3 + ret z + ld a, [CurPartyMon] + jp SkipNames + + +CheckFaintedFrzSlp: ; 4e53f + ld hl, MON_HP + add hl, bc + ld a, [hli] + or [hl] + jr z, .fainted_frz_slp + ld hl, MON_STATUS + add hl, bc + ld a, [hl] + and (1 << FRZ) | SLP + jr nz, .fainted_frz_slp + and a + ret + +.fainted_frz_slp + scf + ret +; 4e554 diff --git a/engine/time_capsule/conversion.asm b/engine/time_capsule/conversion.asm new file mode 100755 index 000000000..10f7ab5f3 --- /dev/null +++ b/engine/time_capsule/conversion.asm @@ -0,0 +1,684 @@ +; These functions seem to be related to backwards compatibility + +Functionfb57e: ; fb57e + ld a, [wd003] + ld hl, OTPartyMon1Species + call GetPartyLocation + push hl + ld a, [wd003] + inc a + ld c, a + ld b, 0 + ld hl, OTPartyCount + add hl, bc + ld a, [hl] + pop hl + cp EGG + jr z, .asm_fb59c + cp [hl] + jr nz, .asm_fb5db + +.asm_fb59c + ld b, h + ld c, l + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + cp 101 + jr nc, .asm_fb5db + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr nz, .asm_fb5d9 + ld hl, OTPartySpecies + ld a, [wd003] + ld c, a + ld b, 0 + add hl, bc + ld a, [hl] + + ; Magnemite and Magneton's types changed + ; from Electric to Electric/Steel. + cp MAGNEMITE + jr z, .asm_fb5d9 + cp MAGNETON + jr z, .asm_fb5d9 + + ld [CurSpecies], a + call GetBaseData + ld hl, wcbea +rept 2 + add hl, bc +endr + ld a, [BaseType1] + cp [hl] + jr nz, .asm_fb5db + inc hl + ld a, [BaseType2] + cp [hl] + jr nz, .asm_fb5db + +.asm_fb5d9 + and a + ret + +.asm_fb5db + scf + ret +; fb5dd + +Functionfb5dd: ; fb5dd + ld a, [wd002] + ld d, a + ld a, [PartyCount] + ld b, a + ld c, $0 +.asm_fb5e7 + ld a, c + cp d + jr z, .asm_fb5f8 + push bc + ld a, c + ld hl, PartyMon1HP + call GetPartyLocation + pop bc + ld a, [hli] + or [hl] + jr nz, .asm_fb60b + +.asm_fb5f8 + inc c + dec b + jr nz, .asm_fb5e7 + ld a, [wd003] + ld hl, OTPartyMon1HP + call GetPartyLocation + ld a, [hli] + or [hl] + jr nz, .asm_fb60b + scf + ret + +.asm_fb60b + and a + ret +; fb60d + +Functionfb60d: ; fb60d + hlcoord 4, 0 + ld de, PlayerName + call PlaceString + ld a, $14 + ld [bc], a + hlcoord 4, 8 + ld de, wd26b + call PlaceString + ld a, $14 + ld [bc], a + hlcoord 7, 1 + ld de, PartySpecies + call Functionfb634 + hlcoord 7, 9 + ld de, OTPartySpecies + +Functionfb634: ; fb634 + ld c, $0 +.asm_fb636 + ld a, [de] + cp $ff + ret z + ld [wd265], a + push bc + push hl + push de + push hl + ld a, c + ld [hProduct], a + call GetPokemonName + pop hl + call PlaceString + pop de + inc de + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + inc c + jr .asm_fb636 +; fb656 + +KantoMonSpecials: ; fb656 +; The original special base stat for +; each Kanto monster from Red/Blue. + db 65 ; BULBASAUR + db 80 ; IVYSAUR + db 100 ; VENUSAUR + db 50 ; CHARMANDER + db 65 ; CHARMELEON + db 85 ; CHARIZARD + db 50 ; SQUIRTLE + db 65 ; WARTORTLE + db 85 ; BLASTOISE + db 20 ; CATERPIE + db 25 ; METAPOD + db 80 ; BUTTERFREE + db 20 ; WEEDLE + db 25 ; KAKUNA + db 45 ; BEEDRILL + db 35 ; PIDGEY + db 50 ; PIDGEOTTO + db 70 ; PIDGEOT + db 25 ; RATTATA + db 50 ; RATICATE + db 31 ; SPEAROW + db 61 ; FEAROW + db 40 ; EKANS + db 65 ; ARBOK + db 50 ; PIKACHU + db 90 ; RAICHU + db 30 ; SANDSHREW + db 55 ; SANDSLASH + db 40 ; NIDORAN_F + db 55 ; NIDORINA + db 75 ; NIDOQUEEN + db 40 ; NIDORAN_M + db 55 ; NIDORINO + db 75 ; NIDOKING + db 60 ; CLEFAIRY + db 85 ; CLEFABLE + db 65 ; VULPIX + db 100 ; NINETALES + db 25 ; JIGGLYPUFF + db 50 ; WIGGLYTUFF + db 40 ; ZUBAT + db 75 ; GOLBAT + db 75 ; ODDISH + db 85 ; GLOOM + db 100 ; VILEPLUME + db 55 ; PARAS + db 80 ; PARASECT + db 40 ; VENONAT + db 90 ; VENOMOTH + db 45 ; DIGLETT + db 70 ; DUGTRIO + db 40 ; MEOWTH + db 65 ; PERSIAN + db 50 ; PSYDUCK + db 80 ; GOLDUCK + db 35 ; MANKEY + db 60 ; PRIMEAPE + db 50 ; GROWLITHE + db 80 ; ARCANINE + db 40 ; POLIWAG + db 50 ; POLIWHIRL + db 70 ; POLIWRATH + db 105 ; ABRA + db 120 ; KADABRA + db 135 ; ALAKAZAM + db 35 ; MACHOP + db 50 ; MACHOKE + db 65 ; MACHAMP + db 70 ; BELLSPROUT + db 85 ; WEEPINBELL + db 100 ; VICTREEBEL + db 100 ; TENTACOOL + db 120 ; TENTACRUEL + db 30 ; GEODUDE + db 45 ; GRAVELER + db 55 ; GOLEM + db 65 ; PONYTA + db 80 ; RAPIDASH + db 40 ; SLOWPOKE + db 80 ; SLOWBRO + db 95 ; MAGNEMITE + db 120 ; MAGNETON + db 58 ; FARFETCH_D + db 35 ; DODUO + db 60 ; DODRIO + db 70 ; SEEL + db 95 ; DEWGONG + db 40 ; GRIMER + db 65 ; MUK + db 45 ; SHELLDER + db 85 ; CLOYSTER + db 100 ; GASTLY + db 115 ; HAUNTER + db 130 ; GENGAR + db 30 ; ONIX + db 90 ; DROWZEE + db 115 ; HYPNO + db 25 ; KRABBY + db 50 ; KINGLER + db 55 ; VOLTORB + db 80 ; ELECTRODE + db 60 ; EXEGGCUTE + db 125 ; EXEGGUTOR + db 40 ; CUBONE + db 50 ; MAROWAK + db 35 ; HITMONLEE + db 35 ; HITMONCHAN + db 60 ; LICKITUNG + db 60 ; KOFFING + db 85 ; WEEZING + db 30 ; RHYHORN + db 45 ; RHYDON + db 105 ; CHANSEY + db 100 ; TANGELA + db 40 ; KANGASKHAN + db 70 ; HORSEA + db 95 ; SEADRA + db 50 ; GOLDEEN + db 80 ; SEAKING + db 70 ; STARYU + db 100 ; STARMIE + db 100 ; MR__MIME + db 55 ; SCYTHER + db 95 ; JYNX + db 85 ; ELECTABUZZ + db 85 ; MAGMAR + db 55 ; PINSIR + db 70 ; TAUROS + db 20 ; MAGIKARP + db 100 ; GYARADOS + db 95 ; LAPRAS + db 48 ; DITTO + db 65 ; EEVEE + db 110 ; VAPOREON + db 110 ; JOLTEON + db 110 ; FLAREON + db 75 ; PORYGON + db 90 ; OMANYTE + db 115 ; OMASTAR + db 45 ; KABUTO + db 70 ; KABUTOPS + db 60 ; AERODACTYL + db 65 ; SNORLAX + db 125 ; ARTICUNO + db 125 ; ZAPDOS + db 125 ; MOLTRES + db 50 ; DRATINI + db 70 ; DRAGONAIR + db 100 ; DRAGONITE + db 154 ; MEWTWO + db 100 ; MEW +; fb6ed + + +INCLUDE "event/name_rater.asm" + + +PlaySlowCry: ; fb841 + ld a, [ScriptVar] + call LoadCryHeader + jr c, .done + + ld hl, CryPitch + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, -$140 + add hl, bc + ld a, l + ld [CryPitch], a + ld a, h + ld [CryPitch + 1], a + ld hl, CryLength + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, $60 + add hl, bc + ld a, l + ld [CryLength], a + ld a, h + ld [CryLength + 1], a + callba _PlayCryHeader + call WaitSFX + +.done + ret +; fb877 + +NewPokedexEntry: ; fb877 + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + call LowVolume + call ClearBGPalettes + call ClearTileMap + call UpdateSprites + call ClearSprites + ld a, [wPokedexStatus] + push af + ld a, [hSCX] + add $5 + ld [hSCX], a + xor a + ld [wPokedexStatus], a + callba Function41a7f + call WaitPressAorB_BlinkCursor + ld a, $1 + ld [wPokedexStatus], a + callba Function4424d + call WaitPressAorB_BlinkCursor + pop af + ld [wPokedexStatus], a + call MaxVolume + call RotateThreePalettesRight + ld a, [hSCX] + add $fb + ld [hSCX], a + call Functionfb8c8 + pop af + ld [hMapAnims], a + ret +; fb8c8 + +Functionfb8c8: ; fb8c8 + call ClearTileMap + call LoadFontsExtra + call LoadStandardFont + callba Function40ab2 + call Function3200 + callba GetEnemyMonDVs + ld a, [hli] + ld [TempMonDVs], a + ld a, [hl] + ld [TempMonDVs + 1], a + ld b, SCGB_1C + call GetSGBLayout + call SetPalettes + ret +; fb8f1 + +ConvertMon_2to1: ; fb8f1 +; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. + push bc + push hl + ld a, [wd265] + ld b, a + ld c, 0 + ld hl, Pokered_MonIndices +.loop + inc c + ld a, [hli] + cp b + jr nz, .loop + ld a, c + ld [wd265], a + pop hl + pop bc + ret +; fb908 + +ConvertMon_1to2: ; fb908 +; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. + push bc + push hl + ld a, [wd265] + dec a + ld hl, Pokered_MonIndices + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd265], a + pop hl + pop bc + ret +; fb91c + +Pokered_MonIndices: ; fb91c + db RHYDON + db KANGASKHAN + db NIDORAN_M + db CLEFAIRY + db SPEAROW + db VOLTORB + db NIDOKING + db SLOWBRO + db IVYSAUR + db EXEGGUTOR + db LICKITUNG + db EXEGGCUTE + db GRIMER + db GENGAR + db NIDORAN_F + db NIDOQUEEN + db CUBONE + db RHYHORN + db LAPRAS + db ARCANINE + db MEW + db GYARADOS + db SHELLDER + db TENTACOOL + db GASTLY + db SCYTHER + db STARYU + db BLASTOISE + db PINSIR + db TANGELA + db SCIZOR + db SHUCKLE + db GROWLITHE + db ONIX + db FEAROW + db PIDGEY + db SLOWPOKE + db KADABRA + db GRAVELER + db CHANSEY + db MACHOKE + db MR__MIME + db HITMONLEE + db HITMONCHAN + db ARBOK + db PARASECT + db PSYDUCK + db DROWZEE + db GOLEM + db HERACROSS + db MAGMAR + db HO_OH + db ELECTABUZZ + db MAGNETON + db KOFFING + db SNEASEL + db MANKEY + db SEEL + db DIGLETT + db TAUROS + db TEDDIURSA + db URSARING + db SLUGMA + db FARFETCH_D + db VENONAT + db DRAGONITE + db MAGCARGO + db SWINUB + db PILOSWINE + db DODUO + db POLIWAG + db JYNX + db MOLTRES + db ARTICUNO + db ZAPDOS + db DITTO + db MEOWTH + db KRABBY + db CORSOLA + db REMORAID + db OCTILLERY + db VULPIX + db NINETALES + db PIKACHU + db RAICHU + db DELIBIRD + db MANTINE + db DRATINI + db DRAGONAIR + db KABUTO + db KABUTOPS + db HORSEA + db SEADRA + db SKARMORY + db HOUNDOUR + db SANDSHREW + db SANDSLASH + db OMANYTE + db OMASTAR + db JIGGLYPUFF + db WIGGLYTUFF + db EEVEE + db FLAREON + db JOLTEON + db VAPOREON + db MACHOP + db ZUBAT + db EKANS + db PARAS + db POLIWHIRL + db POLIWRATH + db WEEDLE + db KAKUNA + db BEEDRILL + db HOUNDOOM + db DODRIO + db PRIMEAPE + db DUGTRIO + db VENOMOTH + db DEWGONG + db KINGDRA + db PHANPY + db CATERPIE + db METAPOD + db BUTTERFREE + db MACHAMP + db DONPHAN + db GOLDUCK + db HYPNO + db GOLBAT + db MEWTWO + db SNORLAX + db MAGIKARP + db PORYGON2 + db STANTLER + db MUK + db SMEARGLE + db KINGLER + db CLOYSTER + db TYROGUE + db ELECTRODE + db CLEFABLE + db WEEZING + db PERSIAN + db MAROWAK + db HITMONTOP + db HAUNTER + db ABRA + db ALAKAZAM + db PIDGEOTTO + db PIDGEOT + db STARMIE + db BULBASAUR + db VENUSAUR + db TENTACRUEL + db SMOOCHUM + db GOLDEEN + db SEAKING + db ELEKID + db MAGBY + db MILTANK + db BLISSEY + db PONYTA + db RAPIDASH + db RATTATA + db RATICATE + db NIDORINO + db NIDORINA + db GEODUDE + db PORYGON + db AERODACTYL + db RAIKOU + db MAGNEMITE + db ENTEI + db SUICUNE + db CHARMANDER + db SQUIRTLE + db CHARMELEON + db WARTORTLE + db CHARIZARD + db LARVITAR + db PUPITAR + db TYRANITAR + db LUGIA + db ODDISH + db GLOOM + db VILEPLUME + db BELLSPROUT + db WEEPINBELL + db VICTREEBEL + db CHIKORITA + db BAYLEEF + db MEGANIUM + db CYNDAQUIL + db QUILAVA + db TYPHLOSION + db TOTODILE + db CROCONAW + db FERALIGATR + db SENTRET + db FURRET + db HOOTHOOT + db NOCTOWL + db LEDYBA + db LEDIAN + db SPINARAK + db ARIADOS + db CROBAT + db CHINCHOU + db LANTURN + db PICHU + db CLEFFA + db IGGLYBUFF + db TOGEPI + db TOGETIC + db NATU + db XATU + db MAREEP + db FLAAFFY + db AMPHAROS + db BELLOSSOM + db MARILL + db AZUMARILL + db SUDOWOODO + db POLITOED + db HOPPIP + db SKIPLOOM + db JUMPLUFF + db AIPOM + db SUNKERN + db SUNFLORA + db YANMA + db WOOPER + db QUAGSIRE + db ESPEON + db UMBREON + db MURKROW + db SLOWKING + db MISDREAVUS + db UNOWN + db WOBBUFFET + db GIRAFARIG + db PINECO + db FORRETRESS + db DUNSPARCE + db GLIGAR + db STEELIX + db SNUBBULL + db GRANBULL + db QWILFISH + db WOBBUFFET + db WOBBUFFET +; fba18 diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm index 6ebb2a421..368636758 100644 --- a/engine/timeofdaypals.asm +++ b/engine/timeofdaypals.asm @@ -39,7 +39,7 @@ _TimeOfDayPals:: ; 8c011 ; save bg palette 8 - ld hl, wMapPals + 8 * 7 ; wMapPals + 7 pals + ld hl, UnknBGPals + 8 * 7 ; UnknBGPals + 7 pals ; save wram bank ld a, [rSVBK] @@ -65,12 +65,12 @@ _TimeOfDayPals:: ; 8c011 ; update sgb pals - ld b, $9 + ld b, SCGB_09 call GetSGBLayout ; restore bg palette 8 - ld hl, Unkn2Pals - 1 ; last byte in wMapPals + ld hl, UnknOBPals - 1 ; last byte in UnknBGPals ; save wram bank ld a, [rSVBK] @@ -172,12 +172,12 @@ Function8c0c1: ; 8c0c1 push af ld a, $5 ld [rSVBK], a - ld hl, wMapPals + ld hl, UnknBGPals ld a, [hli] ld e, a ld a, [hli] ld d, a - ld hl, wMapPals + 8 + ld hl, UnknBGPals + 8 ld c, $6 .asm_8c0d4 ld a, e diff --git a/engine/timeset.asm b/engine/timeset.asm new file mode 100755 index 000000000..1f82da884 --- /dev/null +++ b/engine/timeset.asm @@ -0,0 +1,771 @@ +InitClock: ; 90672 (24:4672) +; Ask the player to set the time. + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + + ld a, $0 + ld [wSpriteUpdatesEnabled], a + ld a, $10 + ld [MusicFade], a + ld a, MUSIC_NONE % $100 + ld [MusicFadeIDLo], a + ld a, MUSIC_NONE / $100 + ld [MusicFadeIDHi], a + ld c, 8 + call DelayFrames + call RotateFourPalettesLeft + call ClearTileMap + call ClearSprites + ld b, SCGB_08 + call GetSGBLayout + xor a + ld [hBGMapMode], a + call LoadStandardFont + ld de, GFX_908fb + ld hl, VTiles2 tile $00 + lb bc, BANK(GFX_908fb), 1 + call Request1bpp + ld de, GFX_90903 + ld hl, VTiles2 tile $01 + lb bc, BANK(GFX_90903), 1 + call Request1bpp + ld de, GFX_9090b + ld hl, VTiles2 tile $02 + lb bc, BANK(GFX_9090b), 1 + call Request1bpp + call .ClearScreen + call WaitBGMap + call RotateFourPalettesRight + ld hl, UnknownText_0x90874 + call PrintText + ld hl, wc608 + ld bc, 50 + xor a + call ByteFill + ld a, $a + ld [wInitHourBuffer], a + +.loop + ld hl, UnknownText_0x90879 + call PrintText + hlcoord 3, 7 + ld b, 2 + ld c, 15 + call TextBox + hlcoord 11, 7 + ld [hl], $1 + hlcoord 11, 10 + ld [hl], $2 + hlcoord 4, 9 + call DisplayHourOClock + ld c, 10 + call DelayFrames + +.SetHourLoop + call JoyTextDelay + call SetHour + jr nc, .SetHourLoop + + ld a, [wInitHourBuffer] + ld [StringBuffer2 + 1], a + call .ClearScreen + ld hl, UnknownText_0x90886 + call PrintText + call YesNoBox + jr nc, .HourIsSet + call .ClearScreen + jr .loop + +.HourIsSet + ld hl, UnknownText_0x9089a + call PrintText + hlcoord 11, 7 + lb bc, 2, 7 + call TextBox + hlcoord 15, 7 + ld [hl], $1 + hlcoord 15, 10 + ld [hl], $2 + hlcoord 12, 9 + call DisplayMinutesWithMinString + ld c, 10 + call DelayFrames + +.SetMinutesLoop + call JoyTextDelay + call SetMinutes + jr nc, .SetMinutesLoop + + ld a, [BattleMonNick + 5] + ld [StringBuffer2 + 2], a + call .ClearScreen + ld hl, UnknownText_0x908a4 + call PrintText + call YesNoBox + jr nc, .MinutesAreSet + call .ClearScreen + jr .HourIsSet + +.MinutesAreSet + call Function658 + ld hl, OakText_ResponseToSetTime + call PrintText + call WaitPressAorB_BlinkCursor + pop af + ld [hInMenu], a + ret + +.ClearScreen: ; 90783 (24:4783) + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + xor a + call ByteFill + ld a, $1 + ld [hBGMapMode], a + ret + +SetHour: ; 90795 (24:4795) + ld a, [hJoyPressed] + and A_BUTTON + jr nz, .Confirm + + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + call DelayFrame + and a + ret + +.down + ld hl, wInitHourBuffer + ld a, [hl] + and a + jr nz, .DecreaseThroughMidnight + ld a, 23 + 1 +.DecreaseThroughMidnight + dec a + ld [hl], a + jr .okay + +.up + ld hl, wInitHourBuffer + ld a, [hl] + cp 23 + jr c, .AdvanceThroughMidnight + ld a, -1 +.AdvanceThroughMidnight + inc a + ld [hl], a + +.okay + hlcoord 4, 9 + ld a, " " + ld bc, 15 + call ByteFill + hlcoord 4, 9 + call DisplayHourOClock + call WaitBGMap + and a + ret + +.Confirm + scf + ret + +DisplayHourOClock: ; 907de (24:47de) + push hl + ld a, [wInitHourBuffer] + ld c, a + ld e, l + ld d, h + call PrintHour + inc hl + ld de, String_oclock + call PlaceString + pop hl + ret +; 907f1 (24:47f1) + +Function907f1: ; 907f1 + ld h, d + ld l, e + push hl + call DisplayHourOClock + pop de +rept 2 + inc de +endr + ld a, $9c + ld [de], a + inc de + push de + ld hl, $3 + add hl, de + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + pop hl + call DisplayMinutesWithMinString +rept 3 + inc hl +endr + ret +; 90810 + +SetMinutes: ; 90810 (24:4810) + ld a, [hJoyPressed] + and A_BUTTON + jr nz, .asm_90857 + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .asm_90835 + ld a, [hl] + and D_DOWN + jr nz, .asm_90828 + call DelayFrame + and a + ret +.asm_90828 + ld hl, BattleMonNick + 5 + ld a, [hl] + and a + jr nz, .asm_90831 + ld a, 59 + 1 +.asm_90831 + dec a + ld [hl], a + jr .asm_90841 +.asm_90835 + ld hl, BattleMonNick + 5 + ld a, [hl] + cp 59 + jr c, .asm_9083f + ld a, -1 +.asm_9083f + inc a + ld [hl], a +.asm_90841 + hlcoord 12, 9 + ld a, " " + ld bc, 7 + call ByteFill + hlcoord 12, 9 + call DisplayMinutesWithMinString + call WaitBGMap + and a + ret +.asm_90857 + scf + ret + +DisplayMinutesWithMinString: ; 90859 (24:4859) + ld de, BattleMonNick + 5 + call PrintTwoDigitNumberRightAlign + inc hl + ld de, String_min + call PlaceString + ret + +PrintTwoDigitNumberRightAlign: ; 90867 (24:4867) + push hl + ld a, " " + ld [hli], a + ld [hl], a + pop hl + lb bc, PRINTNUM_RIGHTALIGN | 1, 2 + call PrintNum + ret +; 90874 (24:4874) + +UnknownText_0x90874: ; 0x90874 + ; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me? + text_jump UnknownText_0x1bc29c + db "@" +; 0x90879 + +UnknownText_0x90879: ; 0x90879 + ; What time is it? + text_jump UnknownText_0x1bc2eb + db "@" +; 0x9087e + +String_oclock: + db "o'clock@" +; 90886 + +UnknownText_0x90886: ; 0x90886 + ; What?@ @ + text_jump UnknownText_0x1bc2fd + start_asm + hlcoord 1, 16 + call DisplayHourOClock + ld hl, UnknownText_0x90895 + ret +; 90895 (24:4895) + +UnknownText_0x90895: ; 0x90895 + ; ? + text_jump UnknownText_0x1bc305 + db "@" +; 0x9089a + +UnknownText_0x9089a: ; 0x9089a + ; How many minutes? + text_jump UnknownText_0x1bc308 + db "@" +; 0x9089f + +String_min: + db "min.@" +; 908a4 + +UnknownText_0x908a4: ; 0x908a4 + ; Whoa!@ @ + text_jump UnknownText_0x1bc31b + start_asm +; 0x908a9 + hlcoord 7, 14 + call DisplayMinutesWithMinString + ld hl, UnknownText_0x908b3 + ret +; 908b3 (24:48b3) + +UnknownText_0x908b3: ; 0x908b3 + ; ? + text_jump UnknownText_0x1bc323 + db "@" +; 0x908b8 + +OakText_ResponseToSetTime: ; 0x908b8 + start_asm + decoord 1, 14 + ld a, [wInitHourBuffer] + ld c, a + call PrintHour + ld [hl], ":" + inc hl + ld de, BattleMonNick + 5 + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ld b, h + ld c, l + ld a, [wInitHourBuffer] + cp 4 + jr c, .NITE + cp 11 + jr c, .MORN + cp 18 + jr c, .DAY +.NITE + ld hl, .sodark + ret +.MORN + ld hl, .overslept + ret +.DAY + ld hl, .yikes + ret +; 908ec (24:48ec) + +.overslept: ; 0x908ec + ; ! I overslept! + text_jump UnknownText_0x1bc326 + db "@" +; 0x908f1 + +.yikes: ; 0x908f1 + ; ! Yikes! I over- slept! + text_jump UnknownText_0x1bc336 + db "@" +; 0x908f6 + +.sodark: ; 0x908f6 + ; ! No wonder it's so dark! + text_jump UnknownText_0x1bc34f + db "@" +; 0x908fb + +GFX_908fb: ; 908fb +INCBIN "gfx/unknown/0908fb.2bpp" +GFX_90903: ; 90903 +INCBIN "gfx/unknown/090903.2bpp" +GFX_9090b: ; 9090b +INCBIN "gfx/unknown/09090b.2bpp" +; 90913 + +Special_SetDayOfWeek: ; 90913 + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + ld de, GFX_90903 + ld hl, VTiles1 tile $6f + lb bc, BANK(GFX_90903), 1 + call Request1bpp + ld de, GFX_9090b + ld hl, VTiles1 tile $75 + lb bc, BANK(GFX_9090b), 1 + call Request1bpp + xor a + ld [wd002], a +.asm_90936 + hlcoord 0, 12 + lb bc, 4, 18 + call TextBox + call LoadStandardMenuDataHeader + ld hl, UnknownText_0x90a3f + call PrintText + hlcoord 9, 3 + ld b, 2 + ld c, 9 + call TextBox + hlcoord 14, 3 + ld [hl], $ef + hlcoord 14, 6 + ld [hl], $f5 + hlcoord 10, 5 + call Function909de + call ApplyTilemap + ld c, 10 + call DelayFrames +.asm_9096a + call JoyTextDelay + call Function90993 + jr nc, .asm_9096a + call ExitMenu + call UpdateSprites + ld hl, UnknownText_0x90a44 + call PrintText + call YesNoBox + jr c, .asm_90936 + ld a, [wd002] + ld [StringBuffer2], a + call Function663 + call LoadStandardFont + pop af + ld [hInMenu], a + ret +; 90993 + +Function90993: ; 90993 + ld a, [hJoyPressed] + and A_BUTTON + jr z, .asm_9099b + scf + ret + +.asm_9099b + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .asm_909ba + ld a, [hl] + and D_DOWN + jr nz, .asm_909ad + call DelayFrame + and a + ret + +.asm_909ad + ld hl, wd002 + ld a, [hl] + and a + jr nz, .asm_909b6 + ld a, 6 + 1 + +.asm_909b6 + dec a + ld [hl], a + jr .asm_909c6 + +.asm_909ba + ld hl, wd002 + ld a, [hl] + cp 6 + jr c, .asm_909c4 + ld a, -1 + +.asm_909c4 + inc a + ld [hl], a + +.asm_909c6 + xor a + ld [hBGMapMode], a + hlcoord 10, 4 + ld b, $2 + ld c, $9 + call ClearBox + hlcoord 10, 5 + call Function909de + call WaitBGMap + and a + ret +; 909de + +Function909de: ; 909de + push hl + ld a, [wd002] + ld e, a + ld d, 0 + ld hl, WeekdaysStrings +rept 2 + add hl, de +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 909f2 + +WeekdaysStrings: ; 909f2 + dw Sunday + dw Monday + dw Tuesday + dw Wednesday + dw Thursday + dw Friday + dw Saturday + dw Sunday + +Sunday: db " SUNDAY@" +Monday: db " MONDAY@" +Tuesday: db " TUESDAY@" +Wednesday: db "WEDNESDAY@" +Thursday: db "THURSDAY@" +Friday: db " FRIDAY@" +Saturday: db "SATURDAY@" + + +UnknownText_0x90a3f: ; 0x90a3f + ; What day is it? + text_jump UnknownText_0x1bc369 + db "@" +; 0x90a44 + +UnknownText_0x90a44: ; 0x90a44 + start_asm + hlcoord 1, 14 + call Function909de + ld hl, UnknownText_0x90a4f + ret +; 90a4f (24:4a4f) + +UnknownText_0x90a4f: ; 0x90a4f + ; , is it? + text_jump UnknownText_0x1bc37a + db "@" +; 0x90a54 + +Special_InitialSetDSTFlag: ; 90a54 + ld a, [wDST] + set 7, a + ld [wDST], a + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, UnknownText_0x90a6c + call PlaceWholeStringInBoxAtOnce + ret +; 90a6c + +UnknownText_0x90a6c: ; 90a6c + start_asm + call UpdateTime + ld a, [hHours] + ld b, a + ld a, [hMinutes] + ld c, a + decoord 1, 14 + callba PrintHoursMins + ld hl, TextJump_DSTIsThatOK + ret +; 90a83 (24:4a83) + +TextJump_DSTIsThatOK: ; 0x90a83 + ; DST, is that OK? + text_jump Text_DSTIsThatOK + db "@" +; 0x90a88 + +Special_InitialClearDSTFlag: ; 90a88 + ld a, [wDST] + res 7, a + ld [wDST], a + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, UnknownText_0x90aa0 + call PlaceWholeStringInBoxAtOnce + ret +; 90aa0 + +UnknownText_0x90aa0: ; 90aa0 + start_asm + call UpdateTime + ld a, [hHours] + ld b, a + ld a, [hMinutes] + ld c, a + decoord 1, 14 + callba PrintHoursMins + ld hl, UnknownText_0x90ab7 + ret +; 90ab7 + +UnknownText_0x90ab7: ; 0x90ab7 + ; , is that OK? + text_jump UnknownText_0x1c5ff1 + db "@" +; 0x90abc + +Function90abc: ; 90abc + hlcoord 1, 14 + lb bc, 3, SCREEN_WIDTH - 2 + call ClearBox + ld hl, UnknownText_0x90acc + call PlaceWholeStringInBoxAtOnce + ret +; 90acc + +UnknownText_0x90acc: ; 0x90acc + start_asm + + call UpdateTime + + hlcoord 1, 14 + ld [hl], "R" + inc hl + ld [hl], "T" + inc hl + ld [hl], " " + inc hl + + ld de, hRTCDayLo + call Function90b23 + + hlcoord 1, 16 + ld [hl], "D" + inc hl + ld [hl], "F" + inc hl + ld [hl], " " + inc hl + + ld de, StartDay + call Function90b23 + + ld [hl], " " + inc hl + + ld a, [wDST] + bit 7, a + jr z, .off + + ld [hl], "O" + inc hl + ld [hl], "N" + inc hl + jr .done + +.off + ld [hl], "O" + inc hl + ld [hl], "F" + inc hl + ld [hl], "F" + inc hl + +.done + ld hl, UnknownText_0x90b13 + ret +; 90b13 + +UnknownText_0x90b13: ; 0x90b13 + text "<PARA>Now on DEBUG…" + prompt +; 0x90b23 + +Function90b23: ; 90b23 + lb bc, 1, 3 + call PrintNum + ld [hl], "." + inc hl + inc de + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ld [hl], ":" + inc hl + inc de + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ret +; 90b3e + +PrintHour: ; 90b3e (24:4b3e) + ld l, e + ld h, d + push bc + call GetTimeOfDayString + call PlaceString + ld l, c + ld h, b + inc hl + pop bc + call AdjustHourForAMorPM + ld [wd265], a + ld de, wd265 + call PrintTwoDigitNumberRightAlign + ret + +GetTimeOfDayString: ; 90b58 (24:4b58) + ld a, c + cp 4 + jr c, .nite + cp 10 + jr c, .morn + cp 18 + jr c, .day +.nite + ld de, .NITE + ret +.morn + ld de, .MORN + ret +.day + ld de, .DAY + ret +; 90b71 (24:4b71) + +.NITE: db "NITE@" +.MORN: db "MORN@" +.DAY: db "DAY@" +; 90b7f + +AdjustHourForAMorPM: +; Convert the hour stored in c (0-23) to a 1-12 value + ld a, c + or a + jr z, .midnight + cp 12 + ret c + ret z + sub 12 + ret + +.midnight + ld a, 12 + ret diff --git a/engine/title.asm b/engine/title.asm index 0fbf8b42d..0812ec0ec 100644 --- a/engine/title.asm +++ b/engine/title.asm @@ -31,8 +31,8 @@ _TitleScreen: ; 10ed67 ; Clear screen palettes - ld hl, VBGMap0 - ld bc, $0280 + hlbgcoord 0, 0 + ld bc, 20 bgrows xor a call ByteFill @@ -42,8 +42,8 @@ _TitleScreen: ; 10ed67 ; BG Map 1: ; line 0 (copyright) - ld hl, VBGMap1 - ld bc, $0020 ; one row + hlbgcoord 0, 0, VBGMap1 + ld bc, 1 bgrows ld a, 7 ; palette call ByteFill @@ -53,41 +53,41 @@ _TitleScreen: ; 10ed67 ; Apply logo gradient: ; lines 3-4 - ld hl, VBGMap0 tile $06 ; (0,3) - ld bc, $0040 ; 2 rows + hlbgcoord 0, 3 + ld bc, 2 bgrows ld a, 2 call ByteFill ; line 5 - ld hl, VBGMap0 tile $0a ; (0,5) - ld bc, $0020 ; 1 row + hlbgcoord 0, 5 + ld bc, 1 bgrows ld a, 3 call ByteFill ; line 6 - ld hl, VBGMap0 tile $0c ; (0,6) - ld bc, $0020 ; 1 row + hlbgcoord 0, 6 + ld bc, 1 bgrows ld a, 4 call ByteFill ; line 7 - ld hl, VBGMap0 tile $0e ; (0,7) - ld bc, $0020 ; 1 row + hlbgcoord 0, 7 + ld bc, 1 bgrows ld a, 5 call ByteFill ; lines 8-9 - ld hl, VBGMap0 tile $10 ; (0,8) - ld bc, $0040 ; 2 rows + hlbgcoord 0, 8 + ld bc, 2 bgrows ld a, 6 call ByteFill ; 'CRYSTAL VERSION' - ld hl, $9925 ; (5,9) - ld bc, $000b ; length of version text + hlbgcoord 5, 9 + ld bc, NAME_LENGTH ; length of version text ld a, 1 call ByteFill ; Suicune gfx - ld hl, VBGMap0 tile $18 ; (0,12) - ld bc, $00c0 ; the rest of the screen + hlbgcoord 0, 12 + ld bc, 6 bgrows ; the rest of the screen ld a, 8 call ByteFill @@ -109,9 +109,9 @@ _TitleScreen: ; 10ed67 ; Clear screen tiles - ld hl, VBGMap0 - ld bc, $0800 - ld a, $7f + hlbgcoord 0, 0 + ld bc, 64 bgrows + ld a, " " call ByteFill ; Draw Pokemon logo @@ -122,7 +122,7 @@ _TitleScreen: ; 10ed67 call DrawTitleGraphic ; Draw copyright text - ld hl, $9c03 ; BGMap1(3,0) + hlbgcoord 3, 0, VBGMap1 lb bc, 1, 13 ld d, $c ld e, $10 @@ -144,7 +144,7 @@ _TitleScreen: ; 10ed67 ; Update palette colors ld hl, TitleScreenPalettes - ld de, wMapPals + ld de, UnknBGPals ld bc, 4 * 32 call CopyBytes @@ -220,7 +220,7 @@ _TitleScreen: ; 10ed67 ld [hBGMapMode], a xor a - ld [wMapPals + 2], a + ld [UnknBGPals + 2], a ; Play starting sound effect call SFXChannelsOff @@ -231,7 +231,7 @@ _TitleScreen: ; 10ed67 ; 10eea7 SuicuneFrameIterator: ; 10eea7 - ld hl, wMapPals + 2 + ld hl, UnknBGPals + 2 ld a, [hl] ld c, a inc [hl] @@ -270,7 +270,7 @@ SuicuneFrameIterator: ; 10eea7 LoadSuicuneFrame: ; 10eed2 hlcoord 6, 12 ld b, 6 -.row +.bgrows ld c, 8 .col ld a, d @@ -288,7 +288,7 @@ LoadSuicuneFrame: ; 10eed2 add d ld d, a dec b - jr nz, .row + jr nz, .bgrows ret ; 10eeef @@ -298,8 +298,8 @@ DrawTitleGraphic: ; 10eeef ; b: height ; c: width ; d: tile to start drawing from -; e: number of tiles to advance for each row -.row +; e: number of tiles to advance for each bgrows +.bgrows push de push bc push hl @@ -318,7 +318,7 @@ DrawTitleGraphic: ; 10eeef add d ld d, a dec b - jr nz, .row + jr nz, .bgrows ret ; 10ef06 diff --git a/engine/town_map.asm b/engine/town_map.asm new file mode 100755 index 000000000..c821e793a --- /dev/null +++ b/engine/town_map.asm @@ -0,0 +1,173 @@ + +_TownMap: ; 9191c + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + + ld a, [VramState] + push af + xor a + ld [VramState], a + + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call Function90c4e + callba Function8cf53 + ld a, 8 + call SkipMusic + ld a, $e3 + ld [rLCDC], a + call Function90d56 + ld [wd002], a + ld [wd003], a + xor a + ld [hBGMapMode], a + call Function91a04 + call Function3200 + ld a, [wd002] + call Function9106a + ld a, [wd003] + call Function91098 + ld a, c + ld [wd004], a + ld a, b + ld [wd005], a + ld b, SCGB_02 + call GetSGBLayout + call SetPalettes + ld a, [hCGB] + and a + jr z, .sgb + ld a, $e4 + call Functioncf8 + call DelayFrame + +.sgb + ld a, [wd002] + cp KANTO_LANDMARK + jr nc, .kanto + ld d, KANTO_LANDMARK - 1 + ld e, 1 + call Function919b0 + jr .resume + +.kanto + call Function910e8 + call Function919b0 + +.resume + pop af + ld [VramState], a + pop af + ld [hInMenu], a + pop af + ld [Options], a + call ClearBGPalettes + ret +; 919b0 + +Function919b0: ; 919b0 +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + ret nz + + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .pressed_up + + ld a, [hl] + and D_DOWN + jr nz, .pressed_down +.loop2 + push de + callba Function8cf69 + pop de + call DelayFrame + jr .loop + +.pressed_up + ld hl, wd003 + ld a, [hl] + cp d + jr c, .okay + ld a, e + dec a + ld [hl], a + +.okay + inc [hl] + jr .next + +.pressed_down + ld hl, wd003 + ld a, [hl] + cp e + jr nz, .okay2 + ld a, d + inc a + ld [hl], a + +.okay2 + dec [hl] + +.next + push de + ld a, [wd003] + call Function910b4 + ld a, [wd004] + ld c, a + ld a, [wd005] + ld b, a + ld a, [wd003] + call Function910d4 + pop de + jr .loop2 +; 91a04 + +Function91a04: ; 91a04 + ld a, [wd002] + cp KANTO_LANDMARK + jr nc, .kanto + ld e, $0 + jr .okay + +.kanto + ld e, $1 + +.okay + callba PokegearMap + ld a, $7 + ld bc, 6 + hlcoord 1, 0 + call ByteFill + hlcoord 0, 0 + ld [hl], $6 + hlcoord 7, 0 + ld [hl], $17 + hlcoord 7, 1 + ld [hl], $16 + hlcoord 7, 2 + ld [hl], $26 + ld a, $7 + ld bc, NAME_LENGTH + hlcoord 8, 2 + call ByteFill + hlcoord 19, 2 + ld [hl], $17 + ld a, [wd003] + call Function910b4 + callba TownMapPals + ret +; 91a53 diff --git a/engine/trade/animation.asm b/engine/trade/animation.asm new file mode 100755 index 000000000..0aaf0cb8b --- /dev/null +++ b/engine/trade/animation.asm @@ -0,0 +1,1542 @@ +TradeAnimation: ; 28f24 + xor a + ld [wcf66], a + ld hl, wPlayerTrademonSenderName + ld de, wOTTrademonSenderName + call Function297ff + ld hl, wPlayerTrademonSpecies + ld de, wOTTrademonSpecies + call Function29814 + ld de, .data_28f3f + jr Function28fa1 + +.data_28f3f + tradeanim_setup_givemon_scroll + tradeanim_show_givemon_data + tradeanim_do_givemon_scroll + tradeanim_wait_80 + tradeanim_wait_96 + tradeanim_poof + tradeanim_rocking_ball + tradeanim_enter_link_tube + tradeanim_wait_anim + tradeanim_bulge_through_tube + tradeanim_wait_anim + tradeanim_1e + tradeanim_give_trademon_sfx + tradeanim_tube_to_ot + tradeanim_sent_to_ot_text + tradeanim_scroll_out_right + + tradeanim_ot_sends_text_1 + tradeanim_ot_bids_farewell + tradeanim_wait_40 + tradeanim_scroll_out_right + tradeanim_get_trademon_sfx + tradeanim_tube_to_player + tradeanim_enter_link_tube + tradeanim_drop_ball + tradeanim_exit_link_tube + tradeanim_wait_anim + tradeanim_show_getmon_data + tradeanim_poof + tradeanim_wait_anim + tradeanim_1d + tradeanim_animate_frontpic + tradeanim_wait_80_if_ot_egg + tradeanim_1e + tradeanim_take_care_of_text + tradeanim_scroll_out_right + tradeanim_end + +TradeAnimationPlayer2: ; 28f63 + xor a + ld [wcf66], a + ld hl, wOTTrademonSenderName + ld de, wPlayerTrademonSenderName + call Function297ff + ld hl, wOTTrademonSpecies + ld de, wPlayerTrademonSpecies + call Function29814 + ld de, .data_28f7e + jr Function28fa1 + +.data_28f7e + tradeanim_ot_sends_text_2 + tradeanim_ot_bids_farewell + tradeanim_wait_40 + tradeanim_scroll_out_right + tradeanim_get_trademon_sfx + tradeanim_tube_to_ot + tradeanim_enter_link_tube + tradeanim_drop_ball + tradeanim_exit_link_tube + tradeanim_wait_anim + tradeanim_show_getmon_data + tradeanim_poof + tradeanim_wait_anim + tradeanim_1d + tradeanim_animate_frontpic + tradeanim_wait_180_if_ot_egg + tradeanim_1e + tradeanim_take_care_of_text + tradeanim_scroll_out_right + + tradeanim_setup_givemon_scroll + tradeanim_show_givemon_data + tradeanim_do_givemon_scroll + tradeanim_wait_40 + tradeanim_poof + tradeanim_rocking_ball + tradeanim_enter_link_tube + tradeanim_wait_anim + tradeanim_bulge_through_tube + tradeanim_wait_anim + tradeanim_1e + tradeanim_give_trademon_sfx + tradeanim_tube_to_player + tradeanim_sent_to_ot_text + tradeanim_scroll_out_right + tradeanim_end + +Function28fa1: ; 28fa1 + ld hl, wTradeAnimPointer + ld [hl], e + inc hl + ld [hl], d + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld hl, VramState + ld a, [hl] + push af + res 0, [hl] + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call Function28fdb + ld a, [wcf66] + and a + jr nz, .anim_loop + ld de, MUSIC_EVOLUTION + call PlayMusic2 +.anim_loop + call DoTradeAnimation + jr nc, .anim_loop + pop af + ld [Options], a + pop af + ld [VramState], a + pop af + ld [hMapAnims], a + ret +; 28fdb + +Function28fdb: ; 28fdb + xor a + ld [wJumptableIndex], a + call ClearBGPalettes + call ClearSprites + call ClearTileMap + call DisableLCD + call LoadFontsBattleExtra + callab Function8cf53 + ld a, [hCGB] + and a + jr z, .asm_2900b + ld a, $1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, sScratch - VTiles0 + xor a + call ByteFill + ld a, $0 + ld [rVBK], a + +.asm_2900b + hlbgcoord 0, 0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + ld hl, TradeGameBoyLZ + ld de, VTiles2 tile $31 + call Decompress + ld hl, TradeArrowGFX + ld de, VTiles1 tile $6d + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + ld hl, TradeArrowGFX + $10 + ld de, VTiles1 tile $6e + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba Function4d7fd + call EnableLCD + call Function2982b + ld a, [wPlayerTrademonSpecies] + ld hl, wPlayerTrademonDVs + ld de, VTiles0 + call Function29491 + ld a, [wOTTrademonSpecies] + ld hl, wOTTrademonDVs + ld de, VTiles0 tile $31 + call Function29491 + ld a, [wPlayerTrademonSpecies] + ld de, wPlayerTrademonSpeciesName + call Function294a9 + ld a, [wOTTrademonSpecies] + ld de, wOTTrademonSpeciesName + call Function294a9 + call Function297ed + ret +; 29082 + +DoTradeAnimation: ; 29082 + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finished + call .DoTradeAnimCommand + callab Function8cf69 + ld hl, wcf65 + inc [hl] + call DelayFrame + and a + ret + +.finished + call LoadStandardFont + scf + ret +; 290a0 + +.DoTradeAnimCommand: ; 290a0 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .JumpTable +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 290af + +.JumpTable: ; 290af + dw TradeAnim_Next ; 00 + dw TradeAnim_ShowGivemonData ; 01 + dw TradeAnim_ShowGetmonData ; 02 + dw TradeAnim_EnterLinkTube ; 03 + dw TradeAnim_04 ; 04 + dw TradeAnim_ExitLinkTube ; 05 + dw TradeAnim_TubeToOT1 ; 06 + dw TradeAnim_TubeToOT2 ; 07 + dw TradeAnim_TubeToOT3 ; 08 + dw TradeAnim_TubeToOT4 ; 09 + dw TradeAnim_TubeToOT5 ; 0a + dw TradeAnim_TubeToOT6 ; 0b + dw TradeAnim_TubeToOT7 ; 0c + dw TradeAnim_TubeToOT8 ; 0d + dw TradeAnim_TubeToPlayer1 ; 0e + dw TradeAnim_TubeToPlayer2 ; 0f + dw TradeAnim_TubeToPlayer3 ; 10 + dw TradeAnim_TubeToPlayer4 ; 11 + dw TradeAnim_TubeToPlayer5 ; 12 + dw TradeAnim_TubeToPlayer6 ; 13 + dw TradeAnim_TubeToPlayer7 ; 14 + dw TradeAnim_TubeToPlayer8 ; 15 + dw TradeAnim_SentToOTText ; 16 + dw TradeAnim_OTBidsFarewell ; 17 + dw TradeAnim_TakeCareOfText ; 18 + dw TradeAnim_OTSendsText1 ; 19 + dw TradeAnim_OTSendsText2 ; 1a + dw TradeAnim_SetupGivemonScroll ; 1b + dw TradeAnim_DoGivemonScroll ; 1c + dw TradeAnim_1d ; 1d + dw TradeAnim_1e ; 1e + dw TradeAnim_ScrollOutRight ; 1f + dw TradeAnim_ScrollOutRight2 ; 20 + dw TraideAnim_Wait80 ; 21 + dw TraideAnim_Wait40 ; 22 + dw TradeAnim_RockingBall ; 23 + dw TradeAnim_DropBall ; 24 + dw TradeAnim_WaitAnim ; 25 + dw TradeAnim_WaitAnim2 ; 26 + dw TradeAnim_Poof ; 27 + dw TradeAnim_BulgeThroughTube ; 28 + dw TradeAnim_GiveTrademonSFX ; 29 + dw TradeAnim_GetTrademonSFX ; 2a + dw TradeAnim_End ; 2b + dw TradeAnim_AnimateFrontpic ; 2c + dw TraideAnim_Wait96 ; 2d + dw TraideAnim_Wait80IfOTEgg ; 2e + dw TraideAnim_Wait180IfOTEgg ; 2f +; 2910f + +NextTradeAnim: ; 2910f + ld hl, wJumptableIndex + inc [hl] + ret +; 29114 + +TradeAnim_Next: ; 29114 + ld hl, wTradeAnimPointer + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld [wJumptableIndex], a + inc de + ld [hl], d + dec hl + ld [hl], e + ret +; 29123 + +TradeAnim_End: ; 29123 + ld hl, wJumptableIndex + set 7, [hl] + ret +; 29129 + +TradeAnim_TubeToOT1: ; 29129 + ld a, $ed + call Function292f6 + ld a, [wc74c] + ld [wd265], a + xor a + depixel 5, 11, 4, 0 + ld b, $0 + jr Function2914e + +TradeAnim_TubeToPlayer1: ; 2913c + ld a, $ee + call Function292f6 + ld a, [wc74d] + ld [wd265], a + ld a, $2 + depixel 9, 18, 4, 4 + ld b, $4 + +Function2914e: ; 2914e + push bc + push de + push bc + push de + push af + call DisableLCD + callab Function8cf53 + hlbgcoord 20, 3 + ld bc, $c + ld a, $60 + call ByteFill + pop af + call Function29281 + xor a + ld [hSCX], a + ld a, $7 + ld [hWX], a + ld a, $70 + ld [hWY], a + call EnableLCD + call Function2985a + pop de + ld a, SPRITE_ANIM_INDEX_11 + call _InitSpriteAnimStruct + ld hl, $b + add hl, bc + pop bc + ld [hl], b + pop de + ld a, SPRITE_ANIM_INDEX_12 + call _InitSpriteAnimStruct + ld hl, $b + add hl, bc + pop bc + ld [hl], b + call WaitBGMap + ld b, SCGB_1B + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld a, $d0 + call Functioncf8 + call NextTradeAnim + ld a, $5c + ld [wcf64], a + ret +; 291af + +TradeAnim_TubeToOT2: ; 291af + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $50 + ret nz + ld a, $1 + call Function29281 + call NextTradeAnim + ret +; 291c4 + +TradeAnim_TubeToOT3: ; 291c4 + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $a0 + ret nz + ld a, $2 + call Function29281 + call NextTradeAnim + ret +; 291d9 + +TradeAnim_TubeToOT4: ; 291d9 + call Function2981d + ld a, [hSCX] + add $2 + ld [hSCX], a + and a + ret nz + call NextTradeAnim + ret +; 291e8 + +TradeAnim_TubeToPlayer3: ; 291e8 + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $b0 + ret nz + ld a, $1 + call Function29281 + call NextTradeAnim + ret +; 291fd + +TradeAnim_TubeToPlayer4: ; 291fd + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $60 + ret nz + xor a + call Function29281 + call NextTradeAnim + ret +; 29211 + +TradeAnim_TubeToPlayer5: ; 29211 + call Function2981d + ld a, [hSCX] + sub $2 + ld [hSCX], a + and a + ret nz + call NextTradeAnim + ret +; 29220 + +TradeAnim_TubeToOT6: +TradeAnim_TubeToPlayer6: ; 29220 + ld a, $80 + ld [wcf64], a + call NextTradeAnim + ret +; 29229 + +TradeAnim_TubeToOT8: +TradeAnim_TubeToPlayer8: ; 29229 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + callab Function8cf53 + hlbgcoord 0, 0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + xor a + ld [hSCX], a + ld a, $90 + ld [hWY], a + call EnableLCD + call Function2982b + call WaitBGMap + call Function297ed + call TradeAnim_Next + ret +; 2925d + +TradeAnim_TubeToOT5: +TradeAnim_TubeToOT7: +TradeAnim_TubeToPlayer2: +TradeAnim_TubeToPlayer7: ; 2925d + call Function2981d + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call NextTradeAnim + ret +; 2926d + +TradeAnim_GiveTrademonSFX: ; 2926d + call TradeAnim_Next + ld de, SFX_GIVE_TRADEMON + call PlaySFX + ret +; 29277 + +TradeAnim_GetTrademonSFX: ; 29277 + call TradeAnim_Next + ld de, SFX_GET_TRADEMON + call PlaySFX + ret +; 29281 + +Function29281: ; 29281 + and 3 + ld e, a + ld d, 0 + ld hl, Jumptable_2928f +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 2928f + +Jumptable_2928f: ; 2928f + dw Function29297 + dw Function292af + dw Function292be + dw Function29297 +; 29297 + +Function29297: ; 29297 + call Function297cf + hlcoord 9, 3 + ld [hl], $5b + inc hl + ld bc, 10 + ld a, $60 + call ByteFill + hlcoord 3, 2 + call Function292ec + ret +; 292af + +Function292af: ; 292af + call Function297cf + hlcoord 0, 3 + ld bc, SCREEN_WIDTH + ld a, $60 + call ByteFill + ret +; 292be + +Function292be: ; 292be + call Function297cf + hlcoord 0, 3 + ld bc, $11 + ld a, $60 + call ByteFill + hlcoord 17, 3 + ld a, $5d + ld [hl], a + ld a, $61 + ld de, SCREEN_WIDTH + ld c, $3 +.loop + add hl, de + ld [hl], a + dec c + jr nz, .loop + add hl, de + ld a, $5f + ld [hld], a + ld a, $5b + ld [hl], a + hlcoord 10, 6 + call Function292ec + ret +; 292ec + +Function292ec: ; 292ec + ld de, TradeGameBoyTilemap + lb bc, 8, 6 + call Function297db + ret +; 292f6 + +Function292f6: ; 292f6 + push af + call ClearBGPalettes + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, "─" + call ByteFill + hlcoord 0, 1 + ld de, wLinkPlayer1Name + call PlaceString + ld hl, wLinkPlayer2Name + ld de, 0 +.find_name_end_loop + ld a, [hli] + cp "@" + jr z, .done + dec de + jr .find_name_end_loop + +.done + hlcoord 0, 4 + add hl, de + ld de, wLinkPlayer2Name + call PlaceString + hlcoord 7, 2 + ld bc, 6 + pop af + call ByteFill + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + ret +; 29348 + +TradeAnim_EnterLinkTube: ; 29348 + call ClearTileMap + call WaitTop + ld a, $a0 + ld [hSCX], a + call DelayFrame + hlcoord 8, 2 + ld de, Tilemap_298f7 + lb bc, 3, 12 + call Function297db + call WaitBGMap + ld b, SCGB_1B + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + ld de, $e4e4 + call DmgToCgbObjPals + ld de, SFX_POTION + call PlaySFX + call NextTradeAnim + ret +; 2937e + +TradeAnim_04: ; 2937e + ld a, [hSCX] + and a + jr z, .done + add $4 + ld [hSCX], a + ret + +.done + ld c, 80 + call DelayFrames + call TradeAnim_Next + ret +; 29391 + +TradeAnim_ExitLinkTube: ; 29391 + ld a, [hSCX] + cp $a0 + jr z, .asm_2939c + sub $4 + ld [hSCX], a + ret + +.asm_2939c + call ClearTileMap + xor a + ld [hSCX], a + call TradeAnim_Next + ret +; 293a6 + +TradeAnim_SetupGivemonScroll: ; 293a6 + ld a, $8f + ld [hWX], a + ld a, $88 + ld [hSCX], a + ld a, $50 + ld [hWY], a + call TradeAnim_Next + ret +; 293b6 + +TradeAnim_DoGivemonScroll: ; 293b6 + ld a, [hWX] + cp $7 + jr z, .done + sub $4 + ld [hWX], a + ld a, [hSCX] + sub $4 + ld [hSCX], a + ret + +.done + ld a, $7 + ld [hWX], a + xor a + ld [hSCX], a + call TradeAnim_Next + ret +; 293d2 + +TradeAnim_1d: ; 293d2 + ld a, $7 + ld [hWX], a + ld a, $50 + ld [hWY], a + call TradeAnim_Next + ret +; 293de + +TradeAnim_1e: ; 293de + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + call TradeAnim_Next + ret +; 293ea + +TradeAnim_ScrollOutRight: ; 293ea + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + xor a + ld [hWY], a + call DelayFrame + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + call NextTradeAnim + ret +; 2940c + +TradeAnim_ScrollOutRight2: ; 2940c + ld a, [hWX] + cp $a1 + jr nc, .done + add $4 + ld [hWX], a + ret + +.done + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call TradeAnim_Next + ret +; 2942e + +TradeAnim_ShowGivemonData: ; 2942e + call Function2951f + ld a, [wPlayerTrademonSpecies] + ld [CurPartySpecies], a + ld a, [wPlayerTrademonDVs] + ld [TempMonDVs], a + ld a, [wPlayerTrademonDVs + 1] + ld [TempMonDVs + 1], a + ld b, SCGB_1A + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + call Function294bb + + ld a, [wPlayerTrademonSpecies] + call GetCryIndex + jr c, .skip_cry + ld e, c + ld d, b + call PlayCryHeader +.skip_cry + + call TradeAnim_Next + ret +; 29461 + +TradeAnim_ShowGetmonData: ; 29461 + call Function29549 + ld a, [wOTTrademonSpecies] + ld [CurPartySpecies], a + ld a, [wOTTrademonDVs] + ld [TempMonDVs], a + ld a, [wOTTrademonDVs + 1] + ld [TempMonDVs + 1], a + ld b, SCGB_1A + call GetSGBLayout + ld a, $e4 + call DmgToCgbBGPals + call Function294c0 + call TradeAnim_Next + ret +; 29487 + +TradeAnim_AnimateFrontpic: ; 29487 + callba Function4d81e + call TradeAnim_Next + ret +; 29491 + +Function29491: ; 29491 + push de + push af + predef GetUnownLetter + pop af + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + pop de + predef GetFrontpic + ret +; 294a9 + +Function294a9: ; 294a9 + push de + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + pop de + ld bc, NAME_LENGTH + call CopyBytes + ret +; 294bb + +Function294bb: ; 294bb + ld de, VTiles0 + jr Function294c3 + +Function294c0: ; 294c0 + ld de, VTiles0 tile $31 + +Function294c3: ; 294c3 + call DelayFrame + ld hl, VTiles2 + lb bc, 10, $31 + call Request2bpp + call WaitTop + call Function297cf + hlcoord 7, 2 + xor a + ld [hFillBox], a + lb bc, 7, 7 + predef FillBox + call WaitBGMap + ret +; 294e7 + +TraideAnim_Wait80: ; 294e7 + ld c, 80 + call DelayFrames + call TradeAnim_Next + ret +; 294f0 + +TraideAnim_Wait40: ; 294f0 + ld c, 40 + call DelayFrames + call TradeAnim_Next + ret +; 294f9 + +TraideAnim_Wait96: ; 294f9 + ld c, 96 + call DelayFrames + call TradeAnim_Next + ret +; 29502 + +TraideAnim_Wait80IfOTEgg: ; 29502 + call IsOTTrademonEgg + ret nz + ld c, 80 + call DelayFrames + ret +; 2950c + +TraideAnim_Wait180IfOTEgg: ; 2950c + call IsOTTrademonEgg + ret nz + ld c, 180 + call DelayFrames + ret +; 29516 + +IsOTTrademonEgg: ; 29516 + call TradeAnim_Next + ld a, [wOTTrademonSpecies] + cp EGG + ret +; 2951f +Function2951f: ; 2951f + ld de, wPlayerTrademonSpecies + ld a, [de] + cp EGG + jr z, Function295a1 + call Function29573 + ld de, wPlayerTrademonSpecies + call Function295e3 + ld de, wPlayerTrademonSpeciesName + call Function295ef + ld a, [wPlayerTrademonCaughtData] + ld de, wPlayerTrademonOTName + call Function295f6 + ld de, PlayerScreens + call Function29611 + call Function295d8 + ret +; 29549 + +Function29549: ; 29549 + ld de, wOTTrademonSpecies + ld a, [de] + cp EGG + jr z, Function295a1 + call Function29573 + ld de, wOTTrademonSpecies + call Function295e3 + ld de, wOTTrademonSpeciesName + call Function295ef + ld a, [wOTTrademonCaughtData] + ld de, wOTTrademonOTName + call Function295f6 + ld de, wOTTrademonID + call Function29611 + call Function295d8 + ret +; 29573 + +Function29573: ; 29573 + call WaitTop + call Function297cf + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call TextBox + hlcoord 4, 0 + ld de, String29591 + call PlaceString + ret +; 29591 + +String29591: ; 29591 + db "─── №." + next "" + next "OT/" + next "<ID>№.@" +; 295a1 + +Function295a1: ; 295a1 + call WaitTop + call Function297cf + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call TextBox + hlcoord 4, 2 + ld de, String295c2 + call PlaceString + call Function295d8 + ret +; 295c2 + +String295c2: ; 295c2 + db "EGG" + next "OT/?????" + next "<ID>№.?????@" +; 295d8 + +Function295d8: ; 295d8 + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ret +; 295e3 + +Function295e3: ; 295e3 + hlcoord 10, 0 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + ld [hl], " " + ret +; 295ef + +Function295ef: ; 295ef + hlcoord 4, 2 + call PlaceString + ret +; 295f6 + +Function295f6: ; 295f6 + cp 3 + jr c, .asm_295fb + xor a + +.asm_295fb + push af + hlcoord 7, 4 + call PlaceString + inc bc + pop af + ld hl, Unknown_2960e + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + ld [bc], a + ret +; 2960e + +Unknown_2960e: ; 2960e + db " ", "♂", "♀" +; 29611 + +Function29611: ; 29611 + hlcoord 7, 6 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ret +; 2961b + +TradeAnim_RockingBall: ; 2961b + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_0E + call _InitSpriteAnimStruct + call TradeAnim_Next + ld a, $20 + ld [wcf64], a + ret +; 2962c + +TradeAnim_DropBall: ; 2962c + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_0E + call _InitSpriteAnimStruct + ld hl, $b + add hl, bc + ld [hl], $1 + ld hl, $7 + add hl, bc + ld [hl], $dc + call TradeAnim_Next + ld a, $38 + ld [wcf64], a + ret +; 29649 + +TradeAnim_Poof: ; 29649 + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_0F + call _InitSpriteAnimStruct + call TradeAnim_Next + ld a, $10 + ld [wcf64], a + ld de, SFX_BALL_POOF + call PlaySFX + ret +; 29660 + +TradeAnim_BulgeThroughTube: ; 29660 + ld a, $e4 + call Functioncf8 + depixel 5, 11 + ld a, SPRITE_ANIM_INDEX_10 + call _InitSpriteAnimStruct + call TradeAnim_Next + ld a, $40 + ld [wcf64], a + ret +; 29676 + +Function29676: ; 29676 (a:5676) + ld hl, $b + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, Jumptable_29686 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 29686 + +Jumptable_29686: ; 29686 (a:5686) + dw Function2969a + dw Function296a4 + dw Function296af + dw Function296bd + dw Function296cf + dw Function296dd + dw Function296f2 +; 2969a + +Function29694: ; 29694 (a:5694) + ld hl, $b + add hl, bc + inc [hl] + ret + +Function2969a: ; 2969a (a:569a) + call Function29694 + ld hl, $c + add hl, bc + ld [hl], $80 + ret + +Function296a4: ; 296a4 (a:56a4) + ld hl, $c + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + call Function29694 + +Function296af: ; 296af (a:56af) + ld hl, $4 + add hl, bc + ld a, [hl] + cp $94 + jr nc, .asm_296ba + inc [hl] + ret +.asm_296ba + call Function29694 + +Function296bd: ; 296bd (a:56bd) + ld hl, $5 + add hl, bc + ld a, [hl] + cp $4c + jr nc, .asm_296c8 + inc [hl] + ret +.asm_296c8 + ld hl, $ + add hl, bc + ld [hl], $0 + ret + +Function296cf: ; 296cf (a:56cf) + ld hl, $5 + add hl, bc + ld a, [hl] + cp $2c + jr z, .asm_296da + dec [hl] + ret +.asm_296da + call Function29694 + +Function296dd: ; 296dd (a:56dd) + ld hl, $4 + add hl, bc + ld a, [hl] + cp $58 + jr z, .asm_296e8 + dec [hl] + ret +.asm_296e8 + call Function29694 + ld hl, $c + add hl, bc + ld [hl], $80 + ret + +Function296f2: ; 296f2 (a:56f2) + ld hl, $c + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + ld hl, $ + add hl, bc + ld [hl], $0 + ret +; 29701 (a:5701) + +TradeAnim_SentToOTText: ; 29701 + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .time_capsule + ld hl, UnknownText_0x29737 + call PrintText + ld c, 189 + call DelayFrames + ld hl, UnknownText_0x29732 + call PrintText + call Function297c9 + ld c, 128 + call DelayFrames + call TradeAnim_Next + ret + +.time_capsule + ld hl, UnknownText_0x29732 + call PrintText + call Function297c9 + call TradeAnim_Next + ret +; 29732 + +UnknownText_0x29732: ; 0x29732 + ; was sent to @ . + text_jump UnknownText_0x1bc6e9 + db "@" +; 0x29737 + +UnknownText_0x29737: ; 0x29737 + ; + text_jump UnknownText_0x1bc701 + db "@" +; 0x2973c + +TradeAnim_OTBidsFarewell: ; 2973c + ld hl, UnknownText_0x29752 + call PrintText + call Function297c9 + ld hl, UnknownText_0x29757 + call PrintText + call Function297c9 + call TradeAnim_Next + ret +; 29752 + +UnknownText_0x29752: ; 0x29752 + ; bids farewell to + text_jump UnknownText_0x1bc703 + db "@" +; 0x29757 + +UnknownText_0x29757: ; 0x29757 + ; . + text_jump UnknownText_0x1bc719 + db "@" +; 0x2975c + +TradeAnim_TakeCareOfText: ; 2975c + call WaitTop + hlcoord 0, 10 + ld bc, 8 * SCREEN_WIDTH + ld a, " " + call ByteFill + call WaitBGMap + ld hl, UnknownText_0x2977a + call PrintText + call Function297c9 + call TradeAnim_Next + ret +; 2977a + +UnknownText_0x2977a: ; 0x2977a + ; Take good care of @ . + text_jump UnknownText_0x1bc71f + db "@" +; 0x2977f + +TradeAnim_OTSendsText1: ; 2977f + ld hl, UnknownText_0x2979a + call PrintText + call Function297c9 + ld hl, UnknownText_0x2979f + call PrintText + call Function297c9 + ld c, 14 + call DelayFrames + call TradeAnim_Next + ret +; 2979a + +UnknownText_0x2979a: ; 0x2979a + ; For @ 's @ , + text_jump UnknownText_0x1bc739 + db "@" +; 0x2979f + +UnknownText_0x2979f: ; 0x2979f + ; sends @ . + text_jump UnknownText_0x1bc74c + db "@" +; 0x297a4 + +TradeAnim_OTSendsText2: ; 297a4 + ld hl, UnknownText_0x297bf + call PrintText + call Function297c9 + ld hl, UnknownText_0x297c4 + call PrintText + call Function297c9 + ld c, 14 + call DelayFrames + call TradeAnim_Next + ret +; 297bf + +UnknownText_0x297bf: ; 0x297bf + ; will trade @ @ + text_jump UnknownText_0x1bc75e + db "@" +; 0x297c4 + +UnknownText_0x297c4: ; 0x297c4 + ; for @ 's @ . + text_jump UnknownText_0x1bc774 + db "@" +; 0x297c9 + +Function297c9: ; 297c9 + ld c, 80 + call DelayFrames + ret +; 297cf + +Function297cf: ; 297cf + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill + ret +; 297db + +Function297db: ; 297db +.asm_297db + push bc + push hl +.asm_297dd + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_297dd + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .asm_297db + ret +; 297ed + +Function297ed: ; 297ed + ld a, [hSGB] + and a + ld a, $e4 + jr z, .asm_297f6 + ld a, $f0 + +.asm_297f6 + call Functioncf8 + ld a, $e4 + call DmgToCgbBGPals + ret +; 297ff + +Function297ff: ; 297ff + push de + ld de, wLinkPlayer1Name + ld bc, NAME_LENGTH + call CopyBytes + pop hl + ld de, wLinkPlayer2Name + ld bc, NAME_LENGTH + call CopyBytes + ret +; 29814 + +Function29814: ; 29814 + ld a, [hl] + ld [wc74c], a + ld a, [de] + ld [wc74d], a + ret +; 2981d + +Function2981d: ; 2981d + ld a, [wcf65] + and $7 + ret nz + ld a, [rBGP] + xor $3c + call DmgToCgbBGPals + ret +; 2982b + +Function2982b: ; 2982b + call DelayFrame + ld de, TradeBallGFX + ld hl, VTiles0 tile $62 + lb bc, BANK(TradeBallGFX), $6 + call Request2bpp + ld de, TradePoofGFX + ld hl, VTiles0 tile $68 + lb bc, BANK(TradePoofGFX), $c + call Request2bpp + ld de, TradeCableGFX + ld hl, VTiles0 tile $74 + lb bc, BANK(TradeCableGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], $62 + ret +; 2985a + +Function2985a: ; 2985a + call DelayFrame + ld e, $3 + callab Function8e83f + ld de, TradeBubbleGFX + ld hl, VTiles0 tile $72 + lb bc, BANK(TradeBubbleGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], $62 + ret +; 29879 + +TradeAnim_WaitAnim: ; 29879 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_Next + ret +; 29886 + +TradeAnim_WaitAnim2: ; 29886 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_Next + ret +; 29893 + + +DebugTrade: ; 29893 +; This function is unreferenced. +; It was meant for use in Japanese versions, so the +; constant used for copy length was changed by accident. + + ld hl, Unknown_298b5 + + ld a, [hli] + ld [wPlayerTrademonSpecies], a + ld de, wPlayerTrademonSenderName + ld c, 11 + 2 ; jp: 6 + 2 +.loop1 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop1 + + ld a, [hli] + ld [wOTTrademonSpecies], a + ld de, wOTTrademonSenderName + ld c, 11 + 2 ; jp: 6 + 2 +.loop2 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop2 + ret +; 298b5 + +Unknown_298b5: ; 298b5 + db VENUSAUR, "ゲーフり@@", $23, $01 ; GAME FREAK + db CHARIZARD, "クりーチャ@", $56, $04 ; Creatures Inc. +; 298c7 + + +TradeGameBoyTilemap: ; 298c7 +; 6x8 + db $31, $32, $32, $32, $32, $33 + db $34, $35, $36, $36, $37, $38 + db $34, $39, $3a, $3a, $3b, $38 + db $3c, $3d, $3e, $3e, $3f, $40 + db $41, $42, $43, $43, $44, $45 + db $46, $47, $43, $48, $49, $4a + db $41, $43, $4b, $4c, $4d, $4e + db $4f, $50, $50, $50, $51, $52 +; 297f7 + +Tilemap_298f7: ; 297f7 +; 12x3 + db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53 + db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54 + db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43 +; 2991b + +TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp" +TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" +TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" +TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz" +TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" +TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" diff --git a/engine/trainer_card.asm b/engine/trainer_card.asm new file mode 100755 index 000000000..076e13fec --- /dev/null +++ b/engine/trainer_card.asm @@ -0,0 +1,619 @@ +TrainerCard: ; 25105 + ld a, [VramState] + push af + xor a + ld [VramState], a + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call Function2513b +.asm_25117 + call UpdateTime + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_25132 + ld a, [hJoyLast] + and B_BUTTON + jr nz, .asm_25132 + call Function2518e + call DelayFrame + jr .asm_25117 +.asm_25132 + pop af + ld [Options], a + pop af + ld [VramState], a + ret + +Function2513b: ; 2513b (9:513b) + call ClearBGPalettes + call ClearSprites + call ClearTileMap + call DisableLCD + + callba Function8833e + + ld hl, CardRightCornerGFX + ld de, VTiles2 tile $1c + ld bc, 1 tiles + ld a, BANK(CardRightCornerGFX) + call FarCopyBytes + + ld hl, CardStatusGFX + ld de, VTiles2 tile $29 + ld bc, $56 tiles + ld a, BANK(CardStatusGFX) + call FarCopyBytes + + call Function25299 + + hlcoord 0, 8 + ld d, $6 + call Function253b0 + + call EnableLCD + call WaitBGMap + ld b, SCGB_15 + call GetSGBLayout + call SetPalettes + call WaitBGMap + ld hl, wJumptableIndex + xor a +rept 3 + ld [hli], a +endr + ld [hl], a + ret + +Function2518e: ; 2518e (9:518e) + ld a, [wJumptableIndex] + ld e, a + ld d, $0 + ld hl, Jumptable_2519d +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Jumptable_2519d: ; 2519d (9:519d) + dw Function251b6 + dw Function251d7 + dw Function251f4 + dw Function25221 + dw Function2524c + dw Function25279 + dw Function251b0 + + +Function251ab: ; 251ab (9:51ab) + ld hl, wJumptableIndex + inc [hl] + ret + +Function251b0: ; 251b0 (9:51b0) + ld hl, wJumptableIndex + set 7, [hl] + ret + +Function251b6: ; 251b6 (9:51b6) + call ClearSprites + hlcoord 0, 8 + ld d, $6 + call Function253b0 + call WaitBGMap + ld de, CardStatusGFX + ld hl, VTiles2 tile $29 + lb bc, BANK(CardStatusGFX), $56 + call Request2bpp + call Function2530a + call Function251ab + ret + +Function251d7: ; 251d7 (9:51d7) + call Function25415 + ld hl, hJoyLast + ld a, [hl] + and D_RIGHT | A_BUTTON + jr nz, .pressed_right_a + ret + +.pressed_right_a + ld a, $2 + ld [wJumptableIndex], a + ret +; 251e9 (9:51e9) + +Function251e9: ; 251e9 + ld a, [KantoBadges] + and a + ret z + + ld a, $4 + ld [wJumptableIndex], a + ret +; 251f4 + +Function251f4: ; 251f4 (9:51f4) + call ClearSprites + hlcoord 0, 8 + ld d, $6 + call Function253b0 + call WaitBGMap + ld de, LeaderGFX + ld hl, VTiles2 tile $29 + lb bc, BANK(LeaderGFX), $56 + call Request2bpp + ld de, BadgeGFX + ld hl, VTiles0 tile $00 + lb bc, BANK(BadgeGFX), $2c + call Request2bpp + call Function2536c + call Function251ab + ret + +Function25221: ; 25221 (9:5221) + ld hl, Unknown_254c9 + call Function25438 + ld hl, hJoyLast + ld a, [hl] + and A_BUTTON + jr nz, Function25246 + ld a, [hl] + and D_LEFT + jr nz, .asm_25235 + ret +.asm_25235 + ld a, $0 + ld [wJumptableIndex], a + ret +; 2523b (9:523b) + +Function2523b: ; 2523b + ld a, [KantoBadges] + and a + ret z + ld a, $4 + ld [wJumptableIndex], a + ret +; 25246 + +Function25246: ; 25246 + ld a, $6 + ld [wJumptableIndex], a + ret + +Function2524c: ; 2524c (9:524c) + call ClearSprites + hlcoord 0, 8 + ld d, $6 + call Function253b0 + call WaitBGMap + ld de, LeaderGFX2 + ld hl, VTiles2 tile $29 + lb bc, BANK(LeaderGFX2), $56 + call Request2bpp + ld de, BadgeGFX2 + ld hl, VTiles0 tile $00 + lb bc, BANK(BadgeGFX2), $2c + call Request2bpp + call Function2536c + call Function251ab + ret + +Function25279: ; 25279 (9:5279) + ld hl, Unknown_254c9 + call Function25438 + ld hl, hJoyLast + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] + and D_RIGHT + jr nz, .right + ret + +.left + ld a, $2 + ld [wJumptableIndex], a + ret + +.right + ld a, $0 + ld [wJumptableIndex], a + ret + +Function25299: ; 25299 (9:5299) + hlcoord 0, 0 + ld d, $5 + call Function253b0 + hlcoord 2, 2 + ld de, String_252ec + call PlaceString + hlcoord 2, 4 + ld de, Tilemap_252f9 + call Function253a8 + hlcoord 7, 2 + ld de, PlayerName + call PlaceString + hlcoord 5, 4 + ld de, PlayerID + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + hlcoord 7, 6 + ld de, Money + lb bc, PRINTNUM_MONEY | 3, 6 + call PrintNum + hlcoord 1, 3 + ld de, Tilemap_252fc + call Function253a8 + hlcoord 14, 1 + lb bc, 5, 7 + xor a + ld [hFillBox], a + predef FillBox + ret +; 252ec (9:52ec) + +String_252ec: ; 252ec + db "NAME/" + next "" + next "MONEY@" + +Tilemap_252f9: ; 252f9 + db $27, $28, $ff ; ID NO + +Tilemap_252fc: ; 252fc + db $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $26, $ff ; ____________> +; 2530a + +Function2530a: ; 2530a (9:530a) + hlcoord 2, 10 + ld de, String_2534c + call PlaceString + hlcoord 10, 15 + ld de, String_2535c + call PlaceString + ld hl, PokedexCaught + ld b, $20 + call CountSetBits + ld de, wd265 + hlcoord 15, 10 + lb bc, 1, 3 + call PrintNum + call Function25415 + hlcoord 2, 8 + ld de, Tilemap_25366 + call Function253a8 + ld a, [StatusFlags] ; pokedex + bit 0, a + ret nz + hlcoord 1, 9 + lb bc, 2, 17 + call ClearBox + ret +; 2534c (9:534c) + +String_2534c: ; 2534c + db "#DEX" + next "PLAY TIME" + db "@" + +String_2535b: ; 2535b + db "@" + +String_2535c: ; 2535c + db " BADGES▶@" + +Tilemap_25366: ; 25366 + db $29, $2a, $2b, $2c, $2d, $ff +; 2536c + +Function2536c: ; 2536c (9:536c) + hlcoord 2, 8 + ld de, Tilemap_253a2 + call Function253a8 + hlcoord 2, 10 + ld a, $29 + ld c, $4 +.asm_2537c + call Function253f4 +rept 4 + inc hl +endr + dec c + jr nz, .asm_2537c + hlcoord 2, 13 + ld a, $51 + ld c, $4 +.asm_2538d + call Function253f4 +rept 4 + inc hl +endr + dec c + jr nz, .asm_2538d + xor a + ld [wcf64], a + ld hl, Unknown_254c9 + call Function25448 + ret +; 253a2 (9:53a2) + +Tilemap_253a2: ; 253a2 + db $79, $7a, $7b, $7c, $7d, $ff ; "BADGES" +; 253a8 + +Function253a8: ; 253a8 (9:53a8) + ld a, [de] + cp $ff + ret z + ld [hli], a + inc de + jr Function253a8 + +Function253b0: ; 253b0 (9:53b0) + ld e, $14 +.asm_253b2 + ld a, $23 + ld [hli], a + dec e + jr nz, .asm_253b2 + ld a, $23 + ld [hli], a + ld e, $11 + ld a, $7f +.asm_253bf + ld [hli], a + dec e + jr nz, .asm_253bf + ld a, $1c + ld [hli], a + ld a, $23 + ld [hli], a +.asm_253c9 + ld a, $23 + ld [hli], a + ld e, $12 + ld a, $7f +.asm_253d0 + ld [hli], a + dec e + jr nz, .asm_253d0 + ld a, $23 + ld [hli], a + dec d + jr nz, .asm_253c9 + ld a, $23 + ld [hli], a + ld a, $24 + ld [hli], a + ld e, $11 + ld a, $7f +.asm_253e4 + ld [hli], a + dec e + jr nz, .asm_253e4 + ld a, $23 + ld [hli], a + ld e, $14 +.asm_253ed + ld a, $23 + ld [hli], a + dec e + jr nz, .asm_253ed + ret + +Function253f4: ; 253f4 (9:53f4) + push de + push hl + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + ld de, $11 + add hl, de + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + ld de, $11 + add hl, de + ld [hli], a + inc a + ld [hli], a + inc a + ld [hli], a + inc a + pop hl + pop de + ret + +Function25415: ; 25415 (9:5415) + hlcoord 11, 12 + ld de, GameTimeHours + lb bc, 2, 4 + call PrintNum + inc hl + ld de, GameTimeMinutes + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ld a, [hVBlankCounter] + and $1f + ret nz + hlcoord 15, 12 + ld a, [hl] + xor $51 + ld [hl], a + ret + +Function25438: ; 25438 (9:5438) + ld a, [hVBlankCounter] + and $7 + ret nz + ld a, [wcf64] + inc a + and $7 + ld [wcf64], a + jr Function25448 + +Function25448: ; 25448 (9:5448) +; copy flag array pointer + ld a, [hli] + ld e, a + ld a, [hli] +; get flag array + ld d, a + ld a, [de] + ld c, a + ld de, Sprites + ld b, 8 +.loop + srl c + push bc + jr nc, .skip_badge + push hl + ld a, [hli] ; y + ld b, a + ld a, [hli] ; x + ld c, a + ld a, [hli] ; pal + ld [wcf66], a + ld a, [wcf64] + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + ld [wcf65], a + call Function2547b + pop hl +.skip_badge + ld bc, $b ; 3 + 2 * 4 + add hl, bc + pop bc + dec b + jr nz, .loop + ret + +Function2547b: ; 2547b (9:547b) + ld a, [wcf65] + and $80 + jr nz, .xflip + ld hl, .facing1 + jr .loop +.xflip + ld hl, .facing2 +.loop + ld a, [hli] + cp $ff + ret z + add b + ld [de], a + inc de + + ld a, [hli] + add c + ld [de], a + inc de + + ld a, [wcf65] + and $7f + add [hl] + ld [de], a + inc hl + inc de + + ld a, [wcf66] + add [hl] + ld [de], a + inc hl + inc de + jr .loop +; 254a7 (9:54a7) + +.facing1: ; 254a7 + ; y, x, tile, OAM attributes + db 0, 0, 0, 0 + db 0, 8, 1, 0 + db 8, 0, 2, 0 + db 8, 8, 3, 0 + db -1 + +.facing2: ; 254b8 + db 0, 0, 1, X_FLIP + db 0, 8, 0, X_FLIP + db 8, 0, 3, X_FLIP + db 8, 8, 2, X_FLIP + db -1 + +Unknown_254c9: ; 254c9 +; Template OAM data for each badge on the trainer card. +; Format: + ; y, x, palette + ; cycle 1: face tile, in1 tile, in2 tile, in3 tile + ; cycle 2: face tile, in1 tile, in2 tile, in3 tile + + dw JohtoBadges + + ; Zephyrbadge + db $68, $18, 0 + db $00, $20, $24, $20 | $80 + db $00, $20, $24, $20 | $80 + + ; Hivebadge + db $68, $38, 0 + db $04, $20, $24, $20 | $80 + db $04, $20, $24, $20 | $80 + + ; Plainbadge + db $68, $58, 0 + db $08, $20, $24, $20 | $80 + db $08, $20, $24, $20 | $80 + + ; Fogbadge + db $68, $78, 0 + db $0c, $20, $24, $20 | $80 + db $0c, $20, $24, $20 | $80 + + ; Mineralbadge + db $80, $38, 0 + db $10, $20, $24, $20 | $80 + db $10, $20, $24, $20 | $80 + + ; Stormbadge + db $80, $18, 0 + db $14, $20, $24, $20 | $80 + db $14, $20, $24, $20 | $80 + + ; Glacierbadge + db $80, $58, 0 + db $18, $20, $24, $20 | $80 + db $18, $20, $24, $20 | $80 + + ; Risingbadge + ; X-flips on alternate cycles. + db $80, $78, 0 + db $1c, $20, $24, $20 | $80 + db $1c | $80, $20, $24, $20 | $80 +; 25523 + +CardStatusGFX: INCBIN "gfx/misc/card_status.2bpp" + +LeaderGFX: INCBIN "gfx/misc/leaders.w24.2bpp" +LeaderGFX2: INCBIN "gfx/misc/leaders.w24.2bpp" +BadgeGFX: INCBIN "gfx/misc/badges.2bpp" +BadgeGFX2: INCBIN "gfx/misc/badges.2bpp" + +CardRightCornerGFX: INCBIN "gfx/misc/card_right_corner.2bpp" diff --git a/engine/variables.asm b/engine/variables.asm new file mode 100755 index 000000000..a115e2c37 --- /dev/null +++ b/engine/variables.asm @@ -0,0 +1,150 @@ +_GetVarAction:: ; 80648 (20:4648) + ld a, c + cp NUM_VARS + jr c, .valid + xor a +.valid + ld c, a + ld b, 0 + ld hl, .VarActionTable +rept 3 + add hl, bc +endr + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld b, [hl] + ld a, b + and RETVAR_EXECUTE + jr nz, .call + ld a, b + and RETVAR_ADDR_DE + ret nz + ld a, [de] + jr .loadstringbuffer2 + +.call + call _de_ + ret + +.loadstringbuffer2: ; 8066c (20:466c) + ld de, StringBuffer2 + ld [de], a + ret +; 80671 (20:4671) + +.VarActionTable: ; 80671 +; $00: copy [de] to StringBuffer2 +; $40: return address in de +; $80: call function + dwb StringBuffer2, RETVAR_STRBUF2 + dwb PartyCount, RETVAR_STRBUF2 + dwb .BattleResult, RETVAR_EXECUTE + dwb BattleType, RETVAR_ADDR_DE + dwb TimeOfDay, RETVAR_STRBUF2 + dwb .CountCaughtMons, RETVAR_EXECUTE + dwb .CountSeenMons, RETVAR_EXECUTE + dwb .CountBadges, RETVAR_EXECUTE + dwb PlayerState, RETVAR_ADDR_DE + dwb .PlayerFacing, RETVAR_EXECUTE + dwb hHours, RETVAR_STRBUF2 + dwb .DayOfWeek, RETVAR_EXECUTE + dwb MapGroup, RETVAR_STRBUF2 + dwb MapNumber, RETVAR_STRBUF2 + dwb .UnownCaught, RETVAR_EXECUTE + dwb wPermission, RETVAR_STRBUF2 + dwb .BoxFreeSpace, RETVAR_EXECUTE + dwb wBugContestMinsRemaining, RETVAR_STRBUF2 + dwb XCoord, RETVAR_STRBUF2 + dwb YCoord, RETVAR_STRBUF2 + dwb wSpecialPhoneCallID, RETVAR_STRBUF2 + dwb wcf64, RETVAR_STRBUF2 + dwb wKurtApricornQuantity, RETVAR_STRBUF2 + dwb wCurrentCaller, RETVAR_ADDR_DE + dwb wBlueCardBalance, RETVAR_ADDR_DE + dwb wBuenasPassword, RETVAR_ADDR_DE + dwb wdc58, RETVAR_STRBUF2 + dwb NULL, RETVAR_STRBUF2 +; 806c5 + +.CountCaughtMons: ; 806c5 +; Caught mons. + ld hl, PokedexCaught + ld b, EndPokedexCaught - PokedexCaught + call CountSetBits + ld a, [wd265] + jp .loadstringbuffer2 +; 806d3 + +.CountSeenMons: ; 806d3 +; Seen mons. + ld hl, PokedexSeen + ld b, EndPokedexSeen - PokedexSeen + call CountSetBits + ld a, [wd265] + jp .loadstringbuffer2 +; 806e1 + +.CountBadges: ; 806e1 +; Number of owned badges. + ld hl, Badges + ld b, 2 + call CountSetBits + ld a, [wd265] + jp .loadstringbuffer2 +; 806ef + +.PlayerFacing: ; 806ef +; The direction the player is facing. + ld a, [PlayerDirection] + and $c + rrca + rrca + jp .loadstringbuffer2 +; 806f9 + +.DayOfWeek: ; 806f9 +; The day of the week. + call GetWeekday + jp .loadstringbuffer2 +; 806ff + +.UnownCaught: ; 806ff +; Number of unique Unown caught. + call .count + ld a, b + jp .loadstringbuffer2 + +.count + ld hl, UnownDex + ld b, 0 +.loop + ld a, [hli] + and a + ret z + inc b + ld a, b + cp 26 + jr c, .loop + ret +; 80715 + +.BoxFreeSpace: ; 80715 +; Remaining slots in the current box. + ld a, BANK(sBoxCount) + call GetSRAMBank + ld hl, sBoxCount + ld a, MONS_PER_BOX + sub [hl] + ld b, a + call CloseSRAM + ld a, b + jp .loadstringbuffer2 +; 80728 + +.BattleResult: ; 80728 + ld a, [wBattleResult] + and $3f + jp .loadstringbuffer2 +; 80730 diff --git a/engine/wildmons.asm b/engine/wildmons.asm new file mode 100755 index 000000000..6f39e19dc --- /dev/null +++ b/engine/wildmons.asm @@ -0,0 +1,1057 @@ +LoadWildMonData: ; 29ff8 + call _GrassWildmonLookup + jr c, .copy + ld hl, wd25a + xor a + ld [hli], a + ld [hli], a + ld [hl], a + jr .done_copy +.copy + inc hl + inc hl + ld de, wd25a + ld bc, $3 + call CopyBytes +.done_copy + call _WaterWildmonLookup + ld a, $0 + jr nc, .no_copy + inc hl + inc hl + ld a, [hl] +.no_copy + ld [wd25d], a + ret + +Function2a01f: ; 2a01f + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + ld a, e + and a + jr nz, .kanto + decoord 0, 0 + ld hl, JohtoGrassWildMons + call Function2a052 + ld hl, JohtoWaterWildMons + call Function2a06e + call Function2a0b7 + call Function2a0cf + ret + +.kanto + decoord 0, 0 + ld hl, KantoGrassWildMons + call Function2a052 + ld hl, KantoWaterWildMons + jp Function2a06e +; 2a052 + +Function2a052: ; 2a052 +.loop + ld a, [hl] + cp $ff + ret z + push hl + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a +rept 3 + inc hl +endr + ld a, $15 + call Function2a088 + jr nc, .next + ld [de], a + inc de + +.next + pop hl + ld bc, $2f + add hl, bc + jr .loop +; 2a06e + +Function2a06e: ; 2a06e +.loop + ld a, [hl] + cp $ff + ret z + push hl + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + inc hl + ld a, $3 + call Function2a088 + jr nc, .next + ld [de], a + inc de + +.next + pop hl + ld bc, 9 + add hl, bc + jr .loop +; 2a088 + +Function2a088: ; 2a088 + inc hl +.loop + push af + ld a, [wd265] + cp [hl] + jr z, .found +rept 2 + inc hl +endr + pop af + dec a + jr nz, .loop + and a + ret + +.found + pop af + jp Function2a09c +; 2a09c + +Function2a09c: ; 2a09c + push de + call GetWorldMapLocation + ld c, a + hlcoord 0, 0 + ld de, SCREEN_WIDTH * SCREEN_HEIGHT +.loop + ld a, [hli] + cp c + jr z, .found + dec de + ld a, e + or d + jr nz, .loop + ld a, c + pop de + scf + ret + +.found + pop de + and a + ret +; 2a0b7 + +Function2a0b7: ; 2a0b7 + ld a, [wRoamMon1Species] + ld b, a + ld a, [wd265] + cp b + ret nz + ld a, [wRoamMon1MapGroup] + ld b, a + ld a, [wRoamMon1MapNumber] + ld c, a + call Function2a09c + ret nc + ld [de], a + inc de + ret +; 2a0cf + +Function2a0cf: ; 2a0cf + ld a, [wRoamMon2Species] + ld b, a + ld a, [wd265] + cp b + ret nz + ld a, [wRoamMon2MapGroup] + ld b, a + ld a, [wRoamMon2MapNumber] + ld c, a + call Function2a09c + ret nc + ld [de], a + inc de + ret +; 2a0e7 + +TryWildEncounter:: ; 2a0e7 +; Try to trigger a wild encounter. + call .EncounterRate + jr nc, .no_battle + call ChooseWildEncounter + jr nz, .no_battle + call CheckRepelEffect + jr nc, .no_battle + xor a + ret + +.no_battle + xor a ; BATTLETYPE_NORMAL + ld [TempWildMonSpecies], a + ld [BattleType], a + ld a, 1 + and a + ret +; 2a103 + +.EncounterRate: ; 2a103 + call GetMapEncounterRate + call ApplyMusicEffectOnEncounterRate + call ApplyCleanseTagEffectOnEncounterRate + call Random + cp b + ret +; 2a111 + +GetMapEncounterRate: ; 2a111 + ld hl, wd25a + call CheckOnWater + ld a, 3 + jr z, .ok + ld a, [TimeOfDay] +.ok + ld c, a + ld b, 0 + add hl, bc + ld b, [hl] + ret +; 2a124 + +ApplyMusicEffectOnEncounterRate:: ; 2a124 +; Pokemon March and Ruins of Alph signal double encounter rate. +; Pokemon Lullaby halves encounter rate. + ld a, [wMapMusic] + cp MUSIC_POKEMON_MARCH + jr z, .double + cp MUSIC_RUINS_OF_ALPH_RADIO + jr z, .double + cp MUSIC_POKEMON_LULLABY + ret nz + srl b + ret + +.double + sla b + ret +; 2a138 + +ApplyCleanseTagEffectOnEncounterRate:: ; 2a138 +; Cleanse Tag halves encounter rate. + ld hl, PartyMon1Item + ld de, PARTYMON_STRUCT_LENGTH + ld a, [PartyCount] + ld c, a +.loop + ld a, [hl] + cp CLEANSE_TAG + jr z, .cleansetag + add hl, de + dec c + jr nz, .loop + ret + +.cleansetag + srl b + ret +; 2a14f + +ChooseWildEncounter: ; 2a14f + call LoadWildMonDataPointer + jp nc, .nowildbattle + call CheckEncounterRoamMon + jp c, .startwildbattle + +rept 3 + inc hl +endr + call CheckOnWater + ld de, .WaterMonTable + jr z, .watermon +rept 2 + inc hl +endr + ld a, [TimeOfDay] + ld bc, $e + call AddNTimes + ld de, .GrassMonTable + +.watermon +; hl contains the pointer to the wild mon data, let's save that to the stack + push hl +.randomloop + call Random + cp 100 + jr nc, .randomloop + inc a ; 1 <= a <= 100 + ld b, a + ld h, d + ld l, e +; This next loop chooses which mon to load up. +.prob_bracket_loop + ld a, [hli] + cp b + jr nc, .got_it + inc hl + jr .prob_bracket_loop + +.got_it + ld c, [hl] + ld b, 0 + pop hl + add hl, bc ; this selects our mon + ld a, [hli] + ld b, a +; If the Pokemon is encountered by surfing, we need to give the levels some variety. + call CheckOnWater + jr nz, .ok +; Check if we buff the wild mon, and by how much. + call Random + cp 35 percent + jr c, .ok + inc b + cp 65 percent + jr c, .ok + inc b + cp 85 percent + jr c, .ok + inc b + cp 95 percent + jr c, .ok + inc b +; Store the level +.ok + ld a, b + ld [CurPartyLevel], a + ld b, [hl] + ; ld a, b + call ValidateTempWildMonSpecies + jr c, .nowildbattle + + ld a, b ; This is in the wrong place. + cp UNOWN + jr nz, .done + + ld a, [UnlockedUnowns] + and a + jr z, .nowildbattle + +.done + jr .loadwildmon + +.nowildbattle + ld a, 1 + and a + ret + +.loadwildmon + ld a, b + ld [TempWildMonSpecies], a + +.startwildbattle + xor a + ret +; 2a1cb + +.GrassMonTable: ; 2a1cb + db 30, $0 ; 30% chance + db 60, $2 ; 30% chance + db 80, $4 ; 20% chance + db 90, $6 ; 10% chance + db 95, $8 ; 5% chance + db 99, $a ; 4% chance + db 100, $c ; 1% chance +; 2a1d9 + +.WaterMonTable: ; 2a1d9 + db 60, $0 ; 60% chance + db 90, $2 ; 30% chance + db 100, $4 ; 10% chance +; 2a1df + +CheckRepelEffect:: ; 2a1df +; If there is no active Repel, there's no need to be here. + ld a, [wRepelEffect] + and a + jr z, .encounter +; Get the first Pokemon in your party that isn't fainted. + ld hl, PartyMon1HP + ld bc, PARTYMON_STRUCT_LENGTH - 1 +.loop + ld a, [hli] + or [hl] + jr nz, .ok + add hl, bc + jr .loop + +.ok +; to PartyMonLevel +rept 4 + dec hl +endr + + ld a, [CurPartyLevel] + cp [hl] + jr nc, .encounter + and a + ret + +.encounter + scf + ret +; 2a200 + +LoadWildMonDataPointer: ; 2a200 + call CheckOnWater + jr z, _WaterWildmonLookup + +_GrassWildmonLookup: ; 2a205 + ld hl, SwarmGrassWildMons + ld bc, GRASS_WILDDATA_LENGTH + call _SwarmWildmonCheck + ret c + ld hl, JohtoGrassWildMons + ld de, KantoGrassWildMons + call _JohtoWildmonCheck + ld bc, GRASS_WILDDATA_LENGTH + jr _NormalWildmonOK + +_WaterWildmonLookup: ; 2a21d + ld hl, SwarmWaterWildMons + ld bc, WATER_WILDDATA_LENGTH + call _SwarmWildmonCheck + ret c + ld hl, JohtoWaterWildMons + ld de, KantoWaterWildMons + call _JohtoWildmonCheck + ld bc, WATER_WILDDATA_LENGTH + jr _NormalWildmonOK + +_JohtoWildmonCheck + call IsInJohto + and a + ret z + ld h, d + ld l, e + ret + +_SwarmWildmonCheck + call CopyCurrMapDE + push hl + ld hl, SwarmFlags + bit 2, [hl] + pop hl + jr z, .CheckYanma + ld a, [wdfcc] + cp d + jr nz, .CheckYanma + ld a, [wdfcd] + cp e + jr nz, .CheckYanma + call LookUpWildmonsForMapDE + jr nc, _NoSwarmWildmon + scf + ret + +.CheckYanma + push hl + ld hl, SwarmFlags + bit 3, [hl] + pop hl + jr z, _NoSwarmWildmon + ld a, [wdc5a] + cp d + jr nz, _NoSwarmWildmon + ld a, [wdc5b] + cp e + jr nz, _NoSwarmWildmon + call LookUpWildmonsForMapDE + jr nc, _NoSwarmWildmon + scf + ret + +_NoSwarmWildmon + and a + ret + +_NormalWildmonOK + call CopyCurrMapDE + jr LookUpWildmonsForMapDE +; 2a27f + +CopyCurrMapDE: ; 2a27f + ld a, [MapGroup] + ld d, a + ld a, [MapNumber] + ld e, a + ret +; 2a288 + +LookUpWildmonsForMapDE: ; 2a288 + push hl + ld a, [hl] + inc a + jr z, .nope + ld a, d + cp [hl] + jr nz, .next + inc hl + ld a, e + cp [hl] + jr z, .yup + +.next + pop hl + add hl, bc + jr LookUpWildmonsForMapDE + +.nope + pop hl + and a + ret + +.yup + pop hl + scf + ret +; 2a2a0 + + +InitRoamMons: ; 2a2a0 +; initialize wRoamMon structs + +; species + ld a, RAIKOU + ld [wRoamMon1Species], a + ld a, ENTEI + ld [wRoamMon2Species], a +; ld a, SUICUNE +; ld [wRoamMon3Species], a + +; level + ld a, 40 + ld [wRoamMon1Level], a + ld [wRoamMon2Level], a +; ld [wRoamMon3Level], a + +; raikou starting map + ld a, GROUP_ROUTE_42 + ld [wRoamMon1MapGroup], a + ld a, MAP_ROUTE_42 + ld [wRoamMon1MapNumber], a + +; entei starting map + ld a, GROUP_ROUTE_37 + ld [wRoamMon2MapGroup], a + ld a, MAP_ROUTE_37 + ld [wRoamMon2MapNumber], a + +; suicune starting map +; ld a, GROUP_ROUTE_38 +; ld [wRoamMon3MapGroup], a +; ld a, MAP_ROUTE_38 +; ld [wRoamMon3MapNumber], a + +; hp + xor a ; generate new stats + ld [wRoamMon1HP], a + ld [wRoamMon2HP], a +; ld [wRoamMon3HP], a + + ret +; 2a2ce + + +CheckEncounterRoamMon: ; 2a2ce + push hl +; Don't trigger an encounter if we're on water. + call CheckOnWater + jr z, .DontEncounterRoamMon +; Load the current map group and number to de + call CopyCurrMapDE +; Randomly select a beast. + call Random + cp 100 ; 25/64 chance + jr nc, .DontEncounterRoamMon + and %00000011 ; Of that, a 3/4 chance. Running total: 75/256, or around 29.3%. + jr z, .DontEncounterRoamMon + dec a ; 1/3 chance that it's Entei, 1/3 chance that it's Raikou +; Compare its current location with yours + ld hl, wRoamMon1MapGroup + ld c, a + ld b, 0 + ld a, 7 ; length of the RoamMon struct + call AddNTimes + ld a, d + cp [hl] + jr nz, .DontEncounterRoamMon + inc hl + ld a, e + cp [hl] + jr nz, .DontEncounterRoamMon +; We've decided to take on a beast, so stage its information for battle. +rept 3 + dec hl +endr + ld a, [hli] + ld [TempWildMonSpecies], a + ld a, [hl] + ld [CurPartyLevel], a + ld a, BATTLETYPE_ROAMING + ld [BattleType], a + + pop hl + scf + ret + +.DontEncounterRoamMon + pop hl + and a + ret +; 2a30d + + +UpdateRoamMons: ; 2a30d + ld a, [wRoamMon1MapGroup] + cp GROUP_N_A + jr z, .SkipRaikou + ld b, a + ld a, [wRoamMon1MapNumber] + ld c, a + call .Update + ld a, b + ld [wRoamMon1MapGroup], a + ld a, c + ld [wRoamMon1MapNumber], a + +.SkipRaikou + ld a, [wRoamMon2MapGroup] + cp GROUP_N_A + jr z, .SkipEntei + ld b, a + ld a, [wRoamMon2MapNumber] + ld c, a + call .Update + ld a, b + ld [wRoamMon2MapGroup], a + ld a, c + ld [wRoamMon2MapNumber], a + +.SkipEntei + ld a, [wRoamMon3MapGroup] + cp GROUP_N_A + jr z, .SkipSuicune + ld b, a + ld a, [wRoamMon3MapNumber] + ld c, a + call .Update + ld a, b + ld [wRoamMon3MapGroup], a + ld a, c + ld [wRoamMon3MapNumber], a + +.SkipSuicune + jp _BackUpMapIndices +; 2a355 + + +.Update: ; 2a355 + ld hl, RoamMaps +.loop +; Are we at the end of the table? + ld a, [hl] + cp -1 + ret z +; Is this the correct entry? + ld a, b + cp [hl] + jr nz, .next + inc hl + ld a, c + cp [hl] + jr z, .yes +; We don't have the correct entry yet, so let's continue. A 0 terminates each entry. +.next + ld a, [hli] + and a + jr nz, .next + jr .loop + +; We have the correct entry now, so let's choose a random map from it. +.yes + inc hl + ld d, h + ld e, l +.update_loop + ld h, d + ld l, e +; Choose which map to warp to. + call Random + and $1f ; 1/8n chance it moves to a completely random map, where n is the number of roaming connections from the current map. + jr z, JumpRoamMon + and 3 + cp [hl] + jr nc, .update_loop ; invalid index, try again + inc hl + ld c, a + ld b, $0 +rept 2 + add hl, bc +endr + ld a, [wdfe7] + cp [hl] + jr nz, .done + inc hl + ld a, [wdfe6] + cp [hl] + jr z, .update_loop + dec hl + +.done + ld a, [hli] + ld b, a + ld c, [hl] + ret + +JumpRoamMons: ; 2a394 + ld a, [wRoamMon1MapGroup] + cp GROUP_N_A + jr z, .SkipRaikou + call JumpRoamMon + ld a, b + ld [wRoamMon1MapGroup], a + ld a, c + ld [wRoamMon1MapNumber], a +.SkipRaikou + + ld a, [wRoamMon2MapGroup] + cp GROUP_N_A + jr z, .SkipEntei + call JumpRoamMon + ld a, b + ld [wRoamMon2MapGroup], a + ld a, c + ld [wRoamMon2MapNumber], a +.SkipEntei + + ld a, [wRoamMon3MapGroup] + cp GROUP_N_A + jr z, .SkipSuicune + call JumpRoamMon + ld a, b + ld [wRoamMon3MapGroup], a + ld a, c + ld [wRoamMon3MapNumber], a +.SkipSuicune + + jp _BackUpMapIndices + +JumpRoamMon: ; 2a3cd +.loop + ld hl, RoamMaps +.innerloop1 ; This loop is completely unnecessary. + call Random ; Choose a random number + and $f ; Take the lower nybble only. This gives a number between 0 and 15. + cp $10 ; If the number is greater than or equal to 16, loop back and try again. + jr nc, .innerloop1 ; I'm sure you can guess why this check is bogus. + inc a + ld b, a +.innerloop2 ; Loop to get hl to the address of the chosen roam map. + dec b + jr z, .ok +.innerloop3 ; Loop to skip the current roam map, which is terminated by a 0. + ld a, [hli] + and a + jr nz, .innerloop3 + jr .innerloop2 +; Check to see if the selected map is the one the player is currently in. If so, try again. +.ok + ld a, [MapGroup] + cp [hl] + jr nz, .done + inc hl + ld a, [MapNumber] + cp [hl] + jr z, .loop + dec hl +; Return the map group and number in bc. +.done + ld a, [hli] + ld b, a + ld c, [hl] + ret +; 2a3f6 + +_BackUpMapIndices: ; 2a3f6 + ld a, [wdfe4] + ld [wdfe6], a + ld a, [wdfe5] + ld [wdfe7], a + ld a, [MapNumber] + ld [wdfe4], a + ld a, [MapGroup] + ld [wdfe5], a + ret +; 2a40f + +RoamMaps: ; 2a40f +; Maps that roaming monsters can be on, +; and possible maps they can jump to. +; Notably missing are Route 40 and +; Route 41, which are water routes. + roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46 + roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31 + roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36 + roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33 + roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34 + roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35 + roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36 + roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37 + roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42 + roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42 + roam_map ROUTE_39, 1, ROUTE_38 + roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38 + roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44 + roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45 + roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46 + roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29 + db -1 +; 2a4a0 + +ValidateTempWildMonSpecies: ; 2a4a0 +; Due to a development oversight, this function is called with the wild Pokemon's level, not its species, in a. + and a + jr z, .nowildmon ; = 0 + cp NUM_POKEMON + 1 ; 252 + jr nc, .nowildmon ; >= 252 + and a ; 1 <= Species <= 251 + ret + +.nowildmon + scf + ret +; 2a4ab + +RandomPhoneRareWildMon: ; 2a4ab +; Related to the phone? + callba GetCallerLocation + ld d, b + ld e, c + ld hl, JohtoGrassWildMons + ld bc, GRASS_WILDDATA_LENGTH + call LookUpWildmonsForMapDE + jr c, .GetGrassmon + ld hl, KantoGrassWildMons + call LookUpWildmonsForMapDE + jr nc, .done + +.GetGrassmon + push hl + ld bc, 5 + 4 * 2 ; Location of the level of the 5th wild Pokemon in that map + add hl, bc + ld a, [TimeOfDay] + ld bc, 7 * 2 + call AddNTimes +.randloop1 + call Random + and $3 + jr z, .randloop1 + dec a + ld c, a + ld b, $0 +rept 2 + add hl, bc +endr +; We now have the pointer to one of the last (rarest) three wild Pokemon found in that area. + inc hl + ld c, [hl] ; Contains the species index of this rare Pokemon + pop hl + ld de, 5 + 0 * 2 + add hl, de + inc hl ; Species index of the most common Pokemon on that route + ld b, 4 +.loop2 + ld a, [hli] + cp c ; Compare this most common Pokemon with the rare one stored in c. + jr z, .done + inc hl + dec b + jr nz, .loop2 +; This Pokemon truly is rare. + push bc + dec c + ld a, c + call CheckSeenMon + pop bc + jr nz, .done +; Since we haven't seen it, have the caller tell us about it. + ld de, StringBuffer1 + call CopyName1 + ld a, c + ld [wd265], a + call GetPokemonName + ld hl, UnknownText_0x2a51a + call PrintText + xor a + ld [ScriptVar], a + ret + +.done + ld a, $1 + ld [ScriptVar], a + ret +; 2a51a + +UnknownText_0x2a51a: ; 0x2a51a + ; I just saw some rare @ in @ . I'll call you if I see another rare #MON, OK? + text_jump UnknownText_0x1bd34b + db "@" +; 0x2a51f + +RandomPhoneWildMon: ; 2a51f + callba GetCallerLocation + ld d, b + ld e, c + ld hl, JohtoGrassWildMons + ld bc, GRASS_WILDDATA_LENGTH + call LookUpWildmonsForMapDE + jr c, .ok + ld hl, KantoGrassWildMons + call LookUpWildmonsForMapDE + +.ok + ld bc, 5 + 0 * 2 + add hl, bc + ld a, [TimeOfDay] + inc a + ld bc, 7 * 2 +.loop + dec a + jr z, .done + add hl, bc + jr .loop + +.done + call Random + and $3 + ld c, a + ld b, $0 +rept 2 + add hl, bc +endr + inc hl + ld a, [hl] + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + ld de, StringBuffer4 + ld bc, PKMN_NAME_LENGTH + jp CopyBytes +; 2a567 + +RandomPhoneMon: ; 2a567 +; Get a random monster owned by the trainer who's calling. + callba GetCallerLocation + ld hl, TrainerGroups + ld a, d + dec a + ld c, a + ld b, 0 +rept 2 + add hl, bc +endr + ld a, BANK(TrainerGroups) + call GetFarHalfword + +.skip_trainer + dec e + jr z, .skipped +.skip + ld a, BANK(Trainers) + call GetFarByte + inc hl + cp -1 + jr nz, .skip + jr .skip_trainer +.skipped + +.skip_name + ld a, BANK(Trainers) + call GetFarByte + inc hl + cp "@" + jr nz, .skip_name + + ld a, BANK(Trainers) + call GetFarByte + inc hl + ld bc, 2 + cp 0 + jr z, .got_mon_length + ld bc, 2 + NUM_MOVES + cp 1 + jr z, .got_mon_length + ld bc, 2 + 1 + cp 2 + jr z, .got_mon_length + ld bc, 2 + 1 + NUM_MOVES +.got_mon_length + + ld e, 0 + push hl +.count_mon + inc e + add hl, bc + ld a, BANK(Trainers) + call GetFarByte + cp -1 + jr nz, .count_mon + pop hl + +.rand + call Random + and 7 + cp e + jr nc, .rand + + inc a +.get_mon + dec a + jr z, .got_mon + add hl, bc + jr .get_mon +.got_mon + + inc hl ; species + ld a, BANK(Trainers) + call GetFarByte + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + ld de, StringBuffer4 + ld bc, PKMN_NAME_LENGTH + jp CopyBytes +; 2a5e9 + + +JohtoGrassWildMons: ; 0x2a5e9 +INCLUDE "data/wild/johto_grass.asm" + +JohtoWaterWildMons: ; 0x2b11d +INCLUDE "data/wild/johto_water.asm" + +KantoGrassWildMons: ; 0x2b274 +INCLUDE "data/wild/kanto_grass.asm" + +KantoWaterWildMons: ; 0x2b7f7 +INCLUDE "data/wild/kanto_water.asm" + +SwarmGrassWildMons: ; 0x2b8d0 +INCLUDE "data/wild/swarm_grass.asm" + +SwarmWaterWildMons: ; 0x2b92f +INCLUDE "data/wild/swarm_water.asm" |