pokecrystal-board/engine/events/field_moves.asm

470 lines
7.8 KiB
NASM
Raw Normal View History

2015-11-16 18:46:36 -08:00
PlayWhirlpoolSound: ; 8c7d4
call WaitSFX
ld de, SFX_SURF
call PlaySFX
call WaitSFX
ret
; 8c7e1
BlindingFlash: ; 8c7e1
2017-12-24 09:47:30 -08:00
farcall FadeOutPalettes
ld hl, wStatusFlags
2015-12-14 08:12:18 -08:00
set 2, [hl] ; Flash
2017-12-24 09:47:30 -08:00
farcall ReplaceTimeOfDayPals
farcall UpdateTimeOfDayPal
ld b, SCGB_MAPPALS
2015-11-16 18:46:36 -08:00
call GetSGBLayout
2017-12-24 09:47:30 -08:00
farcall LoadOW_BGPal7
farcall FadeInPalettes
2015-11-16 18:46:36 -08:00
ret
; 8c80a
ShakeHeadbuttTree: ; 8c80a
2017-12-24 09:47:30 -08:00
farcall ClearSpriteAnims
2015-11-16 18:46:36 -08:00
ld de, CutGrassGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles1
2015-11-16 18:46:36 -08:00
lb bc, BANK(CutGrassGFX), 4
call Request2bpp
ld de, HeadbuttTreeGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles1 tile $04
2015-11-16 18:46:36 -08:00
lb bc, BANK(HeadbuttTreeGFX), 8
call Request2bpp
call Cut_Headbutt_GetPixelFacing
ld a, SPRITE_ANIM_INDEX_HEADBUTT
2015-11-16 18:46:36 -08:00
call _InitSpriteAnimStruct
2015-12-14 08:12:18 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], $84
ld a, 36 * 4
2015-12-05 12:38:25 -08:00
ld [wCurrSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
farcall DoNextFrameForAllSprites
2015-12-14 08:12:18 -08:00
call HideHeadbuttTree
2015-11-16 18:46:36 -08:00
ld a, $20
ld [wcf64], a
call WaitSFX
ld de, SFX_SANDSTORM
call PlaySFX
.loop
ld hl, wcf64
ld a, [hl]
and a
jr z, .done
dec [hl]
ld a, 36 * 4
2015-12-05 12:38:25 -08:00
ld [wCurrSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
farcall DoNextFrameForAllSprites
2015-11-16 18:46:36 -08:00
call DelayFrame
jr .loop
.done
call OverworldTextModeSwitch
call WaitBGMap
xor a
ld [hBGMapMode], a
2017-12-24 09:47:30 -08:00
farcall ClearSpriteAnims
2018-01-10 10:47:57 -08:00
ld hl, Sprite37
ld bc, SpritesEnd - Sprite37
2015-11-16 18:46:36 -08:00
xor a
call ByteFill
ld de, Font
2017-12-28 04:32:33 -08:00
ld hl, vTiles1
lb bc, BANK(Font), 12
2015-11-16 18:46:36 -08:00
call Get1bpp
call ReplaceKrisSprite
ret
; 8c893
HeadbuttTreeGFX: ; 8c893
INCBIN "gfx/overworld/headbutt_tree.2bpp"
2015-11-16 18:46:36 -08:00
; 8c913
2015-12-14 08:12:18 -08:00
HideHeadbuttTree: ; 8c913
2015-11-16 18:46:36 -08:00
xor a
ld [hBGMapMode], a
ld a, [PlayerDirection]
and %00001100
srl a
ld e, a
ld d, 0
ld hl, TreeRelativeLocationTable
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld a, $5
ld [hli], a
ld [hld], a
ld bc, SCREEN_WIDTH
add hl, bc
ld [hli], a
ld [hld], a
call WaitBGMap
xor a
ld [hBGMapMode], a
ret
; 8c938
TreeRelativeLocationTable: ; 8c938
dwcoord 8, 8 + 2 ; RIGHT
dwcoord 8, 8 - 2 ; LEFT
dwcoord 8 - 2, 8 ; DOWN
dwcoord 8 + 2, 8 ; UP
; 8c940
OWCutAnimation: ; 8c940
2015-12-14 08:12:18 -08:00
; Animation index in e
; 0: Split tree in half
; 1: Mow the lawn
2015-11-16 18:46:36 -08:00
ld a, e
and $1
ld [wJumptableIndex], a
call .LoadCutGFX
call WaitSFX
ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
call PlaySFX
.loop
ld a, [wJumptableIndex]
bit 7, a
jr nz, .finish
ld a, 36 * 4
2015-12-05 12:38:25 -08:00
ld [wCurrSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
callfar DoNextFrameForAllSprites
2015-11-16 18:46:36 -08:00
call OWCutJumptable
call DelayFrame
jr .loop
.finish
ret
; 8c96d
.LoadCutGFX: ; 8c96d
2017-12-24 09:47:30 -08:00
callfar ClearSpriteAnims ; pointless to farcall
2015-11-16 18:46:36 -08:00
ld de, CutGrassGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles1
2015-11-16 18:46:36 -08:00
lb bc, BANK(CutGrassGFX), 4
call Request2bpp
ld de, CutTreeGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles1 tile $4
2015-11-16 18:46:36 -08:00
lb bc, BANK(CutTreeGFX), 4
call Request2bpp
ret
; 8c98c
CutTreeGFX: ; c898c
INCBIN "gfx/overworld/cut_tree.2bpp"
2015-11-16 18:46:36 -08:00
; c89cc
CutGrassGFX: ; 8c9cc
INCBIN "gfx/overworld/cut_grass.2bpp"
2015-11-16 18:46:36 -08:00
; 8ca0c
OWCutJumptable: ; 8ca0c
ld a, [wJumptableIndex]
ld e, a
ld d, 0
2015-12-26 18:59:03 -08:00
ld hl, .dw
2015-11-16 18:46:36 -08:00
add hl, de
add hl, de
2015-11-16 18:46:36 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-16 18:46:36 -08:00
; 8ca1b
.dw ; 8ca1b (23:4a1b)
dw Cut_SpawnAnimateTree
dw Cut_SpawnAnimateLeaves
dw Cut_StartWaiting
dw Cut_WaitAnimSFX
2015-11-16 18:46:36 -08:00
Cut_SpawnAnimateTree: ; 8ca23 (23:4a23)
call Cut_Headbutt_GetPixelFacing
ld a, SPRITE_ANIM_INDEX_CUT_TREE ; cut tree
2015-11-16 18:46:36 -08:00
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], $84
ld a, 32
2015-11-16 18:46:36 -08:00
ld [wcf64], a
; Cut_StartWaiting
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
inc [hl]
inc [hl]
2015-11-16 18:46:36 -08:00
ret
Cut_SpawnAnimateLeaves: ; 8ca3c (23:4a3c)
call Cut_GetLeafSpawnCoords
2015-11-16 18:46:36 -08:00
xor a
call Cut_SpawnLeaf
2015-11-16 18:46:36 -08:00
ld a, $10
call Cut_SpawnLeaf
2015-11-16 18:46:36 -08:00
ld a, $20
call Cut_SpawnLeaf
2015-11-16 18:46:36 -08:00
ld a, $30
call Cut_SpawnLeaf
ld a, 32 ; frames
2015-11-16 18:46:36 -08:00
ld [wcf64], a
; Cut_StartWaiting
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
inc [hl]
ret
Cut_StartWaiting: ; 8ca5c (23:4a5c)
2015-11-16 18:46:36 -08:00
ld a, $1
ld [hBGMapMode], a
; Cut_WaitAnimSFX
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
inc [hl]
Cut_WaitAnimSFX: ; 8ca64 (23:4a64)
2015-11-16 18:46:36 -08:00
ld hl, wcf64
ld a, [hl]
and a
jr z, .finished
2015-11-16 18:46:36 -08:00
dec [hl]
ret
.finished
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
set 7, [hl]
ret
Cut_SpawnLeaf: ; 8ca73 (23:4a73)
2015-11-16 18:46:36 -08:00
push de
push af
ld a, SPRITE_ANIM_INDEX_LEAF ; leaf
2015-11-16 18:46:36 -08:00
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], $80
ld hl, SPRITEANIMSTRUCT_0E
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], $4
pop af
ld hl, SPRITEANIMSTRUCT_0C
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], a
pop de
ret
Cut_GetLeafSpawnCoords: ; 8ca8e (23:4a8e)
2015-11-16 18:46:36 -08:00
ld de, 0
ld a, [wMetatileStandingX]
2015-11-16 18:46:36 -08:00
bit 0, a
jr z, .left_side
2015-11-16 18:46:36 -08:00
set 0, e
.left_side
ld a, [wMetatileStandingY]
2015-11-16 18:46:36 -08:00
bit 0, a
jr z, .top_side
2015-11-16 18:46:36 -08:00
set 1, e
.top_side
2015-11-16 18:46:36 -08:00
ld a, [PlayerDirection]
and %00001100
2015-11-16 18:46:36 -08:00
add e
ld e, a
ld hl, .Coords
2015-11-16 18:46:36 -08:00
add hl, de
add hl, de
2015-11-16 18:46:36 -08:00
ld e, [hl]
inc hl
ld d, [hl]
ret
; 8cab3 (23:4ab3)
.Coords: ; 8cab3
dbpixel 11, 12 ; facing down, top left
dbpixel 9, 12 ; facing down, top right
dbpixel 11, 14 ; facing down, bottom left
dbpixel 9, 14 ; facing down, bottom right
dbpixel 11, 8 ; facing up, top left
dbpixel 9, 8 ; facing up, top right
dbpixel 11, 10 ; facing up, bottom left
dbpixel 9, 10 ; facing up, bottom right
dbpixel 7, 12 ; facing left, top left
dbpixel 9, 12 ; facing left, top right
dbpixel 7, 10 ; facing left, bottom left
dbpixel 9, 10 ; facing left, bottom right
dbpixel 11, 12 ; facing right, top left
dbpixel 13, 12 ; facing right, top right
dbpixel 11, 10 ; facing right, bottom left
dbpixel 13, 10 ; facing right, bottom right
2015-11-16 18:46:36 -08:00
; 8cad3
Cut_Headbutt_GetPixelFacing: ; 8cad3 (23:4ad3)
2015-11-16 18:46:36 -08:00
ld a, [PlayerDirection]
and %00001100
2015-11-16 18:46:36 -08:00
srl a
ld e, a
ld d, 0
ld hl, .Coords
2015-11-16 18:46:36 -08:00
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ret
; 8cae5 (23:4ae5)
.Coords: ; 8cae5
dbpixel 10, 13
dbpixel 10, 9
dbpixel 8, 11
dbpixel 12, 11
2015-11-16 18:46:36 -08:00
; 8caed
FlyFromAnim: ; 8caed
call DelayFrame
ld a, [VramState]
push af
xor a
ld [VramState], a
2015-12-04 05:46:11 -08:00
call FlyFunction_InitGFX
depixel 10, 10, 4, 0
2016-01-09 20:41:03 -08:00
ld a, SPRITE_ANIM_INDEX_RED_WALK
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $84
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
2015-12-18 17:07:09 -08:00
ld [hl], SPRITE_ANIM_SEQ_FLY_FROM
ld a, 128
ld [wcf64], a
.loop
ld a, [wJumptableIndex]
bit 7, a
jr nz, .exit
ld a, 0 * 4
2015-12-05 12:38:25 -08:00
ld [wCurrSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
callfar DoNextFrameForAllSprites
2015-12-18 17:07:09 -08:00
call FlyFunction_FrameTimer
call DelayFrame
jr .loop
.exit
pop af
ld [VramState], a
ret
; 8cb33
FlyToAnim: ; 8cb33
call DelayFrame
ld a, [VramState]
push af
xor a
ld [VramState], a
2015-12-04 05:46:11 -08:00
call FlyFunction_InitGFX
depixel 31, 10, 4, 0
2016-01-09 20:41:03 -08:00
ld a, SPRITE_ANIM_INDEX_RED_WALK
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $84
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
2015-12-18 17:07:09 -08:00
ld [hl], SPRITE_ANIM_SEQ_FLY_TO
ld hl, SPRITEANIMSTRUCT_0F
add hl, bc
2015-12-18 17:07:09 -08:00
ld [hl], 11 * 8
ld a, 64
ld [wcf64], a
.loop
ld a, [wJumptableIndex]
bit 7, a
jr nz, .exit
ld a, 0 * 4
2015-12-05 12:38:25 -08:00
ld [wCurrSpriteOAMAddr], a
2017-12-24 09:47:30 -08:00
callfar DoNextFrameForAllSprites
2015-12-18 17:07:09 -08:00
call FlyFunction_FrameTimer
call DelayFrame
jr .loop
.exit
pop af
ld [VramState], a
2015-12-18 17:07:09 -08:00
call .RestorePlayerSprite_DespawnLeaves
ret
2015-12-18 17:07:09 -08:00
.RestorePlayerSprite_DespawnLeaves: ; 8cb82 (23:4b82)
2018-01-10 10:47:57 -08:00
ld hl, Sprite01TileID
xor a
2018-01-10 10:47:57 -08:00
ld c, 4
.OAMloop
ld [hli], a ; tile id
rept SPRITEOAMSTRUCT_LENGTH +- 1
inc hl
2018-01-10 10:47:57 -08:00
endr
inc a
dec c
2018-01-10 10:47:57 -08:00
jr nz, .OAMloop
ld hl, Sprite05
ld bc, SpritesEnd - Sprite05
xor a
call ByteFill
ret
2015-12-04 05:46:11 -08:00
FlyFunction_InitGFX: ; 8cb9b (23:4b9b)
2017-12-24 09:47:30 -08:00
callfar ClearSpriteAnims
ld de, CutGrassGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles1 tile $00
lb bc, BANK(CutGrassGFX), 4
call Request2bpp
ld a, [CurPartyMon]
ld hl, PartySpecies
ld e, a
ld d, 0
add hl, de
ld a, [hl]
ld [wd265], a
ld e, $84
2017-12-24 09:47:30 -08:00
farcall FlyFunction_GetMonIcon
xor a
ld [wJumptableIndex], a
ret
2015-12-18 17:07:09 -08:00
FlyFunction_FrameTimer: ; 8cbc8 (23:4bc8)
call .SpawnLeaf
ld hl, wcf64
ld a, [hl]
and a
jr z, .exit
dec [hl]
cp $40
ret c
and $7
ret nz
ld de, SFX_FLY
call PlaySFX
ret
.exit
ld hl, wJumptableIndex
set 7, [hl]
ret
2015-12-18 17:07:09 -08:00
.SpawnLeaf: ; 8cbe6 (23:4be6)
ld hl, wcf65
ld a, [hl]
inc [hl]
and $7
ret nz
ld a, [hl]
2015-12-18 17:07:09 -08:00
and (6 * 8) >> 1
sla a
2015-12-18 17:07:09 -08:00
add 8 * 8 ; gives a number in [$40, $50, $60, $70]
ld d, a
ld e, $0
2015-12-18 17:07:09 -08:00
ld a, SPRITE_ANIM_INDEX_FLY_LEAF ; fly land
call _InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $80
ret