diff options
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/HoF_room_pc.asm | 333 | ||||
-rw-r--r-- | engine/bank3c.asm | 521 | ||||
-rw-r--r-- | engine/bank3f.asm | 2432 | ||||
-rwxr-xr-x | engine/evolution.asm | 10 | ||||
-rwxr-xr-x | engine/game_corner_slots2.asm | 4 | ||||
-rwxr-xr-x | engine/hidden_object_functions17.asm | 111 | ||||
-rwxr-xr-x | engine/hidden_object_functions18.asm | 74 | ||||
-rwxr-xr-x | engine/items/itemfinder.asm | 4 | ||||
-rwxr-xr-x | engine/items/items.asm | 4 | ||||
-rw-r--r-- | engine/menu/bills_pc.asm | 2 | ||||
-rwxr-xr-x | engine/menu/party_menu.asm | 2 | ||||
-rwxr-xr-x | engine/menu/pokedex.asm | 526 | ||||
-rw-r--r-- | engine/overworld/advance_player_sprite.asm | 2 | ||||
-rwxr-xr-x | engine/overworld/cable_club_npc.asm | 2 | ||||
-rwxr-xr-x | engine/overworld/hidden_items.asm | 17 | ||||
-rwxr-xr-x | engine/overworld/hidden_objects.asm | 26 | ||||
-rw-r--r-- | engine/overworld/missable_objects.asm | 2 | ||||
-rwxr-xr-x | engine/overworld/pokecenter.asm | 8 | ||||
-rwxr-xr-x | engine/pikachu_pic_animation.asm | 3449 | ||||
-rwxr-xr-x | engine/printer.asm | 254 |
20 files changed, 5668 insertions, 2115 deletions
diff --git a/engine/HoF_room_pc.asm b/engine/HoF_room_pc.asm index e00fc57d..51575a9d 100755 --- a/engine/HoF_room_pc.asm +++ b/engine/HoF_room_pc.asm @@ -1,173 +1,214 @@ -HallOfFamePC: ; 7405c (1d:405c) - callba AnimateHallOfFame +HallOfFamePC: + callab FallingStarEnd call ClearScreen ld c, 100 call DelayFrames + call DisableLCD - ld hl, vFont - ld bc, $800 / 2 - call ZeroMemory - ld hl, vChars2 + $600 - ld bc, $200 / 2 - call ZeroMemory - ld hl, vChars2 + $7e0 - ld bc, $10 - ld a, $ff - call FillMemory + ld a, $a7 + ld [rWX], a + xor a + ld [rSCX], a + ld [rSCY], a + ld [hSCX], a + ld [hSCY], a + ld [hWY], a + ld [rWY], a + call CreditsLoadFont coord hl, 0, 0 call FillFourRowsWithBlack coord hl, 0, 14 call FillFourRowsWithBlack - ld a, $c0 + ld a, %11000000 ld [rBGP], a + call UpdateGBCPal_BGP call EnableLCD - ld a, $ff - call PlaySoundWaitForCurrent + call StopAllMusic + ld hl, vBGMap1 + call CreditsCopyTileMapToVRAM + ld hl, vBGMap0 + call CreditsCopyTileMapToVRAM ld c, BANK(Music_Credits) ld a, MUSIC_CREDITS call PlayMusic ld c, 128 call DelayFrames xor a - ld [wUnusedCD3D], a ; not read + ld [wHoFMonSpecies], a ld [wNumCreditsMonsDisplayed], a jp Credits -FadeInCreditsText: ; 740ba (1d:40ba) +FadeInCreditsText: + ld a, $1 + ld [H_AUTOBGTRANSFERENABLED], a ld hl, HoFGBPalettes ld b, 4 -.asm_740bf +.asm_f0f91 ld a, [hli] ld [rBGP], a + call UpdateGBCPal_BGP ld c, 5 call DelayFrames dec b - jr nz, .asm_740bf + jr nz, .asm_f0f91 ret -DisplayCreditsMon: ; 740cb (1d:40cb) - xor a - ld [H_AUTOBGTRANSFERENABLED],a - call SaveScreenTilesToBuffer1 - call FillMiddleOfScreenWithWhite +HoFGBPalettes: + db %11000000 + db %11010000 + db %11100000 + db %11110000 - ; display the next monster from CreditsMons - ld hl,wNumCreditsMonsDisplayed - ld c,[hl] ; how many monsters have we displayed so far? - inc [hl] - ld b,0 - ld hl,CreditsMons - add hl,bc ; go that far in the list of monsters and get the next one - ld a,[hl] - ld [wcf91],a - ld [wd0b5],a - coord hl, 8, 6 - call GetMonHeader - call LoadFrontSpriteByMonIndex - ld hl,vBGMap0 + $c +DisplayCreditsMon: + ld hl, vBGMap1 call CreditsCopyTileMapToVRAM xor a - ld [H_AUTOBGTRANSFERENABLED],a - call LoadScreenTilesFromBuffer1 - ld hl,vBGMap0 + ld [H_AUTOBGTRANSFERENABLED], a + ld hl, rLCDC + set 3, [hl] + call SaveScreenTilesToBuffer2 + call FillMiddleOfScreenWithWhite + call GetNextCreditsMon + ld hl, vBGMap0 + 12 call CreditsCopyTileMapToVRAM - ld a,$A7 - ld [rWX],a - ld hl,vBGMap1 + xor a + ld [H_AUTOBGTRANSFERENABLED], a + call LoadScreenTilesFromBuffer2DisableBGTransfer + ld hl, vBGMap0 call CreditsCopyTileMapToVRAM - call FillMiddleOfScreenWithWhite - ld a,%11111100 ; make the mon a black silhouette - ld [rBGP],a - -; scroll the mon left by one tile 7 times - ld bc,7 -.scrollLoop1 + ld a, %11111100 + ld [rBGP], a + call UpdateGBCPal_BGP + ld hl, rLCDC + res 3, [hl] + ld a, 1 + ld [H_AUTOBGTRANSFERENABLED], a + ld b, 0 + ld c, 10 call ScrollCreditsMonLeft - dec c - jr nz,.scrollLoop1 - -; scroll the mon left by one tile 20 times -; This time, we have to move the window left too in order to hide the text that -; is wrapping around to the right side of the screen. - ld c,20 -.scrollLoop2 + call FillLeftHalfOfScreenWithWhite + ld c, 10 call ScrollCreditsMonLeft - ld a,[rWX] - sub 8 - ld [rWX],a - dec c - jr nz,.scrollLoop2 - + call FillRightHalfOfScreenWithWhite + ld c, 8 + call ScrollCreditsMonLeft + ld a, %11000000 + ld [rBGP], a + call UpdateGBCPal_BGP xor a - ld [hWY],a - ld a,%11000000 - ld [rBGP],a + ld [hSCX], a ret -INCLUDE "data/credit_mons.asm" - -ScrollCreditsMonLeft: ; 74140 (1d:4140) - ld h, b - ld l, $20 - call ScrollCreditsMonLeft_SetSCX - ld h, $0 - ld l, $70 - call ScrollCreditsMonLeft_SetSCX +ScrollCreditsMonLeft: +.asm_f0fff ld a, b - add $8 + ld [hSCX], a + add 8 ld b, a + call DelayFrame + dec c + jr nz, .asm_f0fff ret -ScrollCreditsMonLeft_SetSCX: ; 74152 (1d:4152) - ld a, [rLY] - cp l - jr nz, ScrollCreditsMonLeft_SetSCX - ld a, h - ld [rSCX], a -.loop - ld a, [rLY] - cp h - jr z, .loop +GetNextCreditsMon: + ld hl, wNumCreditsMonsDisplayed + ld c, [hl] + inc [hl] + ld b, 0 + ld hl, CreditsMons + add hl, bc + ld a, [hl] + ld [wcf91], a + ld [wd0b5], a + coord hl, 8, 6 + call GetMonHeader + call LoadFrontSpriteByMonIndex ret -HoFGBPalettes: ; 74160 (1d:4160) - db %11000000 - db %11010000 - db %11100000 - db %11110000 +INCLUDE "data/credit_mons.asm" -CreditsCopyTileMapToVRAM: ; 74164 (1d:4164) +CreditsCopyTileMapToVRAM: ld a, l - ld [H_AUTOBGTRANSFERDEST], a + ld [$ffbc], a ld a, h - ld [H_AUTOBGTRANSFERDEST + 1], a - ld a, 1 + ld [$ffbd], a + ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a jp Delay3 -ZeroMemory: ; 74171 (1d:4171) -; zero bc bytes at hl +CreditsLoadFont: + call LoadFontTilePatterns + ld hl, vChars1 + ld bc, $40 * $10 + call ZeroMemory + + call LoadTextBoxTilePatterns + ld hl, vChars2 + $60 * $10 + ld bc, $10 * $10 + call ZeroMemory + + ld hl, vChars2 + $7e * $10 + ld bc, $1 * $10 + ld a, $ff + call FillMemory + ret + +ZeroMemory: +.asm_f1071 ld [hl], 0 inc hl inc hl dec bc ld a, b or c - jr nz, ZeroMemory + jr nz, .asm_f1071 ret -FillFourRowsWithBlack: ; 7417b (1d:417b) - ld bc, SCREEN_WIDTH * 4 +FillFourRowsWithBlack: + ld bc, 4 * SCREEN_WIDTH ld a, $7e jp FillMemory -FillMiddleOfScreenWithWhite: ; 74183 (1d:4183) +FillMiddleOfScreenWithWhite: coord hl, 0, 4 - ld bc, SCREEN_WIDTH * 10 + ld bc, 10 * SCREEN_WIDTH ld a, " " jp FillMemory -Credits: ; 7418e (1d:418e) +FillLeftHalfOfScreenWithWhite: + coord hl, 0, 4 + push bc + call FillHalfOfScreenWithWhite + pop bc + ret + +FillRightHalfOfScreenWithWhite: + coord hl, 10, 4 + push bc + call FillHalfOfScreenWithWhite + pop bc + ret + +FillHalfOfScreenWithWhite: + ld b, 10 + ld c, 10 + ld a, " " +.asm_f10a6 + push bc + push hl +.asm_f10a8 + ld [hli], a + dec c + jr nz, .asm_f10a8 + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .asm_f10a6 + ret + +Credits: ; Roll credits ld de, CreditsOrder push de .nextCreditsScreen @@ -192,58 +233,48 @@ Credits: ; 7418e (1d:418e) jr z, .showCopyrightText cp $fa jr z, .showTheEnd - push hl - push hl - ld hl, CreditsTextPointers - add a - ld c, a - ld b, 0 - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - ld a, [de] - inc de - ld c, a - ld b, $ff - pop hl - add hl, bc - call PlaceString - pop hl - ld bc, SCREEN_WIDTH * 2 - add hl, bc + call PlaceCreditsText pop de jr .nextCreditsCommand + +.showCopyrightText + callba LoadCopyrightTiles + pop de + jr .nextCreditsCommand + + .fadeInTextAndShowMon call FadeInCreditsText - ld c, 90 + ld c, 102 jr .next1 + .showTextAndShowMon - ld c, 110 + ld c, 122 .next1 call DelayFrames call DisplayCreditsMon jr .nextCreditsScreen + .fadeInText call FadeInCreditsText - ld c, 120 + ld c, 132 jr .next2 + .showText - ld c, 140 + ld c, 152 .next2 call DelayFrames jr .nextCreditsScreen -.showCopyrightText - push de - callba LoadCopyrightTiles - pop de - pop de - jr .nextCreditsCommand + .showTheEnd - ld c, 16 + call ShowTheEndGFX + pop de + ret + +ShowTheEndGFX: + ld c, 24 call DelayFrames call FillMiddleOfScreenWithWhite - pop de ld de, TheEndGfx ld hl, vChars2 + $600 lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / $10 @@ -258,8 +289,31 @@ Credits: ; 7418e (1d:418e) TheEndTextString: ; 74229 (1d:4229) ; "T H E E N D" - db $60," ",$62," ",$64," ",$64," ",$66," ",$68,"@" - db $61," ",$63," ",$65," ",$65," ",$67," ",$69,"@" + db $60, " ", $62, " ", $64, " ", $64, " ", $66, " ", $68, "@" + db $61, " ", $63, " ", $65, " ", $65, " ", $67, " ", $69, "@" + +PlaceCreditsText: + push hl + push hl + ld hl, CreditsTextPointers + ld c, a + ld b, 0 + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ld a, [de] + inc de + ld c, a + ld b, $ff + add hl, bc + call PlaceString + pop hl + ld bc, SCREEN_WIDTH * 2 + add hl, bc + ret INCLUDE "data/credits_order.asm" @@ -268,3 +322,4 @@ INCLUDE "text/credits_text.asm" TheEndGfx: ; 7473e (1d:473e) (7473f on blue) INCBIN "gfx/theend.interleave.2bpp" TheEndGfxEnd: + diff --git a/engine/bank3c.asm b/engine/bank3c.asm index cadfe1cf..d176511c 100644 --- a/engine/bank3c.asm +++ b/engine/bank3c.asm @@ -14,10 +14,11 @@ PlayPikachuSoundClip:: ; f0000 (3c:4000) ld c, $4 .loop dec c - jr z, .asm_f0019 + jr z, .done_delay call DelayFrame jr .loop -.asm_f0019 + +.done_delay di push bc push hl @@ -90,74 +91,74 @@ PikachuCriesPointerTable: ; f008e (3c:408e) ; dw pointer to cry ; bank 21 - dbw BANK(PikachuCry1), PikachuCry1 ; 21:4000 - dbw BANK(PikachuCry2), PikachuCry2 ; 21:491a - dbw BANK(PikachuCry3), PikachuCry3 ; 21:4fdc - dbw BANK(PikachuCry4), PikachuCry4 ; 21:59ee - + pikacry_def PikachuCry1 ; 21:4000 + pikacry_def PikachuCry2 ; 21:491a + pikacry_def PikachuCry3 ; 21:4fdc + pikacry_def PikachuCry4 ; 21:59ee + ; bank 22 - dbw BANK(PikachuCry5), PikachuCry5 ; 22:4000 - dbw BANK(PikachuCry6), PikachuCry6 ; 22:5042 - dbw BANK(PikachuCry7), PikachuCry7 ; 22:6254 - + pikacry_def PikachuCry5 ; 22:4000 + pikacry_def PikachuCry6 ; 22:5042 + pikacry_def PikachuCry7 ; 22:6254 + ; bank 23 - dbw BANK(PikachuCry8), PikachuCry8 ; 23:4000 - dbw BANK(PikachuCry9), PikachuCry9 ; 23:50ca - dbw BANK(PikachuCry10), PikachuCry10 ; 23:5e0c + pikacry_def PikachuCry8 ; 23:4000 + pikacry_def PikachuCry9 ; 23:50ca + pikacry_def PikachuCry10 ; 23:5e0c ; bank 24 - dbw BANK(PikachuCry11), PikachuCry11 ; 24:4000 - dbw BANK(PikachuCry12), PikachuCry12 ; 24:4722 - dbw BANK(PikachuCry13), PikachuCry13 ; 24:54a4 - + pikacry_def PikachuCry11 ; 24:4000 + pikacry_def PikachuCry12 ; 24:4722 + pikacry_def PikachuCry13 ; 24:54a4 + ; bank 25 - dbw BANK(PikachuCry14), PikachuCry14 ; 25:4000 - dbw BANK(PikachuCry15), PikachuCry15 ; 25:589a - + pikacry_def PikachuCry14 ; 25:4000 + pikacry_def PikachuCry15 ; 25:589a + ; banks 31-34, in no particular order - dbw BANK(PikachuCry16), PikachuCry16 ; 31:4000 - dbw BANK(PikachuCry17), PikachuCry17 ; 34:4000 - dbw BANK(PikachuCry18), PikachuCry18 ; 31:549a - dbw BANK(PikachuCry19), PikachuCry19 ; 33:4000 - dbw BANK(PikachuCry20), PikachuCry20 ; 32:4000 - dbw BANK(PikachuCry21), PikachuCry21 ; 32:6002 - dbw BANK(PikachuCry22), PikachuCry22 ; 31:63a4 - dbw BANK(PikachuCry23), PikachuCry23 ; 34:4862 - dbw BANK(PikachuCry24), PikachuCry24 ; 33:5632 - dbw BANK(PikachuCry25), PikachuCry25 ; 34:573c - dbw BANK(PikachuCry26), PikachuCry26 ; 33:725c - + pikacry_def PikachuCry16 ; 31:4000 + pikacry_def PikachuCry17 ; 34:4000 + pikacry_def PikachuCry18 ; 31:549a + pikacry_def PikachuCry19 ; 33:4000 + pikacry_def PikachuCry20 ; 32:4000 + pikacry_def PikachuCry21 ; 32:6002 + pikacry_def PikachuCry22 ; 31:63a4 + pikacry_def PikachuCry23 ; 34:4862 + pikacry_def PikachuCry24 ; 33:5632 + pikacry_def PikachuCry25 ; 34:573c + pikacry_def PikachuCry26 ; 33:725c + ; bank 35 - dbw BANK(PikachuCry27), PikachuCry27 ; 35:4000 - dbw BANK(PikachuCry28), PikachuCry28 ; 35:4b5a - dbw BANK(PikachuCry29), PikachuCry29 ; 35:5da4 - dbw BANK(PikachuCry30), PikachuCry30 ; 35:69ce - dbw BANK(PikachuCry31), PikachuCry31 ; 35:6e80 - + pikacry_def PikachuCry27 ; 35:4000 + pikacry_def PikachuCry28 ; 35:4b5a + pikacry_def PikachuCry29 ; 35:5da4 + pikacry_def PikachuCry30 ; 35:69ce + pikacry_def PikachuCry31 ; 35:6e80 + ; bank 36 - dbw BANK(PikachuCry32), PikachuCry32 ; 36:4000 - dbw BANK(PikachuCry33), PikachuCry33 ; 36:458a - dbw BANK(PikachuCry34), PikachuCry34 ; 36:523c - + pikacry_def PikachuCry32 ; 36:4000 + pikacry_def PikachuCry33 ; 36:458a + pikacry_def PikachuCry34 ; 36:523c + ; bank 37 - dbw BANK(PikachuCry35), PikachuCry35 ; 37:4000 - dbw BANK(PikachuCry36), PikachuCry36 ; 37:522a + pikacry_def PikachuCry35 ; 37:4000 + pikacry_def PikachuCry36 ; 37:522a ; banks 36-38 - dbw BANK(PikachuCry37), PikachuCry37 ; 38:4000 - dbw BANK(PikachuCry38), PikachuCry38 ; 38:4dfa - dbw BANK(PikachuCry39), PikachuCry39 ; 37:6e0c - dbw BANK(PikachuCry40), PikachuCry40 ; 38:5a64 - dbw BANK(PikachuCry41), PikachuCry41 ; 36:6746 - dbw BANK(PikachuCry42), PikachuCry42 ; 38:6976 + pikacry_def PikachuCry37 ; 38:4000 + pikacry_def PikachuCry38 ; 38:4dfa + pikacry_def PikachuCry39 ; 37:6e0c + pikacry_def PikachuCry40 ; 38:5a64 + pikacry_def PikachuCry41 ; 36:6746 + pikacry_def PikachuCry42 ; 38:6976 INCLUDE "engine/overworld/advance_player_sprite.asm" ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274) ; Reset player status on blackout. xor a - ld [wd435],a + ld [wd435], a xor a ; gamefreak copypasting functions (double xor a) ld [wBattleResult], a ld [wWalkBikeSurfState], a @@ -202,35 +203,56 @@ ResetStatusAndHalveMoneyOnBlackout:: ; f0274 (3c:4274) ld a, %11111111 ld [wJoyIgnore], a predef_jump HealParty - + Func_f02da:: ; f02da (3c:42da) - ld a,[wCurMap] + ld a, [wCurMap] cp VERMILION_GYM ; ??? new thing about verm gym? - jr z,.asm_f02ee - ld c,a - ld hl,Pointer_f02fa + jr z, .asm_f02ee + ld c, a + ld hl, Pointer_f02fa .asm_f02e5 - ld a,[hli] + ld a, [hli] cp c - jr z,.asm_f02f4 - cp a,$ff - jr nz,.asm_f02e5 + jr z, .asm_f02f4 + cp a, $ff + jr nz, .asm_f02e5 ret .asm_f02ee - ld hl,wd126 - set 6,[hl] + ld hl, wd126 + set 6, [hl] ret .asm_f02f4 - ld hl,wd126 - set 5,[hl] + ld hl, wd126 + set 5, [hl] ret Pointer_f02fa:: ; f02fa (3c:42fa) - db $cf,$d0,$d1,$d2,$d3,$d4 - db $d5,$e9,$ea,$eb,$d6,$d7 - db $d8,$a5,$a6,$87,$c7,$ca - db $c6,$6c,$c2,$71,$f5,$f6 - db $f7,$ff + db SILPH_CO_2F + db SILPH_CO_3F + db SILPH_CO_4F + db SILPH_CO_5F + db SILPH_CO_6F + db SILPH_CO_7F + db SILPH_CO_8F + db SILPH_CO_9F + db SILPH_CO_10F + db SILPH_CO_11F + db MANSION_2 + db MANSION_3 + db MANSION_4 + db MANSION_1 + db CINNABAR_GYM + db GAME_CORNER + db ROCKET_HIDEOUT_1 + db ROCKET_HIDEOUT_4 + db VICTORY_ROAD_3 + db VICTORY_ROAD_1 + db VICTORY_ROAD_2 + db LANCES_ROOM + db LORELEIS_ROOM + db BRUNOS_ROOM + db AGATHAS_ROOM + db $ff BeachHouse_GFX:: ; f0314 (3c:4314) INCBIN "gfx/tilesets/beachhouse.2bpp" @@ -240,42 +262,351 @@ BeachHouse_Block:: ; f0914 (3c:4914) Func_f0a54:: ; f0a54 (3c:4a54) ret - + Func_f0a55:: ; f0a55 (3c:4a55) - ld hl,Pointer_f0a76 ; 3c:4a76 + ld hl, Pointer_f0a76 ; 3c:4a76 .loop - ld a,[hli] - cp a,$ff + ld a, [hli] + cp a, $ff ret z - ld b,a - ld a,[wCurMap] + ld b, a + ld a, [wCurMap] cp b - jr z,.asm_f0a68 + jr z, .asm_f0a68 inc hl inc hl inc hl jr .loop .asm_f0a68 - ld a,[hli] - ld c,a - ld b,$0 - ld a,[hli] - ld h,[hl] - ld l,a - ld de,wMissableObjectList + ld a, [hli] + ld c, a + ld b, $0 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, wMissableObjectList call CopyData ret Pointer_f0a76:: ; f0a76 (3c:4a76) - db $27,$07,$7b,$4a,$ff - db $01,$ec,$02,$ed,$03,$ee,$ff - - dr $f0a82,$f220e -BeachHouse_h: ; f220e (3c:620e) -;INCLUDE "data/mapHeaders/beach_house.asm" - dr $f220e,$f24ae -Func_f24ae: ; f24ae (3c:64ae) - dr $f24ae,$f25f8 -CheckForHiddenObject:: ; f25f8 (3c:65f8) - dr $f25f8,$f4000
\ No newline at end of file + db $27, $07, $7b, $4a, $ff + db $01, $ec, $02, $ed, $03, $ee, $ff + +Func_f0a82: ; f0a82 + ld a, [wd472] + bit 7, a + ret z + ld a, [wWalkBikeSurfState] + and a + ret nz + push hl + push bc + callab GetPikachuFacingDirectionAndReturnToE + pop bc + pop hl + ld a, b + cp e + ret nz + push hl + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + callab LoadPikachuShadowIntoVRAM + pop af + ld [wUpdateSpritesEnabled], a + pop hl + call Func_159b ; homecall Func_fd2a1 - pikachu movement script? + callab Func_fcba1 + ret + +Pic_f0abf: ; f0abf (3c:4abf) + dr $f0abf, $f0b64 +GFX_f0b64: ; f0b64 (3c:4b64) + dr $f0b64, $f0cf4 +Pic_f0cf4: ; f0cf4 (3c:4cf4) + dr $f0cf4, $f0d82 +GFX_f0d82: ; f0d82 (3c:4d82) + dr $f0d82, $f0f12 + +Func_f0f12: + ld hl, NurseChanseyText + call PrintText + ld a, CHANSEY + call PlayCry + call WaitForSoundToFinish + ret + +NurseChanseyText: + TX_FAR _NurseChanseyText + db "@" + +INCLUDE "engine/HoF_room_pc.asm" +INCLUDE "scripts/viridiancity2.asm" +INCLUDE "scripts/vermilioncity2.asm" +INCLUDE "scripts/celadoncity2.asm" +INCLUDE "scripts/route1_2.asm" +INCLUDE "scripts/route22_2.asm" +INCLUDE "scripts/redshouse1f2.asm" +INCLUDE "scripts/oakslab2.asm" +INCLUDE "scripts/school2.asm" +INCLUDE "scripts/museum1f2.asm" +INCLUDE "scripts/pewterpokecenter2.asm" + +Func_f1e22: + ld hl, PikachuMovementData_f1e2b + ld b, SPRITE_FACING_RIGHT + call Func_f0a82 + ret + +PikachuMovementData_f1e2b: + db $00 + db $1d + db $1f + db $38 + db $3f + +Func_f1e30 + CheckEvent EVENT_GOT_TM18 + jr nz, .asm_f1e54 + ld hl, CeladonMart3Text_f1e5b + call PrintText + lb bc, TM_18, 1 + call GiveItem + jr nc, .asm_f1e4f + SetEvent EVENT_GOT_TM18 + ld hl, CeladonMart3Text_f1e60 + jr .asm_f1e57 + +.asm_f1e4f + ld hl, CeladonMart3Text_f1e6b + jr .asm_f1e57 + +.asm_f1e54 + ld hl, CeladonMart3Text_f1e66 +.asm_f1e57 + call PrintText + ret + +CeladonMart3Text_f1e5b: + TX_FAR _TM18PreReceiveText + db "@" + +CeladonMart3Text_f1e60: + TX_FAR _ReceivedTM18Text + TX_SFX_ITEM + db "@" + +CeladonMart3Text_f1e66: + TX_FAR _TM18ExplanationText + db "@" + +CeladonMart3Text_f1e6b: + TX_FAR _TM18NoRoomText + db "@" + +Func_f1e70: + ld a, $1 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + ld hl, CeladonMansion1Text_f1e96 + call PrintText + callab IsStarterPikachuInOurParty + ret nc + ld hl, CeladonMansionText_f1e9c + call PrintText + ld a, $0 + ld [wDoNotWaitForButtonPressAfterDisplayingText], a + call Func_f1ea2 + call PrintText + ret + +CeladonMansion1Text_f1e96: + TX_FAR _CeladonMansion1Text2 + TX_WAIT_BUTTON + db "@" + +CeladonMansionText_f1e9c: + TX_FAR _CeladonMansion1Text6 + TX_BUTTON_SOUND + db "@" + +Func_f1ea2: + ld hl, PikachuHappinessThresholds_f1eb9 +.asm_f1ea5 + ld a, [hli] + inc hl + and a + jr z, .asm_f1eb5 + ld b, a + ld a, [wPikachuHappiness] + cp b + jr c, .asm_f1eb5 + inc hl + inc hl + jr .asm_f1ea5 + +.asm_f1eb5 + ld a, [hli] + ld h, [hl] + ld l, a + ret + +PikachuHappinessThresholds_f1eb9 + dw 51, CeladonMansion1Text_f1ed5 + dw 101, CeladonMansion1Text_f1eda + dw 131, CeladonMansion1Text_f1edf + dw 161, CeladonMansion1Text_f1ee4 + dw 201, CeladonMansion1Text_f1ee9 + dw 255, CeladonMansion1Text_f1eee + dbbw 0, $ff, CeladonMansion1Text_f1eee + +CeladonMansion1Text_f1ed5: + TX_FAR _CeladonMansion1Text7 + db "@" + +CeladonMansion1Text_f1eda: + TX_FAR _CeladonMansion1Text8 + db "@" + +CeladonMansion1Text_f1edf: + TX_FAR _CeladonMansion1Text9 + db "@" + +CeladonMansion1Text_f1ee4: + TX_FAR _CeladonMansion1Text10 + db "@" + +CeladonMansion1Text_f1ee9: + TX_FAR _CeladonMansion1Text11 + db "@" + +CeladonMansion1Text_f1eee: + TX_FAR _CeladonMansion1Text12 + db "@" + + dr $f1ef3, $f218c + +INCLUDE "scripts/mtmoonpokecenter2.asm" + +INCLUDE "data/mapHeaders/beach_house.asm" +INCLUDE "scripts/beach_house.asm" +BeachHouseBlockdata: ; f2388 (3c:6388) +INCBIN "maps/beach_house.blk" +INCLUDE "data/mapObjects/beach_house.asm" + +INCLUDE "scripts/beach_house2.asm" +INCLUDE "scripts/billshouse2.asm" +INCLUDE "scripts/viridianforest2.asm" +INCLUDE "scripts/ssanne9_2.asm" +INCLUDE "scripts/silphco11_2.asm" + +INCLUDE "engine/overworld/hidden_objects.asm" + +Func_f2cd0: + ld d, 0 + ld hl, Jumptable_f2ce1 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + ld e, a + ld d, 0 + ret + +Jumptable_f2ce1: + dw Func_f2ceb + dw Func_f2ceb + dw Func_f2cee + dw Func_f2cf4 + dw Func_f2d06 + +Func_f2ceb: + ld a, 0 + ret + +Func_f2cee: + call Random + and $1 + ret + +Func_f2cf4: ; should return to a, instead returns to b + call Random + swap a + cp $55 + ld b, 0 + ret c + cp $aa + ld b, 1 + ret c + ld b, 2 + ret + +Func_f2d06: + call Random + and $3 + ret + +Func_f2d0c: + ld hl, GymTrashCans3a + ld a, [wGymTrashCanIndex] + ld c, a + ld b, 0 + ld a, 9 + call AddNTimes + call AddNTimes ; ???? + ld a, [hli] + ld [hGymTrashCanRandNumMask], a + ld e, a + push hl + call Func_f2cd0 + pop hl + add hl, de + add hl, de + ld a, [hli] + ld [wSecondLockTrashCanIndex], a + ld a, [hl] + ld [wSecondLockTrashCanIndex + 1], a + ret + +GymTrashCans3a: ; f2d31 (3c:6d31) +; First byte: number of trashcan entries +; Following four byte pairs: indices for the second trash can. +; BUG: Rows that have 3 trashcan entries are sampled incorrectly. +; The sampling occurs by taking a random number and seeing which +; third of the range 0-255 the number falls in. However, it returns +; that value to the wrong register, so the result is never used. +; Instead of using an offset in [0,1,2], the offset is instead +; in the full range 0-255. This results in truly random behavior. + db 4 + db 1,3, 3,1, 1,-1, 3,-1 + db 3 + db 0,2, 2,4, 4,0, -1,-1 + db 4 + db 1,5, 5,1, 1,-1, 5,-1 + db 3 + db 0,4, 4,6, 6,0, -1,-1 + db 4 + db 1,3, 3,1, 5,5, 7,7 + db 3 + db 2,4, 4,8, 8,2, -1,-1 + db 3 + db 3,7, 7,9, 9,3, -1,-1 + db 4 + db 4,8, 6,10, 8,4, 10,6 + db 3 + db 5,7, 7,11, 11,5, -1,-1 + db 3 + db 6,10, 10,12, 12,6, -1,-1 + db 4 + db 7,9, 9,7, 11,13, 13,11 + db 3 + db 8,10, 10,14, 14,8, -1,-1 + db 4 + db 9,13, 13,9, 9,-1, 13,-1 + db 3 + db 10,12, 12,14, 14,10, -1,-1 + db 4 + db 11,13, 13,11, 11,-1, 13,-1 diff --git a/engine/bank3f.asm b/engine/bank3f.asm index 92e6d857..c31fc986 100644 --- a/engine/bank3f.asm +++ b/engine/bank3f.asm @@ -4,50 +4,51 @@ INCLUDE "data/map_header_banks.asm" Func_fc4dd:: ; fc4dd (3f:44dd) ; possibly to test if pika should be out? - ld a,[wd430] - bit 5,a - jr nz,.asm_fc4f8 ; 3f:44f8 - ld a,[wd430] - bit 7,a - jr nz,.asm_fc4f8 + ld a, [wPikachuOverworldStateFlags] + bit 5, a + jr nz, .hide ; 3f:44f8 + ld a, [wPikachuOverworldStateFlags] + bit 7, a + jr nz, .hide call IsStarterPikachuInOurParty - jr nc,.asm_fc4f8 - ld a,[wWalkBikeSurfState] + jr nc, .hide + ld a, [wWalkBikeSurfState] and a - jr nz,.asm_fc4f8 + jr nz, .hide scf ret -.asm_fc4f8 + +.hide and a ret - + Func_fc4fa:: ; fc4fa (3f:44fa) - ld hl,wd430 - bit 4,[hl] - res 4,[hl] - jr nz,.asm_fc515 - call Func_1542 + ld hl, wPikachuOverworldStateFlags + bit 4, [hl] + res 4, [hl] + jr nz, .asm_fc515 + call ResetPikachuAsleep call Func_fc523 - ld a,$ff - ld [wSpriteStateData1 + $f2],a - call Func_fcb84 + ld a, $ff + ld [wSpriteStateData1 + $f2], a + call ClearPikachuFollowCommandBuffer call Func_fc5bc ret - + .asm_fc515 call Func_fc53f xor a - ld [wd431],a - ld a,[wSpriteStateData1 + $9] - ld [wSpriteStateData1 + $f9],a + ld [wd431], a + ld a, [wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9], a ret - + Func_fc523:: ; fc523 (3f:4523) - ld hl,wSpriteStateData1 + $f0 + ld hl, wSpriteStateData1 + $f0 call Func_fc52c - ld hl,wSpriteStateData2 + $f0 + ld hl, wSpriteStateData2 + $f0 Func_fc52c:: ; fc52c (3f:4523) - ld bc,$10 + ld bc, $10 xor a call FillMemory ret @@ -56,251 +57,274 @@ Func_fc534:: ; fc534 (3f:4534) call Func_fc53f call Func_fc5bc xor a - ld [wd431],a + ld [wd431], a ret - + Func_fc53f:: ; fc53f (3f:453f) - ld bc,wSpriteStateData1 + $f0 - ld a,[wYCoord] + ld bc, wSpriteStateData1 + $f0 + ld a, [wYCoord] add $4 - ld e,a - ld a,[wXCoord] + ld e, a + ld a, [wXCoord] add $4 - ld d,a - ld a,[wd431] + ld d, a + ld a, [wd431] and a - jr z,.asm_fc5aa + jr z, .asm_fc5aa cp $1 - jr z,.asm_fc59e + jr z, .asm_fc59e cp $2 - jr z,.asm_fc584 + jr z, .asm_fc584 cp $3 - jr z,.asm_fc5aa + jr z, .asm_fc5aa cp $4 - jr z,.asm_fc5a4 + jr z, .asm_fc5a4 cp $5 - jr z,.asm_fc5a7 + jr z, .asm_fc5a7 cp $6 - jr z,.asm_fc5a1 + jr z, .asm_fc5a1 cp $7 - jr z,.asm_fc572 + jr z, .asm_fc572 jr .asm_fc59e - + .asm_fc572 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] and a ; SPRITE_FACING_DOWN - jr z,.asm_fc5a4 - cp SPRITE_FACING_UP - jr z,.asm_fc5a7 + jr z, .asm_fc5a4 + cp SPRITE_FACING_UP + jr z, .asm_fc5a7 cp SPRITE_FACING_LEFT - jr z,.asm_fc5a1 + jr z, .asm_fc5a1 cp SPRITE_FACING_RIGHT - jr z,.asm_fc59e + jr z, .asm_fc59e .asm_fc584 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] and a - jr nz,.asm_fc58d + jr nz, .asm_fc58d dec e jr .asm_fc5aa + .asm_fc58d cp SPRITE_FACING_UP - jr nz,.asm_fc594 + jr nz, .asm_fc594 inc e jr .asm_fc5aa + .asm_fc594 cp SPRITE_FACING_LEFT - jr nz,.asm_fc59b + jr nz, .asm_fc59b inc d jr .asm_fc5aa + .asm_fc59b dec d jr .asm_fc5aa + .asm_fc59e inc d jr .asm_fc5aa + .asm_fc5a1 dec d jr .asm_fc5aa + .asm_fc5a4 inc e jr .asm_fc5aa + .asm_fc5a7 dec e jr .asm_fc5aa ; useless jr .asm_fc5aa - ld hl,$104 - add hl,bc - ld [hl],e + ld hl, $104 + add hl, bc + ld [hl], e inc hl - ld [hl],d + ld [hl], d inc hl Func_fc4b2:: ; fc4b2 (3f:44b2) - ld [hl],$fe + ld [hl], $fe push hl - ld hl,wd472 - set 5,[hl] + ld hl, wd472 + set 5, [hl] pop hl ret - + Func_fc5bc:: ; fc5bc (3f:45bc) - ld a,$49 - ld [wSpriteStateData1 + $f0],a - ld a,$ff - ld [wSpriteStateData1 + $f2],a - ld a,[wd431] + ld a, $49 + ld [wSpriteStateData1 + $f0], a + ld a, $ff + ld [wSpriteStateData1 + $f2], a + ld a, [wd431] and a - jr z,.asm_fc5e4 + jr z, .asm_fc5e4 cp $1 - jr z,.asm_fc5e4 + jr z, .asm_fc5e4 cp $3 - jr z,.asm_fc5eb + jr z, .asm_fc5eb cp $4 - jr z,.asm_fc5e4 + jr z, .asm_fc5e4 cp $6 - jr z,.asm_fc5e4 + jr z, .asm_fc5e4 cp $7 - jr z,.asm_fc5f1 + jr z, .asm_fc5f1 call Func_fccb2 ret - + .asm_fc5e4 - ld a,[wSpriteStateData1 + $9] - ld [wSpriteStateData1 + $f9],a + ld a, [wSpriteStateData1 + $9] + ld [wSpriteStateData1 + $f9], a ret + .asm_fc5eb - ld a,$0 - ld [wSpriteStateData1 + $f9],a + ld a, $0 + ld [wSpriteStateData1 + $f9], a ret + .asm_fc5f1 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] xor $4 - ld [wSpriteStateData1 + $f9],a + ld [wSpriteStateData1 + $f9], a ret Func_fc5fa:: ; fc5fa (3f:45fa) - ld a,[wCurMap] + ld a, [wCurMap] cp OAKS_LAB - jr z,.asm_fc63d + jr z, .asm_fc63d cp ROUTE_22_GATE - jr z,.asm_fc62d + jr z, .asm_fc62d cp MT_MOON_2 - jr z,.asm_fc635 + jr z, .asm_fc635 cp ROCK_TUNNEL_1 - jr z,.asm_fc645 - ld a,[wCurMap] - ld hl,Pointer_fc64b + jr z, .asm_fc645 + ld a, [wCurMap] + ld hl, Pointer_fc64b call Func_1568 ; similar to IsInArray, but not the same - jr c,.asm_fc639 - ld a,[wCurMap] - ld hl,Pointer_fc653 + jr c, .asm_fc639 + ld a, [wCurMap] + ld hl, Pointer_fc653 call Func_1568 - jr nc,.asm_fc641 - ld a,[wSpriteStateData1 + $9] + jr nc, .asm_fc641 + ld a, [wSpriteStateData1 + $9] and a - jr nz,.asm_fc641 - ld a,$3 + jr nz, .asm_fc641 + ld a, $3 jr .asm_fc647 - + .asm_fc62d - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] and a - jr z,.asm_fc645 + jr z, .asm_fc645 jr .asm_fc641 + .asm_fc635 - ld a,$3 + ld a, $3 jr .asm_fc647 + .asm_fc639 - ld a,$4 + ld a, $4 jr .asm_fc647 + .asm_fc63d - ld a,$6 + ld a, $6 jr .asm_fc647 + .asm_fc641 - ld a,$1 + ld a, $1 jr .asm_fc647 + .asm_fc645 - ld a,$3 + ld a, $3 .asm_fc647 - ld [wd431],a + ld [wd431], a ret Pointer_fc64b:: ; fc64b (3f:464b) - db $c2,$4c,$4f,$ba,$be,$b8,$54,$ff - + db $c2, $4c, $4f, $ba, $be, $b8, $54, $ff + Pointer_fc653:: ; fc653 (3f:4653) - db $2f,$e6,$3e,$5e,$80,$31,$a4,$ff + db $2f, $e6, $3e, $5e, $80, $31, $a4, $ff Func_fc65b:: ; fc65b (3f:465b) - ld a,[wCurMap] + ld a, [wCurMap] cp VIRIDIAN_FOREST_EXIT - jr z,.asm_fc673 + jr z, .asm_fc673 cp VIRIDIAN_FOREST_ENTRANCE - jr z,.asm_fc67c - ld a,[wCurMap] - ld hl,Pointer_fc68e + jr z, .asm_fc67c + ld a, [wCurMap] + ld hl, Pointer_fc68e call Func_1568 - jr c,.asm_fc688 + jr c, .asm_fc688 jr .asm_fc684 + .asm_fc673 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] cp SPRITE_FACING_UP - jr z,.asm_fc688 + jr z, .asm_fc688 jr .asm_fc684 + .asm_fc67c - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] and a ; SPRITE_FACING_DOWN - jr z,.asm_fc684 + jr z, .asm_fc684 jr .asm_fc688 + .asm_fc684 - ld a,$0 + ld a, $0 jr .asm_fc68a + .asm_fc688 - ld a,$1 + ld a, $1 .asm_fc68a - ld [wd431],a + ld [wd431], a ret - + Pointer_fc68e:: ; fc68e (3f:468e) - db $33,$dd,$df,$e0,$e1,$de,$ec,$7f,$a8,$a9,$aa,$ff - + db $33, $dd, $df, $e0, $e1, $de, $ec, $7f, $a8, $a9, $aa, $ff + Func_fc69a:: ; fc69a (3f:469a) - ld a,[wCurMap] + ld a, [wCurMap] cp ROUTE_22_GATE - jr z,.asm_fc6a7 + jr z, .asm_fc6a7 cp ROUTE_2_GATE - jr z,.asm_fc6b0 + jr z, .asm_fc6b0 jr .asm_fc6bd + .asm_fc6a7 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] cp SPRITE_FACING_UP - jr z,.asm_fc6b9 + jr z, .asm_fc6b9 jr .asm_fc6bd + .asm_fc6b0 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] cp SPRITE_FACING_UP - jr z,.asm_fc6b9 + jr z, .asm_fc6b9 jr .asm_fc6bd + .asm_fc6b9 - ld a,$1 + ld a, $1 jr .asm_fc6c1 + .asm_fc6bd - ld a,$3 + ld a, $3 jr .asm_fc6c1 + .asm_fc6c1 - ld [wd431],a + ld [wd431], a ret Func_fc6c5:: ; fc6c5 (3f:46c5) push hl - ld hl,wd430 - set 2,[hl] + ld hl, wPikachuOverworldStateFlags + set 2, [hl] pop hl ret Func_fc6cd:: ; fc6cd (3f:46cd) push hl - ld hl,wd430 - res 2,[hl] + ld hl, wPikachuOverworldStateFlags + res 2, [hl] pop hl ret @@ -312,32 +336,32 @@ Func_fc6d5:: ; fc6d5 (3f:46d5) call Func_fcd25 pop bc ret c - ld bc,wSpriteStateData1 + $f0 - ld hl,$1 - add hl,bc - bit 7,[hl] - jp nz,asm_fc745 - ld a,[wFontLoaded] - bit 0,a - jp nz,asm_fc76a - call Func_154a - jp nz,asm_fc76a - ld a,[hl] + ld bc, wSpriteStateData1 + $f0 + ld hl, $1 + add hl, bc + bit 7, [hl] + jp nz, asm_fc745 + ld a, [wFontLoaded] + bit 0, a + jp nz, asm_fc76a + call CheckPikachuAsleep + jp nz, asm_fc76a + ld a, [hl] and $7f cp $a - jr c,.asm_fc704 + jr c, .asm_fc704 xor a .asm_fc704 add a - ld e,a - ld d,0 - ld hl,PointerTable_fc710 - add hl,de - ld a,[hli] - ld h,[hl] - ld l,a + ld e, a + ld d, 0 + ld hl, PointerTable_fc710 + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a jp hl - + PointerTable_fc710: ; fc710 (3f:4710) dw Func_fc793 dw Func_fc7aa @@ -350,16 +374,16 @@ PointerTable_fc710: ; fc710 (3f:4710) dw asm_fc937 dw asm_fc969 dw Func_fc726 - + Func_fc726: ; fc726 (3f:4726) ret Func_fc727: ; fc727 (3f:4727) call Func_fc4dd - jr nc,.asm_fc73b - ld a,[wSpriteStateData1 + $f1] + jr nc, .asm_fc73b + ld a, [wSpriteStateData1 + $f1] and a - jr nz,.asm_fc739 + jr nz, .asm_fc739 push bc push hl call Func_fc534 @@ -368,54 +392,57 @@ Func_fc727: ; fc727 (3f:4727) .asm_fc739 scf ret + .asm_fc73b - ld hl,wSpriteStateData1 + $f2 - ld [hl],$ff + ld hl, wSpriteStateData1 + $f2 + ld [hl], $ff dec hl - ld [hl],$0 + ld [hl], $0 xor a ret + asm_fc745: ; fc745 (3f:4745) - ld hl,$1 - add hl,bc - res 7,[hl] - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],a - call Func_154a - jr nz,.asm_fc75f - ld a,[wSpriteStateData1 + $9] + ld hl, $1 + add hl, bc + res 7, [hl] + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], a + call CheckPikachuAsleep + jr nz, .asm_fc75f + ld a, [wSpriteStateData1 + $9] xor $4 - ld hl,$9 - add hl,bc - ld [hl],a + ld hl, $9 + add hl, bc + ld [hl], a .asm_fc75f xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a + ld hl, $7 + add hl, bc + ld [hli], a + ld [hl], a call Func_fca99 ret + asm_fc76a: ; fc76a (3f:476a) xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a + ld hl, $7 + add hl, bc + ld [hli], a + ld [hl], a call Func_fca99 call Func_fc82e - jr c,.asm_fc783 + jr c, .asm_fc783 push bc callab InitializeSpriteScreenPosition pop bc .asm_fc783 - ld hl,$1 - add hl,bc - ld [hl],$1 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$0 + ld hl, $1 + add hl, bc + ld [hl], $1 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $0 call Func_fcba1 ret @@ -424,562 +451,566 @@ Func_fc793: ; fc793 (3f:4793) push bc callab InitializeSpriteScreenPosition pop bc - ld hl,$2 - add hl,bc - ld [hl],$ff + ld hl, $2 + add hl, bc + ld [hl], $ff dec hl - ld [hl],$1 + ld [hl], $1 ret Func_fc7aa: ; fc7aa (3f:47aa) call Func_fcc92 - jp c,Func_fc803 + jp c, Func_fc803 dec a - ld l,a - ld h,$0 - add hl,hl - add hl,hl - ld de,Pointer_fc7e3 - add hl,de - ld d,h - ld e,l - ld a,[de] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld de, Pointer_fc7e3 + add hl, de + ld d, h + ld e, l + ld a, [de] inc de - ld hl,$9 - add hl,bc - ld [hl],a - ld a,[de] + ld hl, $9 + add hl, bc + ld [hl], a + ld a, [de] inc de - ld hl,$5 - add hl,bc - ld [hl],a + ld hl, $5 + add hl, bc + ld [hl], a dec hl dec hl - ld a,[de] - ld [hl],a + ld a, [de] + ld [hl], a inc de - ld a,[de] - ld hl,$1 - add hl,bc - ld [hl],a + ld a, [de] + ld hl, $1 + add hl, bc + ld [hl], a cp $4 - jp z,Func_fca0a + jp z, Func_fca0a call Func_fcd17 - jp c,Func_fc9df + jp c, Func_fc9df jp Func_fc9b4 Pointer_fc7e3: ; fc7e3 (3f:47e3) - db $0,$0 - db $1,$3 - db $4,$0 - db $ff,$3 - db $8,$ff - db $0,$3 - db $c,$1 - db $0,$3 - db $0,$0 - db $1,$4 - db $4,$0 - db $ff,$4 - db $8,$ff - db $0,$4 - db $c,$1 - db $0,$4 - + db $0, $0 + db $1, $3 + db $4, $0 + db $ff, $3 + db $8, $ff + db $0, $3 + db $c, $1 + db $0, $3 + db $0, $0 + db $1, $4 + db $4, $0 + db $ff, $4 + db $8, $ff + db $0, $4 + db $c, $1 + db $0, $4 + Func_fc803: ; fc803 (3f:4803) call Func_fcae2 ret c - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] - jr nz,.asm_fc823 + jr nz, .asm_fc823 push hl call Func_fccee pop hl cp $5 - jr nc,Func_fc842 - ld [hl],$20 + jr nc, Func_fc842 + ld [hl], $20 call Random and $c - ld hl,$9 - add hl,bc - ld [hl],a + ld hl, $9 + add hl, bc + ld [hl], a .asm_fc823 xor a - ld hl,$7 - add hl,bc - ld [hli],a - ld [hl],a + ld hl, $7 + add hl, bc + ld [hli], a + ld [hl], a call Func_fca99 ret Func_fc82e: ; fc82e (3f:482e) - ld a,[wWalkCounter] + ld a, [wWalkCounter] and a ret z scf ret Func_fc835: ; fc835 (3f:4835) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$10 - ld hl,$1 - add hl,bc - ld [hl],$1 - ret - + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $10 + ld hl, $1 + add hl, bc + ld [hl], $1 + ret + Func_fc842: ; fc842 (3f:4842) - ld hl,$0 + ld hl, $0 push af call Random - ld a,[hRandomAdd] + ld a, [hRandomAdd] and %11 - ld e,a - ld d,$0 - ld hl,PointerTable_fc85a - add hl,de - add hl,de - ld a,[hli] - ld h,[hl] - ld l,a + ld e, a + ld d, $0 + ld hl, PointerTable_fc85a + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a pop af jp hl - + PointerTable_fc85a: ; fc85a (3f:485a) dw Func_fc862 dw Func_fc8f8 dw Func_fc92b dw Func_fc95d - + Func_fc862: ; fc862 (3f:4862) dec a add a add a and $c - ld hl,$9 - add hl,bc - ld [hl],a - ld hl,$1 - add hl,bc - ld [hl],$6 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $1 + add hl, bc + ld [hl], $6 xor a - ld [wd432],a - ld [wd433],a - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$11 + ld [wd432], a + ld [wd433], a + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $11 asm_fc87f: ; fc87f (3f:487f) - ld a,[wd432] - ld e,a - ld a,[wd433] - ld d,a + ld a, [wd432] + ld e, a + ld a, [wd433] + ld d, a call Func_fc82e - jr c,Func_fc8c7 + jr c, Func_fc8c7 call Func_fc6c5 - ld hl,$4 - add hl,bc - ld a,[hl] + ld hl, $4 + add hl, bc + ld a, [hl] sub e - ld e,a + ld e, a inc hl inc hl - ld a,[hl] + ld a, [hl] sub d - ld d,a - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld a,[hl] + ld d, a + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld a, [hl] dec a add a add $d6 - ld l,a - ld a,$48 + ld l, a + ld a, $48 adc $0 - ld h,a - ld a,[hli] - ld [wd432],a + ld h, a + ld a, [hli] + ld [wd432], a add e - ld e,a - ld a,[hl] - ld [wd433],a + ld e, a + ld a, [hl] + ld [wd433], a add d - ld d,a - ld hl,$4 - add hl,bc - ld [hl],e + ld d, a + ld hl, $4 + add hl, bc + ld [hl], e inc hl inc hl - ld [hl],d - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld [hl], d + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz jp Func_fc835 - + Func_fc8c7: ; fc8c7 (3f:48c7) - ld hl,$4 - add hl,bc - ld a,[hl] + ld hl, $4 + add hl, bc + ld a, [hl] sub e - ld [hl],a + ld [hl], a inc hl inc hl - ld a,[hl] + ld a, [hl] sub d - ld [hl],a + ld [hl], a jp Func_fc835 Pointer_fc8d6: ; fc8d6 (3f:48d6) - db $0,$0,$fe,$1,$fc - db $2,$fe,$3,$0,$4 - db $fe,$3,$fc,$2,$fe - db $1,$0,$0,$fe,$ff - db $fc,$fe,$fe,$fd,$0 - db $fc,$fe,$fd,$fc,$fe - db $fe,$ff,$00,$00 - + db $0, $0, $fe, $1, $fc + db $2, $fe, $3, $0, $4 + db $fe, $3, $fc, $2, $fe + db $1, $0, $0, $fe, $ff + db $fc, $fe, $fe, $fd, $0 + db $fc, $fe, $fd, $fc, $fe + db $fe, $ff, $00, $00 + Func_fc8f8: ; fc8f8 (3f:48f8) - ld hl,$1 - add hl,bc - ld [hl],$7 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$30 + ld hl, $1 + add hl, bc + ld [hl], $7 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $30 asm_fc904: ; fc904 (3f:4904) call Func_fc82e - jp c,Func_fc835 + jp c, Func_fc835 call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] + ld hl, $7 + add hl, bc + ld a, [hl] inc a cp $8 - ld [hl],a - jr nz,.asm_fc91f + ld [hl], a + jr nz, .asm_fc91f xor a - ld [hli],a - ld a,[hl] + ld [hli], a + ld a, [hl] inc a and %11 - ld [hl],a + ld [hl], a .asm_fc91f call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz jp Func_fc835 - + Func_fc92b: ; fc92b (3f:492b) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$20 - ld hl,$1 - add hl,bc - ld [hl],$8 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $20 + ld hl, $1 + add hl, bc + ld [hl], $8 asm_fc937: ; fc937 (3f:4937) call Func_fc82e - jp c,Func_fc835 + jp c, Func_fc835 call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] + ld hl, $7 + add hl, bc + ld a, [hl] inc a cp $8 - ld [hl],a - jr nz,.asm_fc951 + ld [hl], a + jr nz, .asm_fc951 xor a - ld [hli],a - ld a,[hl] + ld [hli], a + ld a, [hl] xor $1 - ld [hl],a + ld [hl], a .asm_fc951 call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz jp Func_fc835 - + Func_fc95d: ; fc95d (3f:495d) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$20 - ld hl,$1 - add hl,bc - ld [hl],$9 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $20 + ld hl, $1 + add hl, bc + ld [hl], $9 asm_fc969: ; fc969 (3f:4969) call Func_fc82e - jp c,Func_fc835 + jp c, Func_fc835 call Func_fc6c5 - ld hl,$7 - add hl,bc - ld a,[hl] + ld hl, $7 + add hl, bc + ld a, [hl] inc a cp $8 - ld [hl],a - jr nz,.asm_fc988 + ld [hl], a + jr nz, .asm_fc988 xor a - ld [hl],a - ld hl,$9 - add hl,bc - ld a,[hl] + ld [hl], a + ld hl, $9 + add hl, bc + ld a, [hl] call Func_fc994 - ld [hl],a + ld [hl], a .asm_fc988 call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz jp Func_fc835 - + Func_fc994: ; fc994 (3f:4994) push hl - ld hl,Pointer_fc9ac - ld d,a + ld hl, Pointer_fc9ac + ld d, a .loop - ld a,[hli] + ld a, [hli] cp d - jr nz,.loop - ld a,[hl] + jr nz, .loop + ld a, [hl] pop hl ret - + Func_fc9a0: ; fc9a0 (3f:49a0) push hl - ld hl,Pointer_fc9ac_End - ld d,a + ld hl, Pointer_fc9ac_End + ld d, a .loop - ld a,[hld] + ld a, [hld] cp d - jr nz,.loop - ld a,[hl] + jr nz, .loop + ld a, [hl] pop hl ret - + Pointer_fc9ac: ; fc9ac (3f:49ac) - db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT - db SPRITE_FACING_DOWN,SPRITE_FACING_LEFT,SPRITE_FACING_UP,SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT Pointer_fc9ac_End: Func_fc9b4: ; fc9b4 (3f:49b4) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$8 - ld hl,$1 - add hl,bc - ld [hl],$3 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $8 + ld hl, $1 + add hl, bc + ld [hl], $3 call Func_fca38 asm_fc9c3: ; fc9c3 (3f:49c3) call Func_fca4b call Func_fca7e call Func_fca99 - ld hl,$100 - add hl,bc + ld hl, $100 + add hl, bc dec [hl] ret nz call Func_fca75 call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 + ld hl, $1 + add hl, bc + ld [hl], $1 ret - + Func_fc9df: ; fc9df (3f:49df) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$4 - ld hl,$1 - add hl,bc - ld [hl],$5 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $4 + ld hl, $1 + add hl, bc + ld [hl], $5 call Func_fca38 asm_fc9ee: ; fc9ee (3f:49ee) call asm_fca59 call Func_fca7e call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz call Func_fca75 call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 + ld hl, $1 + add hl, bc + ld [hl], $1 ret - + Func_fca0a: ; fca0a (3f:4a0a) - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc - ld [hl],$8 - ld hl,$1 - add hl,bc - ld [hl],$4 + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc + ld [hl], $8 + ld hl, $1 + add hl, bc + ld [hl], $4 call Func_fca38 call Func_fca38 asm_fca1c: ; fca1c (3f:4a1c) call asm_fca59 call Func_fca7e call Func_fca99 - ld hl,wSpriteStateData2 - wSpriteStateData1 - add hl,bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + add hl, bc dec [hl] ret nz call Func_fca75 call Func_fccb2 - ld hl,$1 - add hl,bc - ld [hl],$1 + ld hl, $1 + add hl, bc + ld [hl], $1 ret - + Func_fca38: ; fca38 (3f:4a38) - ld hl,$3 - add hl,bc - ld e,[hl] + ld hl, $3 + add hl, bc + ld e, [hl] inc hl inc hl - ld d,[hl] - ld hl,$104 - add hl,bc - ld a,[hl] + ld d, [hl] + ld hl, $104 + add hl, bc + ld a, [hl] add e - ld [hli],a - ld a,[hl] + ld [hli], a + ld a, [hl] add d - ld [hl],a + ld [hl], a ret - + Func_fca4b: ; fca4b (3f:4a4b) - ld a,[wWalkBikeSurfState] + ld a, [wWalkBikeSurfState] cp $1 - jr nz,Func_fca68 - ld a,[wd736] - bit 6,a - jr nz,Func_fca68 + jr nz, Func_fca68 + ld a, [wd736] + bit 6, a + jr nz, Func_fca68 asm_fca59: ; fca59 (3f:4a59) - ld hl,$3 - add hl,bc - ld a,[hli] + ld hl, $3 + add hl, bc + ld a, [hli] add a add a add [hl] - ld [hli],a - ld a,[hli] + ld [hli], a + ld a, [hli] add a add a add [hl] - ld [hl],a + ld [hl], a ret - + Func_fca68: ; fca68 (3f:4a68) - ld hl,$3 - add hl,bc - ld a,[hli] + ld hl, $3 + add hl, bc + ld a, [hli] add a add [hl] - ld [hli],a - ld a,[hli] + ld [hli], a + ld a, [hli] add a add [hl] - ld [hli],a + ld [hli], a ret - + Func_fca75: ; fca75 (3f:4a75) - ld hl,$3 - add hl,bc + ld hl, $3 + add hl, bc xor a - ld [hli],a + ld [hli], a inc hl - ld [hl],a + ld [hl], a ret - + Func_fca7e: ; fca7e (3f:4a7e) call Func_fcdad - ld d,$2 - jr nc,.asm_fca87 - ld d,$5 + ld d, $2 + jr nc, .asm_fca87 + ld d, $5 .asm_fca87 - ld hl,$7 - add hl,bc - ld a,[hl] + ld hl, $7 + add hl, bc + ld a, [hl] inc a cp d - jr nz,.asm_fca91 + jr nz, .asm_fca91 xor a .asm_fca91 - ld [hli],a + ld [hli], a ret nz - ld a,[hl] + ld a, [hl] inc a and $3 - ld [hl],a + ld [hl], a ret - + Func_fca99: ; fca99 (3f:4a99) - ld a,[wd430] - bit 3,a - jr nz,.asm_fcad1 - ld hl,$10e - add hl,bc - ld a,[hl] + ld a, [wPikachuOverworldStateFlags] + bit 3, a + jr nz, .asm_fcad1 + ld hl, $10e + add hl, bc + ld a, [hl] dec a swap a - ld d,a - ld a,[wd736] - bit 7,a - jr nz,.asm_fcad8 - ld hl,$9 - add hl,bc - ld a,[hl] + ld d, a + ld a, [wd736] + bit 7, a + jr nz, .asm_fcad8 + ld hl, $9 + add hl, bc + ld a, [hl] or d - ld d,a - ld a,[wFontLoaded] - bit 0,a - jr z,.asm_fcac4 + ld d, a + ld a, [wFontLoaded] + bit 0, a + jr z, .asm_fcac4 call Func_fcae2 ret c jr .asm_fcacb + .asm_fcac4 - ld hl,$8 - add hl,bc - ld a,d + ld hl, $8 + add hl, bc + ld a, d or [hl] - ld d,a + ld d, a .asm_fcacb - ld hl,$2 - add hl,bc - ld [hl],d + ld hl, $2 + add hl, bc + ld [hl], d ret + .asm_fcad1 - ld hl,$2 - add hl,bc - ld [hl],$ff + ld hl, $2 + add hl, bc + ld [hl], $ff ret + .asm_fcad8 - ld a,[wSpriteStateData1 + $2] + ld a, [wSpriteStateData1 + $2] and $f or d - ld [wSpriteStateData1 + $f2],a + ld [wSpriteStateData1 + $f2], a ret - + Func_fcae2: ; fcae2 (3f:4ae2) - ld hl,$104 - add hl,bc - ld a,[wYCoord] + ld hl, $104 + add hl, bc + ld a, [wYCoord] add $4 cp [hl] - jr nz,.asm_fcaff + jr nz, .asm_fcaff inc hl - ld a,[wXCoord] + ld a, [wXCoord] add $4 cp [hl] - jr nz,.asm_fcaff - ld hl,$2 - add hl,bc - ld [hl],$ff + jr nz, .asm_fcaff + ld hl, $2 + add hl, bc + ld [hl], $ff scf ret + .asm_fcaff and a ret @@ -988,49 +1019,53 @@ Func_fcb01: ; fcb01 (3f:4b01) push bc push de push hl - ld bc,wSpriteStateData1 + $f0 - ld a,[wXCoord] + ld bc, wSpriteStateData1 + $f0 + ld a, [wXCoord] add $4 - ld d,a - ld a,[wYCoord] + ld d, a + ld a, [wYCoord] add $4 - ld e,a - ld hl,$104 - add hl,bc - ld a,[hl] + ld e, a + ld hl, $104 + add hl, bc + ld a, [hl] sub e and a - jr z,.asm_fcb30 + jr z, .asm_fcb30 cp $ff - jr z,.asm_fcb26 + jr z, .asm_fcb26 cp $1 - jr z,.asm_fcb26 + jr z, .asm_fcb26 jr .asm_fcb48 + .asm_fcb26 - ld hl,$105 - add hl,bc - ld a,[hl] + ld hl, $105 + add hl, bc + ld a, [hl] sub d - jr z,.asm_fcb43 + jr z, .asm_fcb43 jr .asm_fcb48 + .asm_fcb30 - ld hl,$105 - add hl,bc - ld a,[hl] + ld hl, $105 + add hl, bc + ld a, [hl] sub d cp $ff - jr z,.asm_fcb43 + jr z, .asm_fcb43 cp $1 - jr z,.asm_fcb43 + jr z, .asm_fcb43 and a - jr z,.asm_fcb43 + jr z, .asm_fcb43 jr .asm_fcb48 + .asm_fcb43 pop hl pop de pop bc scf ret + .asm_fcb48 pop hl pop de @@ -1038,258 +1073,281 @@ Func_fcb01: ; fcb01 (3f:4b01) xor a ret -Func_fcb4d: ; fcb4d (3f:4b4d) - call Func_fcb52 - ld e,a +GetPikachuFacingDirectionAndReturnToE: ; fcb4d (3f:4b4d) + call GetPikachuFacingDirection + ld e, a ret - -Func_fcb52: ; fcb52 (3f:4b52) - ld bc,wSpriteStateData1 + $f0 - ld a,[wXCoord] + +GetPikachuFacingDirection: ; fcb52 (3f:4b52) + ld bc, wSpriteStateData1 + $f0 + ld a, [wXCoord] add $4 - ld d,a - ld a,[wYCoord] + ld d, a + ld a, [wYCoord] add $4 - ld e,a - ld hl,$104 - add hl,bc - ld a,[hl] + ld e, a + ld hl, wSpriteStateData2 - wSpriteStateData1 + 4 + add hl, bc + ld a, [hl] cp e - jr z,Func_fcb71 - jr nc,.asm_fcb6e - ld a,$4 + jr z, .asm_fcb71 + jr nc, .asm_fcb6e + ld a, SPRITE_FACING_UP ret + .asm_fcb6e - ld a,$0 + ld a, SPRITE_FACING_DOWN ret - -Func_fcb71: ; fcb71 (3f:4b71) - ld hl,$105 - add hl,bc - ld a,[hl] + +.asm_fcb71 + ld hl, wSpriteStateData2 - wSpriteStateData1 + 5 + add hl, bc + ld a, [hl] cp d - jr z,.asm_fcb81 - jr nc,.asm_fcb7e - ld a,$8 + jr z, .asm_fcb81 + jr nc, .asm_fcb7e + ld a, SPRITE_FACING_LEFT ret + .asm_fcb7e - ld a,$c + ld a, SPRITE_FACING_RIGHT ret + .asm_fcb81 - ld a,$ff + ld a, $ff ; standing ret -Func_fcb84: ; fcb84 (3f:4b84) +ClearPikachuFollowCommandBuffer: ; fcb84 (3f:4b84) push bc - ld hl,wd437 - ld [hl],$ff + ld hl, wPikachuFollowCommandBufferSize + ld [hl], $ff inc hl - ld bc,$10 + ld bc, $10 xor a call FillMemory pop bc ret - -Func_fcb94: ; fcb94 (3f:4b94) - ld hl,wd437 + +AppendPikachuFollowCommandToBuffer: ; fcb94 (3f:4b94) + ld hl, wPikachuFollowCommandBufferSize inc [hl] - ld e,[hl] - ld d,0 - ld hl,wd438 - add hl,de - ld [hl],a + ld e, [hl] + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld [hl], a ret - + Func_fcba1: ; fcba1 (3f:4ba1) - call Func_fcb84 - call Func_fcbac + call ClearPikachuFollowCommandBuffer + call GetPikachuFollowCommand ret c - call Func_fcb94 - ret - -Func_fcbac: ; fcbac (3f:4bac) - ld bc,wSpriteStateData1 + $f0 - ld hl,$104 - add hl,bc - ld a,[wYCoord] + call AppendPikachuFollowCommandToBuffer + ret + +GetPikachuFollowCommand: ; fcbac (3f:4bac) + ld bc, wSpriteStateData1 + $f0 + ld hl, wSpriteStateData2 - wSpriteStateData1 + 4 + add hl, bc + ld a, [wYCoord] add $4 sub [hl] - jr z,.asm_fcbd7 - jr c,.asm_fcbca - call Func_fcc01 - jr c,.asm_fcbc6 - ld a,$5 + jr z, .checkXCoord + jr c, .pikaAbovePlayer + call CheckAbsoluteValueLessThan2 + jr c, .return1 + ld a, $5 and a ret -.asm_fcbc6 - ld a,$1 + +.return1 + ld a, $1 and a ret -.asm_fcbca - call Func_fcc01 - jr c,.asm_fcbd3 - ld a,$6 + +.pikaAbovePlayer + call CheckAbsoluteValueLessThan2 + jr c, .return2 + ld a, $6 and a ret -.asm_fcbd3 - ld a,$2 + +.return2 + ld a, $2 and a ret -.asm_fcbd7 - ld hl,$105 - add hl,bc - ld a,[wXCoord] + +.checkXCoord + ld hl, wSpriteStateData2 - wSpriteStateData1 + 5 + add hl, bc + ld a, [wXCoord] add $4 sub [hl] - jr z,.asm_fcbff - jr c,.asm_fcbf2 - call Func_fcc01 - jr c,.asm_fcbee - ld a,$8 + jr z, .pikachuOnTopOfPlayer + jr c, .pikaToLeftOfPlayer + call CheckAbsoluteValueLessThan2 + jr c, .return4 + ld a, $8 and a ret -.asm_fcbee - ld a,$4 + +.return4 + ld a, $4 and a ret -.asm_fcbf2 - call Func_fcc01 - jr c,.asm_fcbfb - ld a,$7 + +.pikaToLeftOfPlayer + call CheckAbsoluteValueLessThan2 + jr c, .return3 + ld a, $7 and a ret -.asm_fcbfb - ld a,$3 + +.return3 + ld a, $3 and a ret -.asm_fcbff + +.pikachuOnTopOfPlayer scf ret - -Func_fcc01: ; fcc01 (3f:4c01) - jr nc,.asm_fcc05 + +CheckAbsoluteValueLessThan2: ; fcc01 (3f:4c01) + jr nc, .positive cpl inc a -.asm_fcc05 +.positive cp $2 ret - + Func_fcc08:: ; fcc08 (3f:4c08) call Func_fcc23 ret nc - ld a,[wd736] - bit 6,a - jr nz,.asm_fcc1b + ld a, [wd736] + bit 6, a + jr nz, .asm_fcc1b call Func_fcc42 ret c - call Func_fcb94 + call AppendPikachuFollowCommandToBuffer ret + .asm_fcc1b call Func_fcc64 ret c - call Func_fcb94 + call AppendPikachuFollowCommandToBuffer ret - + Func_fcc23: ; fcc23 (3f:4c28) - ld a,[wd430] - bit 5,a - jr nz,.asm_fcc40 - ld a,[wd430] - bit 7,a - jr nz,.asm_fcc40 - ld a,[wd472] - bit 7,a - jr z,.asm_fcc40 - ld a,[wWalkBikeSurfState] + ld a, [wPikachuOverworldStateFlags] + bit 5, a + jr nz, .asm_fcc40 + ld a, [wPikachuOverworldStateFlags] + bit 7, a + jr nz, .asm_fcc40 + ld a, [wd472] + bit 7, a + jr z, .asm_fcc40 + ld a, [wWalkBikeSurfState] and a - jr nz,.asm_fcc40 + jr nz, .asm_fcc40 scf ret + .asm_fcc40 and a ret - + Func_fcc42: ; fcc42 (3f:4c42) xor a - ld a,[wPlayerDirection] - bit 3,a - jr nz,.asm_fcc58 - bit 2,a - jr nz,.asm_fcc5b - bit 1,a - jr nz,.asm_fcc5e - bit 0,a - jr nz,.asm_fcc61 + ld a, [wPlayerDirection] + bit 3, a + jr nz, .asm_fcc58 + bit 2, a + jr nz, .asm_fcc5b + bit 1, a + jr nz, .asm_fcc5e + bit 0, a + jr nz, .asm_fcc61 scf ret + .asm_fcc58 - ld a,$2 + ld a, $2 ret + .asm_fcc5b - ld a,$1 + ld a, $1 ret + .asm_fcc5e - ld a,$3 + ld a, $3 ret + .asm_fcc61 - ld a,$4 + ld a, $4 ret - + Func_fcc64: ; fcc64 (3f:4c64) - ld hl,wd430 - bit 6,[hl] - jr z,.asm_fcc6e - res 6,[hl] + ld hl, wPikachuOverworldStateFlags + bit 6, [hl] + jr z, .asm_fcc6e + res 6, [hl] ret + .asm_fcc6e - set 6,[hl] + set 6, [hl] xor a - ld a,[wPlayerDirection] - bit 3,a - jr nz,.asm_fcc86 - bit 2,a - jr nz,.asm_fcc89 - bit 1,a - jr nz,.asm_fcc8c - bit 0,a - jr nz,.asm_fcc8f + ld a, [wPlayerDirection] + bit 3, a + jr nz, .asm_fcc86 + bit 2, a + jr nz, .asm_fcc89 + bit 1, a + jr nz, .asm_fcc8c + bit 0, a + jr nz, .asm_fcc8f scf ret + .asm_fcc86 - ld a,$6 + ld a, $6 ret + .asm_fcc89 - ld a,$5 + ld a, $5 ret + .asm_fcc8c - ld a,$7 + ld a, $7 ret + .asm_fcc8f - ld a,$8 + ld a, $8 ret Func_fcc92: ; fcc92 (3f:4c92) - ld hl,wd437 - ld a,[hl] + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] cp $ff - jr z,.asm_fccb0 + jr z, .asm_fccb0 and a - jr z,.asm_fccb0 + jr z, .asm_fccb0 dec [hl] - ld e,a - ld d,0 - ld hl,wd438 - add hl,de + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de inc e - ld a,$ff + ld a, $ff .asm_fcca8 - ld d,[hl] - ldd [hl],a - ld a,d + ld d, [hl] + ldd [hl], a + ld a, d dec e - jr nz,.asm_fcca8 + jr nz, .asm_fcca8 and a ret + .asm_fccb0 scf ret @@ -1297,384 +1355,399 @@ Func_fcc92: ; fcc92 (3f:4c92) Func_fccb2:: ; fccb2 (3f:4cb2) call Func_fcd01 and a - jr z,.asm_fccbf + jr z, .asm_fccbf dec a and $3 add a add a jr .asm_fccea + .asm_fccbf - ld a,[wYCoord] + ld a, [wYCoord] add $4 - ld d,a - ld a,[wXCoord] + ld d, a + ld a, [wXCoord] add $4 - ld e,a - ld a,[wSpriteStateData2 + $f4] + ld e, a + ld a, [wSpriteStateData2 + $f4] cp d - jr z,.asm_fccd9 - ld a,SPRITE_FACING_DOWN - jr c,.asm_fccea - ld a,SPRITE_FACING_UP + jr z, .asm_fccd9 + ld a, SPRITE_FACING_DOWN + jr c, .asm_fccea + ld a, SPRITE_FACING_UP jr .asm_fccea + .asm_fccd9 - ld a,[wSpriteStateData2 + $f5] + ld a, [wSpriteStateData2 + $f5] cp e - jr z,.asm_fcce7 - ld a,SPRITE_FACING_RIGHT - jr c,.asm_fccea - ld a,SPRITE_FACING_LEFT + jr z, .asm_fcce7 + ld a, SPRITE_FACING_RIGHT + jr c, .asm_fccea + ld a, SPRITE_FACING_LEFT jr .asm_fccea + .asm_fcce7 - ld a,[wSpriteStateData1 + $9] + ld a, [wSpriteStateData1 + $9] .asm_fccea - ld [wSpriteStateData1 + $f9],a + ld [wSpriteStateData1 + $f9], a ret - + Func_fccee: ; fccee (3f:4cee) - ld hl,wd437 - ld a,[hl] + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] cp $ff - jr z,.asm_fccff - ld e,a - ld d,0 - ld hl,wd438 - add hl,de - ld a,[hl] + jr z, .asm_fccff + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld a, [hl] ret + .asm_fccff xor a ret - + Func_fcd01: ; fcd01 (3f:4d01) - ld hl,wd437 - ld a,[hl] + ld hl, wPikachuFollowCommandBufferSize + ld a, [hl] cp $ff - jr z,.asm_fcd15 + jr z, .asm_fcd15 and a - jr z,.asm_fcd15 - ld e,a - ld d,0 - ld hl,wd438 - add hl,de - ld a,[hl] + jr z, .asm_fcd15 + ld e, a + ld d, 0 + ld hl, wPikachuFollowCommandBuffer + add hl, de + ld a, [hl] ret + .asm_fcd15 xor a ret - + Func_fcd17: ; fcd17 (3f:4d17) - ld a,[wd437] + ld a, [wPikachuFollowCommandBufferSize] cp $ff ret z cp $2 - jr nc,.asm_fcd23 + jr nc, .asm_fcd23 and a ret + .asm_fcd23 scf ret - + Func_fcd25: ; fcd25 (3f:4d25) - ld h,wSpriteStateData2 / $100 - ld a,[H_CURRENTSPRITEOFFSET] + ld h, wSpriteStateData2 / $100 + ld a, [H_CURRENTSPRITEOFFSET] add $4 - ld l,a - ld b,[hl] - ld a,[wYCoord] + ld l, a + ld b, [hl] + ld a, [wYCoord] cp b - jr z,.asm_fcd3a - jr nc,.asm_fcd63 + jr z, .asm_fcd3a + jr nc, .asm_fcd63 add $8 cp b - jr c,.asm_fcd63 + jr c, .asm_fcd63 .asm_fcd3a inc l - ld b,[hl] - ld a,[wXCoord] + ld b, [hl] + ld a, [wXCoord] cp b - jr z,.asm_fcd49 - jr nc,.asm_fcd63 + jr z, .asm_fcd49 + jr nc, .asm_fcd63 add $9 cp b - jr c,.asm_fcd63 + jr c, .asm_fcd63 .asm_fcd49 call Func_fcd83 - ld d,$60 - ld a,[hli] - ld e,a + ld d, $60 + ld a, [hli] + ld e, a cp d - jr nc,.asm_fcd63 - ld a,[hld] + jr nc, .asm_fcd63 + ld a, [hld] cp d - jr nc,.asm_fcd63 - ld bc,-20 - add hl,bc - ld a,[hli] + jr nc, .asm_fcd63 + ld bc, -20 + add hl, bc + ld a, [hli] cp d - jr nc,.asm_fcd63 - ld a,[hl] + jr nc, .asm_fcd63 + ld a, [hl] cp d - jr c,.asm_fcd6f + jr c, .asm_fcd6f .asm_fcd63 - ld h,wSpriteStateData1 / $100 - ld a,[H_CURRENTSPRITEOFFSET] + ld h, wSpriteStateData1 / $100 + ld a, [H_CURRENTSPRITEOFFSET] add $2 - ld l,a - ld [hl],$ff + ld l, a + ld [hl], $ff scf jr .asm_fcd82 + .asm_fcd6f - ld h,wSpriteStateData2 / $100 - ld a,[H_CURRENTSPRITEOFFSET] + ld h, wSpriteStateData2 / $100 + ld a, [H_CURRENTSPRITEOFFSET] add $7 - ld l,a - ld a,[wGrassTile] + ld l, a + ld a, [wGrassTile] cp e - ld a,$0 - jr nz,.asm_fcd80 - ld a,$80 + ld a, $0 + jr nz, .asm_fcd80 + ld a, $80 .asm_fcd80 - ld [hl],a + ld [hl], a and a .asm_fcd82 ret - + Func_fcd83: ; fcd83 (3f:4d83) - ld h,wSpriteStateData1 / $100 - ld a,[H_CURRENTSPRITEOFFSET] + ld h, wSpriteStateData1 / $100 + ld a, [H_CURRENTSPRITEOFFSET] add $4 - ld l,a - ld a,[hli] + ld l, a + ld a, [hli] add $4 and $f0 srl a - ld c,a - ld b,$0 + ld c, a + ld b, $0 inc l - ld a,[hl] + ld a, [hl] add $2 srl a srl a srl a add SCREEN_WIDTH - ld d,0 - ld e,a - ld hl,wTileMap + ld d, 0 + ld e, a + ld hl, wTileMap rept 5 - add hl,bc + add hl, bc endr - add hl,de + add hl, de ret - + Func_fcdad: ; fcdad (3f:4dad) push bc push af - ld a,[wPikachuHappiness] + ld a, [wPikachuHappiness] cp $50 pop bc - ld a,b + ld a, b pop bc ret IsStarterPikachuInOurParty:: ; fcdb8 (3f:4db8) - ld hl,wPartySpecies - ld de,wPartyMon1OTID - ld bc,wPartyMonOT + ld hl, wPartySpecies + ld de, wPartyMon1OTID + ld bc, wPartyMonOT push hl .loop pop hl - ld a,[hli] + ld a, [hli] push hl inc a - jr z,.noPlayerPikachu + jr z, .noPlayerPikachu cp PIKACHU + 1 - jr nz,.curMonNotPlayerPikachu - ld h,d - ld l,e - ld a,[wPlayerID] + jr nz, .curMonNotPlayerPikachu + ld h, d + ld l, e + ld a, [wPlayerID] cp [hl] - jr nz,.curMonNotPlayerPikachu + jr nz, .curMonNotPlayerPikachu inc hl - ld a,[wPlayerID+1] + ld a, [wPlayerID+1] cp [hl] - jr nz,.curMonNotPlayerPikachu + jr nz, .curMonNotPlayerPikachu push de push bc - ld hl,wPlayerName - ld d,$6 ; possible player length - 1 + ld hl, wPlayerName + ld d, $6 ; possible player length - 1 .nameCompareLoop dec d - jr z,.sameOT - ld a,[bc] + jr z, .sameOT + ld a, [bc] inc bc cp [hl] inc hl - jr z,.nameCompareLoop + jr z, .nameCompareLoop pop bc pop de .curMonNotPlayerPikachu - ld hl,wPartyMon2 - wPartyMon1 - add hl,de - ld d,h - ld e,l - ld hl,NAME_LENGTH - add hl,bc - ld b,h - ld c,l + ld hl, wPartyMon2 - wPartyMon1 + add hl, de + ld d, h + ld e, l + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l jr .loop + .sameOT pop bc pop de - ld h,d - ld l,e - ld bc,-NAME_LENGTH - add hl,bc - ld a,[hli] + ld h, d + ld l, e + ld bc, -NAME_LENGTH + add hl, bc + ld a, [hli] or [hl] - jr z,.noPlayerPikachu ; XXX how is this determined? + jr z, .noPlayerPikachu ; XXX how is this determined? pop hl scf ret + .noPlayerPikachu pop hl and a ret IsThisPartymonStarterPikachu_Box:: ; fce0d (3f:4e0d) - ld hl,wBoxMon1 - ld bc,wBoxMon2 - wBoxMon1 - ld de,wBoxMonOT + ld hl, wBoxMon1 + ld bc, wBoxMon2 - wBoxMon1 + ld de, wBoxMonOT jr asm_fce21 IsThisPartymonStarterPikachu_Party:: ; fce18 (3f:4e18) IsThisPartymonStarterPikachu:: - ld hl,wPartyMon1 - ld bc,wPartyMon2 - wPartyMon1 - ld de,wPartyMonOT + ld hl, wPartyMon1 + ld bc, wPartyMon2 - wPartyMon1 + ld de, wPartyMonOT asm_fce21: ; fce21 (3f:4e21) - ld a,[wWhichPokemon] + ld a, [wWhichPokemon] call AddNTimes - ld a,[hl] + ld a, [hl] cp PIKACHU - jr nz,.notPlayerPikachu - ld bc,wPartyMon1OTID - wPartyMon1 - add hl,bc - ld a,[wPlayerID] + jr nz, .notPlayerPikachu + ld bc, wPartyMon1OTID - wPartyMon1 + add hl, bc + ld a, [wPlayerID] cp [hl] - jr nz,.notPlayerPikachu + jr nz, .notPlayerPikachu inc hl - ld a,[wPlayerID+1] + ld a, [wPlayerID+1] cp [hl] - jr nz,.notPlayerPikachu - ld h,d - ld l,e - ld a,[wWhichPokemon] - ld bc,NAME_LENGTH + jr nz, .notPlayerPikachu + ld h, d + ld l, e + ld a, [wWhichPokemon] + ld bc, NAME_LENGTH call AddNTimes - ld de,wPlayerName - ld b,$6 + ld de, wPlayerName + ld b, $6 .loop dec b - jr z,.isPlayerPikachu - ld a,[de] + jr z, .isPlayerPikachu + ld a, [de] inc de cp [hl] inc hl - jr z,.loop + jr z, .loop .notPlayerPikachu and a ret + .isPlayerPikachu scf ret - + Func_fce5a:: ; fce5a (3f:4e5a) push de call IsStarterPikachuInOurParty pop de ret nc - ld a,d + ld a, d cp $80 - ld a,[wPikachuMood] - jr c,.asm_fce6c + ld a, [wPikachuMood] + jr c, .asm_fce6c cp d - jr c,.asm_fce6e + jr c, .asm_fce6e ret + .asm_fce6c cp d ret c .asm_fce6e - ld a,d - ld [wPikachuMood],a + ld a, d + ld [wPikachuMood], a ret Func_fce73:: ; fce73 (3f:4e73) ; function to test if a pokemon is alive? xor a - ld [wWhichPokemon],a - ld hl,wPartyCount + ld [wWhichPokemon], a + ld hl, wPartyCount .loop inc hl - ld a,[hl] + ld a, [hl] cp $ff - jr z,.asm_fcea9 + jr z, .asm_fcea9 push hl call IsThisPartymonStarterPikachu_Party pop hl - jr nc,.asm_fce9e - ld a,[wWhichPokemon] - ld hl,wPartyMon1HP - ld bc,wPartyMon2 - wPartyMon1 + jr nc, .asm_fce9e + ld a, [wWhichPokemon] + ld hl, wPartyMon1HP + ld bc, wPartyMon2 - wPartyMon1 call AddNTimes - ld a,[hli] + ld a, [hli] or [hl] - ld d,a + ld d, a inc hl inc hl - ld a,[hl] + ld a, [hl] and a - jr nz,.asm_fcea7 + jr nz, .asm_fcea7 jr .asm_fcea9 + .asm_fce9e - ld a,[wWhichPokemon] + ld a, [wWhichPokemon] inc a - ld [wWhichPokemon],a + ld [wWhichPokemon], a jr .loop + .asm_fcea7 scf ret + .asm_fcea9 and a ret -Func_fceab:: ; fceab (3f:4eab) - ld hl,wPartySpecies - ld de,wPartyMon1Moves - ld bc,wPartyMonOT +IsSurfingPikachuInThePlayersParty:: ; fceab (3f:4eab) + ld hl, wPartySpecies + ld de, wPartyMon1Moves + ld bc, wPartyMonOT push hl .loop pop hl - ld a,[hli] + ld a, [hli] push hl inc a - jr z,.noSurfingPlayerPikachu + jr z, .noSurfingPlayerPikachu cp PIKACHU+1 - jr nz,.curMonNotSurfingPlayerPikachu - ld h,d - ld l,e + jr nz, .curMonNotSurfingPlayerPikachu + ld h, d + ld l, e push hl push bc - ld b,NUM_MOVES + ld b, NUM_MOVES .moveSearchLoop - ld a,[hli] + ld a, [hli] cp SURF - jr z,.foundSurfingPikachu + jr z, .foundSurfingPikachu dec b - jr nz,.moveSearchLoop + jr nz, .moveSearchLoop pop bc pop hl jr .curMonNotSurfingPlayerPikachu + .foundSurfingPikachu pop bc pop hl @@ -1682,635 +1755,54 @@ Func_fceab:: ; fceab (3f:4eab) inc hl inc hl inc hl - ld a,[wPlayerID] + ld a, [wPlayerID] cp [hl] - jr nz,.curMonNotSurfingPlayerPikachu + jr nz, .curMonNotSurfingPlayerPikachu inc hl - ld a,[wPlayerID+1] + ld a, [wPlayerID+1] cp [hl] - jr nz,.curMonNotSurfingPlayerPikachu + jr nz, .curMonNotSurfingPlayerPikachu push de push bc - ld hl,wPlayerName - ld d,$6 + ld hl, wPlayerName + ld d, $6 .nameCompareLoop dec d - jr z,.foundSurfingPlayerPikachu - ld a,[bc] + jr z, .foundSurfingPlayerPikachu + ld a, [bc] inc bc cp [hl] inc hl - jr z,.nameCompareLoop + jr z, .nameCompareLoop pop bc pop de .curMonNotSurfingPlayerPikachu - ld hl,wPartyMon2 - wPartyMon1 - add hl,de - ld d,h - ld e,l - ld hl,NAME_LENGTH - add hl,bc - ld b,h - ld c,l + ld hl, wPartyMon2 - wPartyMon1 + add hl, de + ld d, h + ld e, l + ld hl, NAME_LENGTH + add hl, bc + ld b, h + ld c, l jr .loop + .foundSurfingPlayerPikachu pop bc pop de pop hl scf ret + .noSurfingPlayerPikachu pop hl and a ret -IsPlayerTalkingToPikachu:: ; fcf0c (3f:4f0c) - ld a, [wd436] - and a - ret z - ld a, [hSpriteIndexOrTextID] - cp $f - ret nz - call InitializePikachuTextID - xor a - ld [hSpriteIndexOrTextID], a - ld [wd436], a - ret - -InitializePikachuTextID: ; fcf20 (3f:4f20) - ld a, $d4 ; display - ld [hSpriteIndexOrTextID], a - xor a - ld [wPlayerMovingDirection], a - ld a, $1 - ld [wAutoTextBoxDrawingControl], a - call DisplayTextID - xor a - ld [wAutoTextBoxDrawingControl], a - ret +INCLUDE "engine/pikachu_pic_animation.asm" -DoStarterPikachuEmotions: ; fcf35 (3f:4f35) - ld e, a - ld d, $0 - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] -.loop - ld a, [de] - inc de - cp $ff - jr z, .done - ld c, a - ld b, $0 - ld hl, Jumptable_fcf54 - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - jr .loop -.done - ret - -Jumptable_fcf54: ; fcf54 (3f:4f54) - dw Func_fcf6a - dw Func_fcf6b - dw Func_fcf77 - dw Func_fcf8d - dw Func_fcfb0 - dw Func_fd9d0 - dw Func_fcfc7 - dw Func_fcfbe - dw Func_fcfe8 - dw Func_fcfe9 - dw Func_fcf6a - -Func_fcf6a: ; fcf6a (3f:4f6a) - ret - -Func_fcf6b: ; fcf6b (3f:4f6b) - ld a, [de] - ld l, a - inc de - ld a, [de] - ld h, a - inc de - push de - call PrintText - pop de - ret - -Func_fcf77: ; fcf77 (3f:4f77) - ld a, [de] - inc de - push de - ld e, a - nop - call Func_fcf81 - pop de - ret - -Func_fcf81: ; fcf81 (3f:4f81) - cp $ff - ret z - callab PlayPikachuSoundClip - ret - -Func_fcf8d: ; fcf8d (3f:4f8d) - ld a, [wUpdateSpritesEnabled] - push af - ld a, $ff - ld [wUpdateSpritesEnabled], a - ld a, [de] - inc de - push de - call Func_fcfa2 - pop de - pop af - ld [wUpdateSpritesEnabled], a - ret - -Func_fcfa2: ; fcfa2 (3f:4fa2) - ld [wWhichEmotionBubble], a - ld a, $f - ld [wEmotionBubbleSpriteIndex], a - predef EmotionBubble - ret - -Func_fcfb0: ; fcfb0 (3f:4fb0) - ld a, [de] - inc de - ld l, a - ld a, [de] - inc de - ld h, a - push de - ld b, $3f - call Func_fd2a1 - pop de - ret - -Func_fcfbe: ; fcfbe (3f:4fbe) - ld a, [de] - inc de - push de - ld c, a - call DelayFrames - pop de - ret - -Func_fcfc7: ; fcfc7 (3f:4fc7) - ld a, [de] - inc de - push de - ld e, a - ld d, $0 - ld hl, Jumptable_fcfda - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - call JumpToAddress - pop de - ret - -Jumptable_fcfda: - dw Func_fd8ab - dw LoadFontTilePatterns - dw Func_fd8f8 - dw WaitForTextScrollButtonPress - dw Func_fd8d4 - dw Func_fd8e1 - dw Func_fd8ee - -Func_fcfe8: ; fcfe8 (3f:4fe8) - ret - -Func_fcfe9: ; fcfe9 (3f:4fe9) - push de - call Func_fcff2 - call UpdateSprites - pop de - ret - -Func_fcff2: ; fcff2 (3f:4ff2) - ld a, [wSpriteStateData1 + $9] - xor $4 - ld [wSpriteStateData1 + $f9], a - ret - -Func_fcffb: ; fcffb (3f:4ffb) -; Inexplicably empty. - rept 5 - nop - endr - ret - -Func_fd001:: ; fd001 (3f:5001) - ld a, e - jr asm_fd00f - -Func_fd004:: ; fd004 (3f:5004) - call Func_fd05e - jr c, asm_fd00f - call Func_fd978 - call Func_fcffb -asm_fd00f: ; fd00f (3f:500f) - ld [wExpressionNumber], a - ld hl, PikachuEmotionTable - call DoStarterPikachuEmotions - ret - -PikachuEmotionTable: ; fd019 (3f:4019) - dw PikachuEmotion0_fd115 - dw PikachuEmotion1_fd141 - dw PikachuEmotion2_fd116 - dw PikachuEmotion3_fd160 - dw PikachuEmotion4_fd136 - dw PikachuEmotion5_fd14d - dw PikachuEmotion6_fd153 - dw PikachuEmotion7_fd128 - dw PikachuEmotion8_fd147 - dw PikachuEmotion9_fd166 - dw PikachuEmotion10_fd11e - dw PikachuEmotion11_fd173 - dw PikachuEmotion12_fd17a - dw PikachuEmotion13_fd180 - dw PikachuEmotion14_fd189 - dw PikachuEmotion15_fd191 - dw PikachuEmotion16_fd197 - dw PikachuEmotion17_fd19d - dw PikachuEmotion18_fd1a3 - dw PikachuEmotion19_fd1a9 - dw PikachuEmotion20_fd1b1 - dw PikachuEmotion21_fd1b9 - dw PikachuEmotion22_fd1c1 - dw PikachuEmotion23_fd1c7 - dw PikachuEmotion24_fd1cf - dw PikachuEmotion25_fd1d7 - dw PikachuEmotion26_fd1df - dw PikachuEmotion27_fd1eb - dw PikachuEmotion28_fd1f1 - dw PikachuEmotion29_fd1f7 - dw PikachuEmotion30_fd1fc - dw PikachuEmotion31_fd20a - dw PikachuEmotion32_fd213 - dw PikachuEmotion33_fd05d - -PikachuEmotion33_fd05d: ; fd05d (3f:505d) - db $ff - -Func_fd05e: ; fd05e (3f:505e) - ld a, [wCurMap] - cp POKEMON_FAN_CLUB - jr nz, .notFanClub - ld hl, wPreventBlackout - bit 7, [hl] - ld a, $1d - jr z, .asm_fd0c9 - call Func_154a - ld a, $1e - jr nz, .asm_fd0c9 - jr .asm_fd096 -.notFanClub - ld a, [wCurMap] - cp PEWTER_POKECENTER - jr nz, .notPewterPokecenter - call Func_154a - ld a, $1a - jr nz, .asm_fd0c9 - jr .asm_fd096 -.notPewterPokecenter - callab Func_f24ae - ld a, e - cp $ff - jr nz, .asm_fd0c9 - jr .asm_fd096 -.asm_fd096 - call IsPlayerPikachuAsleepInParty - ld a, $b - jr c, .asm_fd0c9 - callab Func_fce73 ; same bank - ld a, $1c - jr c, .asm_fd0c9 - ld a, [wCurMap] - cp POKEMONTOWER_1 - jr c, .notInLavenderTower - cp POKEMONTOWER_7 + 1 - ld a, $16 - jr c, .asm_fd0c9 -.notInLavenderTower - ld a, [wd49c] - and a - jr z, .asm_fd0c7 - dec a - ld c, a - ld b, $0 - ld hl, Pointer_fd0cb - add hl, bc - ld a, [hl] - jr .asm_fd0c9 -.asm_fd0c7 - and a - ret -.asm_fd0c9 - scf - ret - -Pointer_fd0cb: - db $12,$15,$17,$18,$19 - -IsPlayerPikachuAsleepInParty:: ; fd0d0 (3f:50d0) - xor a - ld [wWhichPokemon], a -.loop - ld a, [wWhichPokemon] - ld c, a - ld b, $0 - ld hl, wPartySpecies - add hl, bc - ld a, [hl] - cp $ff - jr z, .done - cp PIKACHU - jr nz, .curMonNotStarterPikachu - callab IsThisPartymonStarterPikachu - jr nc, .curMonNotStarterPikachu - ld a, [wWhichPokemon] - ld hl, wPartyMon1Status - ld bc, wPartyMon2 - wPartyMon1 - call AddNTimes - ld a, [hl] - and SLP - jr z, .done - jr .curMonSleepingPikachu -.curMonNotStarterPikachu - ld a, [wWhichPokemon] - cp PARTY_LENGTH - 1 - jr z, .done - inc a - ld [wWhichPokemon], a - jr .loop -.curMonSleepingPikachu - scf - ret -.done - and a +Func_fe66e: ret - -PikachuEmotion0_fd115: ; fd115 (3f:5115) - db $ff - -PikachuEmotion2_fd116: ; fd116 (3f:5116) - pikaemotion_dummy2 - pikaemotion_emotebubble SMILE_BUBBLE - pikaemotion_pcm $22 - pikaemotion_5 $2 - db $ff - -PikachuEmotion10_fd11e: ; fd11e (3f:511e) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm $4 - pikaemotion_5 $a - db $ff - -PikachuEmotion7_fd128: ; fd128 (3f:5128) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_4 Pointer_fd224 - pikaemotion_pcm $0 - pikaemotion_4 Pointer_fd224 - pikaemotion_5 $7 - db $ff - -PikachuEmotion4_fd136: ; fd136 (3f:5136) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_4 Pointer_fd230 - pikaemotion_pcm $1c - pikaemotion_5 $4 - db $ff - -PikachuEmotion1_fd141: ; fd141 (3f:5141) - pikaemotion_dummy2 - pikaemotion_pcm $ff - pikaemotion_5 $1 - db $ff - -PikachuEmotion8_fd147: ; fd147 (3f:5147) - pikaemotion_dummy2 - pikaemotion_pcm $26 - pikaemotion_5 $8 - db $ff - -PikachuEmotion5_fd14d: ; fd14d (3f:514d) - pikaemotion_dummy2 - pikaemotion_pcm $1e - pikaemotion_5 $5 - db $ff - -PikachuEmotion6_fd153: ; fd153 (3f:5153) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_pcm $ff - pikaemotion_4 Pointer_fd21e - pikaemotion_emotebubble SKULL_BUBBLE - pikaemotion_5 $6 - db $ff - -PikachuEmotion3_fd160: ; fd160 (3f:5160) - pikaemotion_dummy2 - pikaemotion_pcm $27 - pikaemotion_5 $3 - db $ff - -PikachuEmotion9_fd166: ; fd166 (3f:5166) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_pcm $5 - pikaemotion_4 Pointer_fd218 - pikaemotion_emotebubble SKULL_BUBBLE - pikaemotion_5 $9 - db $ff - -PikachuEmotion11_fd173: ; fd173 (3f:5173) - pikaemotion_emotebubble ZZZ_BUBBLE - pikaemotion_pcm $24 - pikaemotion_5 $b - db $ff - -PikachuEmotion12_fd17a: ; fd17a (3f:517a) - pikaemotion_dummy2 - pikaemotion_pcm $ff - pikaemotion_5 $c - db $ff - -PikachuEmotion13_fd180: ; fd180 (3f:5180) - pikaemotion_dummy2 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES - pikaemotion_4 Pointer_fd21e - pikaemotion_5 $d - db $ff - -PikachuEmotion14_fd189: ; fd189 (3f:5189) - pikaemotion_dummy2 - pikaemotion_emotebubble BOLT_BUBBLE - pikaemotion_pcm $9 - pikaemotion_5 $e - db $ff - -PikachuEmotion15_fd191: ; fd191 (3f:5191) - pikaemotion_dummy2 - pikaemotion_pcm $21 - pikaemotion_5 $f - db $ff - -PikachuEmotion16_fd197: ; fd197 (3f:5197) - pikaemotion_dummy2 - pikaemotion_pcm $20 - pikaemotion_5 $10 - db $ff - -PikachuEmotion17_fd19d: ; fd19d (3f:519d) - pikaemotion_dummy2 - pikaemotion_pcm $c - pikaemotion_5 $11 - db $ff - -PikachuEmotion18_fd1a3: ; fd1a3 (3f:51a3) - pikaemotion_dummy2 - pikaemotion_pcm $ff - pikaemotion_5 $12 - db $ff - -PikachuEmotion19_fd1a9: ; fd1a9 (3f:51a9) - pikaemotion_dummy2 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm $20 - pikaemotion_5 $13 - db $ff - -PikachuEmotion20_fd1b1: ; fd1b1 (3f:51b1) - pikaemotion_dummy2 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm $4 - pikaemotion_5 $14 - db $ff - -PikachuEmotion21_fd1b9: ; fd1b9 (3f:51b9) - pikaemotion_dummy2 - pikaemotion_emotebubble FISH_BUBBLE - pikaemotion_pcm $ff - pikaemotion_5 $15 - db $ff - -PikachuEmotion22_fd1c1: ; fd1c1 (3f:51c1) - pikaemotion_dummy2 - pikaemotion_pcm $3 - pikaemotion_5 $16 - db $ff - -PikachuEmotion23_fd1c7: ; fd1c7 (3f:51c7) - pikaemotion_dummy2 - pikaemotion_pcm $12 - pikaemotion_5 $17 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - db $ff - -PikachuEmotion24_fd1cf: ; fd1cf (3f:51cf) - pikaemotion_dummy2 - pikaemotion_emotebubble EXCLAMATION_BUBBLE - pikaemotion_pcm $ff - pikaemotion_5 $18 - db $ff - -PikachuEmotion25_fd1d7: ; fd1d7 (3f:51d7) - pikaemotion_dummy2 - pikaemotion_emotebubble BOLT_BUBBLE - pikaemotion_pcm $22 - pikaemotion_5 $19 - db $ff - -PikachuEmotion26_fd1df: ; fd1df (3f:51df) - pikaemotion_dummy2 - pikaemotion_emotebubble ZZZ_BUBBLE - pikaemotion_pcm $24 - pikaemotion_5 $1a - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKPEWTERCENTER - db $ff - -PikachuEmotion27_fd1eb: ; fd1eb (3f:51eb) - pikaemotion_dummy2 - pikaemotion_pcm $8 - pikaemotion_5 $1b - db $ff - -PikachuEmotion28_fd1f1: ; fd1f1 (3f:51f1) - pikaemotion_dummy2 - pikaemotion_pcm $e - pikaemotion_5 $1c - db $ff - -PikachuEmotion29_fd1f7: ; fd1f7 (3f:51f7) - pikaemotion_pcm $4 - pikaemotion_5 $a - db $ff - -PikachuEmotion30_fd1fc: ; fd1fc (3f:51fc) - pikaemotion_9 - pikaemotion_emotebubble HEART_BUBBLE - pikaemotion_pcm $4 - pikaemotion_5 $14 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADFONT - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKLAVENDERTOWER - db $ff - -PikachuEmotion31_fd20a: ; fd20a (3f:520a) - pikaemotion_pcm $12 - pikaemotion_5 $17 - pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW - pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKBILLSHOUSE - db $ff - -PikachuEmotion32_fd213: ; fd213 (3f:5213) - pikaemotion_pcm $19 - pikaemotion_5 $17 - db $ff - -Pointer_fd218: ; fd218 (3f:5218) - dr $fd218,$fd21e -Pointer_fd21e: ; fd21e (3f:521e) - dr $fd21e,$fd224 -Pointer_fd224: ; fd224 (3f:5224) - dr $fd224,$fd230 -Pointer_fd230: ; fd230 (3f:5230) - dr $fd230,$fd252 -Func_fd252: ; fd252 (3f:5252) - dr $fd252,$fd2a1 -Func_fd2a1:: ; fd2a1 (3f:52a1) - dr $fd2a1,$fd8ab -Func_fd8ab: ; fd8ab (3f:58ab) - dr $fd8ab,$fd8d4 -Func_fd8d4: ; fd8d4 (3f:58d4) - dr $fd8d4,$fd8e1 -Func_fd8e1: ; fd8e1 (3f:58e1) - dr $fd8e1,$fd8ee -Func_fd8ee: ; fd8ee (3f:58ee) - dr $fd8ee,$fd8f8 -Func_fd8f8: ; fd8f8 (3f:58f8) - dr $fd8f8,$fd978 -Func_fd978: ; fd978 (3f:5978) - dr $fd978,$fd9d0 -Func_fd9d0: ; fd9d0 (3f:59d0) - dr $fd9d0,$fe66f OfficerJennySprite: INCBIN "gfx/sprites/officer_jenny.2bpp" PikachuSprite: INCBIN "gfx/sprites/pikachu.2bpp" @@ -2322,4 +1814,4 @@ Clefairy2Sprite: INCBIN "gfx/sprites/clefairy2.2bpp" ChanseySprite: INCBIN "gfx/sprites/chansey.2bpp" SurfingPikachuSprite: INCBIN "gfx/sprites/surfing_pikachu.2bpp" JessieSprite: INCBIN "gfx/sprites/jessie.2bpp" -JamesSprite: INCBIN "gfx/sprites/james.2bpp"
\ No newline at end of file +JamesSprite: INCBIN "gfx/sprites/james.2bpp" diff --git a/engine/evolution.asm b/engine/evolution.asm index c65cc293..780d78e7 100755 --- a/engine/evolution.asm +++ b/engine/evolution.asm @@ -1,4 +1,4 @@ -EvolveMon: ; 7bde9 (1e:7de9) +EvolveMon: ; 5da70 (17:5a70) push hl push de push bc @@ -9,9 +9,7 @@ EvolveMon: ; 7bde9 (1e:7de9) xor a ld [wLowHealthAlarm], a ld [wChannelSoundIDs + CH4], a - dec a - ld [wNewSoundID], a - call PlaySound + call StopAllMusic ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a ld a, SFX_TINK @@ -67,9 +65,7 @@ EvolveMon: ; 7bde9 (1e:7de9) ld a, [wEvoNewSpecies] .done ld [wWholeScreenPaletteMonSpecies], a - ld a, $ff - ld [wNewSoundID], a - call PlaySound + call StopAllMusic ld a, [wWholeScreenPaletteMonSpecies] call PlayCry ld c, 0 diff --git a/engine/game_corner_slots2.asm b/engine/game_corner_slots2.asm index 1bcbefb1..3f7c3f71 100755 --- a/engine/game_corner_slots2.asm +++ b/engine/game_corner_slots2.asm @@ -6,13 +6,13 @@ AbleToPlaySlotsCheck: ; 2fdfd (b:7dfd) predef GetQuantityOfItemInBag ld a, b and a - ld b, GameCornerCoinCaseText_id ; - TextPredefs) / 2 + 1 + ld b, (GameCornerCoinCaseText_id - TextPredefs) / 2 + 1 jr z, .printCoinCaseRequired ld hl, wPlayerCoins ld a, [hli] or [hl] jr nz, .done ; able to play - ld b, GameCornerNoCoinsText_id ; - TextPredefs) / 2 + 1 + ld b, (GameCornerNoCoinsText_id - TextPredefs) / 2 + 1 .printCoinCaseRequired call EnableAutoTextBoxDrawing ld a, b diff --git a/engine/hidden_object_functions17.asm b/engine/hidden_object_functions17.asm index 90b26578..8e5920d5 100755 --- a/engine/hidden_object_functions17.asm +++ b/engine/hidden_object_functions17.asm @@ -1,4 +1,4 @@ -PrintRedsNESText: ; 5db79 (17:5b79) +PrintRedsNESText: ; 5dbae (17:5bae) call EnableAutoTextBoxDrawing tx_pre_jump RedBedroomSNESText @@ -22,7 +22,10 @@ Route15GateLeftBinoculars: ; 5db8f (17:5b8f) ld a, ARTICUNO ld [wcf91], a call PlayCry - jp DisplayMonFrontSpriteInBox + call DisplayMonFrontSpriteInBox + xor a + ld [H_AUTOBGTRANSFERENABLED], a + ret Route15UpstairsBinocularsText: ; 5dba8 (17:5ba8) TX_FAR _Route15UpstairsBinocularsText @@ -52,6 +55,30 @@ KabutopsFossilText: ; 5dbd4 (17:5bd4) TX_FAR _KabutopsFossilText db "@" +FanClubPicture1: ; 5dbad (17:5c12) + ld a, RAPIDASH + ld [wcf91], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre FanClubPicture1Text + ret + +FanClubPicture1Text: ; 5dbbe (17:5bbe) + TX_FAR _FanClubPicture1Text + db "@" + +FanClubPicture2: ; 5dbad (17:5c28) + ld a, FEAROW + ld [wcf91], a + call DisplayMonFrontSpriteInBox + call EnableAutoTextBoxDrawing + tx_pre FanClubPicture2Text + ret + +FanClubPicture2Text: ; 5dc39 (17:5c39) + TX_FAR _FanClubPicture2Text + db "@" + DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9) ; Displays a pokemon's front sprite in a pop-up window. ; [wcf91] = pokemon interal id number @@ -110,8 +137,7 @@ LinkCableHelp: ; 5dc29 (17:5c29) ld hl, wd730 set 6, [hl] coord hl, 0, 0 - ld b, $8 - ld c, $d + lb bc, $8, $d call TextBoxBorder coord hl, 2, 2 ld de, HowToLinkText @@ -339,53 +365,17 @@ GymTrashScript: ; 5ddfc (17:5dfc) .openFirstLock ; Next can is trying for the second switch. SetEvent EVENT_1ST_LOCK_OPENED - - ld hl, GymTrashCans - ld a, [wGymTrashCanIndex] - ; * 5 - ld b, a - add a - add a - add b - - ld d, 0 - ld e, a - add hl, de - ld a, [hli] - -; There is a bug in this code. It should calculate a value in the range [0, 3] -; but if the mask and random number don't have any 1 bits in common, then -; the result of the AND will be 0. When 1 is subtracted from that, the value -; will become $ff. This will result in 255 being added to hl, which will cause -; hl to point to one of the zero bytes that pad the end of the ROM bank. -; Trash can 0 was intended to be able to have the second lock only when the -; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can -; have the second lock regardless of which trash can had the first lock. - - ld [hGymTrashCanRandNumMask], a - push hl - call Random - swap a - ld b, a - ld a, [hGymTrashCanRandNumMask] - and b - dec a - pop hl - - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - and $f - ld [wSecondLockTrashCanIndex], a - + callab Func_f2d0c tx_pre_id VermilionGymTrashSuccesText1 jr .done .trySecondLock - ld a, [wSecondLockTrashCanIndex] - ld b, a ld a, [wGymTrashCanIndex] + ld b, a + ld a, [wSecondLockTrashCanIndex] + cp b + jr z, .openSecondLock + ld a, [wSecondLockTrashCanIndex + 1] cp b jr z, .openSecondLock @@ -413,25 +403,26 @@ GymTrashScript: ; 5ddfc (17:5dfc) GymTrashCans: ; 5de7d (17:5e7d) ; byte 0: mask for random number ; bytes 1-4: indices of the trash cans that can have the second lock -; (but see the comment above explaining a bug regarding this) ; Note that the mask is simply the number of valid trash can indices that -; follow. The remaining bytes are filled with 0 to pad the length of each entry +; follow. The remaining bytes are filled with -1 to pad the length of each entry ; to 5 bytes. - db 2, 1, 3, 0, 0 ; 0 - db 3, 0, 2, 4, 0 ; 1 - db 2, 1, 5, 0, 0 ; 2 - db 3, 0, 4, 6, 0 ; 3 +; This is functionally replaced with GymTrashCans3a but was never removed from source. + + db 2, 1, 3, -1, -1 ; 0 + db 3, 0, 2, 4, -1 ; 1 + db 2, 1, 5, -1, -1 ; 2 + db 3, 0, 4, 6, -1 ; 3 db 4, 1, 3, 5, 7 ; 4 - db 3, 2, 4, 8, 0 ; 5 - db 3, 3, 7, 9, 0 ; 6 + db 3, 2, 4, 8, -1 ; 5 + db 3, 3, 7, 9, -1 ; 6 db 4, 4, 6, 8, 10 ; 7 - db 3, 5, 7, 11, 0 ; 8 - db 3, 6, 10, 12, 0 ; 9 + db 3, 5, 7, 11, -1 ; 8 + db 3, 6, 10, 12, -1 ; 9 db 4, 7, 9, 11, 13 ; 10 - db 3, 8, 10, 14, 0 ; 11 - db 2, 9, 13, 0, 0 ; 12 - db 3, 10, 12, 14, 0 ; 13 - db 2, 11, 13, 0, 0 ; 14 + db 3, 8, 10, 14, -1 ; 11 + db 2, 9, 13, -1, -1 ; 12 + db 3, 10, 12, 14, -1 ; 13 + db 2, 11, 13, -1, -1 ; 14 ; 5dec8 VermilionGymTrashSuccesText1: ; 5dec8 (17:5ec8) diff --git a/engine/hidden_object_functions18.asm b/engine/hidden_object_functions18.asm index ab66a818..443f8369 100755 --- a/engine/hidden_object_functions18.asm +++ b/engine/hidden_object_functions18.asm @@ -1,4 +1,4 @@ -GymStatues: ; 62419 (18:6419) +GymStatues: ; 625e8 (18:65e8) ; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID ; if in a gym and don’t have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID ; else ret @@ -29,14 +29,14 @@ GymStatues: ; 62419 (18:6419) jp PrintPredefTextID .BadgeFlags: ; 62442 (18:6442) - db PEWTER_GYM, %00000001 - db CERULEAN_GYM, %00000010 - db VERMILION_GYM,%00000100 - db CELADON_GYM, %00001000 - db FUCHSIA_GYM, %00010000 - db SAFFRON_GYM, %00100000 - db CINNABAR_GYM, %01000000 - db VIRIDIAN_GYM, %10000000 + db PEWTER_GYM, %00000001 + db CERULEAN_GYM, %00000010 + db VERMILION_GYM, %00000100 + db CELADON_GYM, %00001000 + db FUCHSIA_GYM, %00010000 + db SAFFRON_GYM, %00100000 + db CINNABAR_GYM, %01000000 + db VIRIDIAN_GYM, %10000000 db $ff GymStatueText1: ; 62453 (18:6453) @@ -72,30 +72,36 @@ PrintBenchGuyText: ; 6245d (18:645d) ; format: db map id, player sprite facing direction, text id of PredefTextIDPointerTable BenchGuyTextPointers: ; 6247e (18:647e) - db VIRIDIAN_POKECENTER, SPRITE_FACING_LEFT - db (ViridianCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db PEWTER_POKECENTER, SPRITE_FACING_LEFT - db (PewterCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db CERULEAN_POKECENTER, SPRITE_FACING_LEFT - db (CeruleanCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db LAVENDER_POKECENTER, SPRITE_FACING_LEFT - db (LavenderCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db VERMILION_POKECENTER, SPRITE_FACING_LEFT - db (VermilionCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db CELADON_POKECENTER, SPRITE_FACING_LEFT - db (CeladonCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db CELADON_HOTEL, SPRITE_FACING_LEFT - db (CeladonCityHotelText_id - TextPredefs) / 2 + 1 - db FUCHSIA_POKECENTER, SPRITE_FACING_LEFT - db (FuchsiaCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db CINNABAR_POKECENTER, SPRITE_FACING_LEFT - db (CinnabarIslandPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db SAFFRON_POKECENTER, SPRITE_FACING_LEFT - db (SaffronCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db MT_MOON_POKECENTER, SPRITE_FACING_LEFT - db (MtMoonPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 - db ROCK_TUNNEL_POKECENTER,SPRITE_FACING_LEFT - db (RockTunnelPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 + db VIRIDIAN_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre ViridianCityPokecenterBenchGuyText + db PEWTER_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre PewterCityPokecenterBenchGuyText + db CERULEAN_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre CeruleanCityPokecenterBenchGuyText + db LAVENDER_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre LavenderCityPokecenterBenchGuyText + db VERMILION_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre VermilionCityPokecenterBenchGuyText + db CELADON_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre CeladonCityPokecenterBenchGuyText + db CELADON_HOTEL, SPRITE_FACING_LEFT + db_tx_pre CeladonCityHotelText + db FUCHSIA_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre FuchsiaCityPokecenterBenchGuyText + db CINNABAR_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre CinnabarIslandPokecenterBenchGuyText + db SAFFRON_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre SaffronCityPokecenterBenchGuyText + db MT_MOON_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre MtMoonPokecenterBenchGuyText + db ROCK_TUNNEL_POKECENTER, SPRITE_FACING_LEFT + db_tx_pre RockTunnelPokecenterBenchGuyText + db SAFARI_ZONE_REST_HOUSE_2,SPRITE_FACING_LEFT + db_tx_pre UnusedBenchGuyText1 + db SAFARI_ZONE_REST_HOUSE_3,SPRITE_FACING_LEFT + db_tx_pre UnusedBenchGuyText2 + db SAFARI_ZONE_REST_HOUSE_4,SPRITE_FACING_LEFT + db_tx_pre UnusedBenchGuyText3 db $FF ViridianCityPokecenterBenchGuyText: ; 624a3 (18:64a3) @@ -177,7 +183,7 @@ CeladonCityHotelText: ; 62502 (18:6502) UnusedPredefText: ; 62508 (18:6508) db "@" -PrintBookcaseText: ; 6509 (18:6509) +PrintBookcaseText: ; 626e1 (18:66e1) call EnableAutoTextBoxDrawing tx_pre_jump BookcaseText diff --git a/engine/items/itemfinder.asm b/engine/items/itemfinder.asm index d638b0b8..7b479462 100755 --- a/engine/items/itemfinder.asm +++ b/engine/items/itemfinder.asm @@ -1,4 +1,4 @@ -HiddenItemNear: ; 7481f (1d:481f) +HiddenItemNear: ; 7405c (1d:405c) ld hl, HiddenItemCoords ld b, 0 .loop @@ -43,7 +43,7 @@ HiddenItemNear: ; 7481f (1d:481f) scf ret -Sub5ClampTo0: ; 7486b (1d:486b) +Sub5ClampTo0: ; 740a8 (1d:40a8) ; subtract 5 but clamp to 0 sub 5 cp $f0 diff --git a/engine/items/items.asm b/engine/items/items.asm index aa607911..eca9eaef 100755 --- a/engine/items/items.asm +++ b/engine/items/items.asm @@ -607,7 +607,7 @@ ItemUseSurfboard: ; d725 (3:5725) call .makePlayerMoveForward ld a,$3 ld [wd431], a - ld hl,wd430 + ld hl,wPikachuOverworldStateFlags set 5,[hl] ld hl,wd730 set 7,[hl] @@ -1765,7 +1765,7 @@ ItemUsePokeflute: ; dfbd (3:5fbd) .notRoute16 cp a,PEWTER_POKECENTER jr nz,.noSnorlaxOrPikachuToWakeUp - call Func_154a + call CheckPikachuAsleep jr z,.noSnorlaxOrPikachuToWakeUp callab Func_fcb01 jr nc,.noSnorlaxOrPikachuToWakeUp diff --git a/engine/menu/bills_pc.asm b/engine/menu/bills_pc.asm index ce9ca5a8..97a65517 100644 --- a/engine/menu/bills_pc.asm +++ b/engine/menu/bills_pc.asm @@ -227,7 +227,7 @@ BillsPCDeposit: ; 2156d (8:556d) jp c, BillsPCMenu callab IsThisPartymonStarterPikachu_Party jr nc, .asm_215ad - call Func_154a + call CheckPikachuAsleep jr z, .asm_215ad ld hl, SleepingPikachuText2 call PrintText diff --git a/engine/menu/party_menu.asm b/engine/menu/party_menu.asm index 3ec0029e..8683d3cb 100755 --- a/engine/menu/party_menu.asm +++ b/engine/menu/party_menu.asm @@ -53,7 +53,7 @@ RedrawPartyMenu_: ; 11886 (4:5886) ld [wWhichPokemon],a callab IsThisPartymonStarterPikachu_Party jr nc, .regularMon - call Func_154a + call CheckPikachuAsleep jr z, .regularMon ld a, $ff ld [hPartyMonIndex], a diff --git a/engine/menu/pokedex.asm b/engine/menu/pokedex.asm index c481a20c..298816c1 100755 --- a/engine/menu/pokedex.asm +++ b/engine/menu/pokedex.asm @@ -2,54 +2,54 @@ ShowPokedexMenu: ; 40000 (10:4000) call GBPalWhiteOut call ClearScreen call UpdateSprites - ld a,[wListScrollOffset] + ld a, [wListScrollOffset] push af xor a - ld [wCurrentMenuItem],a - ld [wListScrollOffset],a - ld [wLastMenuItem],a + ld [wCurrentMenuItem], a + ld [wListScrollOffset], a + ld [wLastMenuItem], a inc a - ld [wd11e],a - ld [hJoy7],a + ld [wd11e], a + ld [hJoy7], a .setUpGraphics callab LoadPokedexTilePatterns .asm_40025 ld b, SET_PAL_GENERIC call RunPaletteCommand .doPokemonListMenu - ld hl,wTopMenuItemY - ld a,3 - ld [hli],a ; top menu item Y + ld hl, wTopMenuItemY + ld a, 3 + ld [hli], a ; top menu item Y xor a - ld [hli],a ; top menu item X + ld [hli], a ; top menu item X inc a - ld [wMenuWatchMovingOutOfBounds],a + ld [wMenuWatchMovingOutOfBounds], a inc hl inc hl - ld a,6 - ld [hli],a ; max menu item ID - ld [hl],D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON + ld a, 6 + ld [hli], a ; max menu item ID + ld [hl], D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON call HandlePokedexListMenu - jr c,.goToSideMenu ; if the player chose a pokemon from the list + jr c, .goToSideMenu ; if the player chose a pokemon from the list .exitPokedex xor a - ld [wMenuWatchMovingOutOfBounds],a - ld [wCurrentMenuItem],a - ld [wLastMenuItem],a - ld [hJoy7],a - ld [wWastedByteCD3A],a - ld [wOverrideSimulatedJoypadStatesMask],a + ld [wMenuWatchMovingOutOfBounds], a + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + ld [hJoy7], a + ld [wWastedByteCD3A], a + ld [wOverrideSimulatedJoypadStatesMask], a pop af - ld [wListScrollOffset],a + ld [wListScrollOffset], a call GBPalWhiteOutWithDelay3 call RunDefaultPaletteCommand jp ReloadMapData .goToSideMenu call HandlePokedexSideMenu dec b - jr z,.exitPokedex ; if the player chose Quit + jr z, .exitPokedex ; if the player chose Quit dec b - jr z,.doPokemonListMenu ; if pokemon not seen or player pressed B button + jr z, .doPokemonListMenu ; if pokemon not seen or player pressed B button dec b jr z, .asm_40025 jp .setUpGraphics ; if pokemon data or area was shown @@ -62,73 +62,73 @@ ShowPokedexMenu: ; 40000 (10:4000) ; 02: the pokemon has not been seen yet or the player pressed the B button HandlePokedexSideMenu: ; 40070 (10:4070) call PlaceUnfilledArrowMenuCursor - ld a,[wCurrentMenuItem] + ld a, [wCurrentMenuItem] push af - ld b,a - ld a,[wLastMenuItem] + ld b, a + ld a, [wLastMenuItem] push af - ld a,[wListScrollOffset] + ld a, [wListScrollOffset] push af add b inc a - ld [wd11e],a - ld a,[wd11e] + ld [wd11e], a + ld a, [wd11e] push af - ld a,[wDexMaxSeenMon] + ld a, [wDexMaxSeenMon] push af ; this doesn't need to be preserved - ld hl,wPokedexSeen + ld hl, wPokedexSeen call IsPokemonBitSet - ld b,2 - jr z,.exitSideMenu + ld b, 2 + jr z, .exitSideMenu call PokedexToIndex - ld hl,wTopMenuItemY - ld a,8 - ld [hli],a ; top menu item Y - ld a,15 - ld [hli],a ; top menu item X + ld hl, wTopMenuItemY + ld a, 8 + ld [hli], a ; top menu item Y + ld a, 15 + ld [hli], a ; top menu item X xor a - ld [hli],a ; current menu item ID + ld [hli], a ; current menu item ID inc hl - ld a,4 - ld [hli],a ; max menu item ID + ld a, 4 + ld [hli], a ; max menu item ID ld a, A_BUTTON | B_BUTTON - ld [hli],a ; menu watched keys (A button and B button) + ld [hli], a ; menu watched keys (A button and B button) xor a - ld [hli],a ; old menu item ID - ld [wMenuWatchMovingOutOfBounds],a - ld [hJoy7],a + ld [hli], a ; old menu item ID + ld [wMenuWatchMovingOutOfBounds], a + ld [hJoy7], a .handleMenuInput call HandleMenuInput - bit 1,a ; was the B button pressed? - ld b,2 - jr nz,.buttonBPressed - ld a,[wCurrentMenuItem] + bit 1, a ; was the B button pressed? + ld b, 2 + jr nz, .buttonBPressed + ld a, [wCurrentMenuItem] and a - jr z,.choseData + jr z, .choseData dec a - jr z,.choseCry + jr z, .choseCry dec a - jr z,.choseArea + jr z, .choseArea dec a - jr z,.chosePrint + jr z, .chosePrint .choseQuit - ld b,1 + ld b, 1 .exitSideMenu pop af - ld [wDexMaxSeenMon],a + ld [wDexMaxSeenMon], a pop af - ld [wd11e],a + ld [wd11e], a pop af - ld [wListScrollOffset],a + ld [wListScrollOffset], a pop af - ld [wLastMenuItem],a + ld [wLastMenuItem], a pop af - ld [wCurrentMenuItem],a + ld [wCurrentMenuItem], a ld a, $1 ld [hJoy7], a push bc coord hl, 0, 3 - ld de,20 + ld de, 20 lb bc, " ", 13 call DrawTileLine ; cover up the menu cursor in the pokemon list pop bc @@ -136,24 +136,24 @@ HandlePokedexSideMenu: ; 40070 (10:4070) .buttonBPressed push bc coord hl, 15, 8 - ld de,20 + ld de, 20 lb bc, " ", 9 call DrawTileLine ; cover up the menu cursor in the side menu pop bc jr .exitSideMenu .choseData call ShowPokedexDataInternal - ld b,0 + ld b, 0 jr .exitSideMenu ; play pokemon cry .choseCry - ld a,[wd11e] + ld a, [wd11e] call GetCryData call PlaySound jr .handleMenuInput .choseArea predef LoadTownMap_Nest ; display pokemon areas - ld b,0 + ld b, 0 jr .exitSideMenu .chosePrint ld a, [hTilesetType] @@ -179,63 +179,63 @@ HandlePokedexListMenu: ; 40140 (10:4140) call Func_4027c call GBPalNormal call HandleMenuInput - bit 1,a ; was the B button pressed? - jp nz,.buttonBPressed + bit 1, a ; was the B button pressed? + jp nz, .buttonBPressed bit 0, a ; was the A button pressed? - jp nz,.buttonAPressed + jp nz, .buttonAPressed .checkIfUpPressed - bit 6,a ; was Up pressed? - jr z,.checkIfDownPressed + bit 6, a ; was Up pressed? + jr z, .checkIfDownPressed .upPressed ; scroll up one row - ld a,[wListScrollOffset] + ld a, [wListScrollOffset] and a - jp z,.loop + jp z, .loop dec a - ld [wListScrollOffset],a + ld [wListScrollOffset], a jp .loop .checkIfDownPressed - bit 7,a ; was Down pressed? - jr z,.checkIfRightPressed + bit 7, a ; was Down pressed? + jr z, .checkIfRightPressed .downPressed ; scroll down one row - ld a,[wDexMaxSeenMon] - cp a,7 - jp c,.loop ; can't if the list is shorter than 7 - sub a,7 - ld b,a - ld a,[wListScrollOffset] + ld a, [wDexMaxSeenMon] + cp a, 7 + jp c, .loop ; can't if the list is shorter than 7 + sub a, 7 + ld b, a + ld a, [wListScrollOffset] cp b - jp z,.loop + jp z, .loop inc a - ld [wListScrollOffset],a + ld [wListScrollOffset], a jp .loop .checkIfRightPressed - bit 4,a ; was Right pressed? - jr z,.checkIfLeftPressed + bit 4, a ; was Right pressed? + jr z, .checkIfLeftPressed .rightPressed ; scroll down 7 rows - ld a,[wDexMaxSeenMon] - cp a,7 - jp c,.loop ; can't if the list is shorter than 7 - sub a,6 - ld b,a - ld a,[wListScrollOffset] - add a,7 - ld [wListScrollOffset],a + ld a, [wDexMaxSeenMon] + cp a, 7 + jp c, .loop ; can't if the list is shorter than 7 + sub a, 6 + ld b, a + ld a, [wListScrollOffset] + add a, 7 + ld [wListScrollOffset], a cp b - jp c,.loop + jp c, .loop dec b - ld a,b - ld [wListScrollOffset],a + ld a, b + ld [wListScrollOffset], a jp .loop .checkIfLeftPressed ; scroll up 7 rows - bit 5,a ; was Left pressed? - jr z,.buttonAPressed + bit 5, a ; was Left pressed? + jr z, .buttonAPressed .leftPressed - ld a,[wListScrollOffset] - sub a,7 - ld [wListScrollOffset],a - jp nc,.loop + ld a, [wListScrollOffset] + sub a, 7 + ld [wListScrollOffset], a + jp nc, .loop xor a - ld [wListScrollOffset],a + ld [wListScrollOffset], a jp .loop .buttonAPressed scf @@ -249,72 +249,72 @@ Func_401c2: ; 401c2 (10:41c2) ld [H_AUTOBGTRANSFERENABLED], a ; draw the horizontal line separating the seen and owned amounts from the menu coord hl, 15, 6 - ld a,$7a ; horizontal line tile - ld [hli],a - ld [hli],a - ld [hli],a - ld [hli],a - ld [hli],a + ld a, $7a ; horizontal line tile + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a coord hl, 14, 0 - ld [hl],$71 ; vertical line tile + ld [hl], $71 ; vertical line tile coord hl, 14, 1 call DrawPokedexVerticalLine coord hl, 14, 9 call DrawPokedexVerticalLine - ld hl,wPokedexSeen - ld b,wPokedexSeenEnd - wPokedexSeen + ld hl, wPokedexSeen + ld b, wPokedexSeenEnd - wPokedexSeen call CountSetBits ld de, wNumSetBits coord hl, 16, 2 lb bc, 1, 3 call PrintNumber ; print number of seen pokemon - ld hl,wPokedexOwned - ld b,wPokedexOwnedEnd - wPokedexOwned + ld hl, wPokedexOwned + ld b, wPokedexOwnedEnd - wPokedexOwned call CountSetBits ld de, wNumSetBits coord hl, 16, 5 lb bc, 1, 3 call PrintNumber ; print number of owned pokemon coord hl, 16, 1 - ld de,PokedexSeenText + ld de, PokedexSeenText call PlaceString coord hl, 16, 4 - ld de,PokedexOwnText + ld de, PokedexOwnText call PlaceString coord hl, 1, 1 - ld de,PokedexContentsText + ld de, PokedexContentsText call PlaceString coord hl, 16, 8 - ld de,PokedexMenuItemsText + ld de, PokedexMenuItemsText call PlaceString ; find the highest pokedex number among the pokemon the player has seen - ld hl,wPokedexSeenEnd - 1 - ld b,(wPokedexSeenEnd - wPokedexSeen) * 8 + 1 + ld hl, wPokedexSeenEnd - 1 + ld b, (wPokedexSeenEnd - wPokedexSeen) * 8 + 1 .maxSeenPokemonLoop - ld a,[hld] - ld c,8 + ld a, [hld] + ld c, 8 .maxSeenPokemonInnerLoop dec b sla a - jr c,.storeMaxSeenPokemon + jr c, .storeMaxSeenPokemon dec c - jr nz,.maxSeenPokemonInnerLoop + jr nz, .maxSeenPokemonInnerLoop jr .maxSeenPokemonLoop .storeMaxSeenPokemon - ld a,b - ld [wDexMaxSeenMon],a + ld a, b + ld [wDexMaxSeenMon], a ret DrawPokedexVerticalLine: ; 40243 (10:4243) - ld c,9 ; height of line - ld de,SCREEN_WIDTH ; width of screen - ld a,$71 ; vertical line tile + ld c, 9 ; height of line + ld de, SCREEN_WIDTH ; width of screen + ld a, $71 ; vertical line tile .loop - ld [hl],a - add hl,de - xor a,1 ; toggle between vertical line tile and box tile + ld [hl], a + add hl, de + xor a, 1 ; toggle between vertical line tile and box tile dec c - jr nz,.loop + jr nz, .loop ret PokedexSeenText: ; 40252 (10:4252) @@ -335,51 +335,51 @@ PokedexMenuItemsText: ; 40264 (10:4264) Func_4027c: ; 4027c (10:427c) xor a - ld [H_AUTOBGTRANSFERENABLED],a + ld [H_AUTOBGTRANSFERENABLED], a coord hl, 4, 2 lb bc, 14, 10 call ClearScreenArea coord hl, 1, 3 - ld a,[wListScrollOffset] - ld [wd11e],a - ld d,7 - ld a,[wDexMaxSeenMon] - cp a,7 - jr nc,.printPokemonLoop - ld d,a + ld a, [wListScrollOffset] + ld [wd11e], a + ld d, 7 + ld a, [wDexMaxSeenMon] + cp a, 7 + jr nc, .printPokemonLoop + ld d, a dec a - ld [wMaxMenuItem],a + ld [wMaxMenuItem], a ; loop to print pokemon pokedex numbers and names ; if the player has owned the pokemon, it puts a pokeball beside the name .printPokemonLoop - ld a,[wd11e] + ld a, [wd11e] inc a - ld [wd11e],a + ld [wd11e], a push af push de push hl - ld de,-SCREEN_WIDTH - add hl,de - ld de,wd11e + ld de, -SCREEN_WIDTH + add hl, de + ld de, wd11e lb bc, LEADING_ZEROES | 1, 3 call PrintNumber ; print the pokedex number - ld de,SCREEN_WIDTH - add hl,de + ld de, SCREEN_WIDTH + add hl, de dec hl push hl - ld hl,wPokedexOwned + ld hl, wPokedexOwned call IsPokemonBitSet pop hl - ld a," " - jr z,.writeTile - ld a,$72 ; pokeball tile + ld a, " " + jr z, .writeTile + ld a, $72 ; pokeball tile .writeTile - ld [hl],a ; put a pokeball next to pokemon that the player has owned + ld [hl], a ; put a pokeball next to pokemon that the player has owned push hl - ld hl,wPokedexSeen + ld hl, wPokedexSeen call IsPokemonBitSet - jr nz,.getPokemonName ; if the player has seen the pokemon - ld de,.dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon + jr nz, .getPokemonName ; if the player has seen the pokemon + ld de, .dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon jr .skipGettingName .dashedLine ; for unseen pokemon in the list db "----------@" @@ -391,15 +391,15 @@ Func_4027c: ; 4027c (10:427c) inc hl call PlaceString pop hl - ld bc,2 * 20 - add hl,bc + ld bc, 2 * 20 + add hl, bc pop de pop af - ld [wd11e],a + ld [wd11e], a dec d - jr nz,.printPokemonLoop - ld a,01 - ld [H_AUTOBGTRANSFERENABLED],a + jr nz, .printPokemonLoop + ld a, 01 + ld [H_AUTOBGTRANSFERENABLED], a call Delay3 ret @@ -408,12 +408,12 @@ Func_4027c: ; 4027c (10:427c) ; [wd11e] = pokedex number ; hl = address of bit field IsPokemonBitSet: ; 40303 (10:4303) - ld a,[wd11e] + ld a, [wd11e] dec a - ld c,a - ld b,FLAG_TEST + ld c, a + ld b, FLAG_TEST predef FlagActionPredef - ld a,c + ld a, c and a ret @@ -426,44 +426,44 @@ ShowPokedexData: ; 40312 (10:4312) ; function to display pokedex data from inside the pokedex ShowPokedexDataInternal: ; 40323 (10:4323) - ld hl,wd72c - set 1,[hl] - ld a,$33 ; 3/7 volume - ld [rNR50],a + ld hl, wd72c + set 1, [hl] + ld a, $33 ; 3/7 volume + ld [rNR50], a ld a, [hTilesetType] push af xor a ld [hTilesetType], a call GBPalWhiteOut ; zero all palettes - ld a,[wd11e] ; pokemon ID - ld [wcf91],a + ld a, [wd11e] ; pokemon ID + ld [wcf91], a push af ld b, SET_PAL_POKEDEX call RunPaletteCommand pop af - ld [wd11e],a + ld [wd11e], a call Func_4039c call c, Func_404ae .waitForButtonPress call JoypadLowSensitivity - ld a,[hJoy5] - and a,A_BUTTON | B_BUTTON - jr z,.waitForButtonPress + ld a, [hJoy5] + and a, A_BUTTON | B_BUTTON + jr z, .waitForButtonPress pop af - ld [hTilesetType],a + ld [hTilesetType], a call GBPalWhiteOut call ClearScreen call RunDefaultPaletteCommand call LoadTextBoxTilePatterns call GBPalNormal - ld hl,wd72c - res 1,[hl] - ld a,$77 ; max volume - ld [rNR50],a + ld hl, wd72c + res 1, [hl] + ld a, $77 ; max volume + ld [rNR50], a ret HeightWeightText: ; 40370 (10:4370) - db "HT ?",$60,"??",$61 + db "HT ?", $60, "??", $61 next "WT ???lb@" ; XXX does anything point to this? @@ -472,77 +472,77 @@ PokeText: ; 40385 (10:4385) ; horizontal line that divides the pokedex text description from the rest of the data PokedexDataDividerLine: ; 40387 (10:4387) - db $68,$69,$6B,$69,$6B - db $69,$6B,$69,$6B,$6B - db $6B,$6B,$69,$6B,$69 - db $6B,$69,$6B,$69,$6A + db $68, $69, $6B, $69, $6B + db $69, $6B, $69, $6B, $6B + db $6B, $6B, $69, $6B, $69 + db $6B, $69, $6B, $69, $6A db "@" Func_4039c: ; 4039c (10:439c) call ClearScreen coord hl, 0, 0 - ld de,1 + ld de, 1 lb bc, $64, SCREEN_WIDTH call DrawTileLine ; draw top border coord hl, 0, 17 ld b, $6f call DrawTileLine ; draw bottom border coord hl, 0, 1 - ld de,20 + ld de, 20 lb bc, $66, $10 call DrawTileLine ; draw left border coord hl, 19, 1 - ld b,$67 + ld b, $67 call DrawTileLine ; draw right border - ld a,$63 ; upper left corner tile + ld a, $63 ; upper left corner tile Coorda 0, 0 - ld a,$65 ; upper right corner tile + ld a, $65 ; upper right corner tile Coorda 19, 0 - ld a,$6c ; lower left corner tile + ld a, $6c ; lower left corner tile Coorda 0, 17 - ld a,$6e ; lower right corner tile + ld a, $6e ; lower right corner tile Coorda 19, 17 coord hl, 0, 9 - ld de,PokedexDataDividerLine + ld de, PokedexDataDividerLine call PlaceString ; draw horizontal divider line coord hl, 9, 6 - ld de,HeightWeightText + ld de, HeightWeightText call PlaceString call GetMonName coord hl, 9, 2 call PlaceString - ld hl,PokedexEntryPointers - ld a,[wd11e] + ld hl, PokedexEntryPointers + ld a, [wd11e] dec a - ld e,a - ld d,0 - add hl,de - add hl,de - ld a,[hli] - ld e,a - ld d,[hl] ; de = address of pokedex entry + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] ; de = address of pokedex entry coord hl, 9, 4 call PlaceString ; print species name - ld h,b - ld l,c + ld h, b + ld l, c push de - ld a,[wd11e] + ld a, [wd11e] push af call IndexToPokedex coord hl, 2, 8 ld a, "№" - ld [hli],a - ld a,$f2 - ld [hli],a - ld de,wd11e + ld [hli], a + ld a, $f2 + ld [hli], a + ld de, wd11e lb bc, LEADING_ZEROES | 1, 3 call PrintNumber ; print pokedex number - ld hl,wPokedexOwned + ld hl, wPokedexOwned call IsPokemonBitSet pop af - ld [wd11e],a - ld a,[wcf91] - ld [wd0b5],a + ld [wd11e], a + ld a, [wcf91] + ld [wd0b5], a pop de push af push bc @@ -553,65 +553,65 @@ Func_4039c: ; 4039c (10:439c) call GetMonHeader ; load pokemon picture location coord hl, 1, 1 call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture - ld a,[wcf91] + ld a, [wcf91] call PlayCry ; play pokemon cry pop hl pop de pop bc pop af - ld a,c + ld a, c and a ret z ; if the pokemon has not been owned, don't print the height, weight, or description inc de ; de = address of feet (height) - ld a,[de] ; reads feet, but a is overwritten without being used + ld a, [de] ; reads feet, but a is overwritten without being used coord hl, 12, 6 lb bc, 1, 2 call PrintNumber ; print feet (height) - ld a,$60 ; feet symbol tile (one tick) - ld [hl],a + ld a, $60 ; feet symbol tile (one tick) + ld [hl], a inc de inc de ; de = address of inches (height) coord hl, 15, 6 lb bc, LEADING_ZEROES | 1, 2 call PrintNumber ; print inches (height) - ld a,$61 ; inches symbol tile (two ticks) - ld [hl],a + ld a, $61 ; inches symbol tile (two ticks) + ld [hl], a ; now print the weight (note that weight is stored in tenths of pounds internally) inc de inc de inc de ; de = address of upper byte of weight push de ; put weight in big-endian order at hDexWeight - ld hl,hDexWeight - ld a,[hl] ; save existing value of [hDexWeight] + ld hl, hDexWeight + ld a, [hl] ; save existing value of [hDexWeight] push af - ld a,[de] ; a = upper byte of weight - ld [hli],a ; store upper byte of weight in [hDexWeight] - ld a,[hl] ; save existing value of [hDexWeight + 1] + ld a, [de] ; a = upper byte of weight + ld [hli], a ; store upper byte of weight in [hDexWeight] + ld a, [hl] ; save existing value of [hDexWeight + 1] push af dec de - ld a,[de] ; a = lower byte of weight - ld [hl],a ; store lower byte of weight in [hDexWeight + 1] - ld de,hDexWeight + ld a, [de] ; a = lower byte of weight + ld [hl], a ; store lower byte of weight in [hDexWeight + 1] + ld de, hDexWeight coord hl, 11, 8 lb bc, 2, 5 ; 2 bytes, 5 digits call PrintNumber ; print weight coord hl, 14, 8 - ld a,[hDexWeight + 1] - sub a,10 - ld a,[hDexWeight] - sbc a,0 - jr nc,.next - ld [hl],"0" ; if the weight is less than 10, put a 0 before the decimal point + ld a, [hDexWeight + 1] + sub a, 10 + ld a, [hDexWeight] + sbc a, 0 + jr nc, .next + ld [hl], "0" ; if the weight is less than 10, put a 0 before the decimal point .next inc hl - ld a,[hli] - ld [hld],a ; make space for the decimal point by moving the last digit forward one tile - ld [hl],$f2 ; decimal point tile + ld a, [hli] + ld [hld], a ; make space for the decimal point by moving the last digit forward one tile + ld [hl], $f2 ; decimal point tile pop af - ld [hDexWeight + 1],a ; restore original value of [hDexWeight + 1] + ld [hDexWeight + 1], a ; restore original value of [hDexWeight + 1] pop af - ld [hDexWeight],a ; restore original value of [hDexWeight] + ld [hDexWeight], a ; restore original value of [hDexWeight] pop hl inc hl ; hl = address of pokedex description text scf @@ -620,11 +620,11 @@ Func_4039c: ; 4039c (10:439c) Func_404ae: ; 404ae (10:44ae) coord bc, 1, 11 Func_404b1: ; 404b1 (10:44b1) - ld a,2 - ld [$fff9],a + ld a, 2 + ld [$fff9], a call TextCommandProcessor ; print pokedex description text xor a - ld [$fff9],a + ld [$fff9], a ret Func_404bc: ; 404bc (10:44bc) @@ -667,10 +667,10 @@ DrawTileLine: ; 40501 (10:4501) push bc push de .loop - ld [hl],b - add hl,de + ld [hl], b + add hl, de dec c - jr nz,.loop + jr nz, .loop pop de pop bc ret @@ -681,19 +681,19 @@ PokedexToIndex: ; 41086 (10:5086) ; converts the Pokédex number at wd11e to an index push bc push hl - ld a,[wd11e] - ld b,a - ld c,0 - ld hl,PokedexOrder + ld a, [wd11e] + ld b, a + ld c, 0 + ld hl, PokedexOrder .loop ; go through the list until we find an entry with a matching dex number inc c - ld a,[hli] + ld a, [hli] cp b - jr nz,.loop + jr nz, .loop - ld a,c - ld [wd11e],a + ld a, c + ld [wd11e], a pop hl pop bc ret @@ -702,14 +702,14 @@ IndexToPokedex: ; 4109d (10:509d) ; converts the indexédex number at wd11e to a Pokédex number push bc push hl - ld a,[wd11e] + ld a, [wd11e] dec a - ld hl,PokedexOrder - ld b,0 - ld c,a - add hl,bc - ld a,[hl] - ld [wd11e],a + ld hl, PokedexOrder + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd11e], a pop hl pop bc ret diff --git a/engine/overworld/advance_player_sprite.asm b/engine/overworld/advance_player_sprite.asm index e02fb129..758dd558 100644 --- a/engine/overworld/advance_player_sprite.asm +++ b/engine/overworld/advance_player_sprite.asm @@ -7,7 +7,7 @@ _AdvancePlayerSprite:: ; f010c (3c:410c) dec [hl] jr nz,.afterUpdateMapCoords ; if it's the end of the animation, update the player's map coordinates - ld hl, wd430 + ld hl, wPikachuOverworldStateFlags res 5, [hl] ld a,[wYCoord] add b diff --git a/engine/overworld/cable_club_npc.asm b/engine/overworld/cable_club_npc.asm index 8f279759..4170a936 100755 --- a/engine/overworld/cable_club_npc.asm +++ b/engine/overworld/cable_club_npc.asm @@ -1,7 +1,7 @@ CableClubNPC: ; 7035 (1:7035) ld hl, CableClubNPCWelcomeText call PrintText - call Func_154a + call CheckPikachuAsleep jr nz, .asm_7048 CheckEvent EVENT_GOT_POKEDEX jp nz, .receivedPokedex diff --git a/engine/overworld/hidden_items.asm b/engine/overworld/hidden_items.asm index f7f81070..39bb385d 100755 --- a/engine/overworld/hidden_items.asm +++ b/engine/overworld/hidden_items.asm @@ -9,7 +9,7 @@ HiddenItems: ; 76688 (1d:6688) predef FlagActionPredef ld a, c and a - ret nz + jr nz, .asm_75fa5 call EnableAutoTextBoxDrawing ld a, 1 ld [wDoNotWaitForButtonPressAfterDisplayingText], a @@ -18,6 +18,11 @@ HiddenItems: ; 76688 (1d:6688) call GetItemName tx_pre_jump FoundHiddenItemText +.asm_75fa5 + ld a, $ff + ld [hItemAlreadyFound], a + ret + INCLUDE "data/hidden_item_coords.asm" FoundHiddenItemText: ; 7675b (1d:675b) @@ -54,7 +59,7 @@ HiddenCoins: ; 76799 (1d:6799) predef GetQuantityOfItemInBag ld a, b and a - ret z + jr z, .asm_760ce ld hl, HiddenCoinCoords call FindHiddenItemOrCoinsIndex ld [wHiddenItemOrCoinsIndex], a @@ -65,7 +70,7 @@ HiddenCoins: ; 76799 (1d:6799) predef FlagActionPredef ld a, c and a - ret nz + jr nz, .asm_760ce xor a ld [hUnusedCoinsByte], a ld [hCoins], a @@ -79,6 +84,12 @@ HiddenCoins: ; 76799 (1d:6799) cp 40 jr z, .bcd20 jr .bcd100 + +.asm_760ce + ld a, $ff + ld [hItemAlreadyFound], a + ret + .bcd10 ld a, $10 ld [hCoins + 1], a diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm index 3774c482..cba2a221 100755 --- a/engine/overworld/hidden_objects.asm +++ b/engine/overworld/hidden_objects.asm @@ -1,27 +1,17 @@ -; if a hidden object was found, stores $00 in [$ffee], else stores $ff -CheckForHiddenObject: ; 469a0 (11:69a0) - ld hl, $ffeb +; if a hidden object was found, stores $00 in [hDidntFindAnyHiddenObject], else stores $ff +CheckForHiddenObject: ; f25f8 (3c:65f8) + ld hl, hItemAlreadyFound xor a ld [hli], a ld [hli], a ld [hli], a ld [hl], a - ld de, $0 ld hl, HiddenObjectMaps -.hiddenMapLoop - ld a, [hli] - ld b, a - cp $ff - jr z, .noMatch + ld de, 3 ld a, [wCurMap] - cp b - jr z, .foundMatchingMap - inc de - inc de - jr .hiddenMapLoop -.foundMatchingMap - ld hl, HiddenObjectPointers - add hl, de + call IsInArray + jr nc, .noMatch + inc hl ld a, [hli] ld h, [hl] ld l, a @@ -65,7 +55,7 @@ CheckForHiddenObject: ; 469a0 (11:69a0) ret .noMatch ld a, $ff - ld [$ffee], a + ld [hDidntFindAnyHiddenObject], a ret ; checks if the coordinates in front of the player's sprite match Y in b and X in c diff --git a/engine/overworld/missable_objects.asm b/engine/overworld/missable_objects.asm index f18a0823..65305d30 100644 --- a/engine/overworld/missable_objects.asm +++ b/engine/overworld/missable_objects.asm @@ -209,4 +209,4 @@ MissableObjectFlagAction: ; f062 (3:7062) pop de pop hl ld c, a - ret
\ No newline at end of file + ret diff --git a/engine/overworld/pokecenter.asm b/engine/overworld/pokecenter.asm index 779d852c..3024ff7b 100755 --- a/engine/overworld/pokecenter.asm +++ b/engine/overworld/pokecenter.asm @@ -2,7 +2,7 @@ DisplayPokemonCenterDialogue_: ; 6d97 (1:6d97) ld a, [wCurMap] cp PEWTER_POKECENTER jr nz, .regularCenter - call Func_154a + call CheckPikachuAsleep jr z, .regularCenter ld hl, LooksContentText ; if pikachu is sleeping, don't heal call PrintText @@ -27,7 +27,7 @@ DisplayPokemonCenterDialogue_: ; 6d97 (1:6d97) call SetLastBlackoutMap callab IsStarterPikachuInOurParty jr nc, .notHealingPlayerPikachu - call Func_154a + call CheckPikachuAsleep jr nz, .notHealingPlayerPikachu call LoadCurrentMapView call Delay3 @@ -38,7 +38,7 @@ DisplayPokemonCenterDialogue_: ; 6d97 (1:6d97) call PrintText ld c, 64 call DelayFrames - call Func_154a + call CheckPikachuAsleep jr nz, .playerPikachuNotOnScreen call Func_152d callab IsStarterPikachuInOurParty @@ -58,7 +58,7 @@ DisplayPokemonCenterDialogue_: ; 6d97 (1:6d97) ld [wLastMusicSoundID], a ld [wNewSoundID], a call PlaySound - call Func_154a + call CheckPikachuAsleep jr nz, .doNotReturnPikachu callab IsStarterPikachuInOurParty call c, Func_6eaa diff --git a/engine/pikachu_pic_animation.asm b/engine/pikachu_pic_animation.asm new file mode 100755 index 00000000..c16e3e5f --- /dev/null +++ b/engine/pikachu_pic_animation.asm @@ -0,0 +1,3449 @@ +IsPlayerTalkingToPikachu:: ; fcf0c (3f:4f0c) + ld a, [wd436] + and a + ret z + ld a, [hSpriteIndexOrTextID] + cp $f + ret nz + call InitializePikachuTextID + xor a + ld [hSpriteIndexOrTextID], a + ld [wd436], a + ret + +InitializePikachuTextID: ; fcf20 (3f:4f20) + ld a, $d4 ; display + ld [hSpriteIndexOrTextID], a + xor a + ld [wPlayerMovingDirection], a + ld a, $1 + ld [wAutoTextBoxDrawingControl], a + call DisplayTextID + xor a + ld [wAutoTextBoxDrawingControl], a + ret + +DoStarterPikachuEmotions: ; fcf35 (3f:4f35) + ld e, a + ld d, $0 + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] +.loop + ld a, [de] + inc de + cp $ff + jr z, .done + ld c, a + ld b, $0 + ld hl, StarterPikachuEmotionsJumptable + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + jr .loop +.done + ret + +StarterPikachuEmotionsJumptable: ; fcf54 (3f:4f54) + dw StarterPikachuEmotionCommand_nop ; 0 + dw StarterPikachuEmotionCommand_text ; 1 + dw StarterPikachuEmotionCommand_pcm ; 2 + dw StarterPikachuEmotionCommand_emote ; 3 + dw StarterPikachuEmotionCommand_4 ; 4 + dw StarterPikachuEmotionCommand_5 ; 5 + dw StarterPikachuEmotionCommand_subcmd ; 6 + dw StarterPikachuEmotionCommand_delay ; 7 + dw StarterPikachuEmotionCommand_nop2 ; 8 + dw StarterPikachuEmotionCommand_9 ; 9 + dw StarterPikachuEmotionCommand_nop3 ; a + +StarterPikachuEmotionCommand_nop: ; fcf6a (3f:4f6a) +StarterPikachuEmotionCommand_nop3: ; fcf6a (3f:4f6a) + ret + +StarterPikachuEmotionCommand_text: ; fcf6b (3f:4f6b) + ld a, [de] + ld l, a + inc de + ld a, [de] + ld h, a + inc de + push de + call PrintText + pop de + ret + +StarterPikachuEmotionCommand_pcm: ; fcf77 (3f:4f77) + ld a, [de] + inc de + push de + ld e, a + nop + call PlayPikachuSoundClip_ + pop de + ret + +PlayPikachuSoundClip_: ; fcf81 (3f:4f81) + cp $ff + ret z + callab PlayPikachuSoundClip + ret + +StarterPikachuEmotionCommand_emote: ; fcf8d (3f:4f8d) + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + ld a, [de] + inc de + push de + call ShowPikachuEmoteBubble + pop de + pop af + ld [wUpdateSpritesEnabled], a + ret + +ShowPikachuEmoteBubble: ; fcfa2 (3f:4fa2) + ld [wWhichEmotionBubble], a + ld a, $f + ld [wEmotionBubbleSpriteIndex], a + predef EmotionBubble + ret + +StarterPikachuEmotionCommand_4: ; fcfb0 (3f:4fb0) + ld a, [de] + inc de + ld l, a + ld a, [de] + inc de + ld h, a + push de + ld b, $3f + call Func_fd2a1 + pop de + ret + +StarterPikachuEmotionCommand_delay: ; fcfbe (3f:4fbe) + ld a, [de] + inc de + push de + ld c, a + call DelayFrames + pop de + ret + +StarterPikachuEmotionCommand_subcmd: ; fcfc7 (3f:4fc7) + ld a, [de] + inc de + push de + ld e, a + ld d, $0 + ld hl, Jumptable_fcfda + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + pop de + ret + +Jumptable_fcfda: + dw LoadPikachuSpriteIntoVRAM + dw LoadFontTilePatterns + dw Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3 + dw WaitForTextScrollButtonPress + dw PikachuPewterPokecenterCheck + dw PikachuFanClubCheck + dw PikachuBillsHouseCheck + +StarterPikachuEmotionCommand_nop2: ; fcfe8 (3f:4fe8) + ret + +StarterPikachuEmotionCommand_9: ; fcfe9 (3f:4fe9) + push de + call Func_fcff2 + call UpdateSprites + pop de + ret + +Func_fcff2: ; fcff2 (3f:4ff2) + ld a, [wSpriteStateData1 + $9] + xor $4 + ld [wSpriteStateData1 + $f9], a + ret + +Func_fcffb: ; fcffb (3f:4ffb) +; Inexplicably empty. + rept 5 + nop + endr + ret + +Func_fd001:: ; fd001 (3f:5001) + ld a, e + jr asm_fd00f + +Func_fd004:: ; fd004 (3f:5004) + call Func_fd05e + jr c, asm_fd00f + call GetPikaPicAnimationScriptIndex + call Func_fcffb +asm_fd00f: ; fd00f (3f:500f) + ld [wExpressionNumber], a + ld hl, PikachuEmotionTable + call DoStarterPikachuEmotions + ret + +PikachuEmotionTable: ; fd019 (3f:4019) + dw PikachuEmotion0_fd115 + dw PikachuEmotion1_fd141 + dw PikachuEmotion2_fd116 + dw PikachuEmotion3_fd160 + dw PikachuEmotion4_fd136 + dw PikachuEmotion5_fd14d + dw PikachuEmotion6_fd153 + dw PikachuEmotion7_fd128 + dw PikachuEmotion8_fd147 + dw PikachuEmotion9_fd166 + dw PikachuEmotion10_fd11e + dw PikachuEmotion11_fd173 + dw PikachuEmotion12_fd17a + dw PikachuEmotion13_fd180 + dw PikachuEmotion14_fd189 + dw PikachuEmotion15_fd191 + dw PikachuEmotion16_fd197 + dw PikachuEmotion17_fd19d + dw PikachuEmotion18_fd1a3 + dw PikachuEmotion19_fd1a9 + dw PikachuEmotion20_fd1b1 + dw PikachuEmotion21_fd1b9 + dw PikachuEmotion22_fd1c1 + dw PikachuEmotion23_fd1c7 + dw PikachuEmotion24_fd1cf + dw PikachuEmotion25_fd1d7 + dw PikachuEmotion26_fd1df + dw PikachuEmotion27_fd1eb + dw PikachuEmotion28_fd1f1 + dw PikachuEmotion29_fd1f7 + dw PikachuEmotion30_fd1fc + dw PikachuEmotion31_fd20a + dw PikachuEmotion32_fd213 + dw PikachuEmotion33_fd05d + +PikachuEmotion33_fd05d: ; fd05d (3f:505d) + db $ff + +Func_fd05e: ; fd05e (3f:505e) + ld a, [wCurMap] + cp POKEMON_FAN_CLUB + jr nz, .notFanClub + ld hl, wPreventBlackout + bit 7, [hl] + ld a, $1d + jr z, .asm_fd0c9 + call CheckPikachuAsleep + ld a, $1e + jr nz, .asm_fd0c9 + jr .asm_fd096 +.notFanClub + ld a, [wCurMap] + cp PEWTER_POKECENTER + jr nz, .notPewterPokecenter + call CheckPikachuAsleep + ld a, $1a + jr nz, .asm_fd0c9 + jr .asm_fd096 +.notPewterPokecenter + callab Func_f24ae + ld a, e + cp $ff + jr nz, .asm_fd0c9 + jr .asm_fd096 +.asm_fd096 + call IsPlayerPikachuAsleepInParty + ld a, $b + jr c, .asm_fd0c9 + callab Func_fce73 ; same bank + ld a, $1c + jr c, .asm_fd0c9 + ld a, [wCurMap] + cp POKEMONTOWER_1 + jr c, .notInLavenderTower + cp POKEMONTOWER_7 + 1 + ld a, $16 + jr c, .asm_fd0c9 +.notInLavenderTower + ld a, [wd49c] + and a + jr z, .asm_fd0c7 + dec a + ld c, a + ld b, $0 + ld hl, Pointer_fd0cb + add hl, bc + ld a, [hl] + jr .asm_fd0c9 +.asm_fd0c7 + and a + ret +.asm_fd0c9 + scf + ret + +Pointer_fd0cb: + db $12, $15, $17, $18, $19 + +IsPlayerPikachuAsleepInParty:: ; fd0d0 (3f:50d0) + xor a + ld [wWhichPokemon], a +.loop + ld a, [wWhichPokemon] + ld c, a + ld b, $0 + ld hl, wPartySpecies + add hl, bc + ld a, [hl] + cp $ff + jr z, .done + cp PIKACHU + jr nz, .curMonNotStarterPikachu + callab IsThisPartymonStarterPikachu + jr nc, .curMonNotStarterPikachu + ld a, [wWhichPokemon] + ld hl, wPartyMon1Status + ld bc, wPartyMon2 - wPartyMon1 + call AddNTimes + ld a, [hl] + and SLP + jr z, .done + jr .curMonSleepingPikachu +.curMonNotStarterPikachu + ld a, [wWhichPokemon] + cp PARTY_LENGTH - 1 + jr z, .done + inc a + ld [wWhichPokemon], a + jr .loop +.curMonSleepingPikachu + scf + ret +.done + and a + ret + +PikachuEmotion0_fd115: ; fd115 (3f:5115) + db $ff + +PikachuEmotion2_fd116: ; fd116 (3f:5116) + pikaemotion_dummy2 + pikaemotion_emotebubble SMILE_BUBBLE + pikaemotion_pcm PikachuCry35 + pikaemotion_5 $2 + db $ff + +PikachuEmotion10_fd11e: ; fd11e (3f:511e) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_5 $a + db $ff + +PikachuEmotion7_fd128: ; fd128 (3f:5128) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_4 Pointer_fd224 + pikaemotion_pcm PikachuCry1 + pikaemotion_4 Pointer_fd224 + pikaemotion_5 $7 + db $ff + +PikachuEmotion4_fd136: ; fd136 (3f:5136) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_4 Pointer_fd230 + pikaemotion_pcm PikachuCry29 + pikaemotion_5 $4 + db $ff + +PikachuEmotion1_fd141: ; fd141 (3f:5141) + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_5 $1 + db $ff + +PikachuEmotion8_fd147: ; fd147 (3f:5147) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry39 + pikaemotion_5 $8 + db $ff + +PikachuEmotion5_fd14d: ; fd14d (3f:514d) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry31 + pikaemotion_5 $5 + db $ff + +PikachuEmotion6_fd153: ; fd153 (3f:5153) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_pcm + pikaemotion_4 Pointer_fd21e + pikaemotion_emotebubble SKULL_BUBBLE + pikaemotion_5 $6 + db $ff + +PikachuEmotion3_fd160: ; fd160 (3f:5160) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry40 + pikaemotion_5 $3 + db $ff + +PikachuEmotion9_fd166: ; fd166 (3f:5166) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_pcm PikachuCry6 + pikaemotion_4 Pointer_fd218 + pikaemotion_emotebubble SKULL_BUBBLE + pikaemotion_5 $9 + db $ff + +PikachuEmotion11_fd173: ; fd173 (3f:5173) + pikaemotion_emotebubble ZZZ_BUBBLE + pikaemotion_pcm PikachuCry37 + pikaemotion_5 $b + db $ff + +PikachuEmotion12_fd17a: ; fd17a (3f:517a) + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_5 $c + db $ff + +PikachuEmotion13_fd180: ; fd180 (3f:5180) + pikaemotion_dummy2 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADEXTRAPIKASPRITES + pikaemotion_4 Pointer_fd21e + pikaemotion_5 $d + db $ff + +PikachuEmotion14_fd189: ; fd189 (3f:5189) + pikaemotion_dummy2 + pikaemotion_emotebubble BOLT_BUBBLE + pikaemotion_pcm PikachuCry10 + pikaemotion_5 $e + db $ff + +PikachuEmotion15_fd191: ; fd191 (3f:5191) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry34 + pikaemotion_5 $f + db $ff + +PikachuEmotion16_fd197: ; fd197 (3f:5197) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry33 + pikaemotion_5 $10 + db $ff + +PikachuEmotion17_fd19d: ; fd19d (3f:519d) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry13 + pikaemotion_5 $11 + db $ff + +PikachuEmotion18_fd1a3: ; fd1a3 (3f:51a3) + pikaemotion_dummy2 + pikaemotion_pcm + pikaemotion_5 $12 + db $ff + +PikachuEmotion19_fd1a9: ; fd1a9 (3f:51a9) + pikaemotion_dummy2 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry33 + pikaemotion_5 $13 + db $ff + +PikachuEmotion20_fd1b1: ; fd1b1 (3f:51b1) + pikaemotion_dummy2 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_5 $14 + db $ff + +PikachuEmotion21_fd1b9: ; fd1b9 (3f:51b9) + pikaemotion_dummy2 + pikaemotion_emotebubble FISH_BUBBLE + pikaemotion_pcm + pikaemotion_5 $15 + db $ff + +PikachuEmotion22_fd1c1: ; fd1c1 (3f:51c1) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry4 + pikaemotion_5 $16 + db $ff + +PikachuEmotion23_fd1c7: ; fd1c7 (3f:51c7) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry19 + pikaemotion_5 $17 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + db $ff + +PikachuEmotion24_fd1cf: ; fd1cf (3f:51cf) + pikaemotion_dummy2 + pikaemotion_emotebubble EXCLAMATION_BUBBLE + pikaemotion_pcm + pikaemotion_5 $18 + db $ff + +PikachuEmotion25_fd1d7: ; fd1d7 (3f:51d7) + pikaemotion_dummy2 + pikaemotion_emotebubble BOLT_BUBBLE + pikaemotion_pcm PikachuCry35 + pikaemotion_5 $19 + db $ff + +PikachuEmotion26_fd1df: ; fd1df (3f:51df) + pikaemotion_dummy2 + pikaemotion_emotebubble ZZZ_BUBBLE + pikaemotion_pcm PikachuCry37 + pikaemotion_5 $1a + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKPEWTERCENTER + db $ff + +PikachuEmotion27_fd1eb: ; fd1eb (3f:51eb) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry9 + pikaemotion_5 $1b + db $ff + +PikachuEmotion28_fd1f1: ; fd1f1 (3f:51f1) + pikaemotion_dummy2 + pikaemotion_pcm PikachuCry15 + pikaemotion_5 $1c + db $ff + +PikachuEmotion29_fd1f7: ; fd1f7 (3f:51f7) + pikaemotion_pcm PikachuCry5 + pikaemotion_5 $a + db $ff + +PikachuEmotion30_fd1fc: ; fd1fc (3f:51fc) + pikaemotion_9 + pikaemotion_emotebubble HEART_BUBBLE + pikaemotion_pcm PikachuCry5 + pikaemotion_5 $14 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_LOADFONT + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKLAVENDERTOWER + db $ff + +PikachuEmotion31_fd20a: ; fd20a (3f:520a) + pikaemotion_pcm PikachuCry19 + pikaemotion_5 $17 + pikaemotion_subcmd PIKAEMOTION_SUBCMD_SHOWMAPVIEW + pikaemotion_subcmd PIKAEMOTION_SUBCMD_CHECKBILLSHOUSE + db $ff + +PikachuEmotion32_fd213: ; fd213 (3f:5213) + pikaemotion_pcm PikachuCry26 + pikaemotion_5 $17 + db $ff + +Pointer_fd218: ; fd218 (3f:5218) + + db $00 + db $39, $01 + db $3e, $1e + db $3f + +Pointer_fd21e: ; fd21e (3f:521e) + db $00 + db $39, $00 + db $3e, $1e + db $3f + +Pointer_fd224: ; fd224 (3f:5224) + db $00 + db $3c, $07, $2f + db $3c, $07, $2f + db $3f + +Pointer_fd22c: ; fd22c (3f:522c) + db $3b, $1f, $03 + db $3f + +Pointer_fd230: ; fd230 (3f:5230) + db $00 + db $3c, $0f, $1f + db $3c, $0f, $1f + db $3f + +Pointer_fd238: ; fd238 (3f:5238) + db $00 + db $05, $07 + db $39, $00 + db $05, $07 + db $06, $07 + db $39, $00 + db $06, $07 + db $08, $07 + db $39, $00 + db $08, $07 + db $07, $07 + db $39, $00 + db $07, $07 + db $3f + +Func_fd252: ; fd252 (3f:5252) + ld a, $40 + ld [h_0xFFFC], a + call LoadPikachuSpriteIntoVRAM + call Func_fd266 + and a + jr z, .asm_fd262 + call Func_159b +.asm_fd262 + xor a + ld [h_0xFFFC], a + ret + +Func_fd266: + ld a, [wSpriteStateData2 + 15 * 16 + 4] + ld e, a + ld a, [wSpriteStateData2 + 15 * 16 + 5] + ld d, a + ld a, [wYCoord] + add 4 + cp e + jr z, .asm_fd280 + jr nc, .asm_fd27e + ld hl, Data_fd294 + ld a, 1 + ret + +.asm_fd27e + xor a + ret + +.asm_fd280 + ld a, [wXCoord] + add 4 + cp d + jr c, .asm_fd28e + ld hl, Data_fd299 + ld a, 2 + ret + +.asm_fd28e + ld hl, Data_fd29d + ld a, 3 + ret + +Data_fd294: + db $00 + db $36 + db $2b + db $34 + db $3f + +Data_fd299: + db $00 + db $36 + db $34 + db $3f + +Data_fd29d: + db $00 + db $36 + db $33 + db $3f + +Func_fd2a1:: ; fd2a1 (3f:52a1) + ld a, b + ld [wd44a], a + ld a, l + ld [wd44b], a + ld a, h + ld [wd44b + 1], a + call PikachuSwapSpriteStateData +.loop + call Func_fd2f5 + jr nc, .done + call Func_fd329 + jr .loop + +.done + call PikachuSwapSpriteStateData + call DelayFrame + ret + +PikachuSwapSpriteStateData: + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + push hl + push de + push bc + + ld hl, wSpriteStateData1 + ld de, wSpriteStateData1 + $f0 + ld c, $10 + call SwapBytes3f + + ld hl, wSpriteStateData2 + ld de, wSpriteStateData2 + $f0 + ld c, $10 + call SwapBytes3f + + pop bc + pop de + pop hl + pop af + ld [wUpdateSpritesEnabled], a + ret + +SwapBytes3f: +.loop + ld b, [hl] + ld a, [de] + ld [hli], a + ld a, b + ld [de], a + inc de + dec c + jr nz, .loop + ret + +Func_fd2f5: + call Func_157c + cp $3f + ret z + ld c, a + ld b, 0 + ld hl, Data_fd3b0 + add hl, bc + add hl, bc + add hl, bc + add hl, bc + ld a, [hli] + ld [wPikaPicAnimPointer + 1], a + ld a, [hli] + cp $80 + jr nz, .asm_fd311 + call Func_157c +.asm_fd311 + ld [wPikaPicAnimPointer], a + ld a, [hli] + ld [wPikaPicAnimCurGraphicID], a + ld a, [hli] + cp $80 + jr nz, .asm_fd320 + call Func_157c +.asm_fd320 + ld [wPikaPicAnimPointerSetupFinished], a + xor a + ld [wPikaPicAnimTimer], a + scf + ret + +Func_fd329: + xor a + ld [$d44c], a + ld [wd457], a + ld [wd458], a + ld a, [wSpriteStateData2 + 7] + push af +.asm_fd337 + ld bc, wSpriteStateData1 + ld a, [wPikaPicAnimPointer + 1] + ld hl, Jumptable_fd4ac + call Func_fd365 + ld a, [wPikaPicAnimCurGraphicID] + ld hl, Jumptable_fd65c + call Func_fd365 + call Func_fd36e + call Func_fd39d + call DelayFrame + call DelayFrame + ld hl, $d44c + bit 7, [hl] + jr z, .asm_fd337 + pop af + ld [wSpriteStateData2 + 7], a + scf + ret + +Func_fd365: + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +Func_fd36e: + ld hl, 2 + add hl, bc + ld a, [wPikaPicAnimTimer + 1] + ld [hl], a + ld a, [wPikaSpriteY] + ld d, a + ld a, [wd456] + add d + ld hl, 4 + add hl, bc + ld [hl], a + ld a, [wPikaPicAnimDelay] + ld d, a + ld a, [wPikaPicTextboxStartY] + add d + ld hl, 6 + add hl, bc + ld [hl], a + ld hl, $d44c + bit 6, [hl] + ret z + ld hl, wSpriteStateData2 + 7 - wSpriteStateData1 + add hl, bc + ld [hl], 0 + ret + +Func_fd39d: + ld hl, $d44c + bit 6, [hl] + res 6, [hl] + ld hl, wd736 + res 6, [hl] + ret z + set 6, [hl] + call Func_fd7f3 + ret + +Data_fd3b0: + db $01, $00, $00, $00 ; $00 + db $03, $80, $01, $00 ; $01 + db $04, $80, $01, $00 ; $02 + db $05, $80, $01, $00 ; $03 + db $06, $80, $01, $00 ; $04 + db $07, $80, $01, $00 ; $05 + db $08, $80, $01, $00 ; $06 + db $09, $80, $01, $00 ; $07 + db $0a, $80, $01, $00 ; $08 + db $03, $80, $06, $00 ; $09 + db $04, $80, $06, $00 ; $0a + db $05, $80, $06, $00 ; $0b + db $06, $80, $06, $00 ; $0c + db $07, $80, $06, $00 ; $0d + db $08, $80, $06, $00 ; $0e + db $09, $80, $06, $00 ; $0f + db $0a, $80, $06, $00 ; $10 + db $03, $80, $03, $80 ; $11 + db $04, $80, $03, $80 ; $12 + db $05, $80, $03, $80 ; $13 + db $06, $80, $03, $80 ; $14 + db $07, $80, $03, $80 ; $15 + db $08, $80, $03, $80 ; $16 + db $09, $80, $03, $80 ; $17 + db $0a, $80, $03, $80 ; $18 + db $03, $80, $07, $80 ; $19 + db $04, $80, $07, $80 ; $1a + db $05, $80, $07, $80 ; $1b + db $06, $80, $07, $80 ; $1c + db $0b, $27, $02, $00 ; $1d + db $0c, $27, $02, $00 ; $1e + db $0d, $27, $02, $00 ; $1f + db $0e, $27, $02, $00 ; $20 + db $0f, $27, $02, $00 ; $21 + db $10, $27, $02, $00 ; $22 + db $11, $27, $02, $00 ; $23 + db $12, $27, $02, $00 ; $24 + db $0b, $0f, $02, $00 ; $25 + db $0c, $0f, $02, $00 ; $26 + db $0d, $0f, $02, $00 ; $27 + db $0e, $0f, $02, $00 ; $28 + db $0f, $0f, $02, $00 ; $29 + db $10, $0f, $02, $00 ; $2a + db $11, $0f, $02, $00 ; $2b + db $12, $0f, $02, $00 ; $2c + db $0b, $0f, $08, $17 ; $2d + db $0c, $0f, $08, $17 ; $2e + db $0d, $0f, $08, $17 ; $2f + db $0e, $0f, $08, $17 ; $30 + db $0f, $0f, $08, $17 ; $31 + db $10, $0f, $08, $17 ; $32 + db $11, $0f, $08, $17 ; $33 + db $12, $0f, $08, $17 ; $34 + db $13, $0f, $06, $00 ; $35 + db $14, $0f, $06, $00 ; $36 + db $15, $0f, $06, $00 ; $37 + db $16, $0f, $06, $00 ; $38 + db $02, $80, $04, $00 ; $39 + db $02, $80, $05, $00 ; $3a + db $02, $80, $03, $80 ; $3b + db $02, $80, $07, $80 ; $3c + db $02, $80, $09, $80 ; $3d + db $02, $80, $06, $00 ; $3e + +Jumptable_fd4ac: + dw Func_fd4e5 + dw Func_fd4e9 + dw Func_fd504 + dw Func_fd50c + dw Func_fd511 + dw Func_fd518 + dw Func_fd52c + dw Func_fd540 + dw Func_fd553 + dw Func_fd566 + dw Func_fd579 + dw Func_fd5b1 + dw Func_fd5b5 + dw Func_fd5b9 + dw Func_fd5bd + dw Func_fd5c1 + dw Func_fd5c5 + dw Func_fd5c9 + dw Func_fd5cd + dw Func_fd5ea + dw Func_fd5ee + dw Func_fd5f2 + dw Func_fd5f6 + dw Func_fd4e5 + +Func_fd4dc: + ld a, [$d44c] + set 7, a + ld [$d44c], a + ret + +Func_fd4e5: + call Func_fd4dc + ret + +Func_fd4e9: + ld hl, 4 + add hl, bc + ld a, [hl] + ld [wPikaSpriteY], a + ld hl, 6 + add hl, bc + ld a, [hl] + ld [wPikaPicAnimDelay], a + xor a + ld [wd456], a + ld [wPikaPicTextboxStartY], a + call Func_fd4dc + ret + +Func_fd504: + call Func_fd775 + ret nz + call Func_fd4dc + ret + +Func_fd50c: + call GetObjectFacing + jr asm_fd58c + +Func_fd511: + call GetObjectFacing + xor %100 + jr asm_fd58c + +Func_fd518: + call GetObjectFacing + ld hl, Data_fd523 + call Func_fd5a0 + jr asm_fd58c + +Data_fd523: + db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT + db SPRITE_FACING_UP, SPRITE_FACING_LEFT + db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN + db SPRITE_FACING_RIGHT, SPRITE_FACING_UP + db $ff + +Func_fd52c: + call GetObjectFacing + ld hl, Data_fd537 + call Func_fd5a0 + jr asm_fd58c + +Data_fd537: + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT + db SPRITE_FACING_UP, SPRITE_FACING_RIGHT + db SPRITE_FACING_LEFT, SPRITE_FACING_UP + db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN + db $ff + +Func_fd540: + call GetObjectFacing + ld hl, Data_fd54b + call Func_fd5a0 + jr asm_fd58c + +Data_fd54b: + db SPRITE_FACING_DOWN, SPRITE_FACING_UP | $10 + db SPRITE_FACING_UP, SPRITE_FACING_LEFT | $10 + db SPRITE_FACING_LEFT, SPRITE_FACING_DOWN | $10 + db SPRITE_FACING_RIGHT, SPRITE_FACING_RIGHT | $10 + +Func_fd553: + call GetObjectFacing + ld hl, Data_fd55e + call Func_fd5a0 + jr asm_fd58c + +Data_fd55e: + db SPRITE_FACING_DOWN, SPRITE_FACING_DOWN | $10 + db SPRITE_FACING_UP, SPRITE_FACING_RIGHT | $10 + db SPRITE_FACING_LEFT, SPRITE_FACING_LEFT | $10 + db SPRITE_FACING_RIGHT, SPRITE_FACING_UP | $10 + +Func_fd566: + call GetObjectFacing + ld hl, Data_fd571 + call Func_fd5a0 + jr asm_fd58c + +Data_fd571: + db SPRITE_FACING_DOWN, SPRITE_FACING_RIGHT | $10 + db SPRITE_FACING_UP, SPRITE_FACING_DOWN | $10 + db SPRITE_FACING_LEFT, SPRITE_FACING_UP | $10 + db SPRITE_FACING_RIGHT, SPRITE_FACING_LEFT | $10 + +Func_fd579: + call GetObjectFacing + ld hl, Data_fd584 + call Func_fd5a0 + jr asm_fd58c + +Data_fd584: + db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT | $10 + db SPRITE_FACING_UP, SPRITE_FACING_UP | $10 + db SPRITE_FACING_LEFT, SPRITE_FACING_RIGHT | $10 + db SPRITE_FACING_RIGHT, SPRITE_FACING_DOWN | $10 + +asm_fd58c + rrca + rrca + and $7 + ld e, a + call Func_fd784 + ld d, a + call UpdatePikachuPosition + call Func_fd775 + ret nz + call Func_fd4dc + ret + +Func_fd5a0: + push de + ld d, a +.asm_fd5a2 + ld a, [hli] + cp d + jr z, .asm_fd5ad + inc hl + cp $ff + jr nz, .asm_fd5a2 + pop de + ret + +.asm_fd5ad + ld a, [hl] + pop de + scf + ret + +Func_fd5b1: + ld a, SPRITE_FACING_DOWN >> 2 + jr asm_fd5d1 + +Func_fd5b5: + ld a, SPRITE_FACING_UP >> 2 + jr asm_fd5d1 + +Func_fd5b9: + ld a, SPRITE_FACING_LEFT >> 2 + jr asm_fd5d1 + +Func_fd5bd: + ld a, SPRITE_FACING_RIGHT >> 2 + jr asm_fd5d1 + +Func_fd5c1: + ld e, 4 + jr asm_fd5d5 + +Func_fd5c5: + ld e, 5 + jr asm_fd5d5 + +Func_fd5c9: + ld e, 6 + jr asm_fd5d5 + +Func_fd5cd: + ld e, 7 + jr asm_fd5d5 + +asm_fd5d1 + ld e, a + call SetObjectFacing +asm_fd5d5 + call Func_fd784 + ld d, a + push de + call UpdatePikachuPosition + pop de + call Func_fd775 + ret nz + ld a, e + call Func_fd7cb + call Func_fd4dc + ret + +Func_fd5ea: + ld a, SPRITE_FACING_DOWN >> 2 + jr asm_fd5fa + +Func_fd5ee: + ld a, SPRITE_FACING_UP >> 2 + jr asm_fd5fa + +Func_fd5f2: + ld a, SPRITE_FACING_LEFT >> 2 + jr asm_fd5fa + +Func_fd5f6: + ld a, SPRITE_FACING_RIGHT >> 2 + jr asm_fd5fa + +asm_fd5fa + call SetObjectFacing + call Func_fd4dc + ret + +UpdatePikachuPosition: + push de + ld d, 0 + ld hl, Jumptable_fd60f + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de + ld a, d + jp [hl] + +Jumptable_fd60f: + dw MovePikachuSpriteDown + dw MovePikachuSpriteUp + dw MovePikachuSpriteLeft + dw MovePikachuSpriteRight + dw MovePikachuSpriteDownLeft + dw MovePikachuSpriteDownRight + dw MovePikachuSpriteUpLeft + dw MovePikachuSpriteUpRight + +MovePikachuSpriteDown: + ld d, 0 + ld e, a + jr asm_fd64d + +MovePikachuSpriteUp: + ld d, 0 + cpl + inc a + ld e, a + jr asm_fd64d + +MovePikachuSpriteLeft: + cpl + inc a + ld d, a + ld e, 0 + jr asm_fd64d + +MovePikachuSpriteRight: + ld d, a + ld e, 0 + jr asm_fd64d + +MovePikachuSpriteDownLeft: + ld e, a + cpl + inc a + ld d, a + jr asm_fd64d + +MovePikachuSpriteDownRight: + ld e, a + ld d, a + jr asm_fd64d + +MovePikachuSpriteUpLeft: + cpl + inc a + ld e, a + ld d, a + jr asm_fd64d + +MovePikachuSpriteUpRight: + ld d, a + cpl + inc a + ld e, a + jr asm_fd64d + +asm_fd64d + ld a, [wPikaPicAnimDelay] + add d + ld [wPikaPicAnimDelay], a + ld a, [wPikaSpriteY] + add e + ld [wPikaSpriteY], a + ret + +Jumptable_fd65c: + dw Func_fd678 + dw Func_fd6a3 + dw Func_fd698 + dw Func_fd6f4 + dw Func_fd6ff + dw Func_fd718 + dw Func_fd68c + dw Func_fd6c6 + dw Func_fd6c0 + dw Func_fd6e2 + dw Func_fd68b + +Func_fd672: + ld hl, $d44c + set 6, [hl] + ret + +Func_fd678: + ld hl, 7 + add hl, bc + xor a + ld [hli], a + ld [hl], a + call Func_fd74a + ld d, a + call GetObjectFacing + or d + ld [wPikaPicAnimTimer + 1], a + ret + +Func_fd68b: + ret + +Func_fd68c: + call Func_fd74a + ld d, a + call Func_fd755 + or d + ld [wPikaPicAnimTimer + 1], a + ret + +Func_fd698: + call Func_fd74a + ld d, a + call GetObjectFacing + or d + ld d, a + jr asm_fd6ac + +Func_fd6a3: + call Func_fd74a + ld d, a + call Func_fd755 + or d + ld d, a +asm_fd6ac + ld hl, 8 + add hl, bc + call Func_fd78e + jr nz, .asm_fd6b6 + inc [hl] +.asm_fd6b6 + ld a, [hl] + rrca + rrca + and 3 + or d + ld [wPikaPicAnimTimer + 1], a + ret + +Func_fd6c0: + call GetObjectFacing + ld d, a + jr asm_fd6ca + +Func_fd6c6: + call Func_fd755 + ld d, a +asm_fd6ca + call Func_fd74a + or d + ld d, a + call Func_fd736 + or d + ld [wPikaPicAnimTimer + 1], a + call Func_fd79d + ld [wd456], a + and a + ret z + call Func_fd672 + ret + +Func_fd6e2: + call GetObjectFacing + ld d, a + call Func_fd74a + or d + ld [wPikaPicAnimTimer + 1], a + call Func_fd79d + ld [wd456], a + ret + +Func_fd6f4: + ld a, [wPikaPicAnimPointerSetupFinished] + and $40 + cp $40 + jr z, Func_fd6ff + jr Func_fd718 + +Func_fd6ff: + call Func_fd755 + ld d, a + call Func_fd78e + jr nz, .asm_fd710 + ld hl, Data_fd731 +.asm_fd70b + ld a, [hli] + cp d + jr nz, .asm_fd70b + ld d, [hl] +.asm_fd710 + call Func_fd74a + or d + ld [wPikaPicAnimTimer + 1], a + ret + +Func_fd718: + call Func_fd755 + ld d, a + call Func_fd78e + jr nz, .asm_fd529 + ld hl, Data_fd731End +.asm_fd524 + ld a, [hld] + cp d + jr nz, .asm_fd524 + ld d, [hl] +.asm_fd529 + call Func_fd74a + or d + ld [wPikaPicAnimTimer + 1], a + ret + +Data_fd731: + db SPRITE_FACING_DOWN + db SPRITE_FACING_LEFT + db SPRITE_FACING_UP + db SPRITE_FACING_RIGHT + db SPRITE_FACING_DOWN +Data_fd731End: + +Func_fd736: + push hl + ld hl, 7 + add hl, bc + ld a, [hl] + inc a + and $3 + ld [hli], a + jr nz, .asm_fd747 + ld a, [hl] + inc a + and $3 + ld [hl], a +.asm_fd747 + ld a, [hl] + pop hl + ret + +Func_fd74a: + push hl + ld hl, wSpriteStateData2 - wSpriteStateData1 + 14 + add hl, bc + ld a, [hl] + dec a + swap a + pop hl + ret + +Func_fd755: + push hl + ld hl, 2 + add hl, bc + ld a, [hl] + and $c + pop hl + ret + +GetObjectFacing: + push hl + ld hl, 9 + add hl, bc + ld a, [hl] + and $c + pop hl + ret + +SetObjectFacing: + push hl + ld hl, 9 + add hl, bc + add a + add a + and $c + ld [hl], a + pop hl + ret + +Func_fd775: + ld hl, wd457 + inc [hl] + ld a, [wPikaPicAnimPointer] + and $1f + inc a + cp [hl] + ret nz + ld [hl], 0 + ret + +Func_fd784: + ld a, [wPikaPicAnimPointer] + swap a + rrca + and $3 + inc a + ret + +Func_fd78e: + ld hl, wd458 + inc [hl] + ld a, [wPikaPicAnimPointerSetupFinished] + and $f + inc a + cp [hl] + ret nz + ld [hl], 0 + ret + +Func_fd79d: + call Func_fd7b2 + ld a, [wd458] + add e + ld [wd458], a + add $20 + ld e, a + push hl + push bc + call Sine_e + pop bc + pop hl + ret + +Func_fd7b2: + ld a, [wPikaPicAnimPointerSetupFinished] + and $f + inc a + ld d, a + ld a, [wPikaPicAnimPointerSetupFinished] + swap a + and $7 + ld e, a + ld a, 1 + jr z, .asm_fd7c9 +.asm_fd7c5 + add a + dec e + jr nz, .asm_fd7c5 +.asm_fd7c9 + ld e, a + ret + +Func_fd7cb: + push bc + ld c, a + ld b, 0 + ld hl, Data_fd7e3 + add hl, bc + add hl, bc + ld d, [hl] + inc hl + ld e, [hl] + pop bc + ld hl, wSpriteStateData2 - wSpriteStateData1 + 4 + add hl, bc + ld a, [hl] + add e + ld [hli], a + ld a, [hl] + add d + ld [hl], a + ret + +Data_fd7e3: + db 0, 1 + db 0, -1 + db -1, 0 + db 1, 0 + db -1, 1 + db 1, 1 + db -1, -1 + db 1, -1 + +Func_fd7f3: + push bc + push de + push hl + + ld bc, wOAMBuffer + 4 * 36 + ld a, [wPikaSpriteY] + ld e, a + ld a, [wPikaPicAnimDelay] + ld d, a + ld hl, Data_fd80b + call Func_fd814 + + pop hl + pop de + pop bc + ret + +Data_fd80b: + db $02 + db $0c, $00, $ff, 0 + db $0c, $08, $ff, 1 << OAM_X_FLIP + +Func_fd814: + ld a, e + add $10 + ld e, a + ld a, d + add $8 + ld d, a + ld a, [hli] +.asm_fd81d + push af + ld a, [hli] + add e + ld [bc], a + inc bc + ld a, [hli] + add d + ld [bc], a + inc bc + ld a, [hli] + ld [bc], a + inc bc + ld a, [hli] + ld [bc], a + inc bc + pop af + dec a + jr nz, .asm_fd81d + ret + +LoadPikachuShadowIntoVRAM: + ld hl, vNPCSprites2 + $7f * $10 + ld de, LedgeHoppingShadowGFX_3F + lb bc, BANK(LedgeHoppingShadowGFX_3F), (LedgeHoppingShadowGFX_3FEnd - LedgeHoppingShadowGFX_3F) / 8 + jp CopyVideoDataDoubleAlternate + +LedgeHoppingShadowGFX_3F: +INCBIN "gfx/ledge_hopping_shadow.1bpp" +LedgeHoppingShadowGFX_3FEnd: + +LoadPikachuBallIconIntoVRAM: + ld hl, vNPCSprites2 + $7e * $10 + ld de, GFX_fd86b + lb bc, BANK(GFX_fd86b), 1 + jp CopyVideoDataDoubleAlternate + +Func_fd851: + ld hl, vNPCSprites + $c * $10 + ld a, 3 +.asm_fd856 + push af + push hl + ld de, GFX_fd86b + lb bc, BANK(GFX_fd86b), 4 + call CopyVideoDataAlternate + pop hl + ld de, 4 * $10 + add hl, de + pop af + dec a + jr nz, .asm_fd856 + ret + +GFX_fd86b: +INCBIN "gfx/unknown_fd86b.2bpp" + +LoadPikachuSpriteIntoVRAM: ; fd8ab (3f:58ab) + ld de, PikachuSprite + lb bc, BANK(PikachuSprite), (SandshrewSprite - PikachuSprite) / 32 + ld hl, vNPCSprites + $c * $10 + push bc + call CopyVideoDataAlternate + ld de, PikachuSprite + $c * $10 + ld hl, vNPCSprites2 + $c * $10 + ld a, [h_0xFFFC] + and a + jr z, .load + ld de, PikachuSprite + $c * $10 + ld hl, vNPCSprites2 + $4c * $10 +.load + pop bc + call CopyVideoDataAlternate + call LoadPikachuShadowIntoVRAM + call LoadPikachuBallIconIntoVRAM + ret + +PikachuPewterPokecenterCheck: ; fd8d4 (3f:58d4) + ld a, [wCurMap] + cp PEWTER_POKECENTER + ret nz + call ResetPikachuAsleep + call Func_fcff2 + ret + +PikachuFanClubCheck: ; fd8e1 (3f:58e1) + ld a, [wCurMap] + cp POKEMON_FAN_CLUB + ret nz + call ResetPikachuAsleep + call Func_fcff2 + ret + +PikachuBillsHouseCheck: ; fd8ee (3f:58ee) + ld a, [wCurMap] + cp BILLS_HOUSE + ret nz + call ResetPikachuAsleep + ret + +Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3: ; fd8f8 (3f:58f8) + call LoadCurrentMapView + call UpdateSprites + call Delay3 + ret + +Cosine_e: ; cosine? + ld a, e + add $10 + jr asm_fd908 + +Sine_e: ; sine? + ld a, e +asm_fd908 + and $3f + cp $20 + jr nc, .asm_fd913 + call GetSine + ld a, h + ret + +.asm_fd913 + and $1f + call GetSine + ld a, h + cpl + inc a + ret + +GetSine: + ld e, a + ld a, d + ld d, 0 + ld hl, SineWave_3f + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 +.asm_fd92b + srl a + jr nc, .asm_fd930 + add hl, de +.asm_fd930 + sla e + rl d + and a + jr nz, .asm_fd92b + ret + +SineWave_3f: + sine_wave $100 + +GetPikaPicAnimationScriptIndex: ; fd978 (3f:5978) + ld hl, PikachuMoodLookupTable + ld a, [wPikachuMood] + ld d, a +.asm_fd97f + ld a, [hli] + inc hl + cp d + jr c, .asm_fd97f + dec hl + ld e, [hl] + ld hl, PikaPicAnimationScriptPointerLookupTable + ld a, [wPikachuHappiness] + ld d, a + ld bc, 6 +.asm_fd990 + ld a, [hl] + cp d + jr nc, .asm_fd997 + add hl, bc + jr .asm_fd990 + +.asm_fd997 + ld d, 0 + add hl, de + ld a, [hl] + ret + +PikachuMoodLookupTable: +; First byte: mood threshold +; Second byte: column index in PikaPicAnimationScriptPointerLookupTable + db $28, 1 + db $7f, 2 + db $80, 3 + db $d2, 4 + db $ff, 5 + +PikaPicAnimationScriptPointerLookupTable: +; First byte: happiness threshold +; Remaining bytes: loaded based on Pikachu's mood + db $32, $0e, $0e, $06, $0d, $0d + db $64, $09, $09, $05, $0c, $0c + db $82, $03, $03, $01, $08, $08 + db $a0, $03, $03, $04, $0f, $0f + db $c8, $11, $11, $07, $02, $02 + db $fa, $11, $11, $10, $0a, $0a + db $ff, $11, $11, $13, $14, $14 + +StarterPikachuEmotionCommand_5: ; fd9d0 (3f:59d0) + ld a, [H_AUTOBGTRANSFERENABLED] + push af + xor a + ld [H_AUTOBGTRANSFERENABLED], a + ld a, [de] + ld [wExpressionNumber2], a + inc de + push de + call Func_fd9e4 + pop de + pop af + ld [H_AUTOBGTRANSFERENABLED], a + ret + +Func_fd9e4: + call Func_fda2c + callab Func_720e3 + call Func_fd9ff + call LoadCurrentPikaPicAnimScriptPointer + call Func_fda9a + call Func_fda2c + call RunDefaultPaletteCommand + ret + +Func_fd9ff: + ld hl, wPikaPicAnimPointer + ld bc, $11 + xor a + call FillMemory + ld hl, wPikaPicAnimObjectDataBufferSize + ld bc, $21 + xor a + call FillMemory + call Func_fe15c + ld hl, $64 + ld a, l + ld [wPikaPicAnimTimer], a + ld a, h + ld [wPikaPicAnimTimer + 1], a + ld a, $07 + ld [wPikaSpriteY], a + ld a, $06 + ld [wPikaPicTextboxStartY], a + ret + +Func_fda2c: + xor a + ld [H_AUTOBGTRANSFERENABLED], a + coord hl, 6, 5 + lb bc, 5, 5 + call TextBoxBorder + call Delay3 + call UpdateSprites + ld a, $01 + ld [H_AUTOBGTRANSFERENABLED], a + call Delay3 + ret + +LoadCurrentPikaPicAnimScriptPointer: + ld a, [wExpressionNumber2] + cp $1d + jr c, .valid + ld a, 0 +.valid + ld e, a + ld d, 0 + ld hl, Pointers_fda5e + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call UpdatePikaPicAnimPointer + ret + +Pointers_fda5e: + dw Data_fe28a ; 00 + dw Data_fe28a ; 01 + dw Data_fe2a4 ; 02 + dw Data_fe2be ; 03 + dw Data_fe2d8 ; 04 + dw Data_fe2f2 ; 05 + dw Data_fe30c ; 06 + dw Data_fe326 ; 07 + dw Data_fe340 ; 08 + dw Data_fe35a ; 09 + dw Data_fe374 ; 0a + dw Data_fe390 ; 0b + dw Data_fe3aa ; 0c + dw Data_fe3c4 ; 0d + dw Data_fe3de ; 0e + dw Data_fe3f8 ; 0f + dw Data_fe412 ; 10 + dw Data_fe42c ; 11 + dw Data_fe446 ; 12 + dw Data_fe460 ; 13 + dw Data_fe47a ; 14 + dw Data_fe494 ; 15 + dw Data_fe4b4 ; 16 + dw Data_fe4ce ; 17 + dw Data_fe4e8 ; 18 + dw Data_fe502 ; 19 + dw Data_fe520 ; 1a + dw Data_fe53e ; 1b + dw Data_fe558 ; 1c + dw Data_fe28a ; 1d + + +Func_fda9a: +.loop + xor a + ld [H_AUTOBGTRANSFERENABLED], a + call RunPikaPicAnimScript + call Func_fdad5 + call Func_fdad6 + call Func_fdad5 + ld a, $01 + ld [H_AUTOBGTRANSFERENABLED], a + call PikaPicAnimTimerAndJoypad + and a + jr z, .loop + ret + +PikaPicAnimTimerAndJoypad: + call Delay3 + call CheckPikaPicAnimTimer + and a + ret nz + call JoypadLowSensitivity + ld a, [hJoyPressed] + and A_BUTTON | B_BUTTON + ret + +CheckPikaPicAnimTimer: + ld hl, wPikaPicAnimTimer + dec [hl] + jr nz, .not_done_yet + inc hl + ld a, [hl] + and a + jr z, .timer_expired + dec [hl] +.not_done_yet + xor a + ret + +.timer_expired + ld a, $01 + ret + +Func_fdad5: + ret + +Func_fdad6: + ld bc, wPikaPicAnimObjectDataBuffer + ld a, 4 +.asm_fdadb + push af + push bc + ld hl, 0 + add hl, bc + ld a, [hli] + and a + jr z, .asm_fdb26 + ld a, [hli] + ld [wCurPikaPicAnimObject], a + ld a, [hli] + ld [wCurPikaPicAnimObject + 1], a + ld a, [hli] + ld [wCurPikaPicAnimObject + 2], a + ld a, [hli] + ld [wd456], a + ld a, [hli] + ld [wd457], a + ld a, [hli] + ld [wd458], a + ld a, [hli] + ld [wCurPikaPicAnimObject + 3], a + push bc + call Func_fdb7e + pop bc + ld hl, 1 + add hl, bc + ld a, [wCurPikaPicAnimObject] + ld [hli], a + ld a, [wCurPikaPicAnimObject + 1] + ld [hli], a + ld a, [wCurPikaPicAnimObject + 2] + ld [hli], a + ld a, [wd456] + ld [hli], a + ld a, [wd457] + ld [hli], a + ld a, [wd458] + ld [hli], a + ld a, [wCurPikaPicAnimObject + 3] + ld [hl], a +.asm_fdb26 + pop bc + ld hl, 8 + add hl, bc + ld b, h + ld c, l + pop af + dec a + jr nz, .asm_fdadb + ret + +PikaPicAnimCommand_object: + ld hl, wPikaPicAnimObjectDataBuffer + ld de, 8 + ld c, 4 +.loop + ld a, [hl] + and a + jr z, .found + add hl, de + dec c + jr nz, .loop + scf + ret + +.found + ld a, [wPikaPicAnimObjectDataBufferSize] + inc a + ld [wPikaPicAnimObjectDataBufferSize], a + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hl], a + xor a + ld [hli], a + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + call GetPikaPicAnimByte + ld [hli], a + and a + ret + +PikaPicAnimCommand_deleteobject: + call GetPikaPicAnimByte + ld b, a + ld hl, wPikaPicAnimObjectDataBuffer + ld de, 8 + ld c, 4 +.search + ld a, [hl] + cp b + jr z, .delete + add hl, de + dec c + jr nz, .search + scf + ret + +.delete + xor a + ld [hl], a + ret + +Func_fdb7e: +.asm_fdb7e + ld a, [wCurPikaPicAnimObject] + cp $23 + jr c, .asm_fdb87 + ld a, $04 +.asm_fdb87 + ld e, a + ld d, $00 + ld hl, Pointers_fdbc9 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wCurPikaPicAnimObject + 1] + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + cp $e0 + jr z, .asm_fdba1 + jr .asm_fdbaa + +.asm_fdba1 + xor a + ld [wCurPikaPicAnimObject + 1], a + ld [wCurPikaPicAnimObject + 2], a + jr .asm_fdb7e + +.asm_fdbaa + push hl + call Func_fdd62 + pop hl + ld a, [hl] + and a + jr z, .asm_fdbc8 + ld a, [wCurPikaPicAnimObject + 2] + inc a + ld [wCurPikaPicAnimObject + 2], a + cp [hl] + jr nz, .asm_fdbc8 + xor a + ld [wCurPikaPicAnimObject + 2], a + ld a, [wCurPikaPicAnimObject + 1] + inc a + ld [wCurPikaPicAnimObject + 1], a +.asm_fdbc8 + ret + +Pointers_fdbc9: + dw Data_fdc11 + dw Data_fdc11 + dw Data_fdc29 + dw Data_fdc32 + dw Data_fdc3b + dw Data_fdc3e + dw Data_fdc41 + dw Data_fdc50 + dw Data_fdc61 + dw Data_fdc6e + dw Data_fdc77 + dw Data_fdc84 + dw Data_fdc8d + dw Data_fdc98 + dw Data_fdca5 + dw Data_fdcb2 + dw Data_fdcb7 + dw Data_fdcc2 + dw Data_fdccb + dw Data_fdcd4 + dw Data_fdcdf + dw Data_fdce8 + dw Data_fdcf1 + dw Data_fdcf6 + dw Data_fdd01 + dw Data_fdd0a + dw Data_fdd13 + dw Data_fdd1c + dw Data_fdd27 + dw Data_fdd2c + dw Data_fdd35 + dw Data_fdd40 + dw Data_fdd47 + dw Data_fdd54 + dw Data_fdd59 + dw Data_fdc3b + +Data_fdc11: + db $01, $14 + db $07, $02 + db $01, $01 + db $07, $02 + db $01, $01 + db $07, $08 + db $e0 +Data_fdc1e: + db $02, $02 + db $01, $01 + db $02, $02 + db $01, $01 + db $02, $08 + db $e0 +Data_fdc29: + db $00, $08 + db $08, $08 + db $00, $08 + db $08, $08 + db $e0 +Data_fdc32: + db $08, $08 + db $00, $08 + db $08, $08 + db $00, $08 + db $e0 +Data_fdc3b: + db $01, $00 + db $e0 +Data_fdc3e: + db $09, $00 + db $e0 +Data_fdc41: + db $00, $02 + db $0e, $04 + db $00, $08 + db $0e, $04 + db $00, $40 + db $0e, $04 + db $00, $40 + db $e0 +Data_fdc50: + db $00, $04 + db $0f, $04 + db $00, $04 + db $0f, $04 + db $00, $08 + db $0f, $04 + db $00, $08 + db $0f, $04 + db $e0 +Data_fdc61: + db $10, $01 + db $00, $01 + db $10, $01 + db $00, $40 + db $10, $01 + db $00, $40 + db $e0 +Data_fdc6e: + db $00, $08 + db $11, $08 + db $00, $14 + db $11, $08 + db $e0 +Data_fdc77: + db $00, $02 + db $12, $02 + db $00, $02 + db $12, $40 + db $00, $03 + db $12, $40 + db $e0 +Data_fdc84: + db $00, $08 + db $13, $40 + db $00, $04 + db $13, $40 + db $e0 +Data_fdc8d: + db $14, $08 + db $00, $02 + db $14, $08 + db $00, $02 + db $14, $08 + db $e0 +Data_fdc98: + db $15, $04 + db $00, $08 + db $15, $04 + db $00, $40 + db $15, $04 + db $00, $40 + db $e0 +Data_fdca5: + db $00, $02 + db $16, $02 + db $00, $02 + db $16, $02 + db $00, $14 + db $16, $02 + db $e0 +Data_fdcb2: + db $00, $08 + db $17, $08 + db $e0 +Data_fdcb7: + db $00, $08 + db $17, $03 + db $18, $05 + db $17, $03 + db $00, $05 + db $e0 +Data_fdcc2: + db $00, $14 + db $19, $08 + db $00, $14 + db $19, $08 + db $e0 +Data_fdccb: + db $00, $0d + db $1a, $0c + db $00, $64 + db $1a, $08 + db $e0 +Data_fdcd4: + db $00, $05 + db $1b, $05 + db $00, $05 + db $1b, $05 + db $00, $64 + db $e0 +Data_fdcdf: + db $00, $02 + db $1c, $02 + db $00, $02 + db $1c, $02 + db $e0 +Data_fdce8: + db $00, $05 + db $1d, $05 + db $00, $05 + db $1d, $05 + db $e0 +Data_fdcf1: + db $1e, $08 + db $00, $64 + db $e0 +Data_fdcf6: + db $00, $0a + db $1f, $03 + db $00, $03 + db $1f, $03 + db $00, $64 + db $e0 +Data_fdd01: + db $00, $03 + db $20, $64 + db $00, $08 + db $20, $08 + db $e0 +Data_fdd0a: + db $21, $06 + db $00, $06 + db $21, $06 + db $00, $06 + db $e0 +Data_fdd13: + db $00, $08 + db $22, $0c + db $00, $08 + db $22, $0c + db $e0 +Data_fdd1c: + db $00, $08 + db $09, $02 + db $0a, $01 + db $0b, $01 + db $0c, $64 + db $e0 +Data_fdd27: + db $00, $08 + db $24, $64 + db $e0 +Data_fdd2c: + db $00, $10 + db $25, $10 + db $00, $10 + db $25, $10 + db $e0 +Data_fdd35: + db $00, $06 + db $26, $06 + db $00, $06 + db $26, $06 + db $00, $64 + db $e0 +Data_fdd40: + db $00, $06 + db $09, $06 + db $0a, $64 + db $e0 +Data_fdd47: + db $00, $14 + db $09, $08 + db $00, $14 + db $09, $08 + db $0a, $08 + db $0b, $64 + db $e0 +Data_fdd54: + db $00, $04 + db $09, $64 + db $e0 +Data_fdd59: + db $00, $0c + db $09, $0c + db $00, $0c + db $09, $64 + db $e0 + +Func_fdd62: + and a + ret z + ld e, a + ld d, 0 + ld hl, Pointers_fddb8 + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld c, a + inc de + ld a, [de] + ld b, a + inc de + push de + push bc + call Func_fdd98 + pop bc + pop de +.asm_fdd7c + push bc + push hl + ld a, [wd456] + ld c, a +.asm_fdd82 + ld a, [de] + inc de + cp $ff + jr z, .asm_fdd8a + add c + ld [hl], a +.asm_fdd8a + inc hl + dec b + jr nz, .asm_fdd82 + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec c + jr nz, .asm_fdd7c + ret + +Func_fdd98: + push bc + ld a, [wd458] + ld b, a + ld a, [wPikaPicTextboxStartY] + add b + coord hl, 0, 0 + ld bc, SCREEN_WIDTH + call AddNTimes + ld a, [wd457] + ld c, a + ld a, [wPikaSpriteY] + add c + ld c, a + ld b, 0 + add hl, bc + pop bc + ret + +Pointers_fddb8: + dw Data_fde0e + dw Data_fde0f + dw Data_fde2a + dw Data_fde60 + dw Data_fde63 + dw Data_fde67 + dw Data_fde6b + dw Data_fde45 + dw Data_fde6b + dw Data_fdfaa + dw Data_fdfc5 + dw Data_fdfe0 + dw Data_fdffb + dw Data_fe016 + dw Data_fde81 + dw Data_fde9c + dw Data_fdeb7 + dw Data_fded2 + dw Data_fdeed + dw Data_fdf08 + dw Data_fdf23 + dw Data_fdf3e + dw Data_fdf59 + dw Data_fdf74 + dw Data_fdf8f + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfaa + dw Data_fdfc5 + dw Data_fdfe0 + dw Data_fde0f + +Data_fde0e: + db $ff ; unused + +Data_fde0f: ; fde0f + db 5, 5 + db $00, $05, $0a, $0f, $14 + db $01, $06, $0b, $10, $15 + db $02, $07, $0c, $11, $16 + db $03, $08, $0d, $12, $17 + db $04, $09, $0e, $13, $18 + +Data_fde2a: ; fde2a + db 5, 5 + db $19, $1e, $23, $28, $2d + db $1a, $1f, $24, $29, $2e + db $1b, $20, $25, $2a, $2f + db $1c, $21, $26, $2b, $30 + db $1d, $22, $27, $2c, $31 + +Data_fde45: ; fde45 + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $20, $25, $ff, $ff + db $ff, $21, $26, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +Data_fde60: ; fde60 + db 1, 1 + db $00 + +Data_fde63: ; fde63 + db 2, 1 + db $00 + db $01 + +Data_fde67: ; fde67 + db 1, 2 + db $00, $01 + +Data_fde6b: ; fde6b + db 2, 2 + db $00, $01 + db $02, $03 + +Data_fde71: ; fde71 + db 3, 2 + db $00, $01 + db $02, $03 + db $04, $05 + +Data_fde79: ; fde79 + db 2, 3 + db $00, $01, $02 + db $03, $04, $05 + +Data_fde81: ; fde81 + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +Data_fde9c: ; fde9c + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + +Data_fdeb7: ; fdeb7 + db 5, 5 + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $04, $05, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +Data_fded2: ; fded2 + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + +Data_fdeed: ; fdeed + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $00, $01 + db $ff, $ff, $ff, $02, $03 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +Data_fdf08: ; fdf08 + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + +Data_fdf23: ; fdf23 + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +Data_fdf3e: ; fdf3e + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $ff, $ff, $ff, $ff, $ff + +Data_fdf59: ; fdf59 + db 5, 5 + db $ff, $ff, $ff, $ff, $ff + db $ff, $ff, $ff, $ff, $ff + db $00, $01, $ff, $ff, $ff + db $02, $03, $ff, $ff, $ff + db $04, $05, $ff, $ff, $ff + +Data_fdf74: ; fdf74 + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +Data_fdf8f: ; fdf8f + db 5, 5 + db $19, $1a, $1b, $1c, $1d + db $1e, $1f, $20, $21, $22 + db $23, $24, $25, $26, $27 + db $28, $29, $2a, $2b, $2c + db $2d, $2e, $2f, $30, $31 + +Data_fdfaa: ; fdfaa + db 5, 5 + db $00, $01, $02, $03, $04 + db $05, $06, $07, $08, $09 + db $0a, $0b, $0c, $0d, $0e + db $0f, $10, $11, $12, $13 + db $14, $15, $16, $17, $18 + +Data_fdfc5: ; fdfc5 + db 5, 5 + db $19, $1a, $1b, $1c, $1d + db $1e, $1f, $20, $21, $22 + db $23, $24, $25, $26, $27 + db $28, $29, $2a, $2b, $2c + db $2d, $2e, $2f, $30, $31 + +Data_fdfe0: ; fdfe0 + db 5, 5 + db $32, $33, $34, $35, $36 + db $37, $38, $39, $3a, $3b + db $3c, $3d, $3e, $3f, $40 + db $41, $42, $43, $44, $45 + db $46, $47, $48, $49, $4a + +Data_fdffb: ; fdffb + db 5, 5 + db $4b, $4c, $4d, $4e, $4f + db $50, $51, $52, $53, $54 + db $55, $56, $57, $58, $59 + db $5a, $5b, $5c, $5d, $5e + db $5f, $60, $61, $62, $63 + +Data_fe016: ; fe016 + db 5, 5 + db $64, $65, $66, $67, $68 + db $69, $6a, $6b, $6c, $6d + db $6e, $6f, $70, $71, $72 + db $73, $74, $75, $76, $77 + db $78, $79, $7a, $7b, $7c + +LoadPikaPicAnimGFXHeader: + push hl + ld e, a + ld d, 0 + ld hl, PikaPicAnimGFXHeaders + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + pop hl + ret + +RunPikaPicAnimScript: + call Func_fe066 + ret c + xor a + ld [wPikaPicAnimPointerSetupFinished], a +.loop + call GetPikaPicAnimByte + ld e, a + ld d, 0 + ld hl, Jumptable_fe071 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call JumpToAddress + ld a, [wPikaPicAnimPointerSetupFinished] + and a + jr z, .loop + ret + +Func_fe066: + ld a, [wPikaPicAnimDelay] + and a + ret z + dec a + ld [wPikaPicAnimDelay], a + scf + ret + +Jumptable_fe071: + dw PikaPicAnimCommand_nop ; 00, 0 params + dw PikaPicAnimCommand_writebyte ; 01, 1 param + dw PikaPicAnimCommand_loadgfx ; 02, 1 param + dw PikaPicAnimCommand_object ; 03, 5 params + dw PikaPicAnimCommand_nop4 ; 04, 0 params + dw PikaPicAnimCommand_nop5 ; 05, 0 params + dw PikaPicAnimCommand_deleteobject ; 06, 1 param + dw PikaPicAnimCommand_nop7 ; 07, 0 params + dw PikaPicAnimCommand_nop8 ; 08, 0 params + dw PikaPicAnimCommand_jump ; 09, 1 dw param + dw PikaPicAnimCommand_setduration ; 0a, 1 dw param + dw PikaPicAnimCommand_cry ; 0b, 1 param + dw PikaPicAnimCommand_thunderbolt ; 0c, 0 params + dw PikaPicAnimCommand_waitbgmap ; 0d, 0 params (ret) + dw PikaPicAnimCommand_ret ; 0e, 0 params (ret) + +PikaPicAnimCommand_nop: + ret + +PikaPicAnimCommand_ret: + ld a, 1 + ld [wPikaPicAnimTimer], a + xor a + ld [wPikaPicAnimTimer + 1], a + jr PikaPicAnimCommand_waitbgmap + +Func_fe09b: + ret + +PikaPicAnimCommand_setduration: + call GetPikaPicAnimByte + ld [wPikaPicAnimTimer], a + call GetPikaPicAnimByte + ld [wPikaPicAnimTimer + 1], a + ret + +PikaPicAnimCommand_waitbgmap: + ld a, $ff + ld [wPikaPicAnimPointerSetupFinished], a + ret + +PikaPicAnimCommand_writebyte: + call GetPikaPicAnimByte + ld [wPikaPicAnimDelay], a + ret + +PikaPicAnimCommand_nop4: +PikaPicAnimCommand_nop5: +PikaPicAnimCommand_nop7: +PikaPicAnimCommand_nop8: + ret + +PikaPicAnimCommand_jump: + call GetPikaPicAnimByte + ld l, a + call GetPikaPicAnimByte + ld h, a + call UpdatePikaPicAnimPointer + ret + +GetPikaPicAnimByte: + push hl + ld hl, wPikaPicAnimPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hli] + call UpdatePikaPicAnimPointer + pop hl + ret + +UpdatePikaPicAnimPointer: + push af + ld a, l + ld [wPikaPicAnimPointer], a + ld a, h + ld [wPikaPicAnimPointer + 1], a + pop af + ret + +PikaPicAnimCommand_loadgfx: + ld a, [wUpdateSpritesEnabled] + push af + ld a, $ff + ld [wUpdateSpritesEnabled], a + ld a, [H_AUTOBGTRANSFERENABLED] + push af + xor a + ld [H_AUTOBGTRANSFERENABLED], a + ld a, [hTilesetType] + push af + xor a + ld [hTilesetType], a + call GetPikaPicAnimByte + ld [wPikaPicAnimCurGraphicID], a + ld a, [wPikaPicAnimCurGraphicID] + call LoadPikaPicAnimGFXHeader + ld a, c + cp a, $ff + jr z, .compressed + call RequestPikaPicAnimGFX + jr .asm_fe109 + +.compressed + call DecompressRequestPikaPicAnimGFX +.asm_fe109 + pop af + ld [hTilesetType], a + pop af + ld [H_AUTOBGTRANSFERENABLED], a + pop af + ld [wUpdateSpritesEnabled], a + ret + +RequestPikaPicAnimGFX: ; fe114 + push de + ld a, [wPikaPicAnimCurGraphicID] + ld d, a + ld e, c + call CheckIfThereIsRoomForPikaPicAnimGFX + pop de + jr c, .failed + call GetPikaPicVRAMAddressForNewGFX + call CopyVideoDataAlternate + and a +.failed + ret + +DecompressRequestPikaPicAnimGFX: ; fe128 + push de + ld a, [wPikaPicAnimCurGraphicID] + ld d, a + ld e, 5 * 5 + call CheckIfThereIsRoomForPikaPicAnimGFX + pop de + jr c, .failed + ld a, b + call UncompressSpriteFromDE + ld a, BANK(S_SPRITEBUFFER1) + call SwitchSRAMBankAndLatchClockData + ld hl, S_SPRITEBUFFER1 + ld de, S_SPRITEBUFFER0 + ld bc, SPRITEBUFFERSIZE * 2 + call CopyData + call PrepareRTCDataAndDisableSRAM + ld a, [wPikaPicAnimCurGraphicID] + call LookUpTileOffsetForCurrentPikaPicAnimGFX + call GetPikaPicVRAMAddressForNewGFX + ld d, h + ld e, l + call InterlaceMergeSpriteBuffers +.failed + ret + +Func_fe15c: + ld hl, wNPCMovementDirections + ld bc, $11 + xor a + call FillMemory + ret + +GetPikaPicVRAMAddressForNewGFX: + ld hl, vNPCSprites + push bc + ld b, a + and $f + swap a + ld c, a + ld a, b + and $f0 + swap a + ld b, a + add hl, bc + pop bc + ret + +CheckIfThereIsRoomForPikaPicAnimGFX: + push bc + push hl + ld hl, wNPCMovementDirections + 1 + ld c, 8 +.loop + ld a, [hl] + and a + jr z, .empty + cp d + jr z, .found + inc hl + inc hl + dec c + jr nz, .loop + scf + ret ; execute hl, then bc + +.found + inc hl + ld a, [hl] + ret ; execute hl, then bc + +.empty + ld [hl], d + inc hl + ld a, [wNPCMovementDirections] + add $80 + ld [hl], a + ld a, [wNPCMovementDirections] + add e + ld [wNPCMovementDirections], a + cp $80 + jr z, .asm_fe1a7 + jr nc, .failed +.asm_fe1a7 + ld a, [hl] + and a + jr .pop_ret + +.failed + scf +.pop_ret + pop hl + pop bc + ret + +LookUpTileOffsetForCurrentPikaPicAnimGFX: + push bc + push hl + ld b, a + ld hl, wNPCMovementDirections + 1 + ld c, 8 +.loop + ld a, [hli] + cp b + jr z, .found + inc hl + dec c + jr nz, .loop + scf + jr .pop_ret + +.found + ld a, [hl] + and a +.pop_ret + pop hl + pop bc + ret + +PikaPicAnimCommand_cry: + call GetPikaPicAnimByte + cp $ff + ret z + ld e, a + callab PlayPikachuSoundClip + ret + +PikaPicAnimCommand_thunderbolt: + ld a, $1 + ld [wMuteAudioAndPauseMusic], a + call DelayFrame + ld a, [wAudioROMBank] + push af + ld a, BANK(SFX_Battle_2F) + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + call PikaPicAnimLoadThunderboltAudio + call PlaySound + call PikaPicAnimThunderboltFlashScreen + call WaitForSoundToFinish + pop af + ld [wAudioROMBank], a + ld [wAudioSavedROMBank], a + xor a + ld [wMuteAudioAndPauseMusic], a + ret + +PikaPicAnimLoadThunderboltAudio: + ld hl, MoveSoundTable + ld e, THUNDERBOLT + ld d, 0 + add hl, de + add hl, de + add hl, de + ld a, BANK(MoveSoundTable) + call GetFarByte + ld b, a + inc hl + ld a, BANK(MoveSoundTable) + call GetFarByte + inc hl + ld [wFrequencyModifier], a + ld a, BANK(MoveSoundTable) + call GetFarByte + ld [wTempoModifier], a + ld a, b + ret + +PikaPicAnimThunderboltFlashScreen: + ld hl, Data_fe242 +.loop + ld a, [hli] + cp $ff + ret z + ld c, a + ld b, [hl] + inc hl + push hl + call GetDMGBGPalForPikaThunderbolt + pop hl + jr .loop + +GetDMGBGPalForPikaThunderbolt: + ld a, b + ld [rBGP], a + call UpdateGBCPal_BGP + call DelayFrames + ret + +Data_fe242: + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db 4, %11000000 + db 4, %11100100 + db $ff + +Data_fe26b: ; fe26b (3f:626b) + pikapic_loadgfx Pic_e4000 + pikapic_loadgfx Pic_e49d1 + pikapic_loadgfx PikachuSprite + pikapic_object $1, $80, $0, $0 + pikapic_object $2, $b2, $5, $5 + pikapic_object $3, $b6, $5, $5 + pikapic_waitbgmap + pikapic_cry +Data_fe286: ; fe286 (3f:6286) + pikapic_waitbgmap + pikapic_jump Data_fe286 + +Data_fe28a: ; fe28a (3f:628a) + pikapic_setduration 40 + pikapic_loadgfx Pic_e4000 + pikapic_loadgfx GFX_e40cc + pikapic_object $4, $80, $0, $0 + pikapic_object $6, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry3 +Data_fe2a0: ; fe2a0 (3f:62a0) + pikapic_waitbgmap + pikapic_jump Data_fe2a0 + +Data_fe2a4: ; fe2a4 (3f:62a4) + pikapic_setduration 44 + pikapic_loadgfx Pic_e411c + pikapic_loadgfx GFX_e41d2 + pikapic_object $4, $80, $0, $0 + pikapic_object $7, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe2ba: ; fe2ba (3f:62ba) + pikapic_waitbgmap + pikapic_jump Data_fe2ba + +Data_fe2be: ; fe2be (3f:62be) + pikapic_setduration 80 + pikapic_loadgfx Pic_e4272 + pikapic_loadgfx GFX_e4323 + pikapic_object $4, $80, $0, $0 + pikapic_object $8, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe2d4: ; fe2d4 (3f:62d4) + pikapic_waitbgmap + pikapic_jump Data_fe2d4 + +Data_fe2d8: ; fe2d8 (3f:62d8) + pikapic_setduration 70 + pikapic_loadgfx Pic_e4383 + pikapic_loadgfx GFX_e444b + pikapic_object $4, $80, $0, $0 + pikapic_object $9, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe2ee: ; fe2ee (3f:62ee) + pikapic_waitbgmap + pikapic_jump Data_fe2ee + +Data_fe2f2: ; fe2f2 (3f:62f2) + pikapic_setduration 32 + pikapic_loadgfx Pic_e458b + pikapic_loadgfx GFX_e463b + pikapic_object $4, $80, $0, $0 + pikapic_object $a, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe308: ; fe308 (3f:6308) + pikapic_waitbgmap + pikapic_jump Data_fe308 + +Data_fe30c: ; fe30c (3f:630c) + pikapic_setduration 50 + pikapic_loadgfx Pic_e467b + pikapic_loadgfx GFX_e472e + pikapic_object $4, $80, $0, $0 + pikapic_object $b, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry38 +Data_fe322: ; fe322 (3f:6322) + pikapic_waitbgmap + pikapic_jump Data_fe322 + +Data_fe326: ; fe326 (3f:6326) + pikapic_setduration 58 + pikapic_loadgfx Pic_e476e + pikapic_loadgfx GFX_e4841 + pikapic_object $4, $80, $0, $0 + pikapic_object $c, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe33c: ; fe33c (3f:633c) + pikapic_waitbgmap + pikapic_jump Data_fe33c + +Data_fe340: ; fe340 (3f:6340) + pikapic_setduration 44 + pikapic_loadgfx Pic_e49d1 + pikapic_loadgfx GFX_e4a99 + pikapic_object $4, $80, $0, $0 + pikapic_object $d, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe356: ; fe356 (3f:6356) + pikapic_waitbgmap + pikapic_jump Data_fe356 + +Data_fe35a: ; fe35a (3f:635a) + pikapic_setduration 56 + pikapic_loadgfx Pic_e4b39 + pikapic_loadgfx GFX_e4bde + pikapic_object $4, $80, $0, $0 + pikapic_object $e, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe370: ; fe370 (3f:6370) + pikapic_waitbgmap + pikapic_jump Data_fe370 + +Data_fe374: ; fe374 (3f:6374) + pikapic_setduration 56 + pikapic_loadgfx Pic_e4c3e + pikapic_loadgfx GFX_e4ce0 + pikapic_loadgfx GFX_e4e70 + pikapic_object $4, $80, $0, $0 + pikapic_object $10, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe38c: ; fe38c (3f:638c) + pikapic_waitbgmap + pikapic_jump Data_fe38c + +Data_fe390: ; fe390 (3f:6390) + pikapic_setduration 100 + pikapic_loadgfx Pic_e5000 + pikapic_loadgfx GFX_e50af + pikapic_object $4, $80, $0, $0 + pikapic_object $11, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe3a6: ; fe3a6 (3f:63a6) + pikapic_waitbgmap + pikapic_jump Data_fe3a6 + +Data_fe3aa: ; fe3aa (3f:63aa) + pikapic_setduration 50 + pikapic_loadgfx Pic_e523f + pikapic_loadgfx GFX_e52fe + pikapic_object $4, $80, $0, $0 + pikapic_object $12, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry25 +Data_fe3c0: ; fe3c0 (3f:63c0) + pikapic_waitbgmap + pikapic_jump Data_fe3c0 + +Data_fe3c4: ; fe3c4 (3f:63c4) + pikapic_setduration 50 + pikapic_loadgfx Pic_e548e + pikapic_loadgfx GFX_e5541 + pikapic_object $4, $80, $0, $0 + pikapic_object $13, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe3da: ; fe3da (3f:63da) + pikapic_waitbgmap + pikapic_jump Data_fe3da + +Data_fe3de: ; fe3de (3f:63de) + pikapic_setduration 40 + pikapic_loadgfx Pic_e56d1 + pikapic_loadgfx GFX_e5794 + pikapic_object $4, $80, $0, $0 + pikapic_object $14, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe3f4: ; fe3f4 (3f:63f4) + pikapic_waitbgmap + pikapic_jump Data_fe3f4 + +Data_fe3f8: ; fe3f8 (3f:63f8) + pikapic_setduration 50 + pikapic_loadgfx Pic_e5924 + pikapic_loadgfx GFX_e59ed + pikapic_object $4, $80, $0, $0 + pikapic_object $15, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe40e: ; fe40e (3f:640e) + pikapic_waitbgmap + pikapic_jump Data_fe40e + +Data_fe412: ; fe412 (3f:6412) + pikapic_setduration 32 + pikapic_loadgfx Pic_e5b7d + pikapic_loadgfx GFX_e5c4d + pikapic_object $4, $80, $0, $0 + pikapic_object $16, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe428: ; fe428 (3f:6428) + pikapic_waitbgmap + pikapic_jump Data_fe428 + +Data_fe42c: ; fe42c (3f:642c) + pikapic_setduration 100 + pikapic_loadgfx Pic_e5ddd + pikapic_loadgfx GFX_e5e90 + pikapic_object $4, $80, $0, $0 + pikapic_object $17, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe442: ; fe442 (3f:6442) + pikapic_waitbgmap + pikapic_jump Data_fe442 + +Data_fe446: ; fe446 (3f:6446) + pikapic_setduration 32 + pikapic_loadgfx GFX_e6020 + pikapic_loadgfx GFX_e61b0 + pikapic_object $5, $80, $0, $0 + pikapic_object $18, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry18 +Data_fe45c: ; fe45c (3f:645c) + pikapic_waitbgmap + pikapic_jump Data_fe45c + +Data_fe460: ; fe460 (3f:6460) + pikapic_setduration 44 + pikapic_loadgfx Pic_e6340 + pikapic_loadgfx GFX_e63f7 + pikapic_object $4, $80, $0, $0 + pikapic_object $19, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe476: ; fe476 (3f:6476) + pikapic_waitbgmap + pikapic_jump Data_fe476 + +Data_fe47a: ; fe47a (3f:647a) + pikapic_setduration 50 + pikapic_loadgfx Pic_e6587 + pikapic_loadgfx GFX_e6646 + pikapic_object $4, $80, $0, $0 + pikapic_object $1a, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe490: ; fe490 (3f:6490) + pikapic_waitbgmap + pikapic_jump Data_fe490 + +Data_fe494: ; fe494 (3f:6494) + pikapic_setduration 40 + pikapic_loadgfx Pic_e67d6 + pikapic_loadgfx GFX_e682f + pikapic_loadgfx GFX_e69bf + pikapic_loadgfx GFX_e6b4f + pikapic_loadgfx GFX_e6cdf + pikapic_object $4, $80, $0, $0 + pikapic_object $1b, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry PikachuCry20 +Data_fe4b0: ; fe4b0 (3f:64b0) + pikapic_waitbgmap + pikapic_jump Data_fe4b0 + +Data_fe4b4: ; fe4b4 (3f:64b4) + pikapic_setduration 40 + pikapic_loadgfx GFX_e6e6f + pikapic_loadgfx GFX_e6fff + pikapic_object $5, $80, $0, $0 + pikapic_object $1c, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe4ca: ; fe4ca (3f:64ca) + pikapic_waitbgmap + pikapic_jump Data_fe4ca + +Data_fe4ce: ; fe4ce (3f:64ce) + pikapic_setduration 70 + pikapic_loadgfx GFX_e718f + pikapic_loadgfx GFX_e731f + pikapic_object $5, $80, $0, $0 + pikapic_object $1d, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe4e4: ; fe4e4 (3f:64e4) + pikapic_waitbgmap + pikapic_jump Data_fe4e4 + +Data_fe4e8: ; fe4e8 (3f:64e8) + pikapic_setduration 60 + pikapic_loadgfx GFX_e74af + pikapic_loadgfx GFX_e763f + pikapic_object $5, $80, $0, $0 + pikapic_object $1e, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe4fe: ; fe4fe (3f:64fe) + pikapic_waitbgmap + pikapic_jump Data_fe4fe + +Data_fe502: ; fe502 (3f:6502) + pikapic_setduration 50 + pikapic_loadgfx Pic_e77cf + pikapic_loadgfx GFX_e7863 + pikapic_loadgfx GFX_e79f3 + pikapic_object $4, $80, $0, $0 + pikapic_object $1f, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry + pikapic_writebyte 13 + pikapic_waitbgmap + pikapic_thunderbolt + pikapic_ret + +Data_fe51f: ; fe51f (3f:651f) + pikapic_waitbgmap +Data_fe520: ; fe520 (3f:6520) + pikapic_setduration 100 + pikapic_loadgfx Pic_e5000 + pikapic_loadgfx GFX_e50af + pikapic_loadgfx GFX_e7b83 + pikapic_loadgfx GFX_e7d13 + pikapic_object $4, $80, $0, $0 + pikapic_object $20, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe53a: ; fe53a (3f:653a) + pikapic_waitbgmap + pikapic_jump Data_fe53a + +Data_fe53e: ; fe53e (3f:653e) + pikapic_setduration 30 + pikapic_loadgfx Pic_f0abf + pikapic_loadgfx GFX_f0b64 + pikapic_object $4, $80, $0, $0 + pikapic_object $21, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe554: ; fe554 (3f:6554) + pikapic_waitbgmap + pikapic_jump Data_fe554 + +Data_fe558: ; fe558 (3f:6558) + pikapic_setduration 64 + pikapic_loadgfx Pic_f0cf4 + pikapic_loadgfx GFX_f0d82 + pikapic_object $4, $80, $0, $0 + pikapic_object $22, $99, $0, $0 + pikapic_waitbgmap + pikapic_cry +Data_fe56e: ; fe56e (3f:656e) + pikapic_waitbgmap + pikapic_jump Data_fe56e + +PikaPicAnimGFXHeaders: +pikapicanimgfx: MACRO +\2_id:: + db \1 + dba \2 + endm + + dbbw $01, $39, $0000 + pikapicanimgfx -1, Pic_e4000 ; 01 + pikapicanimgfx 5, GFX_e40cc ; 02 + pikapicanimgfx -1, Pic_e411c ; 03 + pikapicanimgfx 10, GFX_e41d2 ; 04 + pikapicanimgfx -1, Pic_e4272 ; 05 + pikapicanimgfx 6, GFX_e4323 ; 06 + pikapicanimgfx -1, Pic_e4383 ; 07 + pikapicanimgfx 20, GFX_e444b ; 08 + pikapicanimgfx -1, Pic_e458b ; 09 + pikapicanimgfx 4, GFX_e463b ; 0a + pikapicanimgfx -1, Pic_e467b ; 0b + pikapicanimgfx 4, GFX_e472e ; 0c + pikapicanimgfx -1, Pic_e476e ; 0d + pikapicanimgfx 25, GFX_e4841 ; 0e + pikapicanimgfx -1, Pic_e49d1 ; 0f + pikapicanimgfx 10, GFX_e4a99 ; 00 + pikapicanimgfx -1, Pic_e4b39 ; 11 + pikapicanimgfx 6, GFX_e4bde ; 12 + pikapicanimgfx -1, Pic_e4c3e ; 13 + pikapicanimgfx 25, GFX_e4ce0 ; 14 + pikapicanimgfx 25, GFX_e4e70 ; 15 + pikapicanimgfx -1, Pic_e5000 ; 16 + pikapicanimgfx 25, GFX_e50af ; 17 + pikapicanimgfx -1, Pic_e523f ; 18 + pikapicanimgfx 25, GFX_e52fe ; 19 + pikapicanimgfx -1, Pic_e548e ; 1a + pikapicanimgfx 25, GFX_e5541 ; 1b + pikapicanimgfx -1, Pic_e56d1 ; 1c + pikapicanimgfx 25, GFX_e5794 ; 1d + pikapicanimgfx -1, Pic_e5924 ; 1e + pikapicanimgfx 25, GFX_e59ed ; 1f + pikapicanimgfx -1, Pic_e5b7d ; 20 + pikapicanimgfx 25, GFX_e5c4d ; 21 + pikapicanimgfx -1, Pic_e5ddd ; 22 + pikapicanimgfx 25, GFX_e5e90 ; 23 + pikapicanimgfx 25, GFX_e6020 ; 24 + pikapicanimgfx 25, GFX_e61b0 ; 25 + pikapicanimgfx -1, Pic_e6340 ; 26 + pikapicanimgfx 25, GFX_e63f7 ; 27 + pikapicanimgfx -1, Pic_e6587 ; 28 + pikapicanimgfx 25, GFX_e6646 ; 29 + pikapicanimgfx -1, Pic_e67d6 ; 2a + pikapicanimgfx 25, GFX_e682f ; 2b + pikapicanimgfx 25, GFX_e69bf ; 2c + pikapicanimgfx 25, GFX_e6b4f ; 2d + pikapicanimgfx 25, GFX_e6cdf ; 2e + pikapicanimgfx 25, GFX_e6e6f ; 2f + pikapicanimgfx 25, GFX_e6fff ; 30 + pikapicanimgfx 25, GFX_e718f ; 31 + pikapicanimgfx 25, GFX_e731f ; 32 + pikapicanimgfx 25, GFX_e74af ; 33 + pikapicanimgfx 25, GFX_e763f ; 34 + pikapicanimgfx -1, Pic_e77cf ; 35 + pikapicanimgfx 25, GFX_e7863 ; 36 + pikapicanimgfx 25, GFX_e79f3 ; 37 + pikapicanimgfx 25, GFX_e7b83 ; 38 + pikapicanimgfx 25, GFX_e7d13 ; 39 + pikapicanimgfx -1, Pic_f0abf ; 3a + pikapicanimgfx 25, GFX_f0b64 ; 3b + pikapicanimgfx -1, Pic_f0cf4 ; 3c + pikapicanimgfx 25, GFX_f0d82 ; 3d + pikapicanimgfx 24, PikachuSprite ; 3e diff --git a/engine/printer.asm b/engine/printer.asm index 7e6ae637..95f70087 100755 --- a/engine/printer.asm +++ b/engine/printer.asm @@ -356,7 +356,7 @@ Func_e89e6: ld b, a ld a, [$caf4] sub b - ld hl, $c978 + ld hl, wPrinterTileBuffer ld de, $0028 .asm_e89f4 and a @@ -432,7 +432,7 @@ Data_e8a58: db $0f, $00, $00, $00, $0f, $00 Func_e8a5e: ; e8a5e (3a:4a5e) - ld a, [$d49a] + ld a, [wUnknownSerialFlag_d49b] ld e, a ld d, 0 ld hl, Jumptable_e8a6d @@ -1078,21 +1078,252 @@ Func_e8eca: ; e8eca (3a:4eca) ret Func_e8efc: ; e8efc (3a:4efc) - dr $e8efc,$e8f09 + coord hl, 0, 0 + coord de, 0, 0, wPrinterTileBuffer + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call CopyData + ret + Func_e8f09: ; e8f09 (3a:4f09) - dr $e8f09,$e8f16 + coord hl, 0, 0, wPrinterTileBuffer + coord de, 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call CopyData + ret + Func_e8f16: ; e8f16 (3a:4f16) - dr $e8f16,$e8f24 + xor a + ld [hJoyLast], a + ld [hJoyReleased], a + ld [hJoyPressed], a + ld [hJoyHeld], a + ld [hJoy5], a + ld [hJoy6], a + ret + Func_e8f24: ; e8f24 (3a:4f24) - dr $e8f24,$e8f3b + call Func_e8f42 + ld a, [wAudioROMBank] + ld [wAudioSavedROMBank], a + ld a, BANK(Music_GBPrinter) + ld [wAudioROMBank], a + ld a, MUSIC_GB_PRINTER + ld [wNewSoundID], a + call PlaySound + ret + Func_e8f3b: ; e8f3b (3a:4f3b) - dr $e8f3b,$e8f51 + call Func_e8f42 + call PlayDefaultMusic + ret + +Func_e8f42: ; e8f42 (3a:4f42) + ld a, $4 + ld [wAudioFadeOutControl], a + call StopAllMusic +.asm_e8f4a + ld a, [wAudioFadeOutControl] + and a + jr nz, .asm_e8f4a + ret + Func_e8f51: ; e8f51 (3a:4f51) - dr $e8f51,$e8f82 + ld a, [$c970] + cp $81 + jr z, .asm_e8f62 + ld a, [$c971] + cp $ff + jr z, .asm_e8f7c + xor a + jr .asm_e8f7e + +.asm_e8f62 + ld a, [$c971] + and $e0 + ret z + bit 7, a + jr nz, .asm_e8f78 + bit 6, a + jr nz, .asm_e8f74 + ld a, 6 + jr .asm_e8f7e + +.asm_e8f74 + ld a, 7 + jr .asm_e8f7e + +.asm_e8f78 + ld a, 4 + jr .asm_e8f7e + +.asm_e8f7c + ld a, 5 +.asm_e8f7e + ld [wcae0], a + ret + Func_e8f82: ; e8f82 (3a:4f82) - dr $e8f82,$e910a + dr $e8f82,$e8fb8 + +String_e8fb8: + db "Press B to Cancel@" + +Table_e8fca: + dw String_e8fdc + dw String_e8fdd + dw String_e8ff0 + dw String_e9003 + dw String_e9014 + dw String_e9049 + dw String_e907e + dw String_e90b3 + dw String_e90e8 + +String_e8fdc: + db "@" +String_e8fdd: + db "" + next " CHECKING LINK...@" +String_e8ff0: + db "" + next " TRANSMITTING...@" +String_e9003: + db "" + next " PRINTING...@" +String_e9014: + db " Printer Error 1" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +String_e9049: + db " Printer Error 2" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +String_e907e: + db " Printer Error 3" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +String_e90b3: + db " Printer Error 4" + next "" + next "Check the Game Boy" + next "Printer Manual.@" +String_e90e8: + db "This is not the" + next "Game Boy Printer!@" + Func_e910a: - dr $e910a,$e925d + call GBPalWhiteOutWithDelay3 + call ClearScreen + ld de, SurfingPikachu2Graphics + ld hl, vChars2 + lb bc, BANK(SurfingPikachu2Graphics), (SurfingPikachu2GraphicsEnd - SurfingPikachu2Graphics) / $10 + call CopyVideoData + coord hl, 0, 0 + call Func_e91a9 + coord hl, 0, 17 + call Func_e91a9 + coord hl, 0, 0 + call Func_e91b5 + coord hl, 19, 0 + call Func_e91b5 + ld a, $04 + coord hl, 0, 0 + ld [hl], a + coord hl, 0, 17 + ld [hl], a + coord hl, 19, 0 + ld [hl], a + coord hl, 19, 17 + ld [hl], a + ld de, Data_e91c4 + coord hl, 10, 8 + lb bc, 3, 8 + call Func_e925d + ld de, Data_e91dc + coord hl, 2, 11 + lb bc, 6, 16 + call Func_e925d + ld de, String_e923c + coord hl, 3, 2 + call PlaceString + ld de, String_e924b + coord hl, 9, 4 + call PlaceString + ld de, String_e9256 + coord hl, 12, 6 + call PlaceString + ld de, wPlayerName + ld hl, wPlayerName + ld bc, 0 +.asm_e9182 + ld a, [hli] + inc c + cp "@" + jr nz, .asm_e9182 + ld a, 8 + sub c + jr nc, .asm_e918e + xor a +.asm_e918e + ld c, a + coord hl, 2, 4 + add hl, bc + call PlaceString + call Func_e926f + ld b, 8 + call RunPaletteCommand + ld a, $1 + ld [H_AUTOBGTRANSFERENABLED], a + call Delay3 + call GBPalNormal + ret + +Func_e91a9: + ld c, SCREEN_WIDTH / 2 +.asm_e91ab + ld [hl], $00 + inc hl + ld [hl], $01 + inc hl + dec c + jr nz, .asm_e91ab + ret + +Func_e91b5: + ld c, SCREEN_HEIGHT / 2 + ld de, SCREEN_WIDTH +.asm_e91ba + ld [hl], $02 + add hl, de + ld [hl], $03 + add hl, de + dec c + jr nz, .asm_e91ba + ret +Data_e91c4: + db $7f, $7f, $10, $11, $12, $13, $14, $15 + db $0f, $3c, $3d, $3e, $20, $21, $30, $31 + db $4c, $4d, $4e, $50, $34, $1a, $51, $2d + + +Data_e91dc: + db $7f, $7f, $7f, $7f, $7f, $7f, $16, $17, $18, $19, $7f, $1b, $1c, $1d, $1e, $1f + db $7f, $7f, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $7f, $2e, $2f + db $7f, $7f, $32, $33, $33, $35, $36, $37, $38, $39, $3a, $3b, $7f, $7f, $7f, $3f + db $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $40, $40, $40, $4f + db $52, $52, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5d, $5e + db $7f, $7f, $7f, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $7f, $7f, $7f + + +String_e923c: + db "Pikachu's Beach@" +String_e924b: + db "'s Hi-Score@" +String_e9256: + db "Points@" Func_e925d: .asm_e925d @@ -1132,6 +1363,7 @@ Func_e927a: ret SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu_2.2bpp" +SurfingPikachu2GraphicsEnd: Func_e988a: xor a @@ -1229,7 +1461,7 @@ Func_e994e: ld a, [de] cp $ff jr z, .asm_e99a6 - ld [$d11d], a + ld [wd11e], a push bc push hl push de |