Board menu: die roll input and animation (#11)

This commit is contained in:
xCrystal
2023-09-25 21:57:47 +02:00
parent 2cbe0e1764
commit db7d9c7063
11 changed files with 134 additions and 9 deletions

View File

@@ -11,7 +11,9 @@ BoardMenuScript::
end
.Die:
closetext
callasm BoardMenu_Die
iffalse BoardMenuScript
callasm BoardMenu_BreakDieAnimation
end
.Party:
@@ -180,6 +182,50 @@ GetBoardMenuSelection:
xor a
ret ; nc
BoardMenu_Die:
DIE_MAX_NUMBER EQU 6
ld hl, wDisplaySecondarySprites
set SECONDARYSPRITES_DIE_ROLL_F, [hl]
ld a, 1
ld [wDieRoll], a
call HDMATransferTilemapAndAttrmap_OpenAndCloseMenu ;
call CloseText ; closetext
.rotate_die_loop
call IsSFXPlaying
ld de, SFX_KINESIS
call c, PlaySFX
call Random
.sample_die_loop
sub DIE_MAX_NUMBER
jr nc, .sample_die_loop
add DIE_MAX_NUMBER
add $1
ld [wDieRoll], a
farcall _UpdateSprites
call GetJoypad
ldh a, [hJoyPressed]
bit B_BUTTON_F, a
jr nz, .back_to_menu
bit A_BUTTON_F, a
jr nz, .confirm_roll
call DelayFrame
jr .rotate_die_loop
.back_to_menu
call PlayClickSFX
ld hl, wDisplaySecondarySprites
res SECONDARYSPRITES_DIE_ROLL_F, [hl]
xor a ; FALSE
ld [wScriptVar], a
ret
.confirm_roll
call PlayClickSFX
ld a, TRUE
ld [wScriptVar], a
ret
BoardMenu_Party:
ld a, [wPartyCount]
and a
@@ -201,6 +247,9 @@ BoardMenu_Party:
ldh [hMenuReturn], a
ret
BoardMenu_BreakDieAnimation:
ret
BoardMenu_Pack:
call BoardMenu_OpenSubmenu
farcall Pack

View File

@@ -7,6 +7,10 @@ LoadBoardMenuGFX::
ld hl, vTiles0 + BOARD_MENU_OAM_FIRST_TILE * LEN_2BPP_TILE
lb bc, BANK(.BoardMenuOAMGFX), BOARD_MENU_ITEM_SIZE * NUM_BOARD_MENU_ITEMS
call Get2bppViaHDMA
ld de, .DieRollOAMGFX
ld hl, vTiles0 + DIE_ROLL_OAM_FIRST_TILE * LEN_2BPP_TILE
lb bc, BANK(.BoardMenuOAMGFX), DIE_SIZE * 10
call Get2bppViaHDMA
ret
.BoardMenuGFX:
@@ -20,3 +24,6 @@ INCBIN "gfx/board/menu_pack.2bpp"
INCBIN "gfx/board/menu_pokegear.2bpp"
INCBIN "gfx/board/menu_exit.2bpp"
assert_table_length NUM_BOARD_MENU_ITEMS
.DieRollOAMGFX:
INCBIN "gfx/board/die_roll.2bpp"

View File

@@ -807,7 +807,6 @@ PlayerMovementPointers:
CheckMenuOW:
xor a
ldh [hMenuReturn], a
ldh [hUnusedByte], a
ldh a, [hJoyPressed]
bit SELECT_F, a

View File

@@ -3074,10 +3074,12 @@ InitSprites:
InitSecondarySprites:
ld a, [wDisplaySecondarySprites]
bit SECONDARYSPRITES_BOARD_MENU_F, a
call nz, .InitBoardMenuSprites
call nz, InitBoardMenuSprites
bit SECONDARYSPRITES_DIE_ROLL_F, a
call nz, InitRollDieSprites
ret
.InitBoardMenuSprites:
InitBoardMenuSprites:
push af
ld hl, BoardMenuOAM
@@ -3102,4 +3104,30 @@ InitSecondarySprites:
pop af
ret
InitRollDieSprites:
push af
ld hl, DieRollOAM
ld a, [wDieRoll]
dec a
ld bc, DIE_SIZE * SPRITEOAMSTRUCT_LENGTH
call AddNTimes
; find the beginning of free space in OAM, and assure there's space for a DIE_SIZE object
ldh a, [hUsedSpriteIndex]
cp (NUM_SPRITE_OAM_STRUCTS * SPRITEOAMSTRUCT_LENGTH) - (DIE_SIZE * SPRITEOAMSTRUCT_LENGTH) + 1
jr nc, .oam_full
; copy the sprite data (DIE_SIZE objects) of that item to the available space in OAM
ld e, a
ld d, HIGH(wShadowOAM)
ld bc, DIE_SIZE * SPRITEOAMSTRUCT_LENGTH
call CopyBytes
ldh a, [hUsedSpriteIndex]
add (DIE_SIZE * SPRITEOAMSTRUCT_LENGTH)
ldh [hUsedSpriteIndex], a
.oam_full
pop af
ret
INCLUDE "data/sprites/secondary_sprites.asm"