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_pikapic: ; 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 PlacePikapicTextBoxBorder callab LoadOverworldPikachuFrontpicPalettes call ResetPikaPicAnimBuffer call LoadCurrentPikaPicAnimScriptPointer call Func_fda9a call PlacePikapicTextBoxBorder call RunDefaultPaletteCommand ret ResetPikaPicAnimBuffer: ld hl, wCurPikaMovementData ld bc, wCurPikaMovementDataEnd - wCurPikaMovementData xor a call FillMemory ld hl, wPikaPicAnimObjectDataBufferSize ld bc, wPikaPicAnimObjectDataBufferEnd - wPikaPicAnimObjectDataBufferSize xor a call FillMemory call ClearPikaPicUsedGFXBuffer ld hl, 100 ld a, l ld [wPikaPicAnimTimer], a ld a, h ld [wPikaPicAnimTimer + 1], a ld a, $07 ld [wPikaSpriteY], a ld a, $06 ld [wPikaPicTextboxStartY], a ret PlacePikapicTextBoxBorder: xor a ld [H_AUTOBGTRANSFERENABLED], a coord hl, 6, 5 lb bc, 5, 5 call TextBoxBorder call Delay3 call UpdateSprites ld a, $01 ld [H_AUTOBGTRANSFERENABLED], a call Delay3 ret LoadCurrentPikaPicAnimScriptPointer: ld a, [wExpressionNumber2] cp $1d jr c, .valid ld a, 0 .valid ld e, a ld d, 0 ld hl, Pointers_fda5e add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a call UpdatePikaPicAnimPointer ret Pointers_fda5e: dw Data_fe28a ; 00 dw Data_fe28a ; 01 dw Data_fe2a4 ; 02 dw Data_fe2be ; 03 dw Data_fe2d8 ; 04 dw Data_fe2f2 ; 05 dw Data_fe30c ; 06 dw Data_fe326 ; 07 dw Data_fe340 ; 08 dw Data_fe35a ; 09 dw Data_fe374 ; 0a dw Data_fe390 ; 0b dw Data_fe3aa ; 0c dw Data_fe3c4 ; 0d dw Data_fe3de ; 0e dw Data_fe3f8 ; 0f dw Data_fe412 ; 10 dw Data_fe42c ; 11 dw Data_fe446 ; 12 dw Data_fe460 ; 13 dw Data_fe47a ; 14 dw Data_fe494 ; 15 dw Data_fe4b4 ; 16 dw Data_fe4ce ; 17 dw Data_fe4e8 ; 18 dw Data_fe502 ; 19 dw Data_fe520 ; 1a dw Data_fe53e ; 1b dw Data_fe558 ; 1c dw Data_fe28a ; 1d Func_fda9a: .loop xor a ld [H_AUTOBGTRANSFERENABLED], a call RunPikaPicAnimScript call Func_fdad5 call Func_fdad6 call Func_fdad5 ld a, $01 ld [H_AUTOBGTRANSFERENABLED], a call PikaPicAnimTimerAndJoypad and a jr z, .loop ret PikaPicAnimTimerAndJoypad: call Delay3 call CheckPikaPicAnimTimer and a ret nz call JoypadLowSensitivity ld a, [hJoyPressed] and A_BUTTON | B_BUTTON ret CheckPikaPicAnimTimer: ld hl, wPikaPicAnimTimer dec [hl] jr nz, .not_done_yet inc hl ld a, [hl] and a jr z, .timer_expired dec [hl] .not_done_yet xor a ret .timer_expired ld a, $01 ret Func_fdad5: ret Func_fdad6: ld bc, wPikaPicAnimObjectDataBuffer ld a, 4 .asm_fdadb push af push bc ld hl, 0 add hl, bc ld a, [hli] and a jr z, .asm_fdb26 ld a, [hli] ld [wCurPikaPicAnimObject], a ld a, [hli] ld [wCurPikaPicAnimObject + 1], a ld a, [hli] ld [wCurPikaPicAnimObject + 2], a ld a, [hli] ld [wd456], a ld a, [hli] ld [wd457], a ld a, [hli] ld [wd458], a ld a, [hli] ld [wCurPikaPicAnimObject + 3], a push bc call Func_fdb7e pop bc ld hl, 1 add hl, bc ld a, [wCurPikaPicAnimObject] ld [hli], a ld a, [wCurPikaPicAnimObject + 1] ld [hli], a ld a, [wCurPikaPicAnimObject + 2] ld [hli], a ld a, [wd456] ld [hli], a ld a, [wd457] ld [hli], a ld a, [wd458] ld [hli], a ld a, [wCurPikaPicAnimObject + 3] ld [hl], a .asm_fdb26 pop bc ld hl, 8 add hl, bc ld b, h ld c, l pop af dec a jr nz, .asm_fdadb ret PikaPicAnimCommand_object: ld hl, wPikaPicAnimObjectDataBuffer ld de, 8 ld c, 4 .loop ld a, [hl] and a jr z, .found add hl, de dec c jr nz, .loop scf ret .found ld a, [wPikaPicAnimObjectDataBufferSize] inc a ld [wPikaPicAnimObjectDataBufferSize], a ld [hli], a call GetPikaPicAnimByte ld [hli], a call GetPikaPicAnimByte ld [hl], a xor a ld [hli], a ld [hli], a call GetPikaPicAnimByte ld [hli], a call GetPikaPicAnimByte ld [hli], a call GetPikaPicAnimByte ld [hli], a and a ret PikaPicAnimCommand_deleteobject: call GetPikaPicAnimByte ld b, a ld hl, wPikaPicAnimObjectDataBuffer ld de, 8 ld c, 4 .search ld a, [hl] cp b jr z, .delete add hl, de dec c jr nz, .search scf ret .delete xor a ld [hl], a ret Func_fdb7e: .asm_fdb7e ld a, [wCurPikaPicAnimObject] cp $23 jr c, .asm_fdb87 ld a, $04 .asm_fdb87 ld e, a ld d, $00 ld hl, Pointers_fdbc9 add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a ld a, [wCurPikaPicAnimObject + 1] ld e, a ld d, 0 add hl, de add hl, de ld a, [hli] cp $e0 jr z, .asm_fdba1 jr .asm_fdbaa .asm_fdba1 xor a ld [wCurPikaPicAnimObject + 1], a ld [wCurPikaPicAnimObject + 2], a jr .asm_fdb7e .asm_fdbaa push hl call Func_fdd62 pop hl ld a, [hl] and a jr z, .asm_fdbc8 ld a, [wCurPikaPicAnimObject + 2] inc a ld [wCurPikaPicAnimObject + 2], a cp [hl] jr nz, .asm_fdbc8 xor a ld [wCurPikaPicAnimObject + 2], a ld a, [wCurPikaPicAnimObject + 1] inc a ld [wCurPikaPicAnimObject + 1], a .asm_fdbc8 ret Pointers_fdbc9: dw Data_fdc11 dw Data_fdc11 dw Data_fdc29 dw Data_fdc32 dw Data_fdc3b dw Data_fdc3e dw Data_fdc41 dw Data_fdc50 dw Data_fdc61 dw Data_fdc6e dw Data_fdc77 dw Data_fdc84 dw Data_fdc8d dw Data_fdc98 dw Data_fdca5 dw Data_fdcb2 dw Data_fdcb7 dw Data_fdcc2 dw Data_fdccb dw Data_fdcd4 dw Data_fdcdf dw Data_fdce8 dw Data_fdcf1 dw Data_fdcf6 dw Data_fdd01 dw Data_fdd0a dw Data_fdd13 dw Data_fdd1c dw Data_fdd27 dw Data_fdd2c dw Data_fdd35 dw Data_fdd40 dw Data_fdd47 dw Data_fdd54 dw Data_fdd59 dw Data_fdc3b Data_fdc11: db $01, $14 db $07, $02 db $01, $01 db $07, $02 db $01, $01 db $07, $08 db $e0 Data_fdc1e: db $02, $02 db $01, $01 db $02, $02 db $01, $01 db $02, $08 db $e0 Data_fdc29: db $00, $08 db $08, $08 db $00, $08 db $08, $08 db $e0 Data_fdc32: db $08, $08 db $00, $08 db $08, $08 db $00, $08 db $e0 Data_fdc3b: db $01, $00 db $e0 Data_fdc3e: db $09, $00 db $e0 Data_fdc41: db $00, $02 db $0e, $04 db $00, $08 db $0e, $04 db $00, $40 db $0e, $04 db $00, $40 db $e0 Data_fdc50: db $00, $04 db $0f, $04 db $00, $04 db $0f, $04 db $00, $08 db $0f, $04 db $00, $08 db $0f, $04 db $e0 Data_fdc61: db $10, $01 db $00, $01 db $10, $01 db $00, $40 db $10, $01 db $00, $40 db $e0 Data_fdc6e: db $00, $08 db $11, $08 db $00, $14 db $11, $08 db $e0 Data_fdc77: db $00, $02 db $12, $02 db $00, $02 db $12, $40 db $00, $03 db $12, $40 db $e0 Data_fdc84: db $00, $08 db $13, $40 db $00, $04 db $13, $40 db $e0 Data_fdc8d: db $14, $08 db $00, $02 db $14, $08 db $00, $02 db $14, $08 db $e0 Data_fdc98: db $15, $04 db $00, $08 db $15, $04 db $00, $40 db $15, $04 db $00, $40 db $e0 Data_fdca5: db $00, $02 db $16, $02 db $00, $02 db $16, $02 db $00, $14 db $16, $02 db $e0 Data_fdcb2: db $00, $08 db $17, $08 db $e0 Data_fdcb7: db $00, $08 db $17, $03 db $18, $05 db $17, $03 db $00, $05 db $e0 Data_fdcc2: db $00, $14 db $19, $08 db $00, $14 db $19, $08 db $e0 Data_fdccb: db $00, $0d db $1a, $0c db $00, $64 db $1a, $08 db $e0 Data_fdcd4: db $00, $05 db $1b, $05 db $00, $05 db $1b, $05 db $00, $64 db $e0 Data_fdcdf: db $00, $02 db $1c, $02 db $00, $02 db $1c, $02 db $e0 Data_fdce8: db $00, $05 db $1d, $05 db $00, $05 db $1d, $05 db $e0 Data_fdcf1: db $1e, $08 db $00, $64 db $e0 Data_fdcf6: db $00, $0a db $1f, $03 db $00, $03 db $1f, $03 db $00, $64 db $e0 Data_fdd01: db $00, $03 db $20, $64 db $00, $08 db $20, $08 db $e0 Data_fdd0a: db $21, $06 db $00, $06 db $21, $06 db $00, $06 db $e0 Data_fdd13: db $00, $08 db $22, $0c db $00, $08 db $22, $0c db $e0 Data_fdd1c: db $00, $08 db $09, $02 db $0a, $01 db $0b, $01 db $0c, $64 db $e0 Data_fdd27: db $00, $08 db $24, $64 db $e0 Data_fdd2c: db $00, $10 db $25, $10 db $00, $10 db $25, $10 db $e0 Data_fdd35: db $00, $06 db $26, $06 db $00, $06 db $26, $06 db $00, $64 db $e0 Data_fdd40: db $00, $06 db $09, $06 db $0a, $64 db $e0 Data_fdd47: db $00, $14 db $09, $08 db $00, $14 db $09, $08 db $0a, $08 db $0b, $64 db $e0 Data_fdd54: db $00, $04 db $09, $64 db $e0 Data_fdd59: db $00, $0c db $09, $0c db $00, $0c db $09, $64 db $e0 Func_fdd62: and a ret z ld e, a ld d, 0 ld hl, Pointers_fddb8 add hl, de add hl, de ld e, [hl] inc hl ld d, [hl] ld a, [de] ld c, a inc de ld a, [de] ld b, a inc de push de push bc call Func_fdd98 pop bc pop de .asm_fdd7c push bc push hl ld a, [wd456] ld c, a .asm_fdd82 ld a, [de] inc de cp $ff jr z, .asm_fdd8a add c ld [hl], a .asm_fdd8a inc hl dec b jr nz, .asm_fdd82 pop hl ld bc, SCREEN_WIDTH add hl, bc pop bc dec c jr nz, .asm_fdd7c ret Func_fdd98: push bc ld a, [wd458] ld b, a ld a, [wPikaPicTextboxStartY] add b coord hl, 0, 0 ld bc, SCREEN_WIDTH call AddNTimes ld a, [wd457] ld c, a ld a, [wPikaSpriteY] add c ld c, a ld b, 0 add hl, bc pop bc ret Pointers_fddb8: dw Data_fde0e dw Data_fde0f dw Data_fde2a dw Data_fde60 dw Data_fde63 dw Data_fde67 dw Data_fde6b dw Data_fde45 dw Data_fde6b dw Data_fdfaa dw Data_fdfc5 dw Data_fdfe0 dw Data_fdffb dw Data_fe016 dw Data_fde81 dw Data_fde9c dw Data_fdeb7 dw Data_fded2 dw Data_fdeed dw Data_fdf08 dw Data_fdf23 dw Data_fdf3e dw Data_fdf59 dw Data_fdf74 dw Data_fdf8f dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfaa dw Data_fdfc5 dw Data_fdfe0 dw Data_fde0f Data_fde0e: db $ff ; unused Data_fde0f: ; fde0f db 5, 5 db $00, $05, $0a, $0f, $14 db $01, $06, $0b, $10, $15 db $02, $07, $0c, $11, $16 db $03, $08, $0d, $12, $17 db $04, $09, $0e, $13, $18 Data_fde2a: ; fde2a db 5, 5 db $19, $1e, $23, $28, $2d db $1a, $1f, $24, $29, $2e db $1b, $20, $25, $2a, $2f db $1c, $21, $26, $2b, $30 db $1d, $22, $27, $2c, $31 Data_fde45: ; fde45 db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $ff, $20, $25, $ff, $ff db $ff, $21, $26, $ff, $ff db $ff, $ff, $ff, $ff, $ff Data_fde60: ; fde60 db 1, 1 db $00 Data_fde63: ; fde63 db 2, 1 db $00 db $01 Data_fde67: ; fde67 db 1, 2 db $00, $01 Data_fde6b: ; fde6b db 2, 2 db $00, $01 db $02, $03 Data_fde71: ; fde71 db 3, 2 db $00, $01 db $02, $03 db $04, $05 Data_fde79: ; fde79 db 2, 3 db $00, $01, $02 db $03, $04, $05 Data_fde81: ; fde81 db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $00, $01, $02, $03, $04 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff Data_fde9c: ; fde9c db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 Data_fdeb7: ; fdeb7 db 5, 5 db $00, $01, $ff, $ff, $ff db $02, $03, $ff, $ff, $ff db $04, $05, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff Data_fded2: ; fded2 db 5, 5 db $ff, $ff, $ff, $ff, $ff db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 db $0a, $0b, $0c, $0d, $0e db $0f, $10, $11, $12, $13 Data_fdeed: ; fdeed db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $00, $01 db $ff, $ff, $ff, $02, $03 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff Data_fdf08: ; fdf08 db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $00, $01, $ff, $ff, $ff db $02, $03, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff Data_fdf23: ; fdf23 db 5, 5 db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 db $0a, $0b, $0c, $0d, $0e db $0f, $10, $11, $12, $13 db $14, $15, $16, $17, $18 Data_fdf3e: ; fdf3e db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 db $ff, $ff, $ff, $ff, $ff Data_fdf59: ; fdf59 db 5, 5 db $ff, $ff, $ff, $ff, $ff db $ff, $ff, $ff, $ff, $ff db $00, $01, $ff, $ff, $ff db $02, $03, $ff, $ff, $ff db $04, $05, $ff, $ff, $ff Data_fdf74: ; fdf74 db 5, 5 db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 db $0a, $0b, $0c, $0d, $0e db $0f, $10, $11, $12, $13 db $14, $15, $16, $17, $18 Data_fdf8f: ; fdf8f db 5, 5 db $19, $1a, $1b, $1c, $1d db $1e, $1f, $20, $21, $22 db $23, $24, $25, $26, $27 db $28, $29, $2a, $2b, $2c db $2d, $2e, $2f, $30, $31 Data_fdfaa: ; fdfaa db 5, 5 db $00, $01, $02, $03, $04 db $05, $06, $07, $08, $09 db $0a, $0b, $0c, $0d, $0e db $0f, $10, $11, $12, $13 db $14, $15, $16, $17, $18 Data_fdfc5: ; fdfc5 db 5, 5 db $19, $1a, $1b, $1c, $1d db $1e, $1f, $20, $21, $22 db $23, $24, $25, $26, $27 db $28, $29, $2a, $2b, $2c db $2d, $2e, $2f, $30, $31 Data_fdfe0: ; fdfe0 db 5, 5 db $32, $33, $34, $35, $36 db $37, $38, $39, $3a, $3b db $3c, $3d, $3e, $3f, $40 db $41, $42, $43, $44, $45 db $46, $47, $48, $49, $4a Data_fdffb: ; fdffb db 5, 5 db $4b, $4c, $4d, $4e, $4f db $50, $51, $52, $53, $54 db $55, $56, $57, $58, $59 db $5a, $5b, $5c, $5d, $5e db $5f, $60, $61, $62, $63 Data_fe016: ; fe016 db 5, 5 db $64, $65, $66, $67, $68 db $69, $6a, $6b, $6c, $6d db $6e, $6f, $70, $71, $72 db $73, $74, $75, $76, $77 db $78, $79, $7a, $7b, $7c LoadPikaPicAnimGFXHeader: push hl ld e, a ld d, 0 ld hl, PikaPicAnimGFXHeaders add hl, de add hl, de add hl, de add hl, de ld a, [hli] ld c, a ld a, [hli] ld b, a ld a, [hli] ld e, a ld a, [hli] ld d, a pop hl ret RunPikaPicAnimScript: call Func_fe066 ret c xor a ld [wPikaPicAnimPointerSetupFinished], a .loop call GetPikaPicAnimByte ld e, a ld d, 0 ld hl, Jumptable_fe071 add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a call JumpToAddress ld a, [wPikaPicAnimPointerSetupFinished] and a jr z, .loop ret Func_fe066: ld a, [wPikaPicAnimDelay] and a ret z dec a ld [wPikaPicAnimDelay], a scf ret Jumptable_fe071: dw PikaPicAnimCommand_nop ; 00, 0 params dw PikaPicAnimCommand_writebyte ; 01, 1 param dw PikaPicAnimCommand_loadgfx ; 02, 1 param dw PikaPicAnimCommand_object ; 03, 5 params dw PikaPicAnimCommand_nop4 ; 04, 0 params dw PikaPicAnimCommand_nop5 ; 05, 0 params dw PikaPicAnimCommand_deleteobject ; 06, 1 param dw PikaPicAnimCommand_nop7 ; 07, 0 params dw PikaPicAnimCommand_nop8 ; 08, 0 params dw PikaPicAnimCommand_jump ; 09, 1 dw param dw PikaPicAnimCommand_setduration ; 0a, 1 dw param dw PikaPicAnimCommand_cry ; 0b, 1 param dw PikaPicAnimCommand_thunderbolt ; 0c, 0 params dw PikaPicAnimCommand_waitbgmap ; 0d, 0 params (ret) dw PikaPicAnimCommand_ret ; 0e, 0 params (ret) PikaPicAnimCommand_nop: ret PikaPicAnimCommand_ret: ld a, 1 ld [wPikaPicAnimTimer], a xor a ld [wPikaPicAnimTimer + 1], a jr PikaPicAnimCommand_waitbgmap Func_fe09b: ret PikaPicAnimCommand_setduration: call GetPikaPicAnimByte ld [wPikaPicAnimTimer], a call GetPikaPicAnimByte ld [wPikaPicAnimTimer + 1], a ret PikaPicAnimCommand_waitbgmap: ld a, $ff ld [wPikaPicAnimPointerSetupFinished], a ret PikaPicAnimCommand_writebyte: call GetPikaPicAnimByte ld [wPikaPicAnimDelay], a ret PikaPicAnimCommand_nop4: PikaPicAnimCommand_nop5: PikaPicAnimCommand_nop7: PikaPicAnimCommand_nop8: ret PikaPicAnimCommand_jump: call GetPikaPicAnimByte ld l, a call GetPikaPicAnimByte ld h, a call UpdatePikaPicAnimPointer ret GetPikaPicAnimByte: push hl ld hl, wPikaPicAnimPointer ld a, [hli] ld h, [hl] ld l, a ld a, [hli] call UpdatePikaPicAnimPointer pop hl ret UpdatePikaPicAnimPointer: push af ld a, l ld [wPikaPicAnimPointer], a ld a, h ld [wPikaPicAnimPointer + 1], a pop af ret PikaPicAnimCommand_loadgfx: ld a, [wUpdateSpritesEnabled] push af ld a, $ff ld [wUpdateSpritesEnabled], a ld a, [H_AUTOBGTRANSFERENABLED] push af xor a ld [H_AUTOBGTRANSFERENABLED], a ld a, [hTilesetType] push af xor a ld [hTilesetType], a call GetPikaPicAnimByte ld [wPikaPicAnimCurGraphicID], a ld a, [wPikaPicAnimCurGraphicID] call LoadPikaPicAnimGFXHeader ld a, c cp a, $ff jr z, .compressed call RequestPikaPicAnimGFX jr .asm_fe109 .compressed call DecompressRequestPikaPicAnimGFX .asm_fe109 pop af ld [hTilesetType], a pop af ld [H_AUTOBGTRANSFERENABLED], a pop af ld [wUpdateSpritesEnabled], a ret RequestPikaPicAnimGFX: ; fe114 push de ld a, [wPikaPicAnimCurGraphicID] ld d, a ld e, c call CheckIfThereIsRoomForPikaPicAnimGFX pop de jr c, .failed call GetPikaPicVRAMAddressForNewGFX call CopyVideoDataAlternate and a .failed ret DecompressRequestPikaPicAnimGFX: ; fe128 push de ld a, [wPikaPicAnimCurGraphicID] ld d, a ld e, 5 * 5 call CheckIfThereIsRoomForPikaPicAnimGFX pop de jr c, .failed ld a, b call UncompressSpriteFromDE ld a, BANK(sSpriteBuffer1) call SwitchSRAMBankAndLatchClockData ld hl, sSpriteBuffer1 ld de, sSpriteBuffer0 ld bc, SPRITEBUFFERSIZE * 2 call CopyData call PrepareRTCDataAndDisableSRAM ld a, [wPikaPicAnimCurGraphicID] call LookUpTileOffsetForCurrentPikaPicAnimGFX call GetPikaPicVRAMAddressForNewGFX ld d, h ld e, l call InterlaceMergeSpriteBuffers .failed ret ClearPikaPicUsedGFXBuffer: ld hl, wPikaPicUsedGFXCount ld bc, wPikaPicUsedGFXEnd - wPikaPicUsedGFXCount xor a call FillMemory ret GetPikaPicVRAMAddressForNewGFX: ld hl, vNPCSprites push bc ld b, a and $f swap a ld c, a ld a, b and $f0 swap a ld b, a add hl, bc pop bc ret CheckIfThereIsRoomForPikaPicAnimGFX: push bc push hl ld hl, wPikaPicUsedGFX ld c, 8 .loop ld a, [hl] and a jr z, .empty cp d jr z, .found inc hl inc hl dec c jr nz, .loop scf ret ; execute hl, then bc .found inc hl ld a, [hl] ret ; execute hl, then bc .empty ld [hl], d inc hl ld a, [wPikaPicUsedGFXCount] add $80 ld [hl], a ld a, [wPikaPicUsedGFXCount] add e ld [wPikaPicUsedGFXCount], a cp $80 jr z, .asm_fe1a7 jr nc, .failed .asm_fe1a7 ld a, [hl] and a jr .pop_ret .failed scf .pop_ret pop hl pop bc ret LookUpTileOffsetForCurrentPikaPicAnimGFX: push bc push hl ld b, a ld hl, wPikaPicUsedGFX ld c, 8 .loop ld a, [hli] cp b jr z, .found inc hl dec c jr nz, .loop scf jr .pop_ret .found ld a, [hl] and a .pop_ret pop hl pop bc ret PikaPicAnimCommand_cry: call GetPikaPicAnimByte cp $ff ret z ld e, a callab PlayPikachuSoundClip ret PikaPicAnimCommand_thunderbolt: ld a, $1 ld [wMuteAudioAndPauseMusic], a call DelayFrame ld a, [wAudioROMBank] push af ld a, BANK(SFX_Battle_2F) ld [wAudioROMBank], a ld [wAudioSavedROMBank], a call PikaPicAnimLoadThunderboltAudio call PlaySound call PikaPicAnimThunderboltFlashScreen call WaitForSoundToFinish pop af ld [wAudioROMBank], a ld [wAudioSavedROMBank], a xor a ld [wMuteAudioAndPauseMusic], a ret PikaPicAnimLoadThunderboltAudio: ld hl, MoveSoundTable ld e, THUNDERBOLT ld d, 0 add hl, de add hl, de add hl, de ld a, BANK(MoveSoundTable) call GetFarByte ld b, a inc hl ld a, BANK(MoveSoundTable) call GetFarByte inc hl ld [wFrequencyModifier], a ld a, BANK(MoveSoundTable) call GetFarByte ld [wTempoModifier], a ld a, b ret PikaPicAnimThunderboltFlashScreen: ld hl, Data_fe242 .loop ld a, [hli] cp $ff ret z ld c, a ld b, [hl] inc hl push hl call GetDMGBGPalForPikaThunderbolt pop hl jr .loop GetDMGBGPalForPikaThunderbolt: ld a, b ld [rBGP], a call UpdateGBCPal_BGP call DelayFrames ret INCLUDE "data/pikachu_pic_animation.asm"