diff options
| -rw-r--r-- | engine/bank3c.asm | 86 | ||||
| -rw-r--r-- | engine/bank3f.asm | 2976 | ||||
| -rwxr-xr-x | engine/pikachu_pic_animation.asm | 2898 | ||||
| -rw-r--r-- | macros.asm | 118 | ||||
| -rwxr-xr-x | wram.asm | 19 | 
5 files changed, 3107 insertions, 2990 deletions
| diff --git a/engine/bank3c.asm b/engine/bank3c.asm index fe2d192f..1ebbd65b 100644 --- a/engine/bank3c.asm +++ b/engine/bank3c.asm @@ -90,67 +90,67 @@ 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" @@ -312,7 +312,7 @@ Func_f0a82: ; f0a82  	push af  	ld a, $ff  	ld [wUpdateSpritesEnabled], a -	callab Func_fd831 +	callab LoadPikachuShadowIntoVRAM  	pop af  	ld [wUpdateSpritesEnabled], a  	pop hl diff --git a/engine/bank3f.asm b/engine/bank3f.asm index 72a8ed26..fda65680 100644 --- a/engine/bank3f.asm +++ b/engine/bank3f.asm @@ -1764,7 +1764,7 @@ DoStarterPikachuEmotions: ; fcf35 (3f:4f35)  	jr z, .done  	ld c, a  	ld b, $0 -	ld hl, Jumptable_fcf54 +	ld hl, StarterPikachuEmotionsJumptable  	add hl, bc  	add hl, bc  	ld a, [hli] @@ -1775,23 +1775,24 @@ DoStarterPikachuEmotions: ; fcf35 (3f:4f35)  .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 +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 -Func_fcf6a: ; fcf6a (3f:4f6a) +StarterPikachuEmotionCommand_nop: ; fcf6a (3f:4f6a) +StarterPikachuEmotionCommand_nop3: ; fcf6a (3f:4f6a)  	ret -Func_fcf6b: ; fcf6b (3f:4f6b) +StarterPikachuEmotionCommand_text: ; fcf6b (3f:4f6b)  	ld a, [de]  	ld l, a  	inc de @@ -1803,23 +1804,23 @@ Func_fcf6b: ; fcf6b (3f:4f6b)  	pop de  	ret -Func_fcf77: ; fcf77 (3f:4f77) +StarterPikachuEmotionCommand_pcm: ; fcf77 (3f:4f77)  	ld a, [de]  	inc de  	push de  	ld e, a  	nop -	call Func_fcf81 +	call PlayPikachuSoundClip_  	pop de  	ret -Func_fcf81: ; fcf81 (3f:4f81) +PlayPikachuSoundClip_: ; fcf81 (3f:4f81)  	cp $ff  	ret z  	callab PlayPikachuSoundClip  	ret -Func_fcf8d: ; fcf8d (3f:4f8d) +StarterPikachuEmotionCommand_emote: ; fcf8d (3f:4f8d)  	ld a, [wUpdateSpritesEnabled]  	push af  	ld a, $ff @@ -1827,20 +1828,20 @@ Func_fcf8d: ; fcf8d (3f:4f8d)  	ld a, [de]  	inc de  	push de -	call Func_fcfa2 +	call ShowPikachuEmoteBubble  	pop de  	pop af  	ld [wUpdateSpritesEnabled], a  	ret -Func_fcfa2: ; fcfa2 (3f:4fa2) +ShowPikachuEmoteBubble: ; fcfa2 (3f:4fa2)  	ld [wWhichEmotionBubble], a  	ld a, $f  	ld [wEmotionBubbleSpriteIndex], a  	predef EmotionBubble  	ret -Func_fcfb0: ; fcfb0 (3f:4fb0) +StarterPikachuEmotionCommand_4: ; fcfb0 (3f:4fb0)  	ld a, [de]  	inc de  	ld l, a @@ -1853,7 +1854,7 @@ Func_fcfb0: ; fcfb0 (3f:4fb0)  	pop de  	ret -Func_fcfbe: ; fcfbe (3f:4fbe) +StarterPikachuEmotionCommand_delay: ; fcfbe (3f:4fbe)  	ld a, [de]  	inc de  	push de @@ -1862,7 +1863,7 @@ Func_fcfbe: ; fcfbe (3f:4fbe)  	pop de  	ret -Func_fcfc7: ; fcfc7 (3f:4fc7) +StarterPikachuEmotionCommand_subcmd: ; fcfc7 (3f:4fc7)  	ld a, [de]  	inc de  	push de @@ -1879,18 +1880,18 @@ Func_fcfc7: ; fcfc7 (3f:4fc7)  	ret  Jumptable_fcfda: -	dw Func_fd8ab +	dw LoadPikachuSpriteIntoVRAM  	dw LoadFontTilePatterns -	dw Func_fd8f8 +	dw Pikachu_LoadCurrentMapViewUpdateSpritesAndDelay3  	dw WaitForTextScrollButtonPress -	dw Func_fd8d4 -	dw Func_fd8e1 -	dw Func_fd8ee +	dw PikachuPewterPokecenterCheck +	dw PikachuFanClubCheck +	dw PikachuBillsHouseCheck -Func_fcfe8: ; fcfe8 (3f:4fe8) +StarterPikachuEmotionCommand_nop2: ; fcfe8 (3f:4fe8)  	ret -Func_fcfe9: ; fcfe9 (3f:4fe9) +StarterPikachuEmotionCommand_9: ; fcfe9 (3f:4fe9)  	push de  	call Func_fcff2  	call UpdateSprites @@ -1914,2918 +1915,7 @@ 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 -	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) - -	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 Func_fd8ab -	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 Func_fd2c1 -.asm_fd2b0 -	call Func_fd2f5 -	jr nc, .asm_fd2ba -	call Func_fd329 -	jr .asm_fd2b0 - -.asm_fd2ba -	call Func_fd2c1 -	call DelayFrame -	ret - -Func_fd2c1: -	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 Func_fd2eb - -	ld hl, wSpriteStateData2 -	ld de, wSpriteStateData2 + $f0 -	ld c, $10 -	call Func_fd2eb - -	pop bc -	pop de -	pop hl -	pop af -	ld [wUpdateSpritesEnabled], a -	ret - -Func_fd2eb: -.asm_fd2eb -	ld b, [hl] -	ld a, [de] -	ld [hli], a -	ld a, b -	ld [de], a -	inc de -	dec c -	jr nz, .asm_fd2eb -	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 [$d44e], a -	ld a, [hli] -	cp $80 -	jr nz, .asm_fd311 -	call Func_157c -.asm_fd311 -	ld [$d44d], a -	ld a, [hli] -	ld [$d450], a -	ld a, [hli] -	cp $80 -	jr nz, .asm_fd320 -	call Func_157c -.asm_fd320 -	ld [$d44f], a -	xor a -	ld [$d451], a -	scf -	ret - -Func_fd329: -	xor a -	ld [$d44c], a -	ld [$d457], a -	ld [$d458], a -	ld a, [wSpriteStateData2 + 7] -	push af -.asm_fd337 -	ld bc, wSpriteStateData1 -	ld a, [$d44e] -	ld hl, Jumptable_fd4ac -	call Func_fd365 -	ld a, [$d450] -	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, [$d452] -	ld [hl], a -	ld a, [$d454] -	ld d, a -	ld a, [$d456] -	add d -	ld hl, 4 -	add hl, bc -	ld [hl], a -	ld a, [$d453] -	ld d, a -	ld a, [$d455] -	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 [$d454], a -	ld hl, 6 -	add hl, bc -	ld a, [hl] -	ld [$d453], a -	xor a -	ld [$d456], a -	ld [$d455], a -	call Func_fd4dc -	ret - -Func_fd504: -	call Func_fd775 -	ret nz -	call Func_fd4dc -	ret - -Func_fd50c: -	call Func_fd75f -	jr asm_fd58c - -Func_fd511: -	call Func_fd75f -	xor %100 -	jr asm_fd58c - -Func_fd518: -	call Func_fd75f -	ld hl, Data_fd523 -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd523: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_UP -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_UP -	db $ff - -Func_fd52c: -	call Func_fd75f -	ld hl, Data_fd537 -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd537: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_UP -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_UP -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_DOWN -	db $ff - -Func_fd540: -	call Func_fd75f -	ld hl, Data_fd54b -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd54b: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_UP | $10 -	db SPRITE_FACING_UP -	db SPRITE_FACING_LEFT | $10 -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_DOWN | $10 -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_RIGHT | $10 - -Func_fd553: -	call Func_fd75f -	ld hl, Data_fd55e -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd55e: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_DOWN | $10 -	db SPRITE_FACING_UP -	db SPRITE_FACING_RIGHT | $10 -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_LEFT | $10 -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_UP | $10 - -Func_fd566: -	call Func_fd75f -	ld hl, Data_fd571 -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd571: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_RIGHT | $10 -	db SPRITE_FACING_UP -	db SPRITE_FACING_DOWN | $10 -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_UP | $10 -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_LEFT | $10 - -Func_fd579: -	call Func_fd75f -	ld hl, Data_fd584 -	call Func_fd5a0 -	jr asm_fd58c - -Data_fd584: -	db SPRITE_FACING_DOWN -	db SPRITE_FACING_LEFT | $10 -	db SPRITE_FACING_UP -	db SPRITE_FACING_UP | $10 -	db SPRITE_FACING_LEFT -	db SPRITE_FACING_RIGHT | $10 -	db SPRITE_FACING_RIGHT -	db SPRITE_FACING_DOWN | $10 - -asm_fd58c -	rrca -	rrca -	and $7 -	ld e, a -	call Func_fd784 -	ld d, a -	call Func_fd601 -	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, 0 -	jr asm_fd5d1 - -Func_fd5b5: -	ld a, 1 -	jr asm_fd5d1 - -Func_fd5b9: -	ld a, 2 -	jr asm_fd5d1 - -Func_fd5bd: -	ld a, 3 -	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 Func_fd769 -asm_fd5d5 -	call Func_fd784 -	ld d, a -	push de -	call Func_fd601 -	pop de -	call Func_fd775 -	ret nz -	ld a, e -	call Func_fd7cb -	call Func_fd4dc -	ret - -Func_fd5ea: -	ld a, 0 -	jr asm_fd5fa - -Func_fd5ee: -	ld a, 1 -	jr asm_fd5fa - -Func_fd5f2: -	ld a, 2 -	jr asm_fd5fa - -Func_fd5f6: -	ld a, 3 -	jr asm_fd5fa - -asm_fd5fa -	call Func_fd769 -	call Func_fd4dc -	ret - -Func_fd601: -	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 Func_fd61f -	dw Func_fd624 -	dw Func_fd62b -	dw Func_fd632 -	dw Func_fd637 -	dw Func_fd63d -	dw Func_fd641 -	dw Func_fd647 - -Func_fd61f: -	ld d, 0 -	ld e, a -	jr Func_fd64d - -Func_fd624: -	ld d, 0 -	cpl -	inc a -	ld e, a -	jr Func_fd64d - -Func_fd62b: -	cpl -	inc a -	ld d, a -	ld e, 0 -	jr Func_fd64d - -Func_fd632: -	ld d, a -	ld e, 0 -	jr Func_fd64d - -Func_fd637: -	ld e, a -	cpl -	inc a -	ld d, a -	jr Func_fd64d - -Func_fd63d: -	ld e, a -	ld d, a -	jr Func_fd64d - -Func_fd641: -	cpl -	inc a -	ld e, a -	ld d, a -	jr Func_fd64d - -Func_fd647: -	ld d, a -	cpl -	inc a -	ld e, a -	jr Func_fd64d - -Func_fd64d: -	ld a, [$d453] -	add d -	ld [$d453], a -	ld a, [$d454] -	add e -	ld [$d454], 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 Func_fd75f -	or d -	ld [$d452], a -	ret - -Func_fd68b: -	ret - -Func_fd68c: -	call Func_fd74a -	ld d, a -	call Func_fd755 -	or d -	ld [$d452], a -	ret - -Func_fd698: -	call Func_fd74a -	ld d, a -	call Func_fd75f -	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 [$d452], a -	ret - -Func_fd6c0: -	call Func_fd75f -	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 [$d452], a -	call Func_fd79d -	ld [$d456], a -	and a -	ret z -	call Func_fd672 -	ret - -Func_fd6e2: -	call Func_fd75f -	ld d, a -	call Func_fd74a -	or d -	ld [$d452], a -	call Func_fd79d -	ld [$d456], a -	ret - -Func_fd6f4: -	ld a, [$d44f] -	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 [$d452], 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 [$d452], 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 - -Func_fd75f: -	push hl -	ld hl, 9 -	add hl, bc -	ld a, [hl] -	and $c -	pop hl -	ret - -Func_fd769: -	push hl -	ld hl, 9 -	add hl, bc -	add a -	add a -	and $c -	ld [hl], a -	pop hl -	ret - -Func_fd775: -	ld hl, $d457 -	inc [hl] -	ld a, [$d44d] -	and $1f -	inc a -	cp [hl] -	ret nz -	ld [hl], 0 -	ret - -Func_fd784: -	ld a, [$d44d] -	swap a -	rrca -	and $3 -	inc a -	ret - -Func_fd78e: -	ld hl, $d458 -	inc [hl] -	ld a, [$d44f] -	and $f -	inc a -	cp [hl] -	ret nz -	ld [hl], 0 -	ret - -Func_fd79d: -	call Func_fd7b2 -	ld a, [$d458] -	add e -	ld [$d458], a -	add $20 -	ld e, a -	push hl -	push bc -	call Func_fd907 -	pop bc -	pop hl -	ret - -Func_fd7b2: -	ld a, [$d44f] -	and $f -	inc a -	ld d, a -	ld a, [$d44f] -	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, [$d454] -	ld e, a -	ld a, [$d453] -	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 - -Func_fd831: -	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: - -Func_fd845: -	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" - -Func_fd8ab: ; 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, .asm_fd8c9 -	ld de, PikachuSprite + $c * $10 -	ld hl, vNPCSprites2 + $4c * $10 -.asm_fd8c9 -	pop bc -	call CopyVideoDataAlternate -	call Func_fd831 -	call Func_fd845 -	ret - -Func_fd8d4: ; fd8d4 (3f:58d4) -	ld a, [wCurMap] -	cp PEWTER_POKECENTER -	ret nz -	call Func_1542 -	call Func_fcff2 -	ret - -Func_fd8e1: ; fd8e1 (3f:58e1) -	ld a, [wCurMap] -	cp POKEMON_FAN_CLUB -	ret nz -	call Func_1542 -	call Func_fcff2 -	ret - -Func_fd8ee: ; fd8ee (3f:58ee) -	ld a, [wCurMap] -	cp BILLS_HOUSE -	ret nz -	call Func_1542 -	ret - -Func_fd8f8: ; fd8f8 (3f:58f8) -	call LoadCurrentMapView -	call UpdateSprites -	call Delay3 -	ret - -Func_fd902: ; cosine? -	ld a, e -	add $10 -	jr asm_fd908 - -Func_fd907: ; sine? -	ld a, e -asm_fd908 -	and $3f -	cp $20 -	jr nc, .asm_fd913 -	call Func_fd91c -	ld a, h -	ret - -.asm_fd913 -	and $1f -	call Func_fd91c -	ld a, h -	cpl -	inc a -	ret - -Func_fd91c: -	ld e, a -	ld a, d -	ld d, 0 -	ld hl, Data_fd938 -	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 - -Data_fd938: -	sine_wave $100 - -Func_fd978: ; fd978 (3f:5978) -	ld hl, Data_fd99c -	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, Data_fd9a6 -	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 - -Data_fd99c: -; First byte: mood threshold -; Second byte: column index in Data_fd9a6 -	db $28, 1 -	db $7f, 2 -	db $80, 3 -	db $d2, 4 -	db $ff, 5 - -Data_fd9a6: -; 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 - -Func_fd9d0: ; fd9d0 (3f:59d0) -	ld a, [H_AUTOBGTRANSFERENABLED] -	push af -	xor a -	ld [H_AUTOBGTRANSFERENABLED], a -	ld a, [de] -	ld [$d448], 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 Func_fda46 -	call Func_fda9a -	call Func_fda2c -	call RunDefaultPaletteCommand -	ret - -Func_fd9ff: -	ld hl, $d44d -	ld bc, $0011 -	xor a -	call FillMemory -	ld hl, wNPCMovementDirections2 -	ld bc, $0021 -	xor a -	call FillMemory -	call Func_fe15c -	ld hl, $0064 -	ld a, l -	ld [$d451], a -	ld a, h -	ld [$d452], a -	ld a, $07 -	ld [$d454], a -	ld a, $06 -	ld [$d455], 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 - -Func_fda46: -	ld a, [$d448] -	cp $1d -	jr c, .asm_fda4f -	ld a, $00 -.asm_fda4f -	ld e, a -	ld d, $00 -	ld hl, Data_fda5e -	add hl, de -	add hl, de -	ld a, [hli] -	ld h, [hl] -	ld l, a -	call Func_fe0d0 -	ret - -Data_fda5e: -	dw Data_fe28a -	dw Data_fe28a -	dw Data_fe2a4 -	dw Data_fe2be -	dw Data_fe2d8 -	dw Data_fe2f2 -	dw Data_fe30c -	dw Data_fe326 -	dw Data_fe340 -	dw Data_fe35a -	dw Data_fe374 -	dw Data_fe390 -	dw Data_fe3aa -	dw Data_fe3c4 -	dw Data_fe3de -	dw Data_fe3f8 -	dw Data_fe412 -	dw Data_fe42c -	dw Data_fe446 -	dw Data_fe460 -	dw Data_fe47a -	dw Data_fe494 -	dw Data_fe4b4 -	dw Data_fe4ce -	dw Data_fe4e8 -	dw Data_fe502 -	dw Data_fe520 -	dw Data_fe53e -	dw Data_fe558 -	dw Data_fe28a - - -Func_fda9a: -.asm_fda9a -	xor a -	ld [H_AUTOBGTRANSFERENABLED], a -	call Func_fe046 -	call Func_fdad5 -	call Func_fdad6 -	call Func_fdad5 -	ld a, $01 -	ld [H_AUTOBGTRANSFERENABLED], a -	call Func_fdab4 -	and a -	jr z, .asm_fda9a -	ret - -Func_fdab4: -	call Delay3 -	call Func_fdac4 -	and a -	ret nz -	call JoypadLowSensitivity -	ld a, [hJoyPressed] -	and A_BUTTON | B_BUTTON -	ret - -Func_fdac4: -	ld hl, $d451 -	dec [hl] -	jr nz, .asm_fdad0 -	inc hl -	ld a, [hl] -	and a -	jr z, .asm_fdad2 -	dec [hl] -.asm_fdad0 -	xor a -	ret - -.asm_fdad2 -	ld a, $01 -	ret - -Func_fdad5: -	ret - -Func_fdad6: -	ld bc, wNPCMovementDirections2 + 1 -	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 [$d459], a -	ld a, [hli] -	ld [$d45a], a -	ld a, [hli] -	ld [$d45b], a -	ld a, [hli] -	ld [$d456], a -	ld a, [hli] -	ld [$d457], a -	ld a, [hli] -	ld [$d458], a -	ld a, [hli] -	ld [$d45c], a -	push bc -	call Func_fdb7e -	pop bc -	ld hl, 1 -	add hl, bc -	ld a, [$d459] -	ld [hli], a -	ld a, [$d45a] -	ld [hli], a -	ld a, [$d45b] -	ld [hli], a -	ld a, [$d456] -	ld [hli], a -	ld a, [$d457] -	ld [hli], a -	ld a, [$d458] -	ld [hli], a -	ld a, [$d45c] -	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 - -Func_fdb32: -	ld hl, wNPCMovementDirections2 + 1 -	ld de, 8 -	ld c, 4 -.asm_fdb3a -	ld a, [hl] -	and a -	jr z, .asm_fdb44 -	add hl, de -	dec c -	jr nz, .asm_fdb3a -	scf -	ret - -.asm_fdb44 -	ld a, [wNPCMovementDirections2] -	inc a -	ld [wNPCMovementDirections2], a -	ld [hli], a -	call Func_fe0c3 -	ld [hli], a -	call Func_fe0c3 -	ld [hl], a -	xor a -	ld [hli], a -	ld [hli], a -	call Func_fe0c3 -	ld [hli], a -	call Func_fe0c3 -	ld [hli], a -	call Func_fe0c3 -	ld [hli], a -	and a -	ret - -Func_fdb65 -	call Func_fe0c3 -	ld b, a -	ld hl, wNPCMovementDirections2 + 1 -	ld de, 8 -	ld c, 4 -.asm_fdb71 -	ld a, [hl] -	cp b -	jr z, .asm_fdb7b -	add hl, de -	dec c -	jr nz, .asm_fdb71 -	scf -	ret - -.asm_fdb7b -	xor a -	ld [hl], a -	ret - -Func_fdb7e: -.asm_fdb7e -	ld a, [$d459] -	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, [$d45a] -	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 [$d45a], a -	ld [$d45b], a -	jr .asm_fdb7e - -.asm_fdbaa -	push hl -	call Func_fdd62 -	pop hl -	ld a, [hl] -	and a -	jr z, .asm_fdbc8 -	ld a, [$d45b] -	inc a -	ld [$d45b], a -	cp [hl] -	jr nz, .asm_fdbc8 -	xor a -	ld [$d45b], a -	ld a, [$d45a] -	inc a -	ld [$d45a], 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, [$d456] -	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, [$d458] -	ld b, a -	ld a, [$d455] -	add b -	coord hl, 0, 0 -	ld bc, SCREEN_WIDTH -	call AddNTimes -	ld a, [$d457] -	ld c, a -	ld a, [$d454] -	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 - -Func_fe031: -	push hl -	ld e, a -	ld d, 0 -	ld hl, Data_fe572 -	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 - -Func_fe046: -	call Func_fe066 -	ret c -	xor a -	ld [$d44f], a -.asm_fe04e -	call Func_fe0c3 -	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, [$d44f] -	and a -	jr z, .asm_fe04e -	ret - -Func_fe066: -	ld a, [$d453] -	and a -	ret z -	dec a -	ld [$d453], a -	scf -	ret - -Jumptable_fe071: -	dw Func_fe08f -	dw Func_fe0af -	dw Func_fe0db -	dw Func_fdb32 -	dw Func_fe0b6 -	dw Func_fe0b6 -	dw Func_fdb65 -	dw Func_fe0b6 -	dw Func_fe0b6 -	dw Func_fe0b7 -	dw Func_fe09c -	dw Func_fe1c7 -	dw Func_fe1d7 -	dw Func_fe0a9 -	dw Func_fe090 - -Func_fe08f: -	ret - -Func_fe090: -	ld a, 1 -	ld [$d451], a -	xor a -	ld [$d452], a -	jr Func_fe0a9 - -Func_fe09b: -	ret - -Func_fe09c: -	call Func_fe0c3 -	ld [$d451], a -	call Func_fe0c3 -	ld [$d452], a -	ret - -Func_fe0a9: -	ld a, $ff -	ld [$d44f], a -	ret - -Func_fe0af: -	call Func_fe0c3 -	ld [$d453], a -	ret - -Func_fe0b6: -	ret - -Func_fe0b7: -	call Func_fe0c3 -	ld l, a -	call Func_fe0c3 -	ld h, a -	call Func_fe0d0 -	ret - -Func_fe0c3: -	push hl -	ld hl, $d44d -	ld a, [hli] -	ld h, [hl] -	ld l, a -	ld a, [hli] -	call Func_fe0d0 -	pop hl -	ret - -Func_fe0d0: -	push af -	ld a, l -	ld [$d44d], a -	ld a, h -	ld [$d44e], a -	pop af -	ret - -Func_fe0db: -	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 Func_fe0c3 -	ld [$d450], a -	ld a, [$d450] -	call Func_fe031 -	ld a, c -	cp a, $ff -	jr z, .asm_fe106 -	call Func_fe114 -	jr .asm_fe109 - -.asm_fe106 -	call Func_fe128 -.asm_fe109 -	pop af -	ld [hTilesetType], a -	pop af -	ld [H_AUTOBGTRANSFERENABLED], a -	pop af -	ld [wUpdateSpritesEnabled], a -	ret - -Func_fe114: ; fe114 -	push de -	ld a, [$d450] -	ld d, a -	ld e, c -	call Func_fe17a -	pop de -	jr c, .asm_fe127 -	call Func_fe167 -	call CopyVideoDataAlternate -	and a -.asm_fe127 -	ret - -Func_fe128: ; fe128 -	push de -	ld a, [$d450] -	ld d, a -	ld e, $19 -	call Func_fe17a -	pop de -	jr c, .asm_fe15b -	ld a, b -	call UncompressSpriteFromDE -	ld a, $00 -	call SwitchSRAMBankAndLatchClockData -	ld hl, S_SPRITEBUFFER1 -	ld de, S_SPRITEBUFFER0 -	ld bc, SPRITEBUFFERSIZE * 2 -	call CopyData -	call PrepareRTCDataAndDisableSRAM -	ld a, [$d450] -	call Func_fe1af -	call Func_fe167 -	ld d, h -	ld e, l -	call InterlaceMergeSpriteBuffers -.asm_fe15b -	ret - -Func_fe15c: -	ld hl, wNPCMovementDirections -	ld bc, $11 -	xor a -	call FillMemory -	ret - -Func_fe167: -	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 - -Func_fe17a: -	push bc -	push hl -	ld hl, wNPCMovementDirections + 1 -	ld c, 8 -.asm_fe181 -	ld a, [hl] -	and a -	jr z, .asm_fe192 -	cp d -	jr z, .asm_fe18f -	inc hl -	inc hl -	dec c -	jr nz, .asm_fe181 -	scf -	ret - -.asm_fe18f -	inc hl -	ld a, [hl] -	ret - -.asm_fe192 -	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, .asm_fe1ab -.asm_fe1a7 -	ld a, [hl] -	and a -	jr .asm_fe1ac - -.asm_fe1ab -	scf -.asm_fe1ac -	pop hl -	pop bc -	ret - -Func_fe1af: -	push bc -	push hl -	ld b, a -	ld hl, wNPCMovementDirections + 1 -	ld c, 8 -.asm_fe1b7 -	ld a, [hli] -	cp b -	jr z, .asm_fe1c2 -	inc hl -	dec c -	jr nz, .asm_fe1b7 -	scf -	jr .asm_fe1c4 - -.asm_fe1c2 -	ld a, [hl] -	and a -.asm_fe1c4 -	pop hl -	pop bc -	ret - -Func_fe1c7: -	call Func_fe0c3 -	cp $ff -	ret z -	ld e, a -	callab PlayPikachuSoundClip -	ret - -Func_fe1d7: -	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 Func_fe203 -	call PlaySound -	call Func_fe227 -	call WaitForSoundToFinish -	pop af -	ld [wAudioROMBank], a -	ld [wAudioSavedROMBank], a -	xor a -	ld [wMuteAudioAndPauseMusic], a -	ret - -Func_fe203: -	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 - -Func_fe227: -	ld hl, Data_fe242 -.asm_fe22a -	ld a, [hli] -	cp $ff -	ret z -	ld c, a -	ld b, [hl] -	inc hl -	push hl -	call Func_fe238 -	pop hl -	jr .asm_fe22a - -Func_fe238: -	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: -	dr $fe26b, $fe28a - -Data_fe28a: -	dr $fe28a, $fe2a4 -Data_fe2a4: -	dr $fe2a4, $fe2be -Data_fe2be: -	dr $fe2be, $fe2d8 -Data_fe2d8: -	dr $fe2d8, $fe2f2 -Data_fe2f2: -	dr $fe2f2, $fe30c -Data_fe30c: -	dr $fe30c, $fe326 -Data_fe326: -	dr $fe326, $fe340 -Data_fe340: -	dr $fe340, $fe35a -Data_fe35a: -	dr $fe35a, $fe374 -Data_fe374: -	dr $fe374, $fe390 -Data_fe390: -	dr $fe390, $fe3aa -Data_fe3aa: -	dr $fe3aa, $fe3c4 -Data_fe3c4: -	dr $fe3c4, $fe3de -Data_fe3de: -	dr $fe3de, $fe3f8 -Data_fe3f8: -	dr $fe3f8, $fe412 -Data_fe412: -	dr $fe412, $fe42c -Data_fe42c: -	dr $fe42c, $fe446 -Data_fe446: -	dr $fe446, $fe460 -Data_fe460: -	dr $fe460, $fe47a -Data_fe47a: -	dr $fe47a, $fe494 -Data_fe494: -	dr $fe494, $fe4b4 -Data_fe4b4: -	dr $fe4b4, $fe4ce -Data_fe4ce: -	dr $fe4ce, $fe4e8 -Data_fe4e8: -	dr $fe4e8, $fe502 -Data_fe502: -	dr $fe502, $fe520 -Data_fe520: -	dr $fe520, $fe53e -Data_fe53e: -	dr $fe53e, $fe558 -Data_fe558: -	dr $fe558, $fe572 - -Data_fe572: -	dr $fe572, $fe66f +INCLUDE "engine/pikachu_pic_animation.asm"  OfficerJennySprite:    INCBIN "gfx/sprites/officer_jenny.2bpp"  PikachuSprite:         INCBIN "gfx/sprites/pikachu.2bpp" diff --git a/engine/pikachu_pic_animation.asm b/engine/pikachu_pic_animation.asm new file mode 100755 index 00000000..81a94cbd --- /dev/null +++ b/engine/pikachu_pic_animation.asm @@ -0,0 +1,2898 @@ +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 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 +	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) + +	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 [$d450], a +	ld a, [hli] +	cp $80 +	jr nz, .asm_fd320 +	call Func_157c +.asm_fd320 +	ld [$d44f], a +	xor a +	ld [wPikaPicAnimTimer], a +	scf +	ret + +Func_fd329: +	xor a +	ld [$d44c], a +	ld [$d457], a +	ld [$d458], 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, [$d450] +	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, [$d456] +	add d +	ld hl, 4 +	add hl, bc +	ld [hl], a +	ld a, [wPikaSpriteX] +	ld d, a +	ld a, [$d455] +	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 [wPikaSpriteX], a +	xor a +	ld [$d456], a +	ld [$d455], 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, [wPikaSpriteX] +	add d +	ld [wPikaSpriteX], 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 [$d456], 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 [$d456], a +	ret + +Func_fd6f4: +	ld a, [$d44f] +	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, $d457 +	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, $d458 +	inc [hl] +	ld a, [$d44f] +	and $f +	inc a +	cp [hl] +	ret nz +	ld [hl], 0 +	ret + +Func_fd79d: +	call Func_fd7b2 +	ld a, [$d458] +	add e +	ld [$d458], a +	add $20 +	ld e, a +	push hl +	push bc +	call Sine_e +	pop bc +	pop hl +	ret + +Func_fd7b2: +	ld a, [$d44f] +	and $f +	inc a +	ld d, a +	ld a, [$d44f] +	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, [wPikaSpriteX] +	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 Func_1542 +	call Func_fcff2 +	ret + +PikachuFanClubCheck: ; fd8e1 (3f:58e1) +	ld a, [wCurMap] +	cp POKEMON_FAN_CLUB +	ret nz +	call Func_1542 +	call Func_fcff2 +	ret + +PikachuBillsHouseCheck: ; fd8ee (3f:58ee) +	ld a, [wCurMap] +	cp BILLS_HOUSE +	ret nz +	call Func_1542 +	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, wNPCMovementDirections2 +	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 [$d455], 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, wNPCMovementDirections2 + 1 +	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 [$d459], a +	ld a, [hli] +	ld [$d45a], a +	ld a, [hli] +	ld [$d45b], a +	ld a, [hli] +	ld [$d456], a +	ld a, [hli] +	ld [$d457], a +	ld a, [hli] +	ld [$d458], a +	ld a, [hli] +	ld [$d45c], a +	push bc +	call Func_fdb7e +	pop bc +	ld hl, 1 +	add hl, bc +	ld a, [$d459] +	ld [hli], a +	ld a, [$d45a] +	ld [hli], a +	ld a, [$d45b] +	ld [hli], a +	ld a, [$d456] +	ld [hli], a +	ld a, [$d457] +	ld [hli], a +	ld a, [$d458] +	ld [hli], a +	ld a, [$d45c] +	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 + +Func_fdb32: +	ld hl, wNPCMovementDirections2 + 1 +	ld de, 8 +	ld c, 4 +.asm_fdb3a +	ld a, [hl] +	and a +	jr z, .asm_fdb44 +	add hl, de +	dec c +	jr nz, .asm_fdb3a +	scf +	ret + +.asm_fdb44 +	ld a, [wNPCMovementDirections2] +	inc a +	ld [wNPCMovementDirections2], 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 + +Func_fdb65: +	call GetPikaPicAnimByte +	ld b, a +	ld hl, wNPCMovementDirections2 + 1 +	ld de, 8 +	ld c, 4 +.asm_fdb71 +	ld a, [hl] +	cp b +	jr z, .asm_fdb7b +	add hl, de +	dec c +	jr nz, .asm_fdb71 +	scf +	ret + +.asm_fdb7b +	xor a +	ld [hl], a +	ret + +Func_fdb7e: +.asm_fdb7e +	ld a, [$d459] +	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, [$d45a] +	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 [$d45a], a +	ld [$d45b], a +	jr .asm_fdb7e + +.asm_fdbaa +	push hl +	call Func_fdd62 +	pop hl +	ld a, [hl] +	and a +	jr z, .asm_fdbc8 +	ld a, [$d45b] +	inc a +	ld [$d45b], a +	cp [hl] +	jr nz, .asm_fdbc8 +	xor a +	ld [$d45b], a +	ld a, [$d45a] +	inc a +	ld [$d45a], 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, [$d456] +	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, [$d458] +	ld b, a +	ld a, [$d455] +	add b +	coord hl, 0, 0 +	ld bc, SCREEN_WIDTH +	call AddNTimes +	ld a, [$d457] +	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 + +Func_fe031: +	push hl +	ld e, a +	ld d, 0 +	ld hl, Data_fe572 +	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 [$d44f], 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, [$d44f] +	and a +	jr z, .loop +	ret + +Func_fe066: +	ld a, [wPikaSpriteX] +	and a +	ret z +	dec a +	ld [wPikaSpriteX], a +	scf +	ret + +Jumptable_fe071: +	dw PikaPicAnimCommand_nop ; 00, 0 params +	dw PikaPicAnimCommand_writebyte ; 01, 1 param +	dw Func_fe0db ; 02, 1 param +	dw Func_fdb32 ; 03, 5 params +	dw Func_fe0b6 ; 04, 0 params +	dw Func_fe0b6 ; 05, 0 params +	dw Func_fdb65 ; 06, 1 param +	dw Func_fe0b6 ; 07, 0 params +	dw Func_fe0b6 ; 08, 0 params +	dw PikaPicAnimCommand_jump ; 09, 1 dw param +	dw PikaPicAnimCommand_setdelay ; 0a, 1 dw param +	dw PikaPicAnimCommand_cry ; 0b, 1 param +	dw PikaPicAnimCommand_thunderbolt ; 0c, 0 params +	dw Func_fe0a9 ; 0d, 0 params (ret) +	dw Func_fe090 ; 0e, 0 params (ret) + +PikaPicAnimCommand_nop: +	ret + +Func_fe090: +	ld a, 1 +	ld [wPikaPicAnimTimer], a +	xor a +	ld [wPikaPicAnimTimer + 1], a +	jr Func_fe0a9 + +Func_fe09b: +	ret + +PikaPicAnimCommand_setdelay: +	call GetPikaPicAnimByte +	ld [wPikaPicAnimTimer], a +	call GetPikaPicAnimByte +	ld [wPikaPicAnimTimer + 1], a +	ret + +Func_fe0a9: +	ld a, $ff +	ld [$d44f], a +	ret + +PikaPicAnimCommand_writebyte: +	call GetPikaPicAnimByte +	ld [wPikaSpriteX], a +	ret + +Func_fe0b6: +	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 + +Func_fe0db: +	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 [$d450], a +	ld a, [$d450] +	call Func_fe031 +	ld a, c +	cp a, $ff +	jr z, .asm_fe106 +	call Func_fe114 +	jr .asm_fe109 + +.asm_fe106 +	call Func_fe128 +.asm_fe109 +	pop af +	ld [hTilesetType], a +	pop af +	ld [H_AUTOBGTRANSFERENABLED], a +	pop af +	ld [wUpdateSpritesEnabled], a +	ret + +Func_fe114: ; fe114 +	push de +	ld a, [$d450] +	ld d, a +	ld e, c +	call Func_fe17a +	pop de +	jr c, .asm_fe127 +	call Func_fe167 +	call CopyVideoDataAlternate +	and a +.asm_fe127 +	ret + +Func_fe128: ; fe128 +	push de +	ld a, [$d450] +	ld d, a +	ld e, $19 +	call Func_fe17a +	pop de +	jr c, .asm_fe15b +	ld a, b +	call UncompressSpriteFromDE +	ld a, $00 +	call SwitchSRAMBankAndLatchClockData +	ld hl, S_SPRITEBUFFER1 +	ld de, S_SPRITEBUFFER0 +	ld bc, SPRITEBUFFERSIZE * 2 +	call CopyData +	call PrepareRTCDataAndDisableSRAM +	ld a, [$d450] +	call Func_fe1af +	call Func_fe167 +	ld d, h +	ld e, l +	call InterlaceMergeSpriteBuffers +.asm_fe15b +	ret + +Func_fe15c: +	ld hl, wNPCMovementDirections +	ld bc, $11 +	xor a +	call FillMemory +	ret + +Func_fe167: +	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 + +Func_fe17a: +	push bc +	push hl +	ld hl, wNPCMovementDirections + 1 +	ld c, 8 +.asm_fe181 +	ld a, [hl] +	and a +	jr z, .asm_fe192 +	cp d +	jr z, .asm_fe18f +	inc hl +	inc hl +	dec c +	jr nz, .asm_fe181 +	scf +	ret + +.asm_fe18f +	inc hl +	ld a, [hl] +	ret + +.asm_fe192 +	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, .asm_fe1ab +.asm_fe1a7 +	ld a, [hl] +	and a +	jr .asm_fe1ac + +.asm_fe1ab +	scf +.asm_fe1ac +	pop hl +	pop bc +	ret + +Func_fe1af: +	push bc +	push hl +	ld b, a +	ld hl, wNPCMovementDirections + 1 +	ld c, 8 +.asm_fe1b7 +	ld a, [hli] +	cp b +	jr z, .asm_fe1c2 +	inc hl +	dec c +	jr nz, .asm_fe1b7 +	scf +	jr .asm_fe1c4 + +.asm_fe1c2 +	ld a, [hl] +	and a +.asm_fe1c4 +	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: +	pikapic_2 $1 +	pikapic_2 $f +	pikapic_2 $3e +	pikapic_3 $1, $80, $0 +	pikapic_3 $2, $5b2, $5 +	pikapic_3 $3, $5b6, $5 +	pikapic_d +	pikapic_cry $ff +Data_fe286: +	pikapic_d +	pikapic_jump Data_fe286 + +Data_fe28a: +	dr $fe28a, $fe2a4 +Data_fe2a4: +	dr $fe2a4, $fe2be +Data_fe2be: +	dr $fe2be, $fe2d8 +Data_fe2d8: +	dr $fe2d8, $fe2f2 +Data_fe2f2: +	dr $fe2f2, $fe30c +Data_fe30c: +	dr $fe30c, $fe326 +Data_fe326: +	dr $fe326, $fe340 +Data_fe340: +	dr $fe340, $fe35a +Data_fe35a: +	dr $fe35a, $fe374 +Data_fe374: +	dr $fe374, $fe390 +Data_fe390: +	dr $fe390, $fe3aa +Data_fe3aa: +	dr $fe3aa, $fe3c4 +Data_fe3c4: +	dr $fe3c4, $fe3de +Data_fe3de: +	dr $fe3de, $fe3f8 +Data_fe3f8: +	dr $fe3f8, $fe412 +Data_fe412: +	dr $fe412, $fe42c +Data_fe42c: +	dr $fe42c, $fe446 +Data_fe446: +	dr $fe446, $fe460 +Data_fe460: +	dr $fe460, $fe47a +Data_fe47a: +	dr $fe47a, $fe494 +Data_fe494: +	dr $fe494, $fe4b4 +Data_fe4b4: +	dr $fe4b4, $fe4ce +Data_fe4ce: +	dr $fe4ce, $fe4e8 +Data_fe4e8: +	dr $fe4e8, $fe502 +Data_fe502: +	dr $fe502, $fe520 +Data_fe520: +	dr $fe520, $fe53e +Data_fe53e: +	dr $fe53e, $fe558 +Data_fe558: +	dr $fe558, $fe572 + +Data_fe572: +	dr $fe572, $fe66f @@ -769,3 +769,121 @@ x = 0  x = x + (\1) * $40000  	endr  ENDM + +enum_start: macro +if _NARG >= 1 +__enum__ = \1 +else +__enum__ = 0 +endc +if _NARG >= 2 +__enumdir__ = \2 +else +__enumdir__ = +1 +endc +endm + +enum: macro +\1 = __enum__ +__enum__ = __enum__ + __enumdir__ +endm + +enum_set: macro +__enum__ = \1 +endm + +pikacry_def: MACRO +\1_id:: dba \1 +endm + +dpikacry: MACRO +	db (\1_id - PikachuCriesPointerTable) / 3 +	endm + +pikacry: MACRO +	ld a, (\1_id - PikachuCriesPointerTable) / 3 +	endm + + +	enum_start +	enum pikapic_nop_command +pikapic_nop: macro +	db pikapic_nop_command +	endm + +	enum pikapic_writebyte_command +pikapic_writebyte: macro +	db pikapic_writebyte_command, \1 +	endm + +	enum pikapic_2_command +pikapic_2: macro +	db pikapic_2_command, \1 +	endm + +	enum pikapic_3_command +pikapic_3: macro +	db pikapic_3_command +	dw \1, \2 +	db \3 +	endm + +	enum pikapic_4_command +pikapic_4: macro +	db pikapic_4_command +	endm + +	enum pikapic_5_command +pikapic_5: macro +	db pikapic_5_command +	endm + +	enum pikapic_6_command +pikapic_6: macro +	db pikapic_6_command, \1 +	endm + +	enum pikapic_7_command +pikapic_7: macro +	db pikapic_7_command +	endm + +	enum pikapic_8_command +pikapic_8: macro +	db pikapic_8_command +	endm + +	enum pikapic_jump_command +pikapic_jump: macro ; 9 +	dbw pikapic_jump_command, \1 +	endm + +	enum pikapic_setdelay_command +pikapic_setdelay: macro ; a +	dbw pikapic_setdelay_command, \1 +	endm + +	enum pikapic_cry_command +pikapic_cry: macro ; b +	db pikapic_cry_command +if \1 == $ff +	db \1 +else +	dpikacry \1 +	endc +	endm + +	enum pikapic_thunderbolt_command +pikapic_thunderbolt: macro ; c +	db pikapic_thunderbolt_command +	endm + +	enum pikapic_d_command +pikapic_d: macro ; d +	db pikapic_d_command +	endm + +	enum pikapic_e_command +pikapic_e: macro ; e +	db pikapic_e_command +	endm @@ -2523,13 +2523,24 @@ wd438:: ds 1  wExpressionNumber:: ; d447  	ds 1 - +wExpressionNumber2::  	ds 1 -wd44a:: ds 1 +wd44a:: ds 1 ; d449  wd44b:: ds 1 - -	ds 36 +wd44c:: ds 1 +wd44d:: ds 1 +wPikaPicAnimPointer:: dw   ; d44d +wd450:: ds 1 +wd451:: ds 1 +wPikaPicAnimTimer:: ds 1 ; d451 +wd453:: ds 1 +wPikaPicAnimVar:: +wPikaSpriteX:: ds 1 +wPikaPicTextboxStartX:: +wPikaSpriteY:: ds 1 ; d454 +wPikaPicTextboxStartY:: ds 1 +	ds 25  wPikachuHappiness:: ds 1 ; d46f  wPikachuMood:: ds 1 ; d470 | 
