diff options
Diffstat (limited to 'engine/overworld/player_animations.asm')
-rwxr-xr-x | engine/overworld/player_animations.asm | 520 |
1 files changed, 520 insertions, 0 deletions
diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm new file mode 100755 index 00000000..1af178c7 --- /dev/null +++ b/engine/overworld/player_animations.asm @@ -0,0 +1,520 @@ +Func_70510: ; 70510 (1c:4510) + call Func_706ef + ld a, $ec + ld [$c104], a + call Delay3 + push hl + call GBFadeIn2 + ld hl, W_FLAGS_D733 + bit 7, [hl] + res 7, [hl] + jr nz, .asm_70568 + ld a, (SFX_02_4c - SFX_Headers_02) / 3 + call PlaySound + ld hl, $d732 + bit 4, [hl] + res 4, [hl] + pop hl + jr nz, .asm_7055e + call Func_705aa + ld a, (SFX_02_4f - SFX_Headers_02) / 3 + call PlaySound + call Func_70787 + ld a, b + and a + jr nz, .asm_7055b + ld hl, wWhichTrade ; $cd3d + xor a + ld [hli], a + inc a + ld [hli], a + ld a, $8 + ld [hli], a + ld [hl], $ff + ld hl, $cd48 + call Func_70730 +.asm_70558 + call Func_2307 +.asm_7055b + jp Func_70772 +.asm_7055e + ld c, $32 + call DelayFrames + call Func_705aa + jr .asm_7055b +.asm_70568 + pop hl + ld de, BirdSprite ; $4d80 + ld hl, $8000 + ld bc, (BANK(BirdSprite) << 8) + $0c + call CopyVideoData + call Func_706d7 + ld a, (SFX_02_50 - SFX_Headers_02) / 3 + call PlaySound + ld hl, wWhichTrade ; $cd3d + xor a + ld [hli], a + ld a, $c + ld [hli], a + ld [hl], $8 + ld de, FlyAnimationEnterScreenCoords ; $4592 + call Func_706ae + call LoadPlayerSpriteGraphics + jr .asm_70558 + +FlyAnimationEnterScreenCoords: ; 70592 (1c:4592) +; y, x pairs +; This is the sequence of screen coordinates used by the overworld +; Fly animation when the player is entering a map. + db $05, $98 + db $0F, $90 + db $18, $88 + db $20, $80 + db $27, $78 + db $2D, $70 + db $32, $68 + db $36, $60 + db $39, $58 + db $3B, $50 + db $3C, $48 + db $3C, $40 + +Func_705aa: ; 705aa (1c:45aa) + ld hl, wWhichTrade ; $cd3d + ld a, $10 + ld [hli], a + ld a, $3c + ld [hli], a + call Func_7077f + ld [hl], a + jp Func_70755 + +_DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) + call Func_706ef + call Func_70787 + ld a, b + and a + jr z, .asm_705ef + dec a + jp nz, Func_7067d +.asm_705c8 + ld a, (SFX_02_4b - SFX_Headers_02) / 3 + call PlaySound + ld hl, wWhichTrade ; $cd3d + ld a, $f0 + ld [hli], a + ld a, $ec + ld [hli], a + call Func_7077f + ld [hl], a + call Func_70755 + call Func_70787 + ld a, b + dec a + jr z, .asm_705e9 + ld c, $a + call DelayFrames +.asm_705e9 + call GBFadeOut2 + jp Func_70772 +.asm_705ef + ld a, $4 + call StopMusic + ld a, [$d732] + bit 6, a + jr z, .asm_70610 + ld hl, wWhichTrade ; $cd3d + ld a, $10 + ld [hli], a + ld a, $ff + ld [hli], a + xor a + ld [hli], a + ld [hl], $a1 + ld hl, $cd48 + call Func_70730 + jr .asm_705c8 +.asm_70610 + call Func_706d7 + ld hl, wWhichTrade ; $cd3d + ld a, $ff + ld [hli], a + ld a, $8 + ld [hli], a + ld [hl], $c + call Func_706ae + ld a, (SFX_02_50 - SFX_Headers_02) / 3 + call PlaySound + ld hl, wWhichTrade ; $cd3d + xor a + ld [hli], a + ld a, $c + ld [hli], a + ld [hl], $c + ld de, FlyAnimationScreenCoords1 ; $464f + call Func_706ae + ld c, $28 + call DelayFrames + ld hl, $cd3e + ld a, $b + ld [hli], a + ld [hl], $8 + ld de, FlyAnimationScreenCoords2 ; $4667 + call Func_706ae + call GBFadeOut2 + jp Func_70772 + +FlyAnimationScreenCoords1: ; 7064f (1c:464f) +; y, x pairs +; This is the sequence of screen coordinates used by the first part +; of the Fly overworld animation. + db $3C, $48 + db $3C, $50 + db $3B, $58 + db $3A, $60 + db $39, $68 + db $37, $70 + db $37, $78 + db $33, $80 + db $30, $88 + db $2D, $90 + db $2A, $98 + db $27, $A0 + +FlyAnimationScreenCoords2: ; 70667 (1c:4667) +; y, x pairs +; This is the sequence of screen coordinates used by the second part +; of the Fly overworld animation. + db $1A, $90 + db $19, $80 + db $17, $70 + db $15, $60 + db $12, $50 + db $0F, $40 + db $0C, $30 + db $09, $20 + db $05, $10 + db $00, $00 + + db $F0, $00 + +Func_7067d: ; 7067d (1c:467d) + ld a, $ff + ld [$cfcb], a + ld a, [$c302] + ld [$c30a], a + ld a, [$c306] + ld [$c30e], a + ld a, $a0 + ld [wOAMBuffer], a + ld [$c304], a + ld c, $2 + call DelayFrames + ld a, $a0 + ld [$c308], a + ld [$c30c], a + call GBFadeOut2 + ld a, $1 + ld [$cfcb], a + jp Func_70772 + +Func_706ae: ; 706ae (1c:46ae) + ld a, [$cd3f] + xor $1 + ld [$cd3f], a + ld [$c102], a + call Delay3 + ld a, [wWhichTrade] ; $cd3d + cp $ff + jr z, .asm_706cd + ld hl, $c104 + ld a, [de] + inc de + ld [hli], a + inc hl + ld a, [de] + inc de + ld [hl], a +.asm_706cd + ld a, [$cd3e] + dec a + ld [$cd3e], a + jr nz, Func_706ae + ret + +Func_706d7: ; 706d7 (1c:46d7) + ld de, BirdSprite ; $4d80 + ld hl, $8000 + ld bc, (BANK(BirdSprite) << 8) + $0c + call CopyVideoData + ld de, BirdSprite + $c0 ; $4e40 ; moving amination sprite + ld hl, $8800 + ld bc, (BANK(BirdSprite) << 8) + $0c + jp CopyVideoData + +Func_706ef: ; 706ef (1c:46ef) + ld a, [$c102] + ld [$cd50], a + ld a, [$c104] + ld [$cd4f], a + ld hl, PlayerSpinningFacingOrder ; $4713 + ld de, $cd48 + ld bc, $4 + call CopyData + ld a, [$c102] + ld hl, $cd48 +.asm_7070d + cp [hl] + inc hl + jr nz, .asm_7070d + dec hl + ret + +PlayerSpinningFacingOrder: ; 70713 (1c:4713) +; The order of the direction the player's sprite is facing when teleporting +; away. Creates a spinning effect. + db $00, $08, $04, $0C ; down, left, up, right + +Func_70717: ; 70717 (1c:4717) + ld a, [hl] + ld [$c102], a + push hl + ld hl, $cd48 + ld de, $cd47 + ld bc, $4 + call CopyData + ld a, [$cd47] + ld [$cd4b], a + pop hl + ret + +Func_70730: ; 70730 (1c:4730) + call Func_70717 + ld a, [wWhichTrade] ; $cd3d + ld c, a + and $3 + jr nz, .asm_70743 + ld a, [$cd40] + cp $ff + call nz, PlaySound +.asm_70743 + ld a, [$cd3e] + add c + ld [wWhichTrade], a ; $cd3d + ld c, a + ld a, [$cd3f] + cp c + ret z + call DelayFrames + jr Func_70730 + +Func_70755: ; 70755 (1c:4755) + call Func_70717 + ld a, [wWhichTrade] ; $cd3d + ld c, a + ld a, [$c104] + add c + ld [$c104], a + ld c, a + ld a, [$cd3e] + cp c + ret z + ld a, [$cd3f] + ld c, a + call DelayFrames + jr Func_70755 + +Func_70772: ; 70772 (1c:4772) + ld a, [$cd4f] + ld [$c104], a + ld a, [$cd50] + ld [$c102], a + ret + +Func_7077f: ; 7077f (1c:477f) + ld a, [$cf1b] + xor $1 + inc a + inc a + ret + +Func_70787: ; 70787 (1c:4787) + ld b, 0 + ld hl, DataTable_707a9 ; $47a9 + ld a, [W_CURMAPTILESET] ; $d367 + ld c, a +.asm_70790 + ld a, [hli] + cp $ff + jr z, .asm_707a4 + cp c + jr nz, .asm_7079e + FuncCoord 8, 9 ; $c45c + ld a, [Coord] + cp [hl] + jr z, .asm_707a2 +.asm_7079e + inc hl + inc hl + jr .asm_70790 +.asm_707a2 + inc hl + ld b, [hl] +.asm_707a4 + ld a, b + ld [$cd5b], a + ret + +; format: db tileset id, tile id, value to be put in $cd5b +DataTable_707a9: ; 707a9 (1c:47a9) + db FACILITY, $20, 1 ; warp pad + db FACILITY, $11, 2 ; hole + db CAVERN, $22, 2 ; hole + db INTERIOR, $55, 1 ; warp pad + db $FF + +Func_707b6: ; 707b6 (1c:47b6) + ld c, $a + call DelayFrames + ld hl, $d736 + set 6, [hl] + ld de, RedSprite ; $4180 + ld hl, $8000 + ld bc, (BANK(RedSprite) << 8) + $0c + call CopyVideoData + ld a, $4 + ld hl, RedFishingTiles ; $4866 + call Func_71771 + ld a, [$c102] + ld c, a + ld b, $0 + ld hl, FishingRodGfxProperties ; $4856 + add hl, bc + ld de, $c39c + ld bc, $4 + call CopyData + ld c, $64 + call DelayFrames + ld a, [wWhichTrade] ; $cd3d + and a + ld hl, NoNibbleText + jr z, .asm_70836 + cp $2 + ld hl, NothingHereText + jr z, .asm_70836 + ld b, $a +.asm_707fe + ld hl, $c104 + call Func_70842 + ld hl, $c39c + call Func_70842 + call Delay3 + dec b + jr nz, .asm_707fe + ld a, [$c102] + cp $4 + jr nz, .asm_7081c + ld a, $a0 + ld [$c39c], a +.asm_7081c + ld hl, $cd4f + xor a + ld [hli], a + ld [hl], a + ld a, $4c + call Predef ; indirect jump to PrintEmotionBubble (17c47 (5:7c47)) + ld a, [$c102] + cp $4 + jr nz, .asm_70833 + ld a, $44 + ld [$c39c], a +.asm_70833 + ld hl, ItsABiteText +.asm_70836 + call PrintText + ld hl, $d736 + res 6, [hl] + call LoadFontTilePatterns + ret + +Func_70842: ; 70842 (1c:4842) + ld a, [hl] + xor $1 + ld [hl], a + ret + +NoNibbleText: ; 70847 (1c:4847) + TX_FAR _NoNibbleText + db "@" + +NothingHereText: ; 7084c (1c:484c) + TX_FAR _NothingHereText + db "@" + +ItsABiteText: ; 70851 (1c:4851) + TX_FAR _ItsABiteText + db "@" + +FishingRodGfxProperties: ; 70856 (1c:4856) +; specicies how the fishing rod should be drawn on the screen +; first byte = screen y coordinate +; second byte = screen x coordinate +; third byte = tile number +; fourth byte = sprite properties + db $5B, $4C, $FD, $00 ; player facing down + db $44, $4C, $FD, $00 ; player facing up + db $50, $40, $FE, $00 ; player facing left + db $50, $58, $FE, $20 ; player facing right ($20 means "horizontally flip the tile") + +RedFishingTiles: ; 70866 (1c:4866) + dw RedFishingTilesFront + db $02, $1E + dw $8020 + + dw RedFishingTilesBack + db $02, $1E + dw $8060 + + dw RedFishingTilesSide + db $02, $1E + dw $80A0 + + dw RedFishingRodTiles + db $03, $1E + dw $8FD0 + +_HandleMidJump: ; 7087e (1c:487e) + ld a, [$d714] + ld c, a + inc a + cp $10 + jr nc, .asm_70895 + ld [$d714], a + ld b, $0 + ld hl, PlayerJumpingYScreenCoords ; $48ba + add hl, bc + ld a, [hl] + ld [$c104], a ; player's sprite y coordinate + ret +.asm_70895 + ld a, [wWalkCounter] ; $cfc5 + cp $0 + ret nz + call UpdateSprites + call Delay3 + xor a + ld [H_CURRENTPRESSEDBUTTONS], a + ld [H_NEWLYPRESSEDBUTTONS], a + ld [H_NEWLYRELEASEDBUTTONS], a + ld [$d714], a + ld hl, $d736 + res 6, [hl] + ld hl, $d730 + res 7, [hl] + xor a + ld [wJoypadForbiddenButtonsMask], a + ret + +PlayerJumpingYScreenCoords: ; 708ba (1c:48ba) +; Sequence of y screen coordinates for player's sprite when jumping over a ledge. + db $38, $36, $34, $32, $31, $30, $30, $30, $31, $32, $33, $34, $36, $38, $3C, $3C |