jep-hack/engine/battle_anims/helpers.asm
2024-03-26 10:11:57 +00:00

180 lines
2.9 KiB
NASM

ReinitBattleAnimFrameset:
ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
add hl, bc
ld [hl], a
ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc
ld [hl], 0
ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc
ld [hl], -1
ret
GetBattleAnimFrame:
.loop
ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc
ld a, [hl]
and a
jr z, .next_frame
dec [hl]
call .GetPointer
ld a, [hli]
push af
jr .okay
.next_frame
ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc
inc [hl]
call .GetPointer
ld a, [hli]
cp oamrestart_command
jr z, .restart
cp oamend_command
jr z, .repeat_last
push af
ld a, [hl]
push hl
and ~(Y_FLIP << 1 | X_FLIP << 1)
ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc
ld [hl], a
pop hl
.okay
ld a, [hl]
and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "oamframe" macro
srl a
ld [wBattleAnimTempFrameOAMFlags], a
pop af
ret
.repeat_last
xor a
ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc
ld [hl], a
ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc
dec [hl]
dec [hl]
jr .loop
.restart
xor a
ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc
ld [hl], a
dec a
ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc
ld [hl], a
jr .loop
.GetPointer:
ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
add hl, bc
ld e, [hl]
ld d, 0
ld hl, BattleAnimFrameData
add hl, de
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc
ld l, [hl]
ld h, 0
add hl, hl
add hl, de
ret
GetBattleAnimOAMPointer:
ld l, a
ld h, 0
ld de, BattleAnimOAMData
add hl, hl
add hl, hl
add hl, de
ret
LoadBattleAnimGFX:
push hl
cp ANIM_GFX_POKE_BALL
call z, .LoadBallPalette
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld de, AnimObjGFX
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
pop de
push bc
call DecompressRequest2bpp
pop bc
ret
.LoadBallPalette:
; save the current WRAM bank
ld a, [rSVBK]
push af
; switch to the WRAM bank of wCurItem so we can read it
ld a, BANK(wCurItem)
ld [rSVBK], a
; store the current item in b
ld a, [wCurItem]
ld b, a
; seek for the BallColors entry matching the current item
ld hl, BallColors
.loop
ld a, [hli]
cp b ; did we find the current ball?
jr z, .done
cp -1 ; did we reach the end of the list?
jr z, .done
rept PAL_COLOR_SIZE * 2
inc hl ; skip over the two RGB colors to the next entry
endr
jr .loop
.done
; switch to the WRAM bank of wOBPals2 so we can write to it
ld a, BANK(wOBPals2)
ld [rSVBK], a
; load the RGB colors into the middle two colors of PAL_BATTLE_OB_RED
ld de, wOBPals2 palette PAL_BATTLE_OB_RED color 1
rept PAL_COLOR_SIZE * 2 - 1
ld a, [hli]
ld [de], a
inc de
endr
ld a, [hl]
ld [de], a
; apply the updated colors to the palette RAM
ld a, $1
ldh [hCGBPalUpdate], a
; restore the previous WRAM bank
pop af
ld [rSVBK], a
; restore the graphics index to be loaded
ld a, ANIM_GFX_POKE_BALL
ret
INCLUDE "data/battle_anims/ball_colors.asm"
INCLUDE "data/battle_anims/framesets.asm"
INCLUDE "data/battle_anims/oam.asm"
INCLUDE "data/battle_anims/object_gfx.asm"