diff options
Diffstat (limited to 'engine/anims/anim_commands.asm')
-rw-r--r-- | engine/anims/anim_commands.asm | 1514 |
1 files changed, 1514 insertions, 0 deletions
diff --git a/engine/anims/anim_commands.asm b/engine/anims/anim_commands.asm new file mode 100644 index 000000000..1977f9112 --- /dev/null +++ b/engine/anims/anim_commands.asm @@ -0,0 +1,1514 @@ +; Battle animation command interpreter. + +PlayBattleAnim: ; cc0d6 + + ld a, [rSVBK] + push af + + ld a, 5 + 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, $1 + 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 + +Functioncc220: ; cc220 +; Appears to be unused. + 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, Sprites + 3 + ld c, (SpritesEnd - Sprites) / 4 +.loop + ld a, [hl] + and $f0 + ld [hli], a + inc hl + inc hl + inc hl + 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/move_anim.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, 1 + 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 + ld [rSVBK], a + xor a + 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 + ld [rSVBK], a + xor a + 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), $31 + ret + +.player + ld de, sScratch + $160 + call CopyMinimizePic + ld hl, VTiles2 tile $31 + ld de, sScratch + lb bc, BANK(GetMinimizePic), $24 + 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 + ld [rSVBK], a + xor a + 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, $1 + 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, $1 + 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 + and 3 + 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 + and 3 + ld e, a + ld d, 0 + ld hl, .CryData +rept 4 + add hl, de +endr + + ld a, [rSVBK] + push af + ld a, 1 + ld [rSVBK], a + + ld a, [hBattleTurn] + and a + jr nz, .enemy + + ld a, $f0 + ld [CryTracks], a ; CryTracks + ld a, [BattleMonSpecies] ; BattleMonSpecies + jr .done_cry_tracks + +.enemy + ld a, $0f + ld [CryTracks], a ; CryTracks + ld a, [EnemyMonSpecies] ; EnemyMon + +.done_cry_tracks + push hl + call LoadCryHeader + 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 _PlayCryHeader + +.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, $5 + ld [rSVBK], a + ld hl, BGPals + ld de, UnknBGPals + ld a, [rBGP] + ld b, a + ld c, 7 + call CopyPals + ld hl, OBPals + ld de, UnknOBPals + 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, $5 + ld [rSVBK], a + ld hl, OBPals palette PAL_BATTLE_OB_GRAY + ld de, UnknOBPals 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 |