You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
Board menu: break die and appear die number animations (#11)
This commit is contained in:
@@ -226,6 +226,71 @@ DIE_MAX_NUMBER EQU 6
|
||||
ld [wScriptVar], a
|
||||
ret
|
||||
|
||||
BoardMenu_BreakDieAnimation:
|
||||
farcall LoadBoardMenuDieNumbersGFX
|
||||
ld a, [wDieRoll]
|
||||
dec a
|
||||
add a
|
||||
ld c, a
|
||||
ld a, SPRITE_ANIM_DICT_BOARD_MENU
|
||||
ld hl, wSpriteAnimDict ; wSpriteAnimDict[0]
|
||||
ld [hli], a
|
||||
ld a, DIE_ROLL_OAM_FIRST_TILE
|
||||
add c
|
||||
ld [hli], a
|
||||
xor a ; SPRITE_ANIM_DICT_DEFAULT
|
||||
ld [hli], a ; wSpriteAnimDict[1]
|
||||
ld a, DIE_NUMBERS_OAM_FIRST_TILE
|
||||
add c
|
||||
ld [hl], a
|
||||
|
||||
; initialize break die animation
|
||||
depixel 8, 10, 0, 0
|
||||
ld a, SPRITE_ANIM_OBJ_BOARD_MENU_BREAK_DIE
|
||||
call InitSpriteAnimStruct
|
||||
|
||||
; initialize appear die number animation, but only if there is enough
|
||||
; OAM space without pushing aside some NPC (aesthetic failsafe).
|
||||
ldh a, [hUsedSpriteIndex]
|
||||
cp (NUM_SPRITE_OAM_STRUCTS * SPRITEOAMSTRUCT_LENGTH) - (4 * SPRITEOAMSTRUCT_LENGTH) + 1
|
||||
jr nc, .anims_initialized
|
||||
depixel 8, 10, 0, 0
|
||||
ld a, SPRITE_ANIM_OBJ_BOARD_MENU_APPEAR_DIE_NUMBER
|
||||
call InitSpriteAnimStruct
|
||||
|
||||
.anims_initialized
|
||||
ld hl, wDisplaySecondarySprites
|
||||
res SECONDARYSPRITES_DIE_ROLL_F, [hl]
|
||||
|
||||
ld hl, wVramState
|
||||
set 2, [hl] ; do not clear wShadowOAM during DoNextFrameForAllSprites
|
||||
; animation plays above NPCs so draw the graphics at the beginning of OAM.
|
||||
; begin placing NPC sprites in OAM after all objects allocated to animations.
|
||||
ld a, [wSpriteAnim2Index]
|
||||
and a
|
||||
ld a, $8 * SPRITEOAMSTRUCT_LENGTH ; with SPRITE_ANIM_OBJ_BOARD_MENU_APPEAR_DIE_NUMBER
|
||||
jr nz, .go
|
||||
ld a, $4 * SPRITEOAMSTRUCT_LENGTH ; w/o SPRITE_ANIM_OBJ_BOARD_MENU_APPEAR_DIE_NUMBER
|
||||
ldh [hUsedSpriteIndex], a
|
||||
.go
|
||||
farcall _UpdateSpritesAfterOffset
|
||||
|
||||
ld a, 44 ; total duration of SPRITE_ANIM_FRAMESET_BOARD_MENU_BREAK_DIE
|
||||
ld [wFrameCounter], a
|
||||
.loop
|
||||
farcall PlaySpriteAnimationsAndDelayFrame
|
||||
ld hl, wFrameCounter
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .done
|
||||
dec [hl]
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ld hl, wVramState
|
||||
res 2, [hl]
|
||||
ret
|
||||
|
||||
BoardMenu_Party:
|
||||
ld a, [wPartyCount]
|
||||
and a
|
||||
@@ -247,9 +312,6 @@ BoardMenu_Party:
|
||||
ldh [hMenuReturn], a
|
||||
ret
|
||||
|
||||
BoardMenu_BreakDieAnimation:
|
||||
ret
|
||||
|
||||
BoardMenu_Pack:
|
||||
call BoardMenu_OpenSubmenu
|
||||
farcall Pack
|
||||
|
@@ -9,7 +9,7 @@ LoadBoardMenuGFX::
|
||||
call Get2bppViaHDMA
|
||||
ld de, .DieRollOAMGFX
|
||||
ld hl, vTiles0 + DIE_ROLL_OAM_FIRST_TILE * LEN_2BPP_TILE
|
||||
lb bc, BANK(.BoardMenuOAMGFX), DIE_SIZE * 10
|
||||
lb bc, BANK(.DieRollOAMGFX), DIE_SIZE * 10
|
||||
call Get2bppViaHDMA
|
||||
ret
|
||||
|
||||
@@ -26,4 +26,15 @@ INCBIN "gfx/board/menu_exit.2bpp"
|
||||
assert_table_length NUM_BOARD_MENU_ITEMS
|
||||
|
||||
.DieRollOAMGFX:
|
||||
INCBIN "gfx/board/die_roll.2bpp"
|
||||
INCBIN "gfx/board/die_roll.2bpp"
|
||||
|
||||
LoadBoardMenuDieNumbersGFX::
|
||||
ld de, .DieNumbersOAMGFX
|
||||
; overwrite in vTiles0 the no-longer-needed BoardMenuOAMGFX, but keep DieRollOAMGFX
|
||||
ld hl, vTiles0 + DIE_NUMBERS_OAM_FIRST_TILE * LEN_2BPP_TILE
|
||||
lb bc, BANK(.DieNumbersOAMGFX), DIE_NUMBER_SIZE * 10
|
||||
call Get2bppViaHDMA
|
||||
ret
|
||||
|
||||
.DieNumbersOAMGFX:
|
||||
INCBIN "gfx/board/die_numbers.2bpp"
|
||||
|
@@ -2754,12 +2754,19 @@ ResetObject:
|
||||
db SPRITEMOVEDATA_STANDING_LEFT
|
||||
db SPRITEMOVEDATA_STANDING_RIGHT
|
||||
|
||||
_UpdateSpritesAfterOffset::
|
||||
ld a, [wVramState]
|
||||
bit 0, a
|
||||
ret z
|
||||
jr _UpdateSprites.go
|
||||
|
||||
_UpdateSprites::
|
||||
ld a, [wVramState]
|
||||
bit 0, a
|
||||
ret z
|
||||
xor a
|
||||
ldh [hUsedSpriteIndex], a
|
||||
.go
|
||||
ldh a, [hOAMUpdate]
|
||||
push af
|
||||
ld a, 1
|
||||
|
@@ -53,6 +53,9 @@ DoSpriteAnimFrame:
|
||||
dw SpriteAnimFunc_LevelSelectionMenuWalkUp
|
||||
dw SpriteAnimFunc_LevelSelectionMenuWalkLeft
|
||||
dw SpriteAnimFunc_LevelSelectionMenuWalkRight
|
||||
dw SpriteAnimFunc_BoardMenuBreakDie
|
||||
dw SpriteAnimFunc_BoardMenuAppearDieNumber
|
||||
dw SpriteAnimFunc_BoardMenuMoveDieNumber
|
||||
assert_table_length NUM_SPRITE_ANIM_FUNCS
|
||||
|
||||
SpriteAnimFunc_Null:
|
||||
@@ -877,6 +880,15 @@ SpriteAnimFunc_LevelSelectionMenuWalkRight:
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
SpriteAnimFunc_BoardMenuBreakDie:
|
||||
ret
|
||||
|
||||
SpriteAnimFunc_BoardMenuAppearDieNumber:
|
||||
ret
|
||||
|
||||
SpriteAnimFunc_BoardMenuMoveDieNumber:
|
||||
ret
|
||||
|
||||
LevelSelectionMenuHandleTransition:
|
||||
; return carry if apply x/y displacement during this frame
|
||||
ld a, [wLevelSelectionMenuStandingStill]
|
||||
|
Reference in New Issue
Block a user