; Battle animation command interpreter. PlayBattleAnim: ; cc0d6 ld a, [rSVBK] push af ld a, BANK(wActiveAnimObjects) 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, [wFXAnimID + 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 [wFXAnimID], a ld a, h ld [wFXAnimID + 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, [wFXAnimID + 1] or a jr nz, .not_rollout ld a, [wFXAnimID] cp ROLLOUT jr nz, .not_rollout ld a, $2e ld b, 5 ld de, 4 ld hl, wActiveBGEffects .find cp [hl] jr z, .done add hl, de dec b jr nz, .find .not_rollout call BattleAnimDelayFrame .done ld a, [wBattleAnimFlags] 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(wCurBattleMon) ; alternatively: BANK(wTempMon), BANK(wPartyMon1), 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 [wVBlankOccurred], a .wait ld a, [wVBlankOccurred] 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, [wBattleAnimFlags] bit 3, a jr z, .delete ld hl, wVirtualOAMSprite00Attributes 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, wVirtualOAM ld c, wVirtualOAMEnd - wVirtualOAM 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, [wBattleAnimDuration] and a jr z, .done dec a ld [wBattleAnimDuration], 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, wBattleAnimFlags bit 1, [hl] jr nz, .do_anim set 0, [hl] ret .not_done_with_anim cp $d0 jr nc, .do_anim ld [wBattleAnimDuration], a ret .do_anim call .DoCommand jr .loop ; cc293 .DoCommand: ; cc293 ; Execute battle animation command in [wBattleAnimByte]. ld a, [wBattleAnimByte] 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, wBattleAnimFlags res 1, [hl] ld hl, wBattleAnimParent ld e, [hl] inc hl ld d, [hl] ld hl, wBattleAnimAddress 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, wBattleAnimAddress ld e, [hl] inc hl ld d, [hl] ld hl, wBattleAnimParent ld [hl], e inc hl ld [hl], d pop de ld hl, wBattleAnimAddress ld [hl], e inc hl ld [hl], d ld hl, wBattleAnimFlags set 1, [hl] ret BattleAnimCmd_Jump: ; cc339 (33:4339) call GetBattleAnimByte ld e, a call GetBattleAnimByte ld d, a ld hl, wBattleAnimAddress ld [hl], e inc hl ld [hl], d ret BattleAnimCmd_Loop: ; cc348 (33:4348) call GetBattleAnimByte ld hl, wBattleAnimFlags bit 2, [hl] jr nz, .continue_loop and a jr z, .perpetual dec a set 2, [hl] ld [wBattleAnimLoops], a .continue_loop ld hl, wBattleAnimLoops 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, wBattleAnimAddress ld [hl], e inc hl ld [hl], d ret .return_from_loop ld hl, wBattleAnimFlags res 2, [hl] ld hl, wBattleAnimAddress 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, wBattleAnimAddress ld [hl], e inc hl ld [hl], d ret .dont_jump ld hl, wBattleAnimAddress 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 [wBattleAnimVar], a ret BattleAnimCmd_IncVar: ; cc3ad (33:43ad) ld hl, wBattleAnimVar inc [hl] ret BattleAnimCmd_IfVarEqual: ; cc3b2 (33:43b2) call GetBattleAnimByte ld hl, wBattleAnimVar cp [hl] jr z, .jump ld hl, wBattleAnimAddress 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, wBattleAnimAddress 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, wBattleAnimAddress 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, wBattleAnimAddress 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, wBattleAnimAddress 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, wBattleAnimAddress 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, wActiveAnimObjects 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, [wBattleAnimByte] 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, [wBattleAnimByte] 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, wActiveAnimObjects .loop ld hl, BATTLEANIMSTRUCT_INDEX add hl, bc ld d, [hl] ld a, [wBattleAnimByte] 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, wActiveBGEffects .loop ld hl, $0 add hl, bc ld d, [hl] ld a, [wBattleAnimByte] 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, wActiveAnimObjects .loop ld hl, BATTLEANIMSTRUCT_INDEX add hl, bc ld d, [hl] ld a, [wBattleAnimByte] 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 [wBattleAnimVar], a ret BattleAnimCmd_E7: ; cc5db (33:45db) ret BattleAnimCmd_Transform: ; cc5dc (33:45dc) ld a, [rSVBK] push af ld a, BANK(wCurPartySpecies) ld [rSVBK], a ld a, [wCurPartySpecies] ; CurPartySpecies push af ld a, [hBattleTurn] and a jr z, .player ld a, [wTempBattleMonSpecies] ; TempBattleMonSpecies ld [wCurPartySpecies], a ; CurPartySpecies ld hl, wBattleMonDVs ; BattleMonDVs predef GetUnownLetter ld de, vTiles0 tile $00 predef GetMonFrontpic jr .done .player ld a, [wTempEnemyMonSpecies] ; TempEnemyMonSpecies ld [wCurPartySpecies], a ; CurPartySpecies ld hl, wEnemyMonDVs ; EnemyMonDVs predef GetUnownLetter ld de, vTiles0 tile $00 predef GetMonBackpic .done pop af ld [wCurPartySpecies], 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(wCurPartySpecies) ld [rSVBK], a ld a, [wCurPartySpecies] ; CurPartySpecies push af ld a, [hBattleTurn] and a jr z, .player callfar DropEnemySub jr .done .player callfar DropPlayerSub .done pop af ld [wCurPartySpecies], a ; CurPartySpecies pop af ld [rSVBK], a ret BattleAnimCmd_BeatUp: ; cc776 (33:4776) ld a, [rSVBK] push af ld a, BANK(wCurPartySpecies) ld [rSVBK], a ld a, [wCurPartySpecies] ; CurPartySpecies push af ld a, [wBattleAnimParam] ld [wCurPartySpecies], a ; CurPartySpecies ld a, [hBattleTurn] and a jr z, .player ld hl, wBattleMonDVs predef GetUnownLetter ld de, vTiles2 tile $00 predef GetMonFrontpic jr .done .player ld hl, wEnemyMonDVs predef GetUnownLetter ld de, vTiles2 tile $31 predef GetMonBackpic .done pop af ld [wCurPartySpecies], 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, wBattleAnimFlags 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 [wCryTracks], 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(wEnemyMon) ; wBattleMon is in WRAM0, but EnemyMon is in WRAMX ld [rSVBK], a ld a, [hBattleTurn] and a jr nz, .enemy ld a, $f0 ld [wCryTracks], a ld a, [wBattleMonSpecies] jr .done_cry_tracks .enemy ld a, $0f ld [wCryTracks], a ld a, [wEnemyMonSpecies] .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, wCryPitch ld a, [hli] ld h, [hl] ld l, a add hl, bc ld a, l ld [wCryPitch], a ld a, h ld [wCryPitch + 1], a pop hl ld a, [hli] ld c, a ld b, [hl] ld hl, wCryLength ; CryLength ld a, [hli] ld h, [hl] ld l, a add hl, bc ld a, l ld [wCryLength], a ; CryLength ld a, h ld [wCryLength + 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, [wTypeModifier] 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, wLYOverrides ld bc, wBattleAnimEnd - wLYOverrides .loop ld [hl], $0 inc hl dec bc ld a, c or b jr nz, .loop ld hl, wFXAnimID 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, wActiveAnimObjects 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(wVirtualOAM) .loop2 ld a, l cp LOW(wVirtualOAMEnd) jr nc, .done xor a ld [hli], a jr .loop2 .done ret ; cc9a1