mirror of
https://github.com/pret/pokegold.git
synced 2026-08-24 09:34:23 -05:00
Add engine/events/field_moves.asm
This commit is contained in:
@@ -38,12 +38,20 @@ SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE EQU $22
|
||||
SPRITE_ANIM_INDEX_TRADEMON_ICON EQU $23
|
||||
SPRITE_ANIM_INDEX_TRADEMON_BUBBLE EQU $24
|
||||
SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB EQU $26
|
||||
SPRITE_ANIM_INDEX_LEAF EQU $28
|
||||
SPRITE_ANIM_INDEX_CUT_TREE EQU $29
|
||||
SPRITE_ANIM_INDEX_FLY_LEAF EQU $2a
|
||||
SPRITE_ANIM_INDEX_EGG_CRACK EQU $2b
|
||||
SPRITE_ANIM_INDEX_GS_INTRO_HO_OH EQU $2c
|
||||
SPRITE_ANIM_INDEX_HEADBUTT EQU $2d
|
||||
|
||||
SPRITE_ANIM_INDEX_EGG_HATCH EQU $2e
|
||||
|
||||
; DoAnimFrame.Jumptable indexes (see engine/gfx/sprite_anims.asm)
|
||||
SPRITE_ANIM_SEQ_NULL EQU $00
|
||||
SPRITE_ANIM_SEQ_FLY_FROM EQU $26
|
||||
SPRITE_ANIM_SEQ_FLY_LEAF EQU $27
|
||||
SPRITE_ANIM_SEQ_FLY_TO EQU $28
|
||||
|
||||
; SpriteAnimFrameData indexes (see data/sprite_anims/framesets.asm)
|
||||
const_def
|
||||
|
||||
449
engine/events/field_moves.asm
Executable file
449
engine/events/field_moves.asm
Executable file
@@ -0,0 +1,449 @@
|
||||
FIELDMOVE_GRASS EQU $80
|
||||
FIELDMOVE_TREE EQU $84
|
||||
FIELDMOVE_FLY EQU $84
|
||||
|
||||
PlayWhirlpoolSound:
|
||||
call WaitSFX
|
||||
ld de, SFX_SURF
|
||||
call PlaySFX
|
||||
call WaitSFX
|
||||
ret
|
||||
|
||||
BlindingFlash:
|
||||
farcall FadeOutPalettes
|
||||
ld hl, wStatusFlags
|
||||
set STATUSFLAGS_FLASH_F, [hl]
|
||||
farcall ReplaceTimeOfDayPals
|
||||
farcall UpdateTimeOfDayPal
|
||||
ld b, SCGB_MAPPALS
|
||||
call GetSGBLayout
|
||||
farcall FadeInPalettes
|
||||
ret
|
||||
|
||||
ShakeHeadbuttTree:
|
||||
farcall ClearSpriteAnims
|
||||
ld de, CutGrassGFX
|
||||
ld hl, vTiles0 tile FIELDMOVE_GRASS
|
||||
lb bc, BANK(CutGrassGFX), 4
|
||||
call Request2bpp
|
||||
ld de, HeadbuttTreeGFX
|
||||
ld hl, vTiles0 tile FIELDMOVE_TREE
|
||||
lb bc, BANK(HeadbuttTreeGFX), 8
|
||||
call Request2bpp
|
||||
call Cut_Headbutt_GetPixelFacing
|
||||
ld a, SPRITE_ANIM_INDEX_HEADBUTT
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_TREE
|
||||
ld a, 36 * SPRITEOAMSTRUCT_LENGTH
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
farcall DoNextFrameForAllSprites
|
||||
call HideHeadbuttTree
|
||||
ld a, 32
|
||||
ld [wFrameCounter], a
|
||||
call WaitSFX
|
||||
ld de, SFX_SANDSTORM
|
||||
call PlaySFX
|
||||
.loop
|
||||
ld hl, wFrameCounter
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .done
|
||||
dec [hl]
|
||||
ld a, 36 * SPRITEOAMSTRUCT_LENGTH
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
farcall DoNextFrameForAllSprites
|
||||
call DelayFrame
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
call OverworldTextModeSwitch
|
||||
call WaitBGMap
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
farcall ClearSpriteAnims
|
||||
ld hl, wVirtualOAMSprite36
|
||||
ld bc, wVirtualOAMEnd - wVirtualOAMSprite36
|
||||
xor a
|
||||
call ByteFill
|
||||
call ReplaceChrisSprite
|
||||
ret
|
||||
|
||||
HeadbuttTreeGFX:
|
||||
INCBIN "gfx/overworld/headbutt_tree.2bpp"
|
||||
|
||||
HideHeadbuttTree:
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
ld a, [wPlayerDirection]
|
||||
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 ; grass block
|
||||
ld [hli], a
|
||||
ld [hld], a
|
||||
ld bc, SCREEN_WIDTH
|
||||
add hl, bc
|
||||
ld [hli], a
|
||||
ld [hld], a
|
||||
call WaitBGMap
|
||||
xor a
|
||||
ldh [hBGMapMode], a
|
||||
ret
|
||||
|
||||
TreeRelativeLocationTable:
|
||||
dwcoord 8, 8 + 2 ; RIGHT
|
||||
dwcoord 8, 8 - 2 ; LEFT
|
||||
dwcoord 8 - 2, 8 ; DOWN
|
||||
dwcoord 8 + 2, 8 ; UP
|
||||
|
||||
OWCutAnimation:
|
||||
; Animation index in e
|
||||
; 0: Split tree in half
|
||||
; 1: Mow the lawn
|
||||
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 * SPRITEOAMSTRUCT_LENGTH
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
callfar DoNextFrameForAllSprites
|
||||
call OWCutJumptable
|
||||
call DelayFrame
|
||||
jr .loop
|
||||
|
||||
.finish
|
||||
ret
|
||||
|
||||
.LoadCutGFX:
|
||||
callfar ClearSpriteAnims ; pointless to farcall
|
||||
ld de, CutGrassGFX
|
||||
ld hl, vTiles0 tile FIELDMOVE_GRASS
|
||||
lb bc, BANK(CutGrassGFX), 4
|
||||
call Request2bpp
|
||||
ld de, CutTreeGFX
|
||||
ld hl, vTiles0 tile FIELDMOVE_TREE
|
||||
lb bc, BANK(CutTreeGFX), 4
|
||||
call Request2bpp
|
||||
ret
|
||||
|
||||
CutTreeGFX:
|
||||
INCBIN "gfx/overworld/cut_tree.2bpp"
|
||||
|
||||
CutGrassGFX:
|
||||
INCBIN "gfx/overworld/cut_grass.2bpp"
|
||||
|
||||
OWCutJumptable:
|
||||
ld a, [wJumptableIndex]
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .dw
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp hl
|
||||
|
||||
.dw
|
||||
dw Cut_SpawnAnimateTree
|
||||
dw Cut_SpawnAnimateLeaves
|
||||
dw Cut_StartWaiting
|
||||
dw Cut_WaitAnimSFX
|
||||
|
||||
Cut_SpawnAnimateTree:
|
||||
call Cut_Headbutt_GetPixelFacing
|
||||
ld a, SPRITE_ANIM_INDEX_CUT_TREE ; cut tree
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_TREE
|
||||
ld a, 32
|
||||
ld [wFrameCounter], a
|
||||
; Cut_StartWaiting
|
||||
ld hl, wJumptableIndex
|
||||
inc [hl]
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
Cut_SpawnAnimateLeaves:
|
||||
call Cut_GetLeafSpawnCoords
|
||||
xor a
|
||||
call Cut_SpawnLeaf
|
||||
ld a, $10
|
||||
call Cut_SpawnLeaf
|
||||
ld a, $20
|
||||
call Cut_SpawnLeaf
|
||||
ld a, $30
|
||||
call Cut_SpawnLeaf
|
||||
ld a, 32 ; frames
|
||||
ld [wFrameCounter], a
|
||||
; Cut_StartWaiting
|
||||
ld hl, wJumptableIndex
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
Cut_StartWaiting:
|
||||
ld a, 1
|
||||
ldh [hBGMapMode], a
|
||||
; Cut_WaitAnimSFX
|
||||
ld hl, wJumptableIndex
|
||||
inc [hl]
|
||||
|
||||
Cut_WaitAnimSFX:
|
||||
ld hl, wFrameCounter
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .finished
|
||||
dec [hl]
|
||||
ret
|
||||
|
||||
.finished
|
||||
ld hl, wJumptableIndex
|
||||
set 7, [hl]
|
||||
ret
|
||||
|
||||
Cut_SpawnLeaf:
|
||||
push de
|
||||
push af
|
||||
ld a, SPRITE_ANIM_INDEX_LEAF ; leaf
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_GRASS
|
||||
ld hl, SPRITEANIMSTRUCT_0E
|
||||
add hl, bc
|
||||
ld [hl], 4
|
||||
pop af
|
||||
ld hl, SPRITEANIMSTRUCT_0C
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop de
|
||||
ret
|
||||
|
||||
Cut_GetLeafSpawnCoords:
|
||||
ld de, 0
|
||||
ld a, [wMetatileStandingX]
|
||||
bit 0, a
|
||||
jr z, .left_side
|
||||
set 0, e
|
||||
.left_side
|
||||
ld a, [wMetatileStandingY]
|
||||
bit 0, a
|
||||
jr z, .top_side
|
||||
set 1, e
|
||||
.top_side
|
||||
ld a, [wPlayerDirection]
|
||||
and %00001100
|
||||
add e
|
||||
ld e, a
|
||||
ld hl, .Coords
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ret
|
||||
|
||||
.Coords:
|
||||
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
|
||||
|
||||
Cut_Headbutt_GetPixelFacing:
|
||||
ld a, [wPlayerDirection]
|
||||
and %00001100
|
||||
srl a
|
||||
ld e, a
|
||||
ld d, 0
|
||||
ld hl, .Coords
|
||||
add hl, de
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ret
|
||||
|
||||
.Coords:
|
||||
dbpixel 10, 13
|
||||
dbpixel 10, 9
|
||||
dbpixel 8, 11
|
||||
dbpixel 12, 11
|
||||
|
||||
FlyFromAnim:
|
||||
call DelayFrame
|
||||
ld a, [wVramState]
|
||||
push af
|
||||
xor a
|
||||
ld [wVramState], a
|
||||
call FlyFunction_InitGFX
|
||||
depixel 10, 10, 4, 0
|
||||
ld a, SPRITE_ANIM_INDEX_RED_WALK
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_FLY
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], SPRITE_ANIM_SEQ_FLY_FROM
|
||||
ld a, 128
|
||||
ld [wFrameCounter], a
|
||||
.loop
|
||||
ld a, [wJumptableIndex]
|
||||
bit 7, a
|
||||
jr nz, .exit
|
||||
ld a, 0 * SPRITEOAMSTRUCT_LENGTH
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
callfar DoNextFrameForAllSprites
|
||||
call FlyFunction_FrameTimer
|
||||
call DelayFrame
|
||||
jr .loop
|
||||
|
||||
.exit
|
||||
pop af
|
||||
ld [wVramState], a
|
||||
ret
|
||||
|
||||
FlyToAnim:
|
||||
call DelayFrame
|
||||
ld a, [wVramState]
|
||||
push af
|
||||
xor a
|
||||
ld [wVramState], a
|
||||
call FlyFunction_InitGFX
|
||||
depixel 31, 10, 4, 0
|
||||
ld a, SPRITE_ANIM_INDEX_RED_WALK
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_FLY
|
||||
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
||||
add hl, bc
|
||||
ld [hl], SPRITE_ANIM_SEQ_FLY_TO
|
||||
ld hl, SPRITEANIMSTRUCT_0F
|
||||
add hl, bc
|
||||
ld [hl], 11 * 8
|
||||
ld a, 64
|
||||
ld [wFrameCounter], a
|
||||
.loop
|
||||
ld a, [wJumptableIndex]
|
||||
bit 7, a
|
||||
jr nz, .exit
|
||||
ld a, 0 * SPRITEOAMSTRUCT_LENGTH
|
||||
ld [wCurSpriteOAMAddr], a
|
||||
callfar DoNextFrameForAllSprites
|
||||
call FlyFunction_FrameTimer
|
||||
call DelayFrame
|
||||
jr .loop
|
||||
|
||||
.exit
|
||||
pop af
|
||||
ld [wVramState], a
|
||||
call .RestorePlayerSprite_DespawnLeaves
|
||||
ret
|
||||
|
||||
.RestorePlayerSprite_DespawnLeaves:
|
||||
ld hl, wVirtualOAMSprite00TileID
|
||||
xor a
|
||||
ld c, 4
|
||||
.OAMloop
|
||||
ld [hli], a ; tile id
|
||||
rept SPRITEOAMSTRUCT_LENGTH - 1
|
||||
inc hl
|
||||
endr
|
||||
inc a
|
||||
dec c
|
||||
jr nz, .OAMloop
|
||||
ld hl, wVirtualOAMSprite04
|
||||
ld bc, wVirtualOAMEnd - wVirtualOAMSprite04
|
||||
xor a
|
||||
call ByteFill
|
||||
ret
|
||||
|
||||
FlyFunction_InitGFX:
|
||||
callfar ClearSpriteAnims
|
||||
ld de, CutGrassGFX
|
||||
ld hl, vTiles0 tile FIELDMOVE_GRASS
|
||||
lb bc, BANK(CutGrassGFX), 4
|
||||
call Request2bpp
|
||||
ld a, [wCurPartyMon]
|
||||
ld hl, wPartySpecies
|
||||
ld e, a
|
||||
ld d, 0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [wTempIconSpecies], a
|
||||
ld e, FIELDMOVE_FLY
|
||||
farcall GetSpeciesIcon
|
||||
xor a
|
||||
ld [wJumptableIndex], a
|
||||
ret
|
||||
|
||||
FlyFunction_FrameTimer:
|
||||
call .SpawnLeaf
|
||||
ld hl, wFrameCounter
|
||||
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
|
||||
|
||||
.SpawnLeaf:
|
||||
ld hl, wce65
|
||||
ld a, [hl]
|
||||
inc [hl]
|
||||
and 7
|
||||
ret nz
|
||||
ld a, [hl]
|
||||
and (6 * 8) >> 1
|
||||
sla a
|
||||
add 8 * 8 ; gives a number in [$40, $50, $60, $70]
|
||||
ld d, a
|
||||
ld e, 0
|
||||
ld a, SPRITE_ANIM_INDEX_FLY_LEAF ; fly land
|
||||
call InitSpriteAnimStruct
|
||||
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
||||
add hl, bc
|
||||
ld [hl], FIELDMOVE_GRASS
|
||||
ret
|
||||
17
main.asm
17
main.asm
@@ -235,19 +235,8 @@ INCLUDE "engine/rtc/reset_password.asm"
|
||||
INCLUDE "engine/menus/delete_save.asm"
|
||||
INCLUDE "engine/tilesets/timeofday_pals.asm"
|
||||
INCLUDE "engine/battle/battle_transition.asm"
|
||||
INCLUDE "engine/events/field_moves.asm"
|
||||
|
||||
PlayWhirlpoolSound::
|
||||
dr $8ca5e, $8ca6b
|
||||
BlindingFlash::
|
||||
dr $8ca6b, $8ca8e
|
||||
ShakeHeadbuttTree::
|
||||
dr $8ca8e, $8cbb8
|
||||
OWCutAnimation::
|
||||
dr $8cbb8, $8cd65
|
||||
FlyFromAnim::
|
||||
dr $8cd65, $8cdab
|
||||
FlyToAnim::
|
||||
dr $8cdab, $8ce7c
|
||||
MagnetTrain::
|
||||
dr $8ce7c, $8d174
|
||||
|
||||
@@ -256,7 +245,9 @@ ClearSpriteAnims::
|
||||
PlaySpriteAnimationsAndDelayFrame::
|
||||
dr $8d183, $8d18a
|
||||
PlaySpriteAnimations::
|
||||
dr $8d18a, $8d1c9
|
||||
dr $8d18a, $8d19b
|
||||
DoNextFrameForAllSprites::
|
||||
dr $8d19b, $8d1c9
|
||||
DoNextFrameForFirst16Sprites::
|
||||
dr $8d1c9, $8d1f7
|
||||
_InitSpriteAnimStruct::
|
||||
|
||||
Reference in New Issue
Block a user