shithub: pokered

ref: 4ad367ba98b15a8b03d25963cd7b9a8125d2285f
dir: /engine/overworld/player_animations.asm/

View raw version
Func_70510: ; 70510 (1c:4510)
	call Func_706ef
	ld a, $ec
	ld [wSpriteStateData1 + 4], 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, wd732
	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 ; wWhichTrade
	xor a
	ld [hli], a
	inc a
	ld [hli], a
	ld a, $8
	ld [hli], a
	ld [hl], $ff
	ld hl, wcd48
	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, vNPCSprites
	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 ; wWhichTrade
	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 ; wWhichTrade
	ld a, $10
	ld [hli], a
	ld a, $3c
	ld [hli], a
	call Func_7077f
	ld [hl], a
	jp Func_70755

_LeaveMapAnim: ; 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 ; wWhichTrade
	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, [wd732]
	bit 6, a
	jr z, .asm_70610
	ld hl, wWhichTrade ; wWhichTrade
	ld a, $10
	ld [hli], a
	ld a, $ff
	ld [hli], a
	xor a
	ld [hli], a
	ld [hl], $a1
	ld hl, wcd48
	call Func_70730
	jr .asm_705c8
.asm_70610
	call Func_706d7
	ld hl, wWhichTrade ; wWhichTrade
	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 ; wWhichTrade
	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, wTrainerEngageDistance
	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 [wcfcb], a
	ld a, [wOAMBuffer + $02]
	ld [wOAMBuffer + $0a], a
	ld a, [wOAMBuffer + $06]
	ld [wOAMBuffer + $0e], a
	ld a, $a0
	ld [wOAMBuffer], a
	ld [wOAMBuffer + $04], a
	ld c, $2
	call DelayFrames
	ld a, $a0
	ld [wOAMBuffer + $08], a
	ld [wOAMBuffer + $0c], a
	call GBFadeOut2
	ld a, $1
	ld [wcfcb], a
	jp Func_70772

Func_706ae: ; 706ae (1c:46ae)
	ld a, [wTrainerFacingDirection]
	xor $1
	ld [wTrainerFacingDirection], a
	ld [wSpriteStateData1 + 2], a
	call Delay3
	ld a, [wWhichTrade] ; wWhichTrade
	cp $ff
	jr z, .asm_706cd
	ld hl, wSpriteStateData1 + 4
	ld a, [de]
	inc de
	ld [hli], a
	inc hl
	ld a, [de]
	inc de
	ld [hl], a
.asm_706cd
	ld a, [wTrainerEngageDistance]
	dec a
	ld [wTrainerEngageDistance], a
	jr nz, Func_706ae
	ret

Func_706d7: ; 706d7 (1c:46d7)
	ld de, BirdSprite ; $4d80
	ld hl, vNPCSprites
	ld bc, (BANK(BirdSprite) << 8) + $0c
	call CopyVideoData
	ld de, BirdSprite + $c0 ; $4e40 ; moving amination sprite
	ld hl, vNPCSprites2
	ld bc, (BANK(BirdSprite) << 8) + $0c
	jp CopyVideoData

Func_706ef: ; 706ef (1c:46ef)
	ld a, [wSpriteStateData1 + 2]
	ld [wcd50], a
	ld a, [wSpriteStateData1 + 4]
	ld [wcd4f], a
	ld hl, PlayerSpinningFacingOrder ; $4713
	ld de, wcd48
	ld bc, $4
	call CopyData
	ld a, [wSpriteStateData1 + 2]
	ld hl, wcd48
.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 [wSpriteStateData1 + 2], a
	push hl
	ld hl, wcd48
	ld de, wcd47
	ld bc, $4
	call CopyData
	ld a, [wcd47]
	ld [wcd4b], a
	pop hl
	ret

Func_70730: ; 70730 (1c:4730)
	call Func_70717
	ld a, [wWhichTrade] ; wWhichTrade
	ld c, a
	and $3
	jr nz, .asm_70743
	ld a, [wTrainerScreenY]
	cp $ff
	call nz, PlaySound
.asm_70743
	ld a, [wTrainerEngageDistance]
	add c
	ld [wWhichTrade], a ; wWhichTrade
	ld c, a
	ld a, [wTrainerFacingDirection]
	cp c
	ret z
	call DelayFrames
	jr Func_70730

Func_70755: ; 70755 (1c:4755)
	call Func_70717
	ld a, [wWhichTrade] ; wWhichTrade
	ld c, a
	ld a, [wSpriteStateData1 + 4]
	add c
	ld [wSpriteStateData1 + 4], a
	ld c, a
	ld a, [wTrainerEngageDistance]
	cp c
	ret z
	ld a, [wTrainerFacingDirection]
	ld c, a
	call DelayFrames
	jr Func_70755

Func_70772: ; 70772 (1c:4772)
	ld a, [wcd4f]
	ld [wSpriteStateData1 + 4], a
	ld a, [wcd50]
	ld [wSpriteStateData1 + 2], a
	ret

Func_7077f: ; 7077f (1c:477f)
	ld a, [wcf1b]
	xor $1
	inc a
	inc a
	ret

Func_70787: ; 70787 (1c:4787)
	ld b, 0
	ld hl, DataTable_707a9 ; $47a9
	ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET
	ld c, a
.asm_70790
	ld a, [hli]
	cp $ff
	jr z, .asm_707a4
	cp c
	jr nz, .asm_7079e
	aCoord 8, 9
	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 [wcd5b], a
	ret

; format: db tileset id, tile id, value to be put in wcd5b
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, wd736
	set 6, [hl]
	ld de, RedSprite ; $4180
	ld hl, vNPCSprites
	ld bc, (BANK(RedSprite) << 8) + $0c
	call CopyVideoData
	ld a, $4
	ld hl, RedFishingTiles ; $4866
	call Func_71771
	ld a, [wSpriteStateData1 + 2]
	ld c, a
	ld b, $0
	ld hl, FishingRodGfxProperties ; $4856
	add hl, bc
	ld de, wOAMBuffer + $9c
	ld bc, $4
	call CopyData
	ld c, $64
	call DelayFrames
	ld a, [wWhichTrade] ; wWhichTrade
	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, wSpriteStateData1 + 4
	call Func_70842
	ld hl, wOAMBuffer + $9c
	call Func_70842
	call Delay3
	dec b
	jr nz, .asm_707fe
	ld a, [wSpriteStateData1 + 2]
	cp $4
	jr nz, .asm_7081c
	ld a, $a0
	ld [wOAMBuffer + $9c], a
.asm_7081c
	ld hl, wcd4f
	xor a
	ld [hli], a
	ld [hl], a
	predef EmotionBubble
	ld a, [wSpriteStateData1 + 2]
	cp $4
	jr nz, .asm_70833
	ld a, $44
	ld [wOAMBuffer + $9c], a
.asm_70833
	ld hl, ItsABiteText
.asm_70836
	call PrintText
	ld hl, wd736
	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 2, BANK(RedFishingTilesFront)
	dw vNPCSprites + $20

	dw RedFishingTilesBack
	db 2, BANK(RedFishingTilesBack)
	dw vNPCSprites + $60

	dw RedFishingTilesSide
	db 2, BANK(RedFishingTilesSide)
	dw vNPCSprites + $a0

	dw RedFishingRodTiles
	db 3, BANK(RedFishingRodTiles)
	dw vNPCSprites2 + $7d0

_HandleMidJump: ; 7087e (1c:487e)
	ld a, [wd714]
	ld c, a
	inc a
	cp $10
	jr nc, .asm_70895
	ld [wd714], a
	ld b, $0
	ld hl, PlayerJumpingYScreenCoords ; $48ba
	add hl, bc
	ld a, [hl]
	ld [wSpriteStateData1 + 4], a ; player's sprite y coordinate
	ret
.asm_70895
	ld a, [wWalkCounter] ; wcfc5
	cp $0
	ret nz
	call UpdateSprites
	call Delay3
	xor a
	ld [hJoyHeld], a
	ld [hJoyPressed], a
	ld [hJoyReleased], a
	ld [wd714], a
	ld hl, wd736
	res 6, [hl]
	ld hl, wd730
	res 7, [hl]
	xor a
	ld [wJoyIgnore], 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