mirror of https://github.com/pret/pokecrystal.git
1514 lines
22 KiB
NASM
1514 lines
22 KiB
NASM
; Battle animation command interpreter.
|
|
|
|
PlayBattleAnim: ; cc0d6
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
|
|
ld a, BANK(ActiveAnimObjects)
|
|
ld [rSVBK], a
|
|
|
|
call _PlayBattleAnim
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
; cc0e4
|
|
|
|
_PlayBattleAnim: ; cc0e4
|
|
|
|
ld c, 6
|
|
.wait
|
|
call BattleAnimDelayFrame
|
|
dec c
|
|
jr nz, .wait
|
|
|
|
call BattleAnimAssignPals
|
|
call BattleAnimRequestPals
|
|
call BattleAnimDelayFrame
|
|
|
|
ld c, 1
|
|
ld a, [rKEY1]
|
|
bit 7, a
|
|
jr nz, .asm_cc0ff
|
|
ld c, 3
|
|
|
|
.asm_cc0ff
|
|
ld hl, hVBlank
|
|
ld a, [hl]
|
|
push af
|
|
|
|
ld [hl], c
|
|
call BattleAnimRunScript
|
|
|
|
pop af
|
|
ld [hVBlank], a
|
|
|
|
ld a, $1
|
|
ld [hBGMapMode], a
|
|
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call WaitSFX
|
|
ret
|
|
; cc11c
|
|
|
|
BattleAnimRunScript: ; cc11c
|
|
|
|
ld a, [FXAnimID + 1]
|
|
and a
|
|
jr nz, .hi_byte
|
|
|
|
farcall CheckBattleScene
|
|
jr c, .disabled
|
|
|
|
call BattleAnimClearHud
|
|
call RunBattleAnimScript
|
|
|
|
call BattleAnimAssignPals
|
|
call BattleAnimRequestPals
|
|
|
|
xor a
|
|
ld [hSCX], a
|
|
ld [hSCY], a
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimRestoreHuds
|
|
|
|
.disabled
|
|
ld a, [wNumHits]
|
|
and a
|
|
jr z, .done
|
|
|
|
ld l, a
|
|
ld h, 0
|
|
ld de, ANIM_MISS
|
|
add hl, de
|
|
ld a, l
|
|
ld [FXAnimID], a
|
|
ld a, h
|
|
ld [FXAnimID + 1], a
|
|
|
|
.hi_byte
|
|
call WaitSFX
|
|
call PlayHitSound
|
|
call RunBattleAnimScript
|
|
|
|
.done
|
|
call BattleAnim_RevertPals
|
|
ret
|
|
; cc163
|
|
|
|
RunBattleAnimScript: ; cc163
|
|
|
|
call ClearBattleAnims
|
|
|
|
.playframe
|
|
call RunBattleAnimCommand
|
|
call _ExecuteBGEffects
|
|
call BattleAnim_UpdateOAM_All
|
|
call PushLYOverrides
|
|
call BattleAnimRequestPals
|
|
|
|
; Speed up Rollout's animation.
|
|
ld a, [FXAnimID + 1]
|
|
or a
|
|
jr nz, .not_rollout
|
|
|
|
ld a, [FXAnimID]
|
|
cp ROLLOUT
|
|
jr nz, .not_rollout
|
|
|
|
ld a, $2e
|
|
ld b, 5
|
|
ld de, 4
|
|
ld hl, ActiveBGEffects
|
|
.find
|
|
cp [hl]
|
|
jr z, .done
|
|
add hl, de
|
|
dec b
|
|
jr nz, .find
|
|
|
|
.not_rollout
|
|
call BattleAnimDelayFrame
|
|
|
|
.done
|
|
ld a, [BattleAnimFlags]
|
|
bit 0, a
|
|
jr z, .playframe
|
|
|
|
call BattleAnim_ClearCGB_OAMFlags
|
|
ret
|
|
; cc1a1
|
|
|
|
BattleAnimClearHud: ; cc1a1
|
|
|
|
call BattleAnimDelayFrame
|
|
call WaitTop
|
|
call ClearActorHud
|
|
ld a, $1
|
|
ld [hBGMapMode], a
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call WaitTop
|
|
ret
|
|
; cc1bb
|
|
|
|
BattleAnimRestoreHuds: ; cc1bb
|
|
|
|
call BattleAnimDelayFrame
|
|
call WaitTop
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(CurBattleMon) ; alternatively: BANK(TempMon), BANK(PartyMon1), several others
|
|
ld [rSVBK], a
|
|
|
|
ld hl, UpdateBattleHuds
|
|
ld a, BANK(UpdatePlayerHUD)
|
|
rst FarCall ; Why not "call UpdateBattleHuds"?
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
|
|
ld a, $1
|
|
ld [hBGMapMode], a
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call BattleAnimDelayFrame
|
|
call WaitTop
|
|
ret
|
|
; cc1e2
|
|
|
|
BattleAnimRequestPals: ; cc1e2
|
|
|
|
ld a, [hCGB]
|
|
and a
|
|
ret z
|
|
|
|
ld a, [rBGP]
|
|
ld b, a
|
|
ld a, [wBGP]
|
|
cp b
|
|
call nz, BattleAnim_SetBGPals
|
|
|
|
ld a, [rOBP0]
|
|
ld b, a
|
|
ld a, [wOBP0]
|
|
cp b
|
|
call nz, BattleAnim_SetOBPals
|
|
ret
|
|
; cc1fb
|
|
|
|
BattleAnimDelayFrame: ; cc1fb
|
|
; Like DelayFrame but wastes battery life.
|
|
|
|
ld a, 1
|
|
ld [VBlankOccurred], a
|
|
.wait
|
|
ld a, [VBlankOccurred]
|
|
and a
|
|
jr nz, .wait
|
|
ret
|
|
; cc207
|
|
|
|
ClearActorHud: ; cc207
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
hlcoord 1, 0
|
|
lb bc, 4, 10
|
|
call ClearBox
|
|
ret
|
|
|
|
.player
|
|
hlcoord 9, 7
|
|
lb bc, 5, 11
|
|
call ClearBox
|
|
ret
|
|
; cc220
|
|
|
|
Unreferenced_Functioncc220: ; cc220
|
|
xor a
|
|
ld [hBGMapMode], a
|
|
ld a, LOW(vBGMap0 tile $28)
|
|
ld [hBGMapAddress], a
|
|
ld a, HIGH(vBGMap0 tile $28)
|
|
ld [hBGMapAddress + 1], a
|
|
call WaitBGMap2
|
|
ld a, $60
|
|
ld [hWY], a
|
|
xor a ; LOW(vBGMap0)
|
|
ld [hBGMapAddress], a
|
|
ld a, HIGH(vBGMap0)
|
|
ld [hBGMapAddress + 1], a
|
|
call BattleAnimDelayFrame
|
|
ret
|
|
; cc23d
|
|
|
|
|
|
BattleAnim_ClearCGB_OAMFlags: ; cc23d
|
|
|
|
ld a, [BattleAnimFlags]
|
|
bit 3, a
|
|
jr z, .delete
|
|
|
|
ld hl, Sprite01Attributes
|
|
ld c, NUM_SPRITE_OAM_STRUCTS
|
|
.loop
|
|
ld a, [hl]
|
|
and $f0
|
|
ld [hli], a
|
|
rept SPRITEOAMSTRUCT_LENGTH +- 1
|
|
inc hl
|
|
endr
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.delete
|
|
ld hl, Sprites
|
|
ld c, SpritesEnd - Sprites
|
|
xor a
|
|
.loop2
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop2
|
|
ret
|
|
; cc25f
|
|
|
|
RunBattleAnimCommand: ; cc25f
|
|
call .CheckTimer
|
|
ret nc
|
|
call .RunScript
|
|
ret
|
|
; cc267
|
|
|
|
.CheckTimer: ; cc267
|
|
ld a, [BattleAnimDuration]
|
|
and a
|
|
jr z, .done
|
|
|
|
dec a
|
|
ld [BattleAnimDuration], a
|
|
and a
|
|
ret
|
|
|
|
.done
|
|
scf
|
|
ret
|
|
; cc275
|
|
|
|
.RunScript: ; cc275
|
|
.loop
|
|
call GetBattleAnimByte
|
|
|
|
cp $ff
|
|
jr nz, .not_done_with_anim
|
|
|
|
; Return from a subroutine.
|
|
ld hl, BattleAnimFlags
|
|
bit 1, [hl]
|
|
jr nz, .do_anim
|
|
|
|
set 0, [hl]
|
|
ret
|
|
|
|
.not_done_with_anim
|
|
cp $d0
|
|
jr nc, .do_anim
|
|
|
|
ld [BattleAnimDuration], a
|
|
ret
|
|
|
|
.do_anim
|
|
call .DoCommand
|
|
|
|
jr .loop
|
|
; cc293
|
|
|
|
.DoCommand: ; cc293
|
|
; Execute battle animation command in [BattleAnimByte].
|
|
ld a, [BattleAnimByte]
|
|
sub $d0
|
|
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, BattleAnimCommands
|
|
add hl, de
|
|
add hl, de
|
|
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp hl
|
|
; cc2a4
|
|
|
|
|
|
BattleAnimCommands:: ; cc2a4 (33:42a4)
|
|
; entries correspond to macros/scripts/battle_anims.asm enumeration
|
|
dw BattleAnimCmd_Obj
|
|
dw BattleAnimCmd_1GFX
|
|
dw BattleAnimCmd_2GFX
|
|
dw BattleAnimCmd_3GFX
|
|
dw BattleAnimCmd_4GFX
|
|
dw BattleAnimCmd_5GFX
|
|
dw BattleAnimCmd_IncObj
|
|
dw BattleAnimCmd_SetObj
|
|
dw BattleAnimCmd_IncBGEffect
|
|
dw BattleAnimCmd_EnemyFeetObj
|
|
dw BattleAnimCmd_PlayerHeadObj
|
|
dw BattleAnimCmd_CheckPokeball
|
|
dw BattleAnimCmd_Transform
|
|
dw BattleAnimCmd_RaiseSub
|
|
dw BattleAnimCmd_DropSub
|
|
dw BattleAnimCmd_ResetObp0
|
|
dw BattleAnimCmd_Sound
|
|
dw BattleAnimCmd_Cry
|
|
dw BattleAnimCmd_MinimizeOpp
|
|
dw BattleAnimCmd_OAMOn
|
|
dw BattleAnimCmd_OAMOff
|
|
dw BattleAnimCmd_ClearObjs
|
|
dw BattleAnimCmd_BeatUp
|
|
dw BattleAnimCmd_E7
|
|
dw BattleAnimCmd_UpdateActorPic
|
|
dw BattleAnimCmd_Minimize
|
|
dw BattleAnimCmd_EA ; dummy
|
|
dw BattleAnimCmd_EB ; dummy
|
|
dw BattleAnimCmd_EC ; dummy
|
|
dw BattleAnimCmd_ED ; dummy
|
|
dw BattleAnimCmd_IfParamAnd
|
|
dw BattleAnimCmd_JumpUntil
|
|
dw BattleAnimCmd_BGEffect
|
|
dw BattleAnimCmd_BGP
|
|
dw BattleAnimCmd_OBP0
|
|
dw BattleAnimCmd_OBP1
|
|
dw BattleAnimCmd_ClearSprites
|
|
dw BattleAnimCmd_F5
|
|
dw BattleAnimCmd_F6
|
|
dw BattleAnimCmd_F7
|
|
dw BattleAnimCmd_IfParamEqual
|
|
dw BattleAnimCmd_SetVar
|
|
dw BattleAnimCmd_IncVar
|
|
dw BattleAnimCmd_IfVarEqual
|
|
dw BattleAnimCmd_Jump
|
|
dw BattleAnimCmd_Loop
|
|
dw BattleAnimCmd_Call
|
|
dw BattleAnimCmd_Ret
|
|
|
|
|
|
BattleAnimCmd_EA:
|
|
BattleAnimCmd_EB:
|
|
BattleAnimCmd_EC:
|
|
BattleAnimCmd_ED: ; cc304 (33:4304)
|
|
ret
|
|
|
|
BattleAnimCmd_Ret: ; cc305 (33:4305)
|
|
ld hl, BattleAnimFlags
|
|
res 1, [hl]
|
|
ld hl, BattleAnimParent
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
BattleAnimCmd_Call: ; cc317 (33:4317)
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
push de
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, BattleAnimParent
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
pop de
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ld hl, BattleAnimFlags
|
|
set 1, [hl]
|
|
ret
|
|
|
|
BattleAnimCmd_Jump: ; cc339 (33:4339)
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
BattleAnimCmd_Loop: ; cc348 (33:4348)
|
|
call GetBattleAnimByte
|
|
ld hl, BattleAnimFlags
|
|
bit 2, [hl]
|
|
jr nz, .continue_loop
|
|
and a
|
|
jr z, .perpetual
|
|
dec a
|
|
set 2, [hl]
|
|
ld [BattleAnimLoops], a
|
|
.continue_loop
|
|
ld hl, BattleAnimLoops
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .return_from_loop
|
|
dec [hl]
|
|
.perpetual
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
.return_from_loop
|
|
ld hl, BattleAnimFlags
|
|
res 2, [hl]
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc de
|
|
inc de
|
|
ld [hl], d
|
|
dec hl
|
|
ld [hl], e
|
|
ret
|
|
|
|
BattleAnimCmd_JumpUntil: ; cc383 (33:4383)
|
|
ld hl, wBattleAnimParam
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .dont_jump
|
|
|
|
dec [hl]
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
.dont_jump
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc de
|
|
inc de
|
|
ld [hl], d
|
|
dec hl
|
|
ld [hl], e
|
|
ret
|
|
|
|
BattleAnimCmd_SetVar: ; cc3a6 (33:43a6)
|
|
call GetBattleAnimByte
|
|
ld [BattleAnimVar], a
|
|
ret
|
|
|
|
BattleAnimCmd_IncVar: ; cc3ad (33:43ad)
|
|
ld hl, BattleAnimVar
|
|
inc [hl]
|
|
ret
|
|
|
|
BattleAnimCmd_IfVarEqual: ; cc3b2 (33:43b2)
|
|
call GetBattleAnimByte
|
|
ld hl, BattleAnimVar
|
|
cp [hl]
|
|
jr z, .jump
|
|
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc de
|
|
inc de
|
|
ld [hl], d
|
|
dec hl
|
|
ld [hl], e
|
|
ret
|
|
|
|
.jump
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
BattleAnimCmd_IfParamEqual: ; cc3d6 (33:43d6)
|
|
call GetBattleAnimByte
|
|
ld hl, wBattleAnimParam
|
|
cp [hl]
|
|
jr z, .jump
|
|
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc de
|
|
inc de
|
|
ld [hl], d
|
|
dec hl
|
|
ld [hl], e
|
|
ret
|
|
|
|
.jump
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
BattleAnimCmd_IfParamAnd: ; cc3fa (33:43fa)
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
ld a, [wBattleAnimParam]
|
|
and e
|
|
jr nz, .jump
|
|
|
|
ld hl, BattleAnimAddress
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
inc de
|
|
inc de
|
|
ld [hl], d
|
|
dec hl
|
|
ld [hl], e
|
|
ret
|
|
|
|
.jump
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
call GetBattleAnimByte
|
|
ld d, a
|
|
ld hl, BattleAnimAddress
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ret
|
|
|
|
BattleAnimCmd_Obj: ; cc41f (33:441f)
|
|
; index, x, y, param
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp0], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp1], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp2], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp3], a
|
|
call QueueBattleAnimation
|
|
ret
|
|
|
|
BattleAnimCmd_BGEffect: ; cc43b (33:443b)
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp0], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp1], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp2], a
|
|
call GetBattleAnimByte
|
|
ld [wBattleAnimTemp3], a
|
|
call _QueueBGEffect
|
|
ret
|
|
|
|
BattleAnimCmd_BGP: ; cc457 (33:4457)
|
|
call GetBattleAnimByte
|
|
ld [wBGP], a
|
|
ret
|
|
|
|
BattleAnimCmd_OBP0: ; cc45e (33:445e)
|
|
call GetBattleAnimByte
|
|
ld [wOBP0], a
|
|
ret
|
|
|
|
BattleAnimCmd_OBP1: ; cc465 (33:4465)
|
|
call GetBattleAnimByte
|
|
ld [wOBP1], a
|
|
ret
|
|
|
|
BattleAnimCmd_ResetObp0: ; cc46c (33:446c)
|
|
ld a, [hSGB]
|
|
and a
|
|
ld a, $e0
|
|
jr z, .not_sgb
|
|
ld a, $f0
|
|
.not_sgb
|
|
ld [wOBP0], a
|
|
ret
|
|
|
|
BattleAnimCmd_ClearObjs: ; cc479 (33:4479)
|
|
ld hl, ActiveAnimObjects
|
|
ld a, $a0
|
|
.loop
|
|
ld [hl], $0
|
|
inc hl
|
|
dec a
|
|
jr nz, .loop
|
|
ret
|
|
|
|
BattleAnimCmd_1GFX:
|
|
BattleAnimCmd_2GFX:
|
|
BattleAnimCmd_3GFX:
|
|
BattleAnimCmd_4GFX:
|
|
BattleAnimCmd_5GFX: ; cc485 (33:4485)
|
|
ld a, [BattleAnimByte]
|
|
and $f
|
|
ld c, a
|
|
ld hl, wBattleAnimTileDict
|
|
xor a
|
|
ld [wBattleAnimTemp0], a
|
|
.loop
|
|
ld a, [wBattleAnimTemp0]
|
|
cp (vTiles1 - vTiles0) / $10 - $31
|
|
ret nc
|
|
call GetBattleAnimByte
|
|
ld [hli], a
|
|
ld a, [wBattleAnimTemp0]
|
|
ld [hli], a
|
|
push bc
|
|
push hl
|
|
ld l, a
|
|
ld h, $0
|
|
rept 4
|
|
add hl, hl
|
|
endr
|
|
ld de, vTiles0 tile $31
|
|
add hl, de
|
|
ld a, [BattleAnimByte]
|
|
call LoadBattleAnimObj
|
|
ld a, [wBattleAnimTemp0]
|
|
add c
|
|
ld [wBattleAnimTemp0], a
|
|
pop hl
|
|
pop bc
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
BattleAnimCmd_IncObj: ; cc4c0 (33:44c0)
|
|
call GetBattleAnimByte
|
|
ld e, 10
|
|
ld bc, ActiveAnimObjects
|
|
.loop
|
|
ld hl, BATTLEANIMSTRUCT_INDEX
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld a, [BattleAnimByte]
|
|
cp d
|
|
jr z, .found
|
|
ld hl, BATTLEANIMSTRUCT_LENGTH
|
|
add hl, bc
|
|
ld c, l
|
|
ld b, h
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.found
|
|
ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
|
|
add hl, bc
|
|
inc [hl]
|
|
ret
|
|
|
|
BattleAnimCmd_IncBGEffect: ; cc4e3 (33:44e3)
|
|
call GetBattleAnimByte
|
|
ld e, 5
|
|
ld bc, ActiveBGEffects
|
|
.loop
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld a, [BattleAnimByte]
|
|
cp d
|
|
jr z, .found
|
|
ld hl, 4
|
|
add hl, bc
|
|
ld c, l
|
|
ld b, h
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.found
|
|
ld hl, BG_EFFECT_STRUCT_JT_INDEX
|
|
add hl, bc
|
|
inc [hl]
|
|
ret
|
|
|
|
BattleAnimCmd_SetObj: ; cc506 (33:4506)
|
|
call GetBattleAnimByte
|
|
ld e, 10
|
|
ld bc, ActiveAnimObjects
|
|
.loop
|
|
ld hl, BATTLEANIMSTRUCT_INDEX
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld a, [BattleAnimByte]
|
|
cp d
|
|
jr z, .found
|
|
ld hl, BATTLEANIMSTRUCT_LENGTH
|
|
add hl, bc
|
|
ld c, l
|
|
ld b, h
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.found
|
|
call GetBattleAnimByte
|
|
ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
BattleAnimCmd_EnemyFeetObj: ; cc52c (33:452c)
|
|
|
|
ld hl, wBattleAnimTileDict
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .okay
|
|
inc hl
|
|
inc hl
|
|
jr .loop
|
|
|
|
.okay
|
|
ld a, $28
|
|
ld [hli], a
|
|
ld a, $42
|
|
ld [hli], a
|
|
ld a, $29
|
|
ld [hli], a
|
|
ld a, $49
|
|
ld [hl], a
|
|
|
|
ld hl, vTiles0 tile $73
|
|
ld de, vTiles2 tile $06
|
|
ld a, $70
|
|
ld [wBattleAnimTemp0], a
|
|
ld a, $7
|
|
call .LoadFootprint
|
|
ld de, vTiles2 tile $31
|
|
ld a, $60
|
|
ld [wBattleAnimTemp0], a
|
|
ld a, $6
|
|
call .LoadFootprint
|
|
ret
|
|
|
|
.LoadFootprint: ; cc561 (33:4561)
|
|
push af
|
|
push hl
|
|
push de
|
|
lb bc, BANK(BattleAnimCmd_EnemyFeetObj), 1
|
|
call Request2bpp
|
|
pop de
|
|
ld a, [wBattleAnimTemp0]
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
ld bc, 1 tiles
|
|
add hl, bc
|
|
pop af
|
|
dec a
|
|
jr nz, .LoadFootprint
|
|
ret
|
|
|
|
BattleAnimCmd_PlayerHeadObj: ; cc57e (33:457e)
|
|
|
|
ld hl, wBattleAnimTileDict
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .okay
|
|
inc hl
|
|
inc hl
|
|
jr .loop
|
|
|
|
.okay
|
|
ld a, $28
|
|
ld [hli], a
|
|
ld a, $35
|
|
ld [hli], a
|
|
ld a, $29
|
|
ld [hli], a
|
|
ld a, $43
|
|
ld [hl], a
|
|
|
|
ld hl, vTiles0 tile $66
|
|
ld de, vTiles2 tile $05
|
|
ld a, $70
|
|
ld [wBattleAnimTemp0], a
|
|
ld a, $7
|
|
call .LoadHead
|
|
ld de, vTiles2 tile $31
|
|
ld a, $60
|
|
ld [wBattleAnimTemp0], a
|
|
ld a, $6
|
|
call .LoadHead
|
|
ret
|
|
|
|
.LoadHead: ; cc5b3 (33:45b3)
|
|
push af
|
|
push hl
|
|
push de
|
|
lb bc, BANK(BattleAnimCmd_EnemyFeetObj), 2
|
|
call Request2bpp
|
|
pop de
|
|
ld a, [wBattleAnimTemp0]
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
ld bc, 2 tiles
|
|
add hl, bc
|
|
pop af
|
|
dec a
|
|
jr nz, .LoadHead
|
|
ret
|
|
|
|
BattleAnimCmd_CheckPokeball: ; cc5d0 (33:45d0)
|
|
callfar GetPokeBallWobble
|
|
ld a, c
|
|
ld [BattleAnimVar], a
|
|
ret
|
|
|
|
BattleAnimCmd_E7: ; cc5db (33:45db)
|
|
ret
|
|
|
|
BattleAnimCmd_Transform: ; cc5dc (33:45dc)
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(CurPartySpecies)
|
|
ld [rSVBK], a
|
|
ld a, [CurPartySpecies] ; CurPartySpecies
|
|
push af
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
ld a, [TempBattleMonSpecies] ; TempBattleMonSpecies
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
ld hl, BattleMonDVs ; BattleMonDVs
|
|
predef GetUnownLetter
|
|
ld de, vTiles0 tile $00
|
|
predef GetMonFrontpic
|
|
jr .done
|
|
|
|
.player
|
|
ld a, [TempEnemyMonSpecies] ; TempEnemyMonSpecies
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
ld hl, EnemyMonDVs ; EnemyMonDVs
|
|
predef GetUnownLetter
|
|
ld de, vTiles0 tile $00
|
|
predef GetMonBackpic
|
|
|
|
.done
|
|
pop af
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
BattleAnimCmd_UpdateActorPic: ; cc622 (33:4622)
|
|
|
|
ld de, vTiles0 tile $00
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
ld hl, vTiles2 tile $00
|
|
ld b, 0
|
|
ld c, $31
|
|
call Request2bpp
|
|
ret
|
|
|
|
.player
|
|
ld hl, vTiles2 tile $31
|
|
ld b, 0
|
|
ld c, $24
|
|
call Request2bpp
|
|
ret
|
|
|
|
BattleAnimCmd_RaiseSub: ; cc640 (33:4640)
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, 1 ; unnecessary bankswitch?
|
|
ld [rSVBK], a
|
|
xor a ; sScratch
|
|
call GetSRAMBank
|
|
|
|
GetSubstitutePic: ; cc64c
|
|
|
|
ld hl, sScratch
|
|
ld bc, (7 * 7) tiles
|
|
.loop
|
|
xor a
|
|
ld [hli], a
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
ld hl, MonsterSpriteGFX + 0 tiles
|
|
ld de, sScratch + (2 * 7 + 5) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 1 tiles
|
|
ld de, sScratch + (3 * 7 + 5) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 2 tiles
|
|
ld de, sScratch + (2 * 7 + 6) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 3 tiles
|
|
ld de, sScratch + (3 * 7 + 6) tiles
|
|
call .CopyTile
|
|
|
|
ld hl, vTiles2 tile $00
|
|
ld de, sScratch
|
|
lb bc, BANK(GetSubstitutePic), 7 * 7
|
|
call Request2bpp
|
|
jr .done
|
|
|
|
.player
|
|
ld hl, MonsterSpriteGFX + 4 tiles
|
|
ld de, sScratch + (2 * 6 + 4) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 5 tiles
|
|
ld de, sScratch + (3 * 6 + 4) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 6 tiles
|
|
ld de, sScratch + (2 * 6 + 5) tiles
|
|
call .CopyTile
|
|
ld hl, MonsterSpriteGFX + 7 tiles
|
|
ld de, sScratch + (3 * 6 + 5) tiles
|
|
call .CopyTile
|
|
|
|
ld hl, vTiles2 tile $31
|
|
ld de, sScratch
|
|
lb bc, BANK(GetSubstitutePic), 6 * 6
|
|
call Request2bpp
|
|
|
|
.done
|
|
call CloseSRAM
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
.CopyTile: ; cc6c6 (33:46c6)
|
|
ld bc, 1 tiles
|
|
ld a, BANK(MonsterSpriteGFX)
|
|
call FarCopyBytes
|
|
ret
|
|
|
|
BattleAnimCmd_MinimizeOpp: ; cc6cf (33:46cf)
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, 1 ; unnecessary bankswitch?
|
|
ld [rSVBK], a
|
|
xor a ; sScratch
|
|
call GetSRAMBank
|
|
call GetMinimizePic
|
|
call Request2bpp
|
|
call CloseSRAM
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
GetMinimizePic: ; cc6e7 (33:46e7)
|
|
ld hl, sScratch
|
|
ld bc, $31 tiles
|
|
.loop
|
|
xor a
|
|
ld [hli], a
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
ld de, sScratch + $1a tiles
|
|
call CopyMinimizePic
|
|
ld hl, vTiles2 tile $00
|
|
ld de, sScratch
|
|
lb bc, BANK(GetMinimizePic), 7 * 7
|
|
ret
|
|
|
|
.player
|
|
ld de, sScratch + $160
|
|
call CopyMinimizePic
|
|
ld hl, vTiles2 tile $31
|
|
ld de, sScratch
|
|
lb bc, BANK(GetMinimizePic), 6 * 6
|
|
ret
|
|
|
|
CopyMinimizePic: ; cc719 (33:4719)
|
|
ld hl, MinimizePic
|
|
ld bc, $10
|
|
ld a, BANK(MinimizePic)
|
|
call FarCopyBytes
|
|
ret
|
|
; cc725 (33:4725)
|
|
|
|
MinimizePic: ; cc725
|
|
INCBIN "gfx/battle/minimize.2bpp"
|
|
; cc735
|
|
|
|
BattleAnimCmd_Minimize: ; cc735 (33:4735)
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, 1 ; unnecessary bankswitch?
|
|
ld [rSVBK], a
|
|
xor a ; sScratch
|
|
call GetSRAMBank
|
|
call GetMinimizePic
|
|
ld hl, vTiles0 tile $00
|
|
call Request2bpp
|
|
call CloseSRAM
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
BattleAnimCmd_DropSub: ; cc750 (33:4750)
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(CurPartySpecies)
|
|
ld [rSVBK], a
|
|
|
|
ld a, [CurPartySpecies] ; CurPartySpecies
|
|
push af
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
callfar DropEnemySub
|
|
jr .done
|
|
|
|
.player
|
|
callfar DropPlayerSub
|
|
|
|
.done
|
|
pop af
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
BattleAnimCmd_BeatUp: ; cc776 (33:4776)
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(CurPartySpecies)
|
|
ld [rSVBK], a
|
|
ld a, [CurPartySpecies] ; CurPartySpecies
|
|
push af
|
|
|
|
ld a, [wBattleAnimParam]
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr z, .player
|
|
|
|
ld hl, BattleMonDVs
|
|
predef GetUnownLetter
|
|
ld de, vTiles2 tile $00
|
|
predef GetMonFrontpic
|
|
jr .done
|
|
|
|
.player
|
|
ld hl, EnemyMonDVs
|
|
predef GetUnownLetter
|
|
ld de, vTiles2 tile $31
|
|
predef GetMonBackpic
|
|
|
|
.done
|
|
pop af
|
|
ld [CurPartySpecies], a ; CurPartySpecies
|
|
ld b, SCGB_BATTLE_COLORS
|
|
call GetSGBLayout
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
|
|
BattleAnimCmd_OAMOn: ; cc7bb (33:47bb)
|
|
xor a
|
|
ld [hOAMUpdate], a
|
|
ret
|
|
|
|
BattleAnimCmd_OAMOff: ; cc7bf (33:47bf)
|
|
ld a, $1
|
|
ld [hOAMUpdate], a
|
|
ret
|
|
|
|
BattleAnimCmd_ClearSprites: ; cc7c4 (33:47c4)
|
|
ld hl, BattleAnimFlags
|
|
set 3, [hl]
|
|
ret
|
|
|
|
BattleAnimCmd_F5: ; cc7ca (33:47ca)
|
|
ret
|
|
|
|
BattleAnimCmd_F6: ; cc7cb (33:47cb)
|
|
ret
|
|
|
|
BattleAnimCmd_F7: ; cc7cc (33:47cc)
|
|
ret
|
|
|
|
BattleAnimCmd_Sound: ; cc7cd (33:47cd)
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
srl a
|
|
srl a
|
|
ld [wSFXDuration], a
|
|
call .GetCryTrack
|
|
maskbits NUM_NOISE_CHANS
|
|
ld [CryTracks], a ; CryTracks
|
|
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .GetPanning
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld [wStereoPanningMask], a
|
|
|
|
call GetBattleAnimByte
|
|
ld e, a
|
|
ld d, 0
|
|
callfar PlayStereoSFX
|
|
|
|
ret
|
|
; cc7f8 (33:47f8)
|
|
|
|
.GetPanning: ; cc7f8
|
|
db $f0, $0f, $f0, $0f
|
|
; cc7fc
|
|
|
|
.GetCryTrack: ; cc7fc (33:47fc)
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr nz, .enemy
|
|
|
|
ld a, e
|
|
ret
|
|
|
|
.enemy
|
|
ld a, e
|
|
xor 1
|
|
ret
|
|
|
|
BattleAnimCmd_Cry: ; cc807 (33:4807)
|
|
call GetBattleAnimByte
|
|
maskbits NUM_NOISE_CHANS
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, .CryData
|
|
rept 4
|
|
add hl, de
|
|
endr
|
|
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(EnemyMon) ; BattleMon is in WRAM0, but EnemyMon is in WRAMX
|
|
ld [rSVBK], a
|
|
|
|
ld a, [hBattleTurn]
|
|
and a
|
|
jr nz, .enemy
|
|
|
|
ld a, $f0
|
|
ld [CryTracks], a
|
|
ld a, [BattleMonSpecies]
|
|
jr .done_cry_tracks
|
|
|
|
.enemy
|
|
ld a, $0f
|
|
ld [CryTracks], a
|
|
ld a, [EnemyMonSpecies]
|
|
|
|
.done_cry_tracks
|
|
push hl
|
|
call LoadCry
|
|
pop hl
|
|
jr c, .done
|
|
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld a, [hli]
|
|
ld b, a
|
|
|
|
push hl
|
|
ld hl, CryPitch
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
add hl, bc
|
|
ld a, l
|
|
ld [CryPitch], a
|
|
ld a, h
|
|
ld [CryPitch + 1], a
|
|
pop hl
|
|
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld b, [hl]
|
|
ld hl, CryLength ; CryLength
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
add hl, bc
|
|
|
|
ld a, l
|
|
ld [CryLength], a ; CryLength
|
|
ld a, h
|
|
ld [CryLength + 1], a
|
|
ld a, 1
|
|
ld [wStereoPanningMask], a
|
|
|
|
callfar _PlayCry
|
|
|
|
.done
|
|
pop af
|
|
ld [rSVBK], a
|
|
ret
|
|
; cc871 (33:4871)
|
|
|
|
.CryData: ; cc871
|
|
; +pitch, +length
|
|
dw $0000, $00c0
|
|
dw $0000, $0040
|
|
dw $0000, $0000
|
|
dw $0000, $0000
|
|
; cc881
|
|
|
|
|
|
PlayHitSound: ; cc881
|
|
ld a, [wNumHits]
|
|
cp $1
|
|
jr z, .okay
|
|
cp $4
|
|
ret nz
|
|
|
|
.okay
|
|
ld a, [TypeModifier]
|
|
and $7f
|
|
ret z
|
|
|
|
cp 10
|
|
ld de, SFX_DAMAGE
|
|
jr z, .play
|
|
|
|
ld de, SFX_SUPER_EFFECTIVE
|
|
jr nc, .play
|
|
|
|
ld de, SFX_NOT_VERY_EFFECTIVE
|
|
|
|
.play
|
|
call PlaySFX
|
|
ret
|
|
; cc8a4
|
|
|
|
BattleAnimAssignPals: ; cc8a4
|
|
ld a, [hCGB]
|
|
and a
|
|
jr nz, .cgb
|
|
ld a, [hSGB]
|
|
and a
|
|
ld a, %11100000
|
|
jr z, .sgb
|
|
ld a, %11110000
|
|
|
|
.sgb
|
|
ld [wOBP0], a
|
|
ld a, %11100100
|
|
ld [wBGP], a
|
|
ld [wOBP1], a
|
|
ret
|
|
|
|
.cgb
|
|
ld a, %11100100
|
|
ld [wBGP], a
|
|
ld [wOBP0], a
|
|
ld [wOBP1], a
|
|
call DmgToCgbBGPals
|
|
lb de, %11100100, %11100100
|
|
call DmgToCgbObjPals
|
|
ret
|
|
; cc8d3
|
|
|
|
ClearBattleAnims: ; cc8d3
|
|
; Clear animation block
|
|
ld hl, LYOverrides
|
|
ld bc, wBattleAnimEnd - LYOverrides
|
|
.loop
|
|
ld [hl], $0
|
|
inc hl
|
|
dec bc
|
|
ld a, c
|
|
or b
|
|
jr nz, .loop
|
|
|
|
ld hl, FXAnimID
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, BattleAnimations
|
|
add hl, de
|
|
add hl, de
|
|
call GetBattleAnimPointer
|
|
call BattleAnimAssignPals
|
|
call BattleAnimDelayFrame
|
|
ret
|
|
; cc8f6
|
|
|
|
BattleAnim_RevertPals: ; cc8f6
|
|
call WaitTop
|
|
ld a, %11100100
|
|
ld [wBGP], a
|
|
ld [wOBP0], a
|
|
ld [wOBP1], a
|
|
call DmgToCgbBGPals
|
|
lb de, %11100100, %11100100
|
|
call DmgToCgbObjPals
|
|
xor a
|
|
ld [hSCX], a
|
|
ld [hSCY], a
|
|
call BattleAnimDelayFrame
|
|
ld a, $1
|
|
ld [hBGMapMode], a
|
|
ret
|
|
; cc91a
|
|
|
|
BattleAnim_SetBGPals: ; cc91a
|
|
ld [rBGP], a
|
|
ld a, [hCGB]
|
|
and a
|
|
ret z
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(wBGPals1)
|
|
ld [rSVBK], a
|
|
ld hl, wBGPals2
|
|
ld de, wBGPals1
|
|
ld a, [rBGP]
|
|
ld b, a
|
|
ld c, 7
|
|
call CopyPals
|
|
ld hl, wOBPals2
|
|
ld de, wOBPals1
|
|
ld a, [rBGP]
|
|
ld b, a
|
|
ld c, 2
|
|
call CopyPals
|
|
pop af
|
|
ld [rSVBK], a
|
|
ld a, $1
|
|
ld [hCGBPalUpdate], a
|
|
ret
|
|
; cc94b
|
|
|
|
BattleAnim_SetOBPals: ; cc94b
|
|
ld [rOBP0], a
|
|
ld a, [hCGB]
|
|
and a
|
|
ret z
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(wOBPals1)
|
|
ld [rSVBK], a
|
|
ld hl, wOBPals2 palette PAL_BATTLE_OB_GRAY
|
|
ld de, wOBPals1 palette PAL_BATTLE_OB_GRAY
|
|
ld a, [rOBP0]
|
|
ld b, a
|
|
ld c, 2
|
|
call CopyPals
|
|
pop af
|
|
ld [rSVBK], a
|
|
ld a, $1
|
|
ld [hCGBPalUpdate], a
|
|
ret
|
|
; cc96e
|
|
|
|
BattleAnim_UpdateOAM_All: ; cc96e
|
|
ld a, $0
|
|
ld [wBattleAnimOAMPointerLo], a
|
|
ld hl, ActiveAnimObjects
|
|
ld e, 10
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
ld c, l
|
|
ld b, h
|
|
push hl
|
|
push de
|
|
call DoBattleAnimFrame
|
|
call BattleAnimOAMUpdate
|
|
pop de
|
|
pop hl
|
|
jr c, .done
|
|
|
|
.next
|
|
ld bc, BATTLEANIMSTRUCT_LENGTH
|
|
add hl, bc
|
|
dec e
|
|
jr nz, .loop
|
|
ld a, [wBattleAnimOAMPointerLo]
|
|
ld l, a
|
|
ld h, HIGH(Sprites)
|
|
.loop2
|
|
ld a, l
|
|
cp LOW(SpritesEnd)
|
|
jr nc, .done
|
|
xor a
|
|
ld [hli], a
|
|
jr .loop2
|
|
|
|
.done
|
|
ret
|
|
; cc9a1
|