diff options
Diffstat (limited to 'engine/pikachu_pic_animation.asm')
-rwxr-xr-x | engine/pikachu_pic_animation.asm | 850 |
1 files changed, 207 insertions, 643 deletions
diff --git a/engine/pikachu_pic_animation.asm b/engine/pikachu_pic_animation.asm index a49e9bc2..be31e7d7 100755 --- a/engine/pikachu_pic_animation.asm +++ b/engine/pikachu_pic_animation.asm @@ -2,25 +2,25 @@ GetPikaPicAnimationScriptIndex: ; fd978 (3f:5978) ld hl, PikachuMoodLookupTable ld a, [wPikachuMood] ld d, a -.asm_fd97f +.get_mood_param ld a, [hli] inc hl cp d - jr c, .asm_fd97f + jr c, .get_mood_param dec hl ld e, [hl] ld hl, PikaPicAnimationScriptPointerLookupTable ld a, [wPikachuHappiness] ld d, a ld bc, 6 -.asm_fd990 +.get_happiness_param ld a, [hl] cp d - jr nc, .asm_fd997 + jr nc, .got_animation add hl, bc - jr .asm_fd990 + jr .get_happiness_param -.asm_fd997 +.got_animation ld d, 0 add hl, de ld a, [hl] @@ -29,22 +29,63 @@ GetPikaPicAnimationScriptIndex: ; fd978 (3f:5978) 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 + db 40, 1 + db 127, 2 + db 128, 3 + db 210, 4 + db 255, 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 + db 50 + dpikapic PikaPicAnimScript14 + dpikapic PikaPicAnimScript14 + dpikapic PikaPicAnimScript6 + dpikapic PikaPicAnimScript13 + dpikapic PikaPicAnimScript13 + + db 100 + dpikapic PikaPicAnimScript9 + dpikapic PikaPicAnimScript9 + dpikapic PikaPicAnimScript5 + dpikapic PikaPicAnimScript12 + dpikapic PikaPicAnimScript12 + + db 130 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript1 + dpikapic PikaPicAnimScript8 + dpikapic PikaPicAnimScript8 + + db 160 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript3 + dpikapic PikaPicAnimScript4 + dpikapic PikaPicAnimScript15 + dpikapic PikaPicAnimScript15 + + db 200 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript7 + dpikapic PikaPicAnimScript2 + dpikapic PikaPicAnimScript2 + + db 250 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript16 + dpikapic PikaPicAnimScript10 + dpikapic PikaPicAnimScript10 + + db 255 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript17 + dpikapic PikaPicAnimScript19 + dpikapic PikaPicAnimScript20 + dpikapic PikaPicAnimScript20 StarterPikachuEmotionCommand_pikapic: ; fd9d0 (3f:59d0) ld a, [H_AUTOBGTRANSFERENABLED] @@ -52,21 +93,21 @@ StarterPikachuEmotionCommand_pikapic: ; fd9d0 (3f:59d0) xor a ld [H_AUTOBGTRANSFERENABLED], a ld a, [de] - ld [wExpressionNumber2], a + ld [wPikaPicAnimNumber], a inc de push de - call Func_fd9e4 + call .RunPikapic pop de pop af ld [H_AUTOBGTRANSFERENABLED], a ret -Func_fd9e4: +.RunPikapic: call PlacePikapicTextBoxBorder callab LoadOverworldPikachuFrontpicPalettes call ResetPikaPicAnimBuffer call LoadCurrentPikaPicAnimScriptPointer - call Func_fda9a + call ExecutePikaPicAnimScript call PlacePikapicTextBoxBorder call RunDefaultPaletteCommand ret @@ -86,10 +127,10 @@ ResetPikaPicAnimBuffer: ld [wPikaPicAnimTimer], a ld a, h ld [wPikaPicAnimTimer + 1], a - ld a, $07 - ld [wPikaSpriteY], a - ld a, $06 - ld [wPikaPicTextboxStartY], a + ld a, $7 + ld [wPikaPicPikaDrawStartX], a + ld a, $6 + ld [wPikaPicPikaDrawStartY], a ret PlacePikapicTextBoxBorder: @@ -100,20 +141,20 @@ PlacePikapicTextBoxBorder: call TextBoxBorder call Delay3 call UpdateSprites - ld a, $01 + ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a call Delay3 ret LoadCurrentPikaPicAnimScriptPointer: - ld a, [wExpressionNumber2] + ld a, [wPikaPicAnimNumber] cp $1d jr c, .valid - ld a, 0 + ld a, $0 .valid ld e, a ld d, 0 - ld hl, Pointers_fda5e + ld hl, PikaPicAnimPointers add hl, de add hl, de ld a, [hli] @@ -122,48 +163,51 @@ LoadCurrentPikaPicAnimScriptPointer: 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: +PikaPicAnimPointers: +pikapic_def: macro +\1_id: dw \1 +endm + + pikapic_def PikaPicAnimScript0 ; 00 + pikapic_def PikaPicAnimScript1 ; 01 + pikapic_def PikaPicAnimScript2 ; 02 + pikapic_def PikaPicAnimScript3 ; 03 + pikapic_def PikaPicAnimScript4 ; 04 + pikapic_def PikaPicAnimScript5 ; 05 + pikapic_def PikaPicAnimScript6 ; 06 + pikapic_def PikaPicAnimScript7 ; 07 + pikapic_def PikaPicAnimScript8 ; 08 + pikapic_def PikaPicAnimScript9 ; 09 + pikapic_def PikaPicAnimScript10 ; 0a + pikapic_def PikaPicAnimScript11 ; 0b + pikapic_def PikaPicAnimScript12 ; 0c + pikapic_def PikaPicAnimScript13 ; 0d + pikapic_def PikaPicAnimScript14 ; 0e + pikapic_def PikaPicAnimScript15 ; 0f + pikapic_def PikaPicAnimScript16 ; 10 + pikapic_def PikaPicAnimScript17 ; 11 + pikapic_def PikaPicAnimScript18 ; 12 + pikapic_def PikaPicAnimScript19 ; 13 + pikapic_def PikaPicAnimScript20 ; 14 + pikapic_def PikaPicAnimScript21 ; 15 + pikapic_def PikaPicAnimScript22 ; 16 + pikapic_def PikaPicAnimScript23 ; 17 + pikapic_def PikaPicAnimScript24 ; 18 + pikapic_def PikaPicAnimScript25 ; 19 + pikapic_def PikaPicAnimScript26 ; 1a + pikapic_def PikaPicAnimScript27 ; 1b + pikapic_def PikaPicAnimScript28 ; 1c + pikapic_def PikaPicAnimScript29 ; 1d + +ExecutePikaPicAnimScript: .loop xor a ld [H_AUTOBGTRANSFERENABLED], a - call RunPikaPicAnimScript - call Func_fdad5 - call Func_fdad6 - call Func_fdad5 - ld a, $01 + call RunPikaPicAnimSetupScript + call DummyFunction_fdad5 + call AnimateCurrentPikaPicAnimFrame + call DummyFunction_fdad5 + ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a call PikaPicAnimTimerAndJoypad and a @@ -194,57 +238,57 @@ CheckPikaPicAnimTimer: ret .timer_expired - ld a, $01 + ld a, $1 ret -Func_fdad5: +DummyFunction_fdad5: ret -Func_fdad6: +AnimateCurrentPikaPicAnimFrame: ld bc, wPikaPicAnimObjectDataBuffer ld a, 4 -.asm_fdadb +.loop push af push bc - ld hl, 0 + ld hl, 0 ; struct index add hl, bc ld a, [hli] and a - jr z, .asm_fdb26 + jr z, .skip ld a, [hli] - ld [wCurPikaPicAnimObject], a + ld [wCurPikaPicAnimObjectScriptIdx], a ld a, [hli] - ld [wCurPikaPicAnimObject + 1], a + ld [wCurPikaPicAnimObjectFrameIdx], a ld a, [hli] - ld [wCurPikaPicAnimObject + 2], a + ld [wCurPikaPicAnimObjectFrameTimer], a ld a, [hli] - ld [wd456], a + ld [wCurPikaPicAnimObjectVTileOffset], a ld a, [hli] - ld [wd457], a + ld [wCurPikaPicAnimObjectXOffset], a ld a, [hli] - ld [wd458], a + ld [wCurPikaPicAnimObjectYOffset], a ld a, [hli] - ld [wCurPikaPicAnimObject + 3], a + ld [wCurPikaPicAnimObject + 6], a push bc - call Func_fdb7e + call LoadPikaPicAnimObjectData pop bc - ld hl, 1 + ld hl, 1 ; script index add hl, bc - ld a, [wCurPikaPicAnimObject] + ld a, [wCurPikaPicAnimObjectScriptIdx] ld [hli], a - ld a, [wCurPikaPicAnimObject + 1] + ld a, [wCurPikaPicAnimObjectFrameIdx] ld [hli], a - ld a, [wCurPikaPicAnimObject + 2] + ld a, [wCurPikaPicAnimObjectFrameTimer] ld [hli], a - ld a, [wd456] + ld a, [wCurPikaPicAnimObjectVTileOffset] ld [hli], a - ld a, [wd457] + ld a, [wCurPikaPicAnimObjectXOffset] ld [hli], a - ld a, [wd458] + ld a, [wCurPikaPicAnimObjectYOffset] ld [hli], a - ld a, [wCurPikaPicAnimObject + 3] + ld a, [wCurPikaPicAnimObject + 6] ld [hl], a -.asm_fdb26 +.skip pop bc ld hl, 8 add hl, bc @@ -252,7 +296,7 @@ Func_fdad6: ld c, l pop af dec a - jr nz, .asm_fdadb + jr nz, .loop ret PikaPicAnimCommand_object: @@ -279,7 +323,7 @@ PikaPicAnimCommand_object: call GetPikaPicAnimByte ld [hl], a xor a - ld [hli], a + ld [hli], a ; overloads ld [hli], a call GetPikaPicAnimByte ld [hli], a @@ -311,323 +355,65 @@ PikaPicAnimCommand_deleteobject: ld [hl], a ret -Func_fdb7e: -.asm_fdb7e - ld a, [wCurPikaPicAnimObject] +LoadPikaPicAnimObjectData: +.loop + ld a, [wCurPikaPicAnimObjectScriptIdx] cp $23 - jr c, .asm_fdb87 - ld a, $04 -.asm_fdb87 + jr c, .valid + ld a, $4 +.valid ld e, a - ld d, $00 - ld hl, Pointers_fdbc9 + ld d, 0 + ld hl, PikaPicAnimBGFramesPointers add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a - ld a, [wCurPikaPicAnimObject + 1] + ld a, [wCurPikaPicAnimObjectFrameIdx] ld e, a ld d, 0 add hl, de add hl, de ld a, [hli] cp $e0 - jr z, .asm_fdba1 - jr .asm_fdbaa + jr z, .end + jr .init -.asm_fdba1 +.end xor a - ld [wCurPikaPicAnimObject + 1], a - ld [wCurPikaPicAnimObject + 2], a - jr .asm_fdb7e + ld [wCurPikaPicAnimObjectFrameIdx], a + ld [wCurPikaPicAnimObjectFrameTimer], a + jr .loop -.asm_fdbaa +.init push hl - call Func_fdd62 + call LoadCurPikaPicObjectTilemap pop hl ld a, [hl] and a - jr z, .asm_fdbc8 - ld a, [wCurPikaPicAnimObject + 2] + jr z, .not_done ; lasts forever + ld a, [wCurPikaPicAnimObjectFrameTimer] inc a - ld [wCurPikaPicAnimObject + 2], a + ld [wCurPikaPicAnimObjectFrameTimer], a cp [hl] - jr nz, .asm_fdbc8 + jr nz, .not_done xor a - ld [wCurPikaPicAnimObject + 2], a - ld a, [wCurPikaPicAnimObject + 1] + ld [wCurPikaPicAnimObjectFrameTimer], a + ld a, [wCurPikaPicAnimObjectFrameIdx] inc a - ld [wCurPikaPicAnimObject + 1], a -.asm_fdbc8 + ld [wCurPikaPicAnimObjectFrameIdx], a +.not_done 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: +INCLUDE "data/pikachu_pic_objects.asm" + +LoadCurPikaPicObjectTilemap: and a ret z ld e, a ld d, 0 - ld hl, Pointers_fddb8 + ld hl, PikaPicTilemapPointers add hl, de add hl, de ld e, [hl] @@ -641,45 +427,45 @@ Func_fdd62: inc de push de push bc - call Func_fdd98 + call .GetStartCoords pop bc pop de -.asm_fdd7c +.row push bc push hl - ld a, [wd456] + ld a, [wCurPikaPicAnimObjectVTileOffset] ; tile id offset ld c, a -.asm_fdd82 +.col ld a, [de] inc de cp $ff - jr z, .asm_fdd8a + jr z, .skip add c ld [hl], a -.asm_fdd8a +.skip inc hl dec b - jr nz, .asm_fdd82 + jr nz, .col pop hl ld bc, SCREEN_WIDTH add hl, bc pop bc dec c - jr nz, .asm_fdd7c + jr nz, .row ret -Func_fdd98: +.GetStartCoords: push bc - ld a, [wd458] + ld a, [wCurPikaPicAnimObjectYOffset] ; Y offset ld b, a - ld a, [wPikaPicTextboxStartY] + ld a, [wPikaPicPikaDrawStartY] add b coord hl, 0, 0 ld bc, SCREEN_WIDTH call AddNTimes - ld a, [wd457] + ld a, [wCurPikaPicAnimObjectXOffset] ; X offset ld c, a - ld a, [wPikaSpriteY] + ld a, [wPikaPicPikaDrawStartX] add c ld c, a ld b, 0 @@ -687,234 +473,7 @@ Func_fdd98: 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 +INCLUDE "data/pikachu_pic_tilemaps.asm" LoadPikaPicAnimGFXHeader: push hl @@ -936,8 +495,8 @@ LoadPikaPicAnimGFXHeader: pop hl ret -RunPikaPicAnimScript: - call Func_fe066 +RunPikaPicAnimSetupScript: + call .CheckAndAdvanceTimer ret c xor a ld [wPikaPicAnimPointerSetupFinished], a @@ -945,7 +504,7 @@ RunPikaPicAnimScript: call GetPikaPicAnimByte ld e, a ld d, 0 - ld hl, Jumptable_fe071 + ld hl, .Jumptable add hl, de add hl, de ld a, [hli] @@ -957,7 +516,7 @@ RunPikaPicAnimScript: jr z, .loop ret -Func_fe066: +.CheckAndAdvanceTimer: ld a, [wPikaPicAnimDelay] and a ret z @@ -966,7 +525,7 @@ Func_fe066: scf ret -Jumptable_fe071: +.Jumptable: dw PikaPicAnimCommand_nop ; 00, 0 params dw PikaPicAnimCommand_writebyte ; 01, 1 param dw PikaPicAnimCommand_loadgfx ; 02, 1 param @@ -980,7 +539,7 @@ Jumptable_fe071: 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_run ; 0d, 0 params (ret) dw PikaPicAnimCommand_ret ; 0e, 0 params (ret) PikaPicAnimCommand_nop: @@ -991,9 +550,9 @@ PikaPicAnimCommand_ret: ld [wPikaPicAnimTimer], a xor a ld [wPikaPicAnimTimer + 1], a - jr PikaPicAnimCommand_waitbgmap + jr PikaPicAnimCommand_run -Func_fe09b: +; XXX ret PikaPicAnimCommand_setduration: @@ -1003,7 +562,7 @@ PikaPicAnimCommand_setduration: ld [wPikaPicAnimTimer + 1], a ret -PikaPicAnimCommand_waitbgmap: +PikaPicAnimCommand_run: ld a, $ff ld [wPikaPicAnimPointerSetupFinished], a ret @@ -1068,11 +627,11 @@ PikaPicAnimCommand_loadgfx: cp a, $ff jr z, .compressed call RequestPikaPicAnimGFX - jr .asm_fe109 + jr .done .compressed call DecompressRequestPikaPicAnimGFX -.asm_fe109 +.done pop af ld [hTilesetType], a pop af @@ -1144,6 +703,11 @@ GetPikaPicVRAMAddressForNewGFX: ret CheckIfThereIsRoomForPikaPicAnimGFX: +; d: idx +; e: size +; FATAL: If the graphic has already been loaded, or if there are +; already 8 graphics objects loaded, the game will execute arbitrary +; code. push bc push hl ld hl, wPikaPicUsedGFX @@ -1176,9 +740,9 @@ CheckIfThereIsRoomForPikaPicAnimGFX: add e ld [wPikaPicUsedGFXCount], a cp $80 - jr z, .asm_fe1a7 + jr z, .okay jr nc, .failed -.asm_fe1a7 +.okay ld a, [hl] and a jr .pop_ret @@ -1228,12 +792,12 @@ PikaPicAnimCommand_thunderbolt: call DelayFrame ld a, [wAudioROMBank] push af - ld a, BANK(SFX_Battle_2F) + ld a, BANK(SFX_Thunderbolt) ld [wAudioROMBank], a ld [wAudioSavedROMBank], a - call PikaPicAnimLoadThunderboltAudio + call .LoadAudio call PlaySound - call PikaPicAnimThunderboltFlashScreen + call .FlashScreen call WaitForSoundToFinish pop af ld [wAudioROMBank], a @@ -1242,7 +806,7 @@ PikaPicAnimCommand_thunderbolt: ld [wMuteAudioAndPauseMusic], a ret -PikaPicAnimLoadThunderboltAudio: +.LoadAudio: ld hl, MoveSoundTable ld e, THUNDERBOLT ld d, 0 @@ -1263,8 +827,8 @@ PikaPicAnimLoadThunderboltAudio: ld a, b ret -PikaPicAnimThunderboltFlashScreen: - ld hl, Data_fe242 +.FlashScreen: + ld hl, PikaPicAnimThunderboltPals .loop ld a, [hli] cp $ff @@ -1273,11 +837,11 @@ PikaPicAnimThunderboltFlashScreen: ld b, [hl] inc hl push hl - call GetDMGBGPalForPikaThunderbolt + call .UpdatePal pop hl jr .loop -GetDMGBGPalForPikaThunderbolt: +.UpdatePal: ld a, b ld [rBGP], a call UpdateGBCPal_BGP |