diff options
Diffstat (limited to 'battle')
-rw-r--r-- | battle/anim_commands.asm | 1549 | ||||
-rw-r--r-- | battle/anim_gfx.asm | 42 | ||||
-rw-r--r-- | battle/anim_objects.asm | 5092 | ||||
-rw-r--r-- | battle/anims.asm | 5310 | ||||
-rw-r--r-- | battle/bg_effects.asm | 2938 | ||||
-rw-r--r-- | battle/core.asm | 9481 | ||||
-rw-r--r-- | battle/effect_command_pointers.asm | 5 | ||||
-rw-r--r-- | battle/effect_commands.asm | 511 | ||||
-rw-r--r-- | battle/effects/foresight.asm | 24 | ||||
-rw-r--r-- | battle/effects/metronome.asm | 62 | ||||
-rw-r--r-- | battle/effects/mirror_move.asm | 53 | ||||
-rw-r--r-- | battle/effects/nightmare.asm | 39 | ||||
-rw-r--r-- | battle/effects/perish_song.asm | 41 | ||||
-rw-r--r-- | battle/effects/rollout.asm | 97 | ||||
-rw-r--r-- | battle/effects/sandstorm.asm | 20 | ||||
-rw-r--r-- | battle/effects/thief.asm | 117 |
16 files changed, 24920 insertions, 461 deletions
diff --git a/battle/anim_commands.asm b/battle/anim_commands.asm new file mode 100644 index 000000000..c8077b710 --- /dev/null +++ b/battle/anim_commands.asm @@ -0,0 +1,1549 @@ +; 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, $ff9e + ld a, [hl] + push af + + ld [hl], c + call Functioncc11c + + pop af + ld [$ff9e], a + + ld a, $1 + ld [hBGMapMode], a + + call BattleAnimDelayFrame + call BattleAnimDelayFrame + call BattleAnimDelayFrame + call WaitSFX + ret +; cc11c + +Functioncc11c: ; cc11c + + ld a, [FXAnimIDHi] + and a + jr nz, .asm_cc156 + + callba CheckBattleScene + jr c, .asm_cc141 + + call BattleAnimClearHud + call Functioncc163 + + call BattleAnimAssignPals + call BattleAnimRequestPals + + xor a + ld [hSCX], a + ld [hSCY], a + call BattleAnimDelayFrame + call BattleAnimRestoreHuds + +.asm_cc141 + ld a, [$cfca] + and a + jr z, .asm_cc15f + + ld l, a + ld h, 0 + ld de, $10e + add hl, de + ld a, l + ld [FXAnimIDLo], a + ld a, h + ld [FXAnimIDHi], a + +.asm_cc156 + call WaitSFX + call Functioncc881 + call Functioncc163 + +.asm_cc15f + call Functioncc8f6 + ret +; cc163 + +Functioncc163: ; cc163 + + call Functioncc8d3 + +.playframe + call Functioncc25f + call Functionccb48 + call Functioncc96e + call Function3b0c + call BattleAnimRequestPals + +; Speed up Rollout's animation. + ld a, [FXAnimIDHi] + or a + jr nz, .asm_cc193 + + ld a, [FXAnimIDLo] + cp ROLLOUT + jr nz, .asm_cc193 + + ld a, $2e + ld b, 5 + ld de, 4 + ld hl, ActiveBGEffects +.asm_cc18c + cp [hl] + jr z, .asm_cc196 + add hl, de + dec b + jr nz, .asm_cc18c + +.asm_cc193 + call BattleAnimDelayFrame + +.asm_cc196 + ld a, [$d40f] + bit 0, a + jr z, .playframe + + call Functioncc23d + 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, $f + rst FarCall + + 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, [$cfc7] + cp b + call nz, Functioncc91a + + ld a, [rOBP0] + ld b, a + ld a, [$cfc8] + cp b + call nz, Functioncc94b + 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 + +INCBIN "baserom.gbc",$cc220,$cc23d - $cc220 + + +Functioncc23d: ; cc23d + + ld a, [$d40f] + bit 3, a + jr z, .asm_cc254 + + ld hl, Sprites + 3 + ld c, (SpritesEnd - Sprites) / 4 +.asm_cc249 + ld a, [hl] + and $f0 + ld [hli], a + inc hl + inc hl + inc hl + dec c + jr nz, .asm_cc249 + ret + +.asm_cc254 + ld hl, Sprites + ld c, SpritesEnd - Sprites + xor a +.asm_cc25a + ld [hli], a + dec c + jr nz, .asm_cc25a + ret +; cc25f + +Functioncc25f: ; cc25f + call Functioncc267 + ret nc + call Functioncc275 + ret +; cc267 + +Functioncc267: ; cc267 + ld a, [$d412] + and a + jr z, .asm_cc273 + + dec a + ld [$d412], a + and a + ret + +.asm_cc273 + scf + ret +; cc275 + +Functioncc275: ; cc275 + + call GetBattleAnimByte + + cp $ff + jr nz, .asm_cc286 + +; Return from a subroutine. + ld hl, $d40f + bit 1, [hl] + jr nz, .asm_cc28e + + set 0, [hl] + ret + +.asm_cc286 + cp $d0 + jr nc, .asm_cc28e + + ld [$d412], a + ret + +.asm_cc28e + call Functioncc293 + + jr Functioncc275 +; cc293 + +Functioncc293: ; cc293 +; Execute battle animation command in [$d417]. + ld a, [$d417] + 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 + + +; no known jump sources +BattleAnimCommands: ; cc2a4 (33:42a4) + dw BattleAnimCmd_D0 + dw BattleAnimCmd_D1 + dw BattleAnimCmd_D2 + dw BattleAnimCmd_D3 + dw BattleAnimCmd_D4 + dw BattleAnimCmd_D5 + dw BattleAnimCmd_D6 + dw BattleAnimCmd_D7 + dw BattleAnimCmd_D8 + dw BattleAnimCmd_D9 + dw BattleAnimCmd_DA + dw BattleAnimCmd_DB + dw BattleAnimCmd_DC + dw BattleAnimCmd_DD + dw BattleAnimCmd_DE + dw BattleAnimCmd_DF + dw BattleAnimCmd_E0 + dw BattleAnimCmd_E1 + dw BattleAnimCmd_E2 + dw BattleAnimCmd_E3 + dw BattleAnimCmd_E4 + dw BattleAnimCmd_E5 + dw BattleAnimCmd_E6 + dw BattleAnimCmd_E7 + dw BattleAnimCmd_E8 + dw BattleAnimCmd_E9 + dw BattleAnimCmd_EA + dw BattleAnimCmd_EB + dw BattleAnimCmd_EC + dw BattleAnimCmd_ED + dw BattleAnimCmd_EE + dw BattleAnimCmd_EF + dw BattleAnimCmd_F0 + dw BattleAnimCmd_F1 + dw BattleAnimCmd_F2 + dw BattleAnimCmd_F3 + dw BattleAnimCmd_F4 + dw BattleAnimCmd_F5 + dw BattleAnimCmd_F6 + dw BattleAnimCmd_F7 + dw BattleAnimCmd_F8 + dw BattleAnimCmd_F9 + dw BattleAnimCmd_FA + dw BattleAnimCmd_FB + dw BattleAnimCmd_FC + dw BattleAnimCmd_FD + dw BattleAnimCmd_FE + dw BattleAnimCmd_FF + + +; no known jump sources +BattleAnimCmd_EA: +BattleAnimCmd_EB: +BattleAnimCmd_EC: +BattleAnimCmd_ED: ; cc304 (33:4304) + ret + +; no known jump sources +BattleAnimCmd_FF: ; cc305 (33:4305) + ld hl, $d40f + res 1, [hl] + ld hl, $d413 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +; no known jump sources +BattleAnimCmd_FE: ; cc317 (33:4317) + call GetBattleAnimByte + ld e, a + call GetBattleAnimByte + ld d, a + push de + ld hl, $d410 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $d413 + ld [hl], e + inc hl + ld [hl], d + pop de + ld hl, $d410 + ld [hl], e + inc hl + ld [hl], d + ld hl, $d40f + set 1, [hl] + ret + +; no known jump sources +BattleAnimCmd_FC: ; cc339 (33:4339) + call GetBattleAnimByte + ld e, a + call GetBattleAnimByte + ld d, a + ld hl, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +; no known jump sources +BattleAnimCmd_FD: ; cc348 (33:4348) + call GetBattleAnimByte + ld hl, $d40f + bit 2, [hl] + jr nz, .asm_cc35b + and a + jr z, .asm_cc363 + dec a + set 2, [hl] + ld [$d415], a +.asm_cc35b + ld hl, $d415 + ld a, [hl] + and a + jr z, .asm_cc372 + dec [hl] +.asm_cc363 + call GetBattleAnimByte + ld e, a + call GetBattleAnimByte + ld d, a + ld hl, $d410 + ld [hl], e + inc hl + ld [hl], d + ret +.asm_cc372 + ld hl, $d40f + res 2, [hl] + ld hl, $d410 + ld e, [hl] + inc hl + ld d, [hl] + inc de + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +; no known jump sources +BattleAnimCmd_EF: ; cc383 (33:4383) + ld hl, $c689 + ld a, [hl] + and a + jr z, .asm_cc39a + + dec [hl] + call GetBattleAnimByte + ld e, a + call GetBattleAnimByte + ld d, a + ld hl, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +.asm_cc39a + ld hl, $d410 + ld e, [hl] + inc hl + ld d, [hl] + inc de + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +; no known jump sources +BattleAnimCmd_F9: ; cc3a6 (33:43a6) + call GetBattleAnimByte + ld [$d416], a + ret + +; no known jump sources +BattleAnimCmd_FA: ; cc3ad (33:43ad) + ld hl, $d416 + inc [hl] + ret + +; no known jump sources +BattleAnimCmd_FB: ; cc3b2 (33:43b2) + call GetBattleAnimByte + ld hl, $d416 + cp [hl] + jr z, .jump + + ld hl, $d410 + 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, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +; no known jump sources +BattleAnimCmd_F8: ; cc3d6 (33:43d6) + call GetBattleAnimByte + ld hl, $c689 + cp [hl] + jr z, .jump + + ld hl, $d410 + 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, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +; no known jump sources +BattleAnimCmd_EE: ; cc3fa (33:43fa) + call GetBattleAnimByte + ld e, a + ld a, [$c689] + and e + jr nz, .jump + + ld hl, $d410 + 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, $d410 + ld [hl], e + inc hl + ld [hl], d + ret + +; no known jump sources +BattleAnimCmd_D0: ; cc41f (33:441f) + call GetBattleAnimByte + ld [$d419], a + call GetBattleAnimByte + ld [$d41a], a + call GetBattleAnimByte + ld [$d41b], a + call GetBattleAnimByte + ld [$d41c], a + call Functioncc9a1 + ret + +; no known jump sources +BattleAnimCmd_F0: ; cc43b (33:443b) + call GetBattleAnimByte + ld [$d419], a + call GetBattleAnimByte + ld [$d41a], a + call GetBattleAnimByte + ld [$d41b], a + call GetBattleAnimByte + ld [$d41c], a + call Functionccb4f + ret + +; no known jump sources +BattleAnimCmd_F1: ; cc457 (33:4457) + call GetBattleAnimByte + ld [$cfc7], a + ret + +; no known jump sources +BattleAnimCmd_F2: ; cc45e (33:445e) + call GetBattleAnimByte + ld [$cfc8], a + ret + +; no known jump sources +BattleAnimCmd_F3: ; cc465 (33:4465) + call GetBattleAnimByte + ld [$cfc9], a + ret + +; no known jump sources +BattleAnimCmd_DF: ; cc46c (33:446c) + ld a, [hSGB] ; $ff00+$e7 + and a + ld a, $e0 + jr z, .asm_cc475 + ld a, $f0 +.asm_cc475 + ld [$cfc8], a + ret + +; no known jump sources +BattleAnimCmd_E5: ; cc479 (33:4479) + ld hl, $d30a + ld a, $a0 +.asm_cc47e + ld [hl], $0 + inc hl + dec a + jr nz, .asm_cc47e + ret + +; no known jump sources +BattleAnimCmd_D1: +BattleAnimCmd_D2: +BattleAnimCmd_D3: +BattleAnimCmd_D4: +BattleAnimCmd_D5: ; cc485 (33:4485) + ld a, [$d417] + and $f + ld c, a + ld hl, $d300 + xor a + ld [$d419], a +.asm_cc492 + ld a, [$d419] + cp $4f + ret nc + call GetBattleAnimByte + ld [hli], a + ld a, [$d419] + ld [hli], a + push bc + push hl + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld de, $8310 + add hl, de + ld a, [$d417] + call Functionce846 + ld a, [$d419] + add c + ld [$d419], a + pop hl + pop bc + dec c + jr nz, .asm_cc492 + ret + +; no known jump sources +BattleAnimCmd_D6: ; cc4c0 (33:44c0) + call GetBattleAnimByte + ld e, $a + ld bc, $d30a +.asm_cc4c8 + ld hl, $0 + add hl, bc + ld d, [hl] + ld a, [$d417] + cp d + jr z, .asm_cc4dd + ld hl, $18 + add hl, bc + ld c, l + ld b, h + dec e + jr nz, .asm_cc4c8 + ret +.asm_cc4dd + ld hl, $e + add hl, bc + inc [hl] + ret + +; no known jump sources +BattleAnimCmd_D8: ; cc4e3 (33:44e3) + call GetBattleAnimByte + ld e, $5 + ld bc, $d3fa +.asm_cc4eb + ld hl, $0 + add hl, bc + ld d, [hl] + ld a, [$d417] + cp d + jr z, .asm_cc500 + ld hl, $4 + add hl, bc + ld c, l + ld b, h + dec e + jr nz, .asm_cc4eb + ret +.asm_cc500 + ld hl, $1 + add hl, bc + inc [hl] + ret + +; no known jump sources +BattleAnimCmd_D7: ; cc506 (33:4506) + call GetBattleAnimByte + ld e, $a + ld bc, $d30a +.asm_cc50e + ld hl, $0 + add hl, bc + ld d, [hl] + ld a, [$d417] + cp d + jr z, .asm_cc523 + ld hl, $18 + add hl, bc + ld c, l + ld b, h + dec e + jr nz, .asm_cc50e + ret +.asm_cc523 + call GetBattleAnimByte + ld hl, $e + add hl, bc + ld [hl], a + ret + +; no known jump sources +BattleAnimCmd_D9: ; cc52c (33:452c) + + ld hl, $d300 +.asm_cc52f + ld a, [hl] + and a + jr z, .asm_cc537 + inc hl + inc hl + jr .asm_cc52f + +.asm_cc537 + 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, $8730 + ld de, $9060 + ld a, $70 + ld [$d419], a + ld a, $7 + call Functioncc561 + ld de, $9310 + ld a, $60 + ld [$d419], a + ld a, $6 + call Functioncc561 + ret + +; known jump sources: cc550 (33:4550), cc55d (33:455d), cc57b (33:457b) +Functioncc561: ; cc561 (33:4561) + push af + push hl + push de + ld bc, $3301 + call Request2bpp + pop de + ld a, [$d419] + ld l, a + ld h, $0 + add hl, de + ld e, l + ld d, h + pop hl + ld bc, $10 + add hl, bc + pop af + dec a + jr nz, Functioncc561 + ret + +; no known jump sources +BattleAnimCmd_DA: ; cc57e (33:457e) + + ld hl, $d300 +.asm_cc581 + ld a, [hl] + and a + jr z, .asm_cc589 + inc hl + inc hl + jr .asm_cc581 + +.asm_cc589 + 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, $8660 + ld de, $9050 + ld a, $70 + ld [$d419], a + ld a, $7 + call Functioncc5b3 + ld de, $9310 + ld a, $60 + ld [$d419], a + ld a, $6 + call Functioncc5b3 + ret + +; known jump sources: cc5a2 (33:45a2), cc5af (33:45af), cc5cd (33:45cd) +Functioncc5b3: ; cc5b3 (33:45b3) + push af + push hl + push de + ld bc, $3302 + call Request2bpp + pop de + ld a, [$d419] + ld l, a + ld h, $0 + add hl, de + ld e, l + ld d, h + pop hl + ld bc, $20 + add hl, bc + pop af + dec a + jr nz, Functioncc5b3 + ret + +; no known jump sources +BattleAnimCmd_DB: ; cc5d0 (33:45d0) + callab GetPokeBallWobble + ld a, c + ld [$d416], a + ret + +; no known jump sources +BattleAnimCmd_E7: ; cc5db (33:45db) + ret + +; no known jump sources +BattleAnimCmd_DC: ; cc5dc (33:45dc) + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, 1 + ld [rSVBK], a ; $ff00+$70 + ld a, [CurPartySpecies] ; $d108 + push af + + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + ld a, [TempBattleMonSpecies] ; $d205 + ld [CurPartySpecies], a ; $d108 + ld hl, BattleMonDVs ; $c632 + ld a, PREDEF_GET_UNOWN_LETTER + call Predef + ld de, $8000 + ld a, $3c + call Predef + jr .done + +.player + ld a, [TempEnemyMonSpecies] ; $d204 + ld [CurPartySpecies], a ; $d108 + ld hl, EnemyMonDVs ; $d20c + ld a, PREDEF_GET_UNOWN_LETTER + call Predef + ld de, $8000 + ld a, $3d + call Predef + +.done + pop af + ld [CurPartySpecies], a ; $d108 + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; no known jump sources +BattleAnimCmd_E8: ; cc622 (33:4622) + + ld de, $8000 + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + ld hl, $9000 + ld b, 0 + ld c, $31 + call Request2bpp + ret + +.player + ld hl, $9310 + ld b, 0 + ld c, $24 + call Request2bpp + ret + +; no known jump sources +BattleAnimCmd_DD: ; cc640 (33:4640) + + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, 1 + ld [rSVBK], a ; $ff00+$70 + xor a + call GetSRAMBank + +GetSubstitutePic: ; cc64c + + ld hl, $a000 + ld bc, $310 +.loop + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .loop + + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + ld hl, MonsterSpriteGFX + ld de, $a000 + $130 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $10 + ld de, $a000 + $1a0 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $20 + ld de, $a000 + $140 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $30 + ld de, $a000 + $1b0 + call CopyMonsterSpriteTile + + ld hl, $9000 + ld de, $a000 + lb bc, BANK(GetSubstitutePic), 7 * 7 + call Request2bpp + jr .done + +.player + ld hl, MonsterSpriteGFX + $40 + ld de, $a000 + $100 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $50 + ld de, $a000 + $160 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $60 + ld de, $a000 + $110 + call CopyMonsterSpriteTile + ld hl, MonsterSpriteGFX + $70 + ld de, $a000 + $170 + call CopyMonsterSpriteTile + + ld hl, $9310 + ld de, $a000 + lb bc, BANK(GetSubstitutePic), 6 * 6 + call Request2bpp + +.done + call CloseSRAM + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; known jump sources: cc663 (33:4663), cc66c (33:466c), cc675 (33:4675), cc67e (33:467e), cc695 (33:4695), cc69e (33:469e), cc6a7 (33:46a7), cc6b0 (33:46b0) +CopyMonsterSpriteTile: ; cc6c6 (33:46c6) + ld bc, $10 + ld a, BANK(MonsterSpriteGFX) + call FarCopyBytes + ret + +; no known jump sources +BattleAnimCmd_E2: ; cc6cf (33:46cf) + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $1 + ld [rSVBK], a ; $ff00+$70 + xor a + call GetSRAMBank + call GetMinimizePic + call Request2bpp + call CloseSRAM + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; known jump sources: cc6da (33:46da), cc740 (33:4740) +GetMinimizePic: ; cc6e7 (33:46e7) + ld hl, $a000 + ld bc, $310 +.loop + xor a + ld [hli], a + dec bc + ld a, c + or b + jr nz, .loop + + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + ld de, $a1a0 + call CopyMinimizePic + ld hl, $9000 + ld de, $a000 + lb bc, BANK(GetMinimizePic), $31 + ret + +.player + ld de, $a160 + call CopyMinimizePic + ld hl, $9310 + ld de, $a000 + lb bc, BANK(GetMinimizePic), $24 + ret + +; known jump sources: cc6fc (33:46fc), cc70c (33:470c) +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 + +; no known jump sources +BattleAnimCmd_E9: ; cc735 (33:4735) + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $1 + ld [rSVBK], a ; $ff00+$70 + xor a + call GetSRAMBank + call GetMinimizePic + ld hl, $8000 + call Request2bpp + call CloseSRAM + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; no known jump sources +BattleAnimCmd_DE: ; cc750 (33:4750) + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $1 + ld [rSVBK], a ; $ff00+$70 + + ld a, [CurPartySpecies] ; $d108 + push af + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + callab Function3f486 + jr .done + +.player + callab Function3f447 + +.done + pop af + ld [CurPartySpecies], a ; $d108 + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; no known jump sources +BattleAnimCmd_E6: ; cc776 (33:4776) + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $1 + ld [rSVBK], a ; $ff00+$70 + ld a, [CurPartySpecies] ; $d108 + push af + + ld a, [$c689] + ld [CurPartySpecies], a ; $d108 + + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .player + + ld hl, BattleMonDVs ; $c632 + ld a, PREDEF_GET_UNOWN_LETTER + call Predef + ld de, $9000 + ld a, $3c + call Predef + jr .done + +.player + ld hl, EnemyMonDVs ; $d20c + ld a, PREDEF_GET_UNOWN_LETTER + call Predef + ld de, $9310 + ld a, $3d + call Predef + +.done + pop af + ld [CurPartySpecies], a ; $d108 + ld b, $1 + call GetSGBLayout + pop af + ld [rSVBK], a ; $ff00+$70 + ret + +; no known jump sources +BattleAnimCmd_E3: ; cc7bb (33:47bb) + xor a + ld [hOAMUpdate], a ; $ff00+$d8 + ret + +; no known jump sources +BattleAnimCmd_E4: ; cc7bf (33:47bf) + ld a, $1 + ld [hOAMUpdate], a ; $ff00+$d8 + ret + +; no known jump sources +BattleAnimCmd_F4: ; cc7c4 (33:47c4) + ld hl, $d40f + set 3, [hl] + ret + +; no known jump sources +BattleAnimCmd_F5: ; cc7ca (33:47ca) + ret + +; no known jump sources +BattleAnimCmd_F6: ; cc7cb (33:47cb) + ret + +; no known jump sources +BattleAnimCmd_F7: ; cc7cc (33:47cc) + ret + +; no known jump sources +BattleAnimCmd_E0: ; cc7cd (33:47cd) + call GetBattleAnimByte + ld e, a + srl a + srl a + ld [$c2be], a + call Functioncc7fc + and 3 + ld [CryTracks], a ; $c2bd + + ld e, a + ld d, 0 + ld hl, Datacc7f8 + add hl, de + ld a, [hl] + ld [$c2bc], a + + call GetBattleAnimByte + ld e, a + ld d, 0 + callab PlayStereoSFX + + ret +; cc7f8 (33:47f8) + +Datacc7f8: ; cc7f8 + db $f0, $0f, $f0, $0f +; cc7fc + +; known jump sources: cc7d8 (33:47d8) +Functioncc7fc: ; cc7fc (33:47fc) + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr nz, .enemy + + ld a, e + ret + +.enemy + ld a, e + xor 1 + ret + +; no known jump sources +BattleAnimCmd_E1: ; cc807 (33:4807) + call GetBattleAnimByte + and 3 + ld e, a + ld d, 0 + ld hl, Datacc871 + add hl, de + add hl, de + add hl, de + add hl, de + + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, 1 + ld [rSVBK], a ; $ff00+$70 + + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr nz, .enemy + + ld a, $f0 + ld [CryTracks], a ; $c2bd + ld a, [BattleMonSpecies] ; $c62c + jr .asm_cc834 + +.enemy + ld a, $0f + ld [CryTracks], a ; $c2bd + ld a, [EnemyMonSpecies] ; $d206 + +.asm_cc834 + push hl + call Function37f3 + pop hl + jr c, .done + + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + + push hl + ld hl, CryPitch ; $c2b0 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, bc + ld a, l + ld [CryPitch], a ; $c2b0 + ld a, h + ld [CryEcho], a ; $c2b1 + pop hl + + ld a, [hli] + ld c, a + ld b, [hl] + ld hl, CryLength ; $c2b2 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, bc + + ld a, l + ld [CryLength], a ; $c2b2 + ld a, h + ld [CryLength + 1], a + ld a, 1 + ld [$c2bc], a + + callab PlayCry + +.done + pop af + ld [rSVBK], a ; $ff00+$70 + ret +; cc871 (33:4871) + +Datacc871: ; cc871 +; +pitch, +echo, +length + db $00, $00, $c0, $00 + db $00, $00, $40, $00 + db $00, $00, $00, $00 + db $00, $00, $00, $00 +; cc881 + + +Functioncc881: ; cc881 + ld a, [$cfca] + cp $1 + jr z, .asm_cc88b + cp $4 + ret nz + +.asm_cc88b + 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, .asm_cc8be + ld a, [hSGB] + and a + ld a, $e0 + jr z, .asm_cc8b2 + ld a, $f0 + +.asm_cc8b2 + ld [$cfc8], a + ld a, $e4 + ld [$cfc7], a + ld [$cfc9], a + ret + +.asm_cc8be + ld a, $e4 + ld [$cfc7], a + ld [$cfc8], a + ld [$cfc9], a + call DmgToCgbBGPals + ld de, $e4e4 + call DmgToCgbObjPals + ret +; cc8d3 + +Functioncc8d3: ; cc8d3 + ld hl, LYOverrides + ld bc, $0354 +.asm_cc8d9 + ld [hl], $0 + inc hl + dec bc + ld a, c + or b + jr nz, .asm_cc8d9 + ld hl, FXAnimIDLo + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $506f + add hl, de + add hl, de + call Function3ae1 + call BattleAnimAssignPals + call BattleAnimDelayFrame + ret +; cc8f6 + +Functioncc8f6: ; cc8f6 + call WaitTop + ld a, $e4 + ld [$cfc7], a + ld [$cfc8], a + ld [$cfc9], a + call DmgToCgbBGPals + ld de, $e4e4 + call DmgToCgbObjPals + xor a + ld [hSCX], a + ld [hSCY], a + call BattleAnimDelayFrame + ld a, $1 + ld [hBGMapMode], a + ret +; cc91a + +Functioncc91a: ; cc91a + ld [rBGP], a + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d080 + ld de, $d000 + ld a, [rBGP] + ld b, a + ld c, $7 + call CopyPals + ld hl, $d0c0 + ld de, MartPointer + ld a, [rBGP] + ld b, a + ld c, $2 + call CopyPals + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; cc94b + +Functioncc94b: ; cc94b + ld [rOBP0], a + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0d0 + ld de, $d050 + ld a, [rOBP0] + ld b, a + ld c, $2 + call CopyPals + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; cc96e + +Functioncc96e: ; cc96e + ld a, $0 + ld [$d418], a + ld hl, $d30a + ld e, $a +.asm_cc978 + ld a, [hl] + and a + jr z, .asm_cc98a + ld c, l + ld b, h + push hl + push de + call Functionccfbe + call Functioncca09 + pop de + pop hl + jr c, .asm_cc9a0 + +.asm_cc98a + ld bc, $0018 + add hl, bc + dec e + jr nz, .asm_cc978 + ld a, [$d418] + ld l, a + ld h, $c4 +.asm_cc997 + ld a, l + cp $a0 + jr nc, .asm_cc9a0 + xor a + ld [hli], a + jr .asm_cc997 + +.asm_cc9a0 + ret +; cc9a1 + + diff --git a/battle/anim_gfx.asm b/battle/anim_gfx.asm new file mode 100644 index 000000000..be318332d --- /dev/null +++ b/battle/anim_gfx.asm @@ -0,0 +1,42 @@ +AnimObj00GFX: ; 84a2e +AnimObj01GFX: INCBIN "gfx/fx/001.lz" +AnimObj02GFX: INCBIN "gfx/fx/002.lz" +AnimObj03GFX: INCBIN "gfx/fx/003.lz" +AnimObj04GFX: INCBIN "gfx/fx/004.lz" +AnimObj05GFX: INCBIN "gfx/fx/005.lz" +AnimObj07GFX: INCBIN "gfx/fx/007.lz" +AnimObj08GFX: INCBIN "gfx/fx/008.lz" +AnimObj10GFX: INCBIN "gfx/fx/010.lz" +AnimObj09GFX: INCBIN "gfx/fx/009.lz" +AnimObj12GFX: INCBIN "gfx/fx/012.lz" +AnimObj06GFX: INCBIN "gfx/fx/006.lz" +AnimObj11GFX: INCBIN "gfx/fx/011.lz" +AnimObj13GFX: INCBIN "gfx/fx/013.lz" +AnimObj14GFX: INCBIN "gfx/fx/014.lz" +AnimObj24GFX: INCBIN "gfx/fx/024.lz" +AnimObj15GFX: INCBIN "gfx/fx/015.lz" +AnimObj16GFX: INCBIN "gfx/fx/016.lz" +AnimObj17GFX: INCBIN "gfx/fx/017.lz" +AnimObj18GFX: INCBIN "gfx/fx/018.lz" +AnimObj19GFX: INCBIN "gfx/fx/019.lz" +AnimObj20GFX: INCBIN "gfx/fx/020.lz" +AnimObj22GFX: INCBIN "gfx/fx/022.lz" +AnimObj21GFX: INCBIN "gfx/fx/021.lz" +AnimObj23GFX: INCBIN "gfx/fx/023.lz" +AnimObj26GFX: INCBIN "gfx/fx/026.lz" +AnimObj27GFX: INCBIN "gfx/fx/027.lz" +AnimObj28GFX: INCBIN "gfx/fx/028.lz" +AnimObj29GFX: INCBIN "gfx/fx/029.lz" +AnimObj30GFX: INCBIN "gfx/fx/030.lz" +AnimObj31GFX: INCBIN "gfx/fx/031.lz" +AnimObj32GFX: INCBIN "gfx/fx/032.lz" +AnimObj33GFX: INCBIN "gfx/fx/033.lz" +AnimObj34GFX: INCBIN "gfx/fx/034.lz" +AnimObj25GFX: INCBIN "gfx/fx/025.lz" +AnimObj35GFX: INCBIN "gfx/fx/035.lz" +AnimObj36GFX: INCBIN "gfx/fx/036.lz" +AnimObj37GFX: INCBIN "gfx/fx/037.lz" +AnimObj38GFX: INCBIN "gfx/fx/038.lz" +AnimObj39GFX: INCBIN "gfx/fx/039.lz" +; 8640e + diff --git a/battle/anim_objects.asm b/battle/anim_objects.asm new file mode 100644 index 000000000..98e61a574 --- /dev/null +++ b/battle/anim_objects.asm @@ -0,0 +1,5092 @@ +; Objects used in battle animations. + + +; known jump sources: cc437 (33:4437) +Functioncc9a1: ; cc9a1 (33:49a1) + ld hl, $d30a + ld e, $a +.asm_cc9a6 + ld a, [hl] + and a + jr z, .asm_cc9b3 + ld bc, $18 + add hl, bc + dec e + jr nz, .asm_cc9a6 + scf + ret +.asm_cc9b3 + ld c, l + ld b, h + ld hl, $d40e + inc [hl] + call Functioncc9c4 + ret + + +Functioncc9bd: ; cc9bd + ld hl, $0000 + add hl, bc + ld [hl], $0 + ret +; cc9c4 + + +; known jump sources: cc9b9 (33:49b9) +Functioncc9c4: ; cc9c4 (33:49c4) + ld a, [$d419] + ld e, a + ld d, $0 + ld hl, $4b56 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld e, l + ld d, h + ld hl, $0 + add hl, bc + ld a, [$d40e] + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + call Functionccb31 + ld [hli], a + ld a, [$d41a] + ld [hli], a + ld a, [$d41b] + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld a, [$d41c] + ld [hli], a + xor a + ld [hli], a + dec a + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld [hl], a + ret + + +Functioncca09: ; cca09 + call Functionccaaa + call Functionce7d1 + cp EGG + jp z, .asm_ccaa5 + cp NUM_POKEMON + 1 + jp z, .asm_ccaa2 + push af + ld hl, $d419 + ld a, [$d420] + xor [hl] + and $e0 + ld [hl], a + pop af + push bc + call Functionce83c + ld a, [$d41b] + add [hl] + ld [$d41b], a + inc hl + ld a, [hli] + ld c, a + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d418] + ld e, a + ld d, $c4 +.asm_cca3c + ld a, [$d41d] + ld b, a + ld a, [$d41f] + add b + ld b, a + push hl + ld a, [hl] + ld hl, $d419 + bit 6, [hl] + jr z, .asm_cca53 + add $8 + xor $ff + inc a + +.asm_cca53 + pop hl + add b + ld [de], a + inc hl + inc de + ld a, [$d41c] + ld b, a + ld a, [$d41e] + add b + ld b, a + push hl + ld a, [hl] + ld hl, $d419 + bit 5, [hl] + jr z, .asm_cca6f + add $8 + xor $ff + inc a + +.asm_cca6f + pop hl + add b + ld [de], a + inc hl + inc de + ld a, [$d41b] + add $31 + add [hl] + ld [de], a + inc hl + inc de + ld a, [$d419] + ld b, a + ld a, [hl] + xor b + and $e0 + ld b, a + ld a, [hl] + and $10 + or b + ld b, a + ld a, [OTPartyMon6Nickname] + and $f + or b + ld [de], a + inc hl + inc de + ld a, e + ld [$d418], a + cp $a0 + jr nc, .asm_ccaa7 + dec c + jr nz, .asm_cca3c + pop bc + jr .asm_ccaa5 + +.asm_ccaa2 + call Functioncc9bd + +.asm_ccaa5 + and a + ret + +.asm_ccaa7 + pop bc + scf + ret +; ccaaa + +Functionccaaa: ; ccaaa + ld hl, $0001 + add hl, bc + ld a, [hl] + and $80 + ld [$d419], a + xor a + ld [$d420], a + ld hl, $0005 + add hl, bc + ld a, [hl] + ld [OTPartyMon6Nickname], a + ld hl, $0002 + add hl, bc + ld a, [hl] + ld [$d41a], a + ld hl, $0006 + add hl, bc + ld a, [hli] + ld [$d41b], a + ld a, [hli] + ld [$d41c], a + ld a, [hli] + ld [$d41d], a + ld a, [hli] + ld [$d41e], a + ld a, [hli] + ld [$d41f], a + ld a, [hBattleTurn] + and a + ret z + ld hl, $0001 + add hl, bc + ld a, [hl] + ld [$d419], a + bit 0, [hl] + ret z + ld hl, $0007 + add hl, bc + ld a, [hli] + ld d, a + ld a, $b4 + sub d + ld [$d41c], a + ld a, [hli] + ld d, a + ld a, [$d41a] + cp $ff + jr nz, .asm_ccb09 + ld a, $28 + add d + jr .asm_ccb26 + +.asm_ccb09 + sub d + push af + ld a, [FXAnimIDHi] + or a + jr nz, .asm_ccb25 + ld a, [FXAnimIDLo] + cp $86 + jr z, .asm_ccb20 + cp $87 + jr z, .asm_ccb20 + cp $d0 + jr nz, .asm_ccb25 + +.asm_ccb20 + pop af + sub $8 + jr .asm_ccb26 + +.asm_ccb25 + pop af + +.asm_ccb26 + ld [$d41d], a + ld a, [hli] + xor $ff + inc a + ld [$d41e], a + ret +; ccb31 + + +; known jump sources: cc9ed (33:49ed) +Functionccb31: ; ccb31 (33:4b31) + push hl + push bc + ld hl, $d300 + ld b, a + ld c, $5 +.asm_ccb39 + ld a, [hli] + cp b + jr z, .asm_ccb44 + inc hl + dec c + jr nz, .asm_ccb39 + xor a + jr .asm_ccb45 +.asm_ccb44 + ld a, [hl] +.asm_ccb45 + pop bc + pop hl + ret + + +Functionccb48: ; ccb48 + callab Functionc8000 + ret +; ccb4f + + +; known jump sources: cc453 (33:4453) +Functionccb4f: ; ccb4f (33:4b4f) + callab Functionc801a + ret +; ccb56 (33:4b56) + +INCBIN "baserom.gbc",$ccb56,$ccfbe - $ccb56 + + +Functionccfbe: ; ccfbe + ld hl, $0004 + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, $4fce + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; ccfce + + +; no known jump sources +Jumptable_ccfce: ; ccfce (33:4fce) + dw Functioncd06e + dw Functioncd12a + dw Functioncd146 + dw Functioncd0e3 + dw Functioncd0a6 + dw Functioncd081 + dw Functioncd079 + dw Functioncd2be + dw Functioncd306 + dw Functioncd3ae + dw Functioncd3f2 + dw Functioncd478 + dw Functioncd5e9 + dw Functioncd66a + dw Functioncd6e3 + dw Functioncd71a + dw Functioncd284 + dw Functioncd777 + dw Functioncd15c + dw Functioncd212 + dw Functioncd7a4 + dw Functioncd80c + dw Functioncd824 + dw Functioncd89a + dw Functioncd900 + dw Functioncd954 + dw Functioncdafa + dw Functioncdb06 + dw Functioncda0a + dw Functioncdb80 + dw Functioncdca6 + dw Functioncda31 + dw Functioncda4d + dw Functioncdcc3 + dw Functioncdd2a + dw Functioncdd90 + dw Functioncddf9 + dw Functioncde28 + dw Functioncde54 + dw Functioncde6b + dw Functioncde89 + dw Functioncdedd + dw Functioncdf59 + dw Functionce063 + dw Functionce0c5 + dw Functioncdf1b + dw Functionce10e + dw Functionce15c + dw Functionce1e7 + dw Functionce226 + dw Functionce255 + dw Functionce2cc + dw Functioncdf8c + dw Functionce00b + dw Functionce2fd + dw Functionce35f + dw Functionce389 + dw Functionce3b4 + dw Functionce3d2 + dw Functionce3ff + dw Functioncdfcb + dw Functionce416 + dw Functionce43a + dw Functioncdad6 + dw Functionce49c + dw Functionce4dc + dw Functionce1b0 + dw Functionce508 + dw Functionce532 + dw Functionce55b + dw Functionce593 + dw Functionce5b4 + dw Functionce5dc + dw Functionce5ee + dw Functionce62f + dw Functionce688 + dw Functionce6b3 + dw Functionce6d2 + dw Functioncd58a + dw Functionce6bf + + +; no known jump sources +Functioncd06e: ; cd06e (33:506e) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd071: ; cd071 (33:5071) + dw Functioncd078 + dw Functioncd075 + + +; no known jump sources +Functioncd075: ; cd075 (33:5075) + call Functioncc9bd + +; no known jump sources +Functioncd078: ; cd078 (33:5078) + ret + +; no known jump sources +Functioncd079: ; cd079 (33:5079) + call Functioncd081 + ret c + call Functioncc9bd + ret + +; known jump sources: cd079 (33:5079), cd17e (33:517e), cd22b (33:522b) +Functioncd081: ; cd081 (33:5081) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + ret nc + add $2 + ld [hl], a + ld hl, $8 + add hl, bc + dec [hl] + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + ld hl, $b + add hl, bc + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + scf + ret + +; no known jump sources +Functioncd0a6: ; cd0a6 (33:50a6) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + jr c, .asm_cd0b3 + call Functioncc9bd + ret +.asm_cd0b3 + add $2 + ld [hl], a + ld hl, $8 + add hl, bc + dec [hl] + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + inc [hl] + inc [hl] + ld d, $10 + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + sra a + sra a + sra a + sra a + ld [hl], a + ret + +; known jump sources: cdafa (33:5afa) +Functioncd0e3: ; cd0e3 (33:50e3) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd0e6: ; cd0e6 (33:50e6) + dw Functioncd0ea + dw Functioncd106 + + +; no known jump sources +Functioncd0ea: ; cd0ea (33:50ea) + call Functionce72c + ld hl, $b + add hl, bc + bit 7, [hl] + ld a, $0 + jr z, .asm_cd0f9 + ld a, $20 +.asm_cd0f9 + ld hl, $f + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $7f + ld [hl], a + +; no known jump sources +Functioncd106: ; cd106 (33:5106) + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + ld d, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ret + +; no known jump sources +Functioncd12a: ; cd12a (33:512a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd12d: ; cd12d (33:512d) + dw Functioncd135 + dw Functioncd131 + + +; no known jump sources +Functioncd131: ; cd131 (33:5131) + call Functioncc9bd + ret + +; no known jump sources +Functioncd135: ; cd135 (33:5135) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + ret nc + ld hl, $b + add hl, bc + ld a, [hl] + call Functionce70a + ret + +; no known jump sources +Functioncd146: ; cd146 (33:5146) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + jr nc, .asm_cd158 + ld hl, $b + add hl, bc + ld a, [hl] + call Functionce70a + ret +.asm_cd158 + call Functioncc9bd + ret + +; no known jump sources +Functioncd15c: ; cd15c (33:515c) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd15f: ; cd15f (33:515f) + dw Functioncd177 + dw Functioncd17e + dw Functioncd1dc + dw Functioncd196 + dw Functioncd1a7 + dw Functioncd1dc + dw Functioncd1d2 + dw Functioncd1dd + dw Functioncd1ee + dw Functioncd1dc + dw Functioncd1ee + dw Functioncd20e + + +; no known jump sources +Functioncd177: ; cd177 (33:5177) + call Functioncd249 + call Functionce72c + ret + +; no known jump sources +Functioncd17e: ; cd17e (33:517e) + call Functioncd081 + ret c + ld hl, $a + add hl, bc + ld a, [hl] + ld hl, $8 + add hl, bc + add [hl] + ld [hl], a + ld a, $b + call Functionce7bf + call Functionce72c + ret + +; no known jump sources +Functioncd196: ; cd196 (33:5196) + call Functionce72c + ld a, $9 + call Functionce7bf + ld hl, $f + add hl, bc + ld [hl], $0 + inc hl + ld [hl], $10 + +; no known jump sources +Functioncd1a7: ; cd1a7 (33:51a7) + ld hl, $f + add hl, bc + ld a, [hli] + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + dec a + ld [hl], a + and $1f + ret nz + ld [hl], a + ld hl, $10 + add hl, bc + ld a, [hl] + sub $4 + ld [hl], a + ret nz + ld a, $c + call Functionce7bf + call Functionce72c + ret + +; no known jump sources +Functioncd1d2: ; cd1d2 (33:51d2) + ld a, $d + call Functionce7bf + ld hl, $e + add hl, bc + dec [hl] + +; no known jump sources +Functioncd1dc: ; cd1dc (33:51dc) + ret + +; no known jump sources +Functioncd1dd: ; cd1dd (33:51dd) + call Functioncd249 + ld a, $a + call Functionce7bf + call Functionce72c + ld hl, $10 + add hl, bc + ld [hl], $20 + +; no known jump sources +Functioncd1ee: ; cd1ee (33:51ee) + ld hl, $f + add hl, bc + ld a, [hli] + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + dec a + ld [hl], a + and $1f + jr z, Functioncd20e + and $f + ret nz + call Functionce72c + ret + +; known jump sources: cd205 (33:5205) +Functioncd20e: ; cd20e (33:520e) + call Functioncc9bd + ret + +; no known jump sources +Functioncd212: ; cd212 (33:5212) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd215: ; cd215 (33:5215) + dw Functioncd21b + dw Functioncd222 + dw Functioncd232 + + +; no known jump sources +Functioncd21b: ; cd21b (33:521b) + call Functioncd249 + call Functionce72c + ret + +; no known jump sources +Functioncd222: ; cd222 (33:5222) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $70 + jr nc, .asm_cd22f + call Functioncd081 + ret +.asm_cd22f + call Functionce72c + +; no known jump sources +Functioncd232: ; cd232 (33:5232) + ld hl, $8 + add hl, bc + ld a, [hl] + cp $80 + jr nc, .asm_cd245 + add $4 + ld [hl], a + ld hl, $7 + add hl, bc + dec [hl] + dec [hl] + ret +.asm_cd245 + call Functioncc9bd + ret + +; known jump sources: cd177 (33:5177), cd1dd (33:51dd), cd21b (33:521b) +Functioncd249: ; cd249 (33:5249) + ld hl, $526c + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $1 + ld [rSVBK], a ; $ff00+$70 + ld a, [CurItem] ; $d106 + ld e, a + pop af + ld [rSVBK], a ; $ff00+$70 +.asm_cd25a + ld a, [hli] + cp $ff + jr z, .asm_cd265 + cp e + jr z, .asm_cd265 + inc hl + jr .asm_cd25a +.asm_cd265 + ld a, [hl] + ld hl, $5 + add hl, bc + ld [hl], a + ret +; cd26c (33:526c) + +INCBIN "baserom.gbc",$cd26c,$cd284 - $cd26c + +; no known jump sources +Functioncd284: ; cd284 (33:5284) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd287: ; cd287 (33:5287) + dw Functioncd291 + dw Functioncd2a0 + dw Functioncd2b1 + dw Functioncd2b5 + dw Functioncd2bd + + +; no known jump sources +Functioncd291: ; cd291 (33:5291) + ld hl, $b + add hl, bc + ld a, [hl] + swap a + and $f + ld hl, $e + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functioncd2a0: ; cd2a0 (33:52a0) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + ret nc + ld hl, $b + add hl, bc + ld a, [hl] + call Functionce70a + ret + +; no known jump sources +Functioncd2b1: ; cd2b1 (33:52b1) + call Functioncc9bd + ret + +; no known jump sources +Functioncd2b5: ; cd2b5 (33:52b5) + call Functionce72c + ld a, $f + call Functionce7bf + +; no known jump sources +Functioncd2bd: ; cd2bd (33:52bd) + ret + +; no known jump sources +Functioncd2be: ; cd2be (33:52be) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd2c1: ; cd2c1 (33:52c1) + dw Functioncd2c5 + dw Functioncd2d1 + + +; no known jump sources +Functioncd2c5: ; cd2c5 (33:52c5) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $30 + inc hl + ld [hl], $48 + +; no known jump sources +Functioncd2d1: ; cd2d1 (33:52d1) + ld hl, $f + add hl, bc + ld a, [hli] + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + ld hl, $f + add hl, bc + ld [hl], $20 + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + sub [hl] + jr z, .asm_cd302 + jr c, .asm_cd302 + ld hl, $10 + add hl, bc + ld [hl], a + ret +.asm_cd302 + call Functioncc9bd + ret + +; no known jump sources +Functioncd306: ; cd306 (33:5306) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd309: ; cd309 (33:5309) + dw Functioncd311 + dw Functioncd321 + dw Functioncd32a + dw Functioncd37d + + +; no known jump sources +Functioncd311: ; cd311 (33:5311) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $80 + jr nc, .asm_cd31e + call Functioncd38e + ret +.asm_cd31e + call Functionce72c + +; no known jump sources +Functioncd321: ; cd321 (33:5321) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $0 + +; no known jump sources +Functioncd32a: ; cd32a (33:532a) + ld hl, $f + add hl, bc + ld a, [hl] + cp $40 + jr nc, .asm_cd363 + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $18 + call Functionce732 + sub $18 + sra a + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $18 + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld hl, $f + add hl, bc + add [hl] + ld [hl], a + ret +.asm_cd363 + ld hl, $b + add hl, bc + ld a, [hl] + and $f0 + jr z, .asm_cd37a + sub $10 + ld d, a + ld a, [hl] + and $f + or d + ld [hl], a + ld hl, $e + add hl, bc + dec [hl] + ret +.asm_cd37a + call Functionce72c + +; no known jump sources +Functioncd37d: ; cd37d (33:537d) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $b0 + jr c, .asm_cd38a + call Functioncc9bd + ret +.asm_cd38a + call Functioncd38e + ret + +; known jump sources: cd31a (33:531a), cd38a (33:538a) +Functioncd38e: ; cd38e (33:538e) + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld hl, $7 + add hl, bc + add [hl] + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld e, a + srl e + ld hl, $8 + add hl, bc +.asm_cd3a9 + dec [hl] + dec e + jr nz, .asm_cd3a9 + ret + +; no known jump sources +Functioncd3ae: ; cd3ae (33:53ae) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd3b1: ; cd3b1 (33:53b1) + dw Functioncd3b7 + dw Functioncd3cc + dw Functioncd3ee + + +; no known jump sources +Functioncd3b7: ; cd3b7 (33:53b7) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $0 + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld hl, $9 + add hl, bc + ld [hl], a + +; no known jump sources +Functioncd3cc: ; cd3cc (33:53cc) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_cd3d6 + dec [hl] + ret +.asm_cd3d6 + ld hl, $b + add hl, bc + ld a, [hl] + swap a + and $f + ld hl, $f + add hl, bc + ld [hl], a + ld hl, $9 + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + ret + +; no known jump sources +Functioncd3ee: ; cd3ee (33:53ee) + call Functioncc9bd + ret + +; no known jump sources +Functioncd3f2: ; cd3f2 (33:53f2) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd3f5: ; cd3f5 (33:53f5) + dw Functioncd409 + dw Functioncd45c + dw Functioncd467 + dw Functioncd472 + dw Functioncd462 + dw Functioncd46d + dw Functioncd477 + dw Functioncd41d + dw Functioncd437 + dw Functioncd458 + + +; no known jump sources +Functioncd409: ; cd409 (33:5409) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + cp $7 + jr z, Functioncd41d + ld a, $11 + call Functionce7bf + ret + +; known jump sources: cd415 (33:5415) +Functioncd41d: ; cd41d (33:541d) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + jr nc, .asm_cd42f + add $2 + ld [hl], a + ld hl, $8 + add hl, bc + dec [hl] + ret +.asm_cd42f + call Functionce72c + ld a, $10 + call Functionce7bf + +; no known jump sources +Functioncd437: ; cd437 (33:5437) + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $10 + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ret + +; no known jump sources +Functioncd458: ; cd458 (33:5458) + call Functioncc9bd + ret + +; no known jump sources +Functioncd45c: ; cd45c (33:545c) + ld hl, $a + add hl, bc + dec [hl] + ret + +; no known jump sources +Functioncd462: ; cd462 (33:5462) + ld hl, $a + add hl, bc + inc [hl] + +; no known jump sources +Functioncd467: ; cd467 (33:5467) + ld hl, $9 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functioncd46d: ; cd46d (33:546d) + ld hl, $a + add hl, bc + inc [hl] + +; no known jump sources +Functioncd472: ; cd472 (33:5472) + ld hl, $9 + add hl, bc + inc [hl] + +; no known jump sources +Functioncd477: ; cd477 (33:5477) + ret + +; no known jump sources +Functioncd478: ; cd478 (33:5478) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd47b: ; cd47b (33:547b) + dw Functioncd48d + dw Functioncd496 + dw Functioncd4ee + dw Functioncd53a + dw Functioncd545 + dw Functioncd545 + dw Functioncd545 + dw Functioncd545 + dw Functioncd549 + + +; no known jump sources +Functioncd48d: ; cd48d (33:548d) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $40 + +; no known jump sources +Functioncd496: ; cd496 (33:5496) + ld hl, $f + add hl, bc + ld a, [hl] + cp $30 + jr nc, .asm_cd4bc + call Functionce72c + xor a + ld hl, $f + add hl, bc + ld [hli], a + ld [hl], a + ld a, $17 + call Functionce7bf + ld hl, $b + add hl, bc + bit 6, [hl] + ret z + ld hl, $d + add hl, bc + ld [hl], $5 + ret +.asm_cd4bc + ld hl, $b + add hl, bc + ld a, [hl] + and $3f + ld d, a + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + call Functioncd557 + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $7 + add hl, bc + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $7 + add hl, bc + ld [hl], d + ld hl, $10 + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functioncd4ee: ; cd4ee (33:54ee) + ld hl, $a + add hl, bc + ld a, [hl] + cp $20 + jr nz, .asm_cd4fb + call Functioncc9bd + ret +.asm_cd4fb + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $10 + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + bit 6, [hl] + jr nz, .asm_cd519 + ld hl, $f + add hl, bc + inc [hl] + jr .asm_cd51e +.asm_cd519 + ld hl, $f + add hl, bc + dec [hl] +.asm_cd51e + ld de, $80 + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $a + add hl, bc + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $a + add hl, bc + ld [hl], d + ld hl, $10 + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functioncd53a: ; cd53a (33:553a) + ld a, $16 + call Functionce7bf + ld hl, $1 + add hl, bc + res 5, [hl] + +; no known jump sources +Functioncd545: ; cd545 (33:5545) + call Functionce72c + ret + +; no known jump sources +Functioncd549: ; cd549 (33:5549) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $c0 + ret nc + ld a, $8 + call Functionce70a + ret + +; known jump sources: cd4d2 (33:54d2), cd5cd (33:55cd) +Functioncd557: ; cd557 (33:5557) + ld hl, $b + add hl, bc + ld a, [hl] + bit 7, a + jr nz, .asm_cd574 + cp $20 + jr nc, .asm_cd570 + cp $18 + jr nc, .asm_cd56c + ld de, $200 + ret +.asm_cd56c + ld de, $180 + ret +.asm_cd570 + ld de, $100 + ret +.asm_cd574 + and $3f + cp $20 + jr nc, .asm_cd586 + cp $18 + jr nc, .asm_cd582 + ld de, $fe00 + ret +.asm_cd582 + ld de, $fe80 + ret +.asm_cd586 + ld de, rJOYP ; $ff00 + ret + +; no known jump sources +Functioncd58a: ; cd58a (33:558a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd58d: ; cd58d (33:558d) + dw Functioncd591 + dw Functioncd5aa + + +; no known jump sources +Functioncd591: ; cd591 (33:5591) + ld hl, $b + add hl, bc + ld a, [hl] + and $40 + rlca + rlca + add $19 + ld hl, $3 + add hl, bc + ld [hl], a + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $40 + +; no known jump sources +Functioncd5aa: ; cd5aa (33:55aa) + ld hl, $f + add hl, bc + ld a, [hl] + cp $30 + jr nc, .asm_cd5b7 + call Functioncc9bd + ret +.asm_cd5b7 + ld hl, $b + add hl, bc + ld a, [hl] + and $3f + ld d, a + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + call Functioncd557 + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $7 + add hl, bc + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $7 + add hl, bc + ld [hl], d + ld hl, $10 + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functioncd5e9: ; cd5e9 (33:55e9) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd5ec: ; cd5ec (33:55ec) + dw Functioncd5f2 + dw Functioncd5fb + dw Functioncd61b + + +; no known jump sources +Functioncd5f2: ; cd5f2 (33:55f2) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $c + +; no known jump sources +Functioncd5fb: ; cd5fb (33:55fb) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_cd60d + dec [hl] + ld hl, $b + add hl, bc + ld a, [hl] + call Functionce70a + ret +.asm_cd60d + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $0 + ld a, $22 + call Functionce7bf + +; no known jump sources +Functioncd61b: ; cd61b (33:561b) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $98 + jr nc, .asm_cd63f + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $7 + add hl, bc + ld h, [hl] + ld l, a + ld de, $60 + add hl, de + ld e, l + ld d, h + ld hl, $f + add hl, bc + ld [hl], e + ld hl, $7 + add hl, bc + ld [hl], d +.asm_cd63f + ld hl, $8 + add hl, bc + ld a, [hl] + cp $20 + ret c + ld hl, $b + add hl, bc + ld a, [hl] + and $f0 + ld e, a + ld d, $ff + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $8 + add hl, bc + ld h, [hl] + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $10 + add hl, bc + ld [hl], e + ld hl, $8 + add hl, bc + ld [hl], d + ret + +; no known jump sources +Functioncd66a: ; cd66a (33:566a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd66d: ; cd66d (33:566d) + dw Functioncd677 + dw Functioncd687 + dw Functioncd6c5 + dw Functioncd6c6 + dw Functioncd6d6 + + +; no known jump sources +Functioncd677: ; cd677 (33:5677) + call Functionce72c + ld a, $42 + ld [hLCDStatCustom], a ; $ff00+$c6 + ld a, $58 + ld [$FF00+$c7], a + ld a, $5e + ld [$FF00+$c8], a + ret + +; no known jump sources +Functioncd687: ; cd687 (33:5687) + ld hl, $b + add hl, bc + ld e, [hl] + ld hl, $8 + add hl, bc + ld a, [hl] + cp e + jr nc, .asm_cd69b + call Functionce72c + xor a + ld [$FF00+$c7], a + ret +.asm_cd69b + dec a + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $10 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $8 + add hl, bc + add [hl] + sub $10 + ret c + ld [$FF00+$c7], a + ld hl, $9 + add hl, bc + ld a, [hl] + inc a + and $7 + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + inc [hl] + +; no known jump sources +Functioncd6c5: ; cd6c5 (33:56c5) + ret + +; no known jump sources +Functioncd6c6: ; cd6c6 (33:56c6) + ld hl, $8 + add hl, bc + ld a, [hl] + cp $70 + jr c, asm_cd6da + xor a + ld [hLCDStatCustom], a ; $ff00+$c6 + ld [$FF00+$c7], a + ld [$FF00+$c8], a + +; no known jump sources +Functioncd6d6: ; cd6d6 (33:56d6) + call Functioncc9bd + ret +asm_cd6da: ; cd6da (33:56da) + inc a + inc a + ld [hl], a + sub $10 + ret c + ld [$FF00+$c7], a + ret + +; no known jump sources +Functioncd6e3: ; cd6e3 (33:56e3) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd6e6: ; cd6e6 (33:56e6) + dw Functioncd6ea + dw Functioncd6f7 + + +; no known jump sources +Functioncd6ea: ; cd6ea (33:56ea) + call Functionce72c + ld hl, $b + add hl, bc + ld a, $24 + add [hl] + call Functionce7bf + +; no known jump sources +Functioncd6f7: ; cd6f7 (33:56f7) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $b8 + jr c, .asm_cd704 + call Functioncc9bd + ret +.asm_cd704 + ld a, $2 + call Functionce70a + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + ld d, $8 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functioncd71a: ; cd71a (33:571a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd71d: ; cd71d (33:571d) + dw Functioncd725 + dw Functioncd728 + dw Functioncd763 + dw Functioncd776 + + +; no known jump sources +Functioncd725: ; cd725 (33:5725) + call Functionce72c + +; no known jump sources +Functioncd728: ; cd728 (33:5728) + ld hl, $8 + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_cd747 + ld a, $2 + call Functionce70a + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + ld d, $8 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ret +.asm_cd747 + call Functionce72c + ld a, $28 + call Functionce7bf + ld hl, $a + add hl, bc + ld [hl], $0 + ld hl, $8 + add hl, bc + ld [hl], $30 + ld hl, $1 + add hl, bc + ld a, [hl] + and $1 + ld [hl], a + +; no known jump sources +Functioncd763: ; cd763 (33:5763) + ld hl, $a + add hl, bc + ld a, [hl] + cp $18 + jr nc, .asm_cd76e + inc [hl] + ret +.asm_cd76e + call Functionce72c + ld a, $29 + call Functionce7bf + +; no known jump sources +Functioncd776: ; cd776 (33:5776) + ret + +; no known jump sources +Functioncd777: ; cd777 (33:5777) + ld hl, $a + add hl, bc + ld a, [hl] + cp $38 + jr c, .asm_cd784 + call Functioncc9bd + ret +.asm_cd784 + ld a, [hl] + ld hl, $f + add hl, bc + ld l, [hl] + ld h, a + ld de, $80 + add hl, de + ld e, l + ld d, h + ld hl, $f + add hl, bc + ld [hl], e + ld hl, $a + add hl, bc + ld [hl], d + ld hl, $9 + add hl, bc + ld a, [hl] + xor $10 + ld [hl], a + ret + +; no known jump sources +Functioncd7a4: ; cd7a4 (33:57a4) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd7a7: ; cd7a7 (33:57a7) + dw Functioncd7ab + dw Functioncd7d2 + + +; no known jump sources +Functioncd7ab: ; cd7ab (33:57ab) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + and $f0 + ld hl, $10 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $f + sla a + sla a + sla a + ld hl, $f + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld [hl], $1 + +; no known jump sources +Functioncd7d2: ; cd7d2 (33:57d2) + ld hl, $10 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_cd7de + call Functioncc9bd + ret +.asm_cd7de + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + ld hl, $10 + add hl, bc + ld d, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + xor $1 + ld [hl], a + ret z + ld hl, $10 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functioncd80c: ; cd80c (33:580c) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd80f: ; cd80f (33:580f) + dw Functioncd81f + dw Functioncd817 + dw Functioncd81f + dw Functioncd820 + + +; no known jump sources +Functioncd817: ; cd817 (33:5817) + call Functionce72c + ld a, $35 + call Functionce7bf + +; no known jump sources +Functioncd81f: ; cd81f (33:581f) + ret + +; no known jump sources +Functioncd820: ; cd820 (33:5820) + call Functioncc9bd + ret + +; no known jump sources +Functioncd824: ; cd824 (33:5824) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd827: ; cd827 (33:5827) + dw Functioncd835 + dw Functioncd860 + dw Functioncd88f + dw Functioncd88f + dw Functioncd88f + dw Functioncd88f + dw Functioncd893 + + +; no known jump sources +Functioncd835: ; cd835 (33:5835) + call Functionce72c + ld hl, $3 + add hl, bc + ld a, [hl] + ld hl, $10 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + bit 7, [hl] + jr nz, .asm_cd852 + ld hl, $f + add hl, bc + ld [hl], $10 + jr .asm_cd858 +.asm_cd852 + ld hl, $f + add hl, bc + ld [hl], $30 +.asm_cd858 + ld hl, $b + add hl, bc + ld a, [hl] + and $7f + ld [hl], a + +; no known jump sources +Functioncd860: ; cd860 (33:5860) + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + ld d, [hl] + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + bit 7, a + jr nz, .asm_cd87e + ld hl, $10 + add hl, bc + ld a, [hl] + inc a + jr .asm_cd883 +.asm_cd87e + ld hl, $10 + add hl, bc + ld a, [hl] +.asm_cd883 + call Functionce7bf + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $1f + ret nz + +; no known jump sources +Functioncd88f: ; cd88f (33:588f) + call Functionce72c + ret + +; no known jump sources +Functioncd893: ; cd893 (33:5893) + ld hl, $e + add hl, bc + ld [hl], $1 + ret + +; no known jump sources +Functioncd89a: ; cd89a (33:589a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd89d: ; cd89d (33:589d) + dw Functioncd8ab + dw Functioncd8cc + dw Functioncd8f5 + dw Functioncd8f5 + dw Functioncd8f5 + dw Functioncd8f5 + dw Functioncd8f9 + + +; no known jump sources +Functioncd8ab: ; cd8ab (33:58ab) + call Functionce72c + ld hl, $b + add hl, bc + bit 7, [hl] + jr nz, .asm_cd8be + ld hl, $f + add hl, bc + ld [hl], $10 + jr .asm_cd8c4 +.asm_cd8be + ld hl, $f + add hl, bc + ld [hl], $30 +.asm_cd8c4 + ld hl, $b + add hl, bc + ld a, [hl] + and $7f + ld [hl], a + +; no known jump sources +Functioncd8cc: ; cd8cc (33:58cc) + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + bit 7, a + jr nz, .asm_cd8e6 + ld a, $3d + jr .asm_cd8e8 +.asm_cd8e6 + ld a, $3c +.asm_cd8e8 + call Functionce7bf + ld hl, $f + add hl, bc + inc [hl] + inc [hl] + ld a, [hl] + and $1f + ret nz + +; no known jump sources +Functioncd8f5: ; cd8f5 (33:58f5) + call Functionce72c + ret + +; no known jump sources +Functioncd8f9: ; cd8f9 (33:58f9) + ld hl, $e + add hl, bc + ld [hl], $1 + ret + +; no known jump sources +Functioncd900: ; cd900 (33:5900) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd903: ; cd903 (33:5903) + dw Functioncd907 + dw Functioncd913 + + +; no known jump sources +Functioncd907: ; cd907 (33:5907) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $28 + inc hl + ld [hl], $0 + +; no known jump sources +Functioncd913: ; cd913 (33:5913) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld d, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_cd950 + ld d, a + ld hl, $10 + add hl, bc + ld e, [hl] + ld hl, hPushOAM ; $ff80 + add hl, de + ld e, l + ld d, h + ld hl, $10 + add hl, bc + ld [hl], e + ld hl, $f + add hl, bc + ld [hl], d + ret +.asm_cd950 + call Functioncc9bd + ret + +; no known jump sources +Functioncd954: ; cd954 (33:5954) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cd957: ; cd957 (33:5957) + dw Functioncd961 + dw Functioncd96a + dw Functioncd96e + dw Functioncd96a + dw Functioncd97b + + +; no known jump sources +Functioncd961: ; cd961 (33:5961) + call Functionce72c + ld hl, $b + add hl, bc + ld [hl], $0 + +; no known jump sources +Functioncd96a: ; cd96a (33:596a) + call Functioncd99a + ret + +; no known jump sources +Functioncd96e: ; cd96e (33:596e) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + jr c, asm_cd988 + call Functionce72c + ret + +; no known jump sources +Functioncd97b: ; cd97b (33:597b) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $b8 + jr c, asm_cd988 + call Functioncc9bd + ret + +; known jump sources: cd975 (33:5975), cd982 (33:5982) +asm_cd988: ; cd988 (33:5988) + call Functioncd99a + ld hl, $7 + add hl, bc + inc [hl] + ld a, [hl] + and $1 + ret nz + ld hl, $8 + add hl, bc + dec [hl] + ret + +; known jump sources: cd96a (33:596a), cd988 (33:5988) +Functioncd99a: ; cd99a (33:599a) + call Functioncd9f4 + ld hl, $f + add hl, bc + ld a, [hl] + push af + push de + call Functionce734 + sra a + sra a + sra a + sra a + ld hl, $b + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + sub $8 + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and a + jr z, .asm_cd9d7 + cp $c2 + jr c, .asm_cd9e2 +.asm_cd9d7 + dec a + ld [hl], a + and $7 + ret nz + ld hl, $10 + add hl, bc + inc [hl] + ret +.asm_cd9e2 + xor a + ld hl, $10 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld [hl], a + ld hl, $9 + add hl, bc + ld [hli], a + ld [hl], a + ret + +; known jump sources: cd99a (33:599a) +Functioncd9f4: ; cd9f4 (33:59f4) + ld hl, $10 + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, $5a01 + add hl, de + ld d, [hl] + ret +; cda01 (33:5a01) + +INCBIN "baserom.gbc",$cda01,$cda0a - $cda01 + +; no known jump sources +Functioncda0a: ; cda0a (33:5a0a) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $30 + jr nc, .asm_cda17 + call Functioncc9bd + ret +.asm_cda17 + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld e, a + ld hl, $7 + add hl, bc + ld a, [hl] + sub e + ld [hl], a + srl e + ld hl, $8 + add hl, bc +.asm_cda2c + inc [hl] + dec e + jr nz, .asm_cda2c + ret + +; no known jump sources +Functioncda31: ; cda31 (33:5a31) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cda34: ; cda34 (33:5a34) + dw Functioncda4c + dw Functioncda3a + dw Functioncda4c + + +; no known jump sources +Functioncda3a: ; cda3a (33:5a3a) + ld hl, $3 + add hl, bc + ld a, [hl] + inc a + call Functionce7bf + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $8 + +; no known jump sources +Functioncda4c: ; cda4c (33:5a4c) + ret + +; no known jump sources +Functioncda4d: ; cda4d (33:5a4d) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cda50: ; cda50 (33:5a50) + dw Functioncda58 + dw Functioncda62 + dw Functioncda7a + dw Functioncda8c + + +; no known jump sources +Functioncda58: ; cda58 (33:5a58) + call Functionce72c + ld hl, $10 + add hl, bc + ld [hl], $40 + ret + +; no known jump sources +Functioncda62: ; cda62 (33:5a62) + ld hl, $10 + add hl, bc + ld a, [hl] + cp $20 + jr c, .asm_cda6f + call Functioncda8d + ret +.asm_cda6f + ld [hl], $40 + ld a, $57 + call Functionce7bf + call Functionce72c + ret + +; no known jump sources +Functioncda7a: ; cda7a (33:5a7a) + ld hl, $10 + add hl, bc + ld a, [hl] + and a + jr z, .asm_cda84 + dec [hl] + ret +.asm_cda84 + call Functionce72c + ld a, $58 + call Functionce7bf + +; no known jump sources +Functioncda8c: ; cda8c (33:5a8c) + ret + +; known jump sources: cda6b (33:5a6b), cdaf2 (33:5af2) +Functioncda8d: ; cda8d (33:5a8d) + dec [hl] + ld d, $20 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $2 + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + ld hl, $f + add hl, bc + ld e, [hl] + ld hl, $7 + add hl, bc + ld d, [hl] + ld hl, $b + add hl, bc + ld h, [hl] + ld a, h + and $f + swap a + ld l, a + ld a, h + and $f0 + swap a + ld h, a + add hl, de + ld e, l + ld d, h + ld hl, $f + add hl, bc + ld [hl], e + ld hl, $7 + add hl, bc + ld [hl], d + ld hl, $10 + add hl, bc + ld a, [hl] + and $1 + ret nz + ld hl, $8 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functioncdad6: ; cdad6 (33:5ad6) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdad9: ; cdad9 (33:5ad9) + dw Functioncdadf + dw Functioncdae9 + dw Functioncdaf9 + + +; no known jump sources +Functioncdadf: ; cdadf (33:5adf) + call Functionce72c + ld hl, $10 + add hl, bc + ld [hl], $40 + ret + +; no known jump sources +Functioncdae9: ; cdae9 (33:5ae9) + ld hl, $10 + add hl, bc + ld a, [hl] + cp $20 + jr c, .asm_cdaf6 + call Functioncda8d + ret +.asm_cdaf6 + call Functionce72c + +; no known jump sources +Functioncdaf9: ; cdaf9 (33:5af9) + ret + +; no known jump sources +Functioncdafa: ; cdafa (33:5afa) + call Functioncd0e3 + ld hl, $f + add hl, bc + ld a, [hl] + add $f + ld [hl], a + ret + +; no known jump sources +Functioncdb06: ; cdb06 (33:5b06) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdb09: ; cdb09 (33:5b09) + dw Functioncdb13 + dw Functioncdb14 + dw Functioncdb28 + dw Functioncdb50 + dw Functioncdb65 + + +; no known jump sources +Functioncdb13: ; cdb13 (33:5b13) + ret + +; no known jump sources +Functioncdb14: ; cdb14 (33:5b14) + ld hl, $8 + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_cdb24 + ld hl, $e + add hl, bc + ld [hl], $0 + ret +.asm_cdb24 + add $4 + ld [hl], a + ret + +; no known jump sources +Functioncdb28: ; cdb28 (33:5b28) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $98 + ret nc + inc [hl] + inc [hl] + ld hl, $1 + add hl, bc + set 0, [hl] + ld hl, $2 + add hl, bc + ld [hl], $90 + ld hl, $d + add hl, bc + ld [hl], $0 + ld hl, $c + add hl, bc + ld [hl], $2 + ld hl, $8 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functioncdb50: ; cdb50 (33:5b50) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $2c + ld hl, $d + add hl, bc + ld [hl], $0 + ld hl, $c + add hl, bc + ld [hl], $80 + +; no known jump sources +Functioncdb65: ; cdb65 (33:5b65) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $98 + ret nc + inc [hl] + inc [hl] + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + ld d, $8 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functioncdb80: ; cdb80 (33:5b80) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdb83: ; cdb83 (33:5b83) + dw Functioncdb9f + dw Functioncdbb3 + dw Functioncdbcf + dw Functioncdbeb + dw Functioncdc74 + dw Functioncdc1a + dw Functioncdbc1 + dw Functioncdc1e + dw Functioncdc27 + dw Functioncdc39 + dw Functioncdc74 + dw Functioncdc48 + dw Functioncdc57 + dw Functioncdc74 + + +; no known jump sources +Functioncdb9f: ; cdb9f (33:5b9f) + ld hl, $f + add hl, bc + ld [hl], $28 + inc hl + ld [hl], $10 + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functioncdbb3: ; cdbb3 (33:5bb3) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $40 + jr nc, .asm_cdbbd + inc [hl] +.asm_cdbbd + call Functioncdc75 + ret + +; no known jump sources +Functioncdbc1: ; cdbc1 (33:5bc1) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $4b + jr nc, .asm_cdbcb + inc [hl] +.asm_cdbcb + call Functioncdc75 + ret + +; no known jump sources +Functioncdbcf: ; cdbcf (33:5bcf) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $88 + jr nc, .asm_cdbe6 + and $f + jr nz, asm_cdbfa + ld hl, $10 + add hl, bc + ld [hl], $10 + call Functionce72c + ret +.asm_cdbe6 + call Functionce72c + inc [hl] + ret + +; no known jump sources +Functioncdbeb: ; cdbeb (33:5beb) + ld hl, $10 + add hl, bc + ld a, [hl] + and a + jr z, .asm_cdbf5 + dec [hl] + ret +.asm_cdbf5 + ld hl, $e + add hl, bc + dec [hl] +asm_cdbfa: ; cdbfa (33:5bfa) + ld hl, $7 + add hl, bc + inc [hl] + ld hl, $8 + add hl, bc + ld d, [hl] + ld hl, $f + add hl, bc + ld e, [hl] + ld hl, hPushOAM ; $ff80 + add hl, de + ld e, l + ld d, h + ld hl, $8 + add hl, bc + ld [hl], d + ld hl, $f + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functioncdc1a: ; cdc1a (33:5c1a) + call Functioncc9bd + ret + +; no known jump sources +Functioncdc1e: ; cdc1e (33:5c1e) + ld a, $4e + call Functionce7bf + call Functionce72c + ret + +; no known jump sources +Functioncdc27: ; cdc27 (33:5c27) + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $2 + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functioncdc39: ; cdc39 (33:5c39) + ld a, $50 + call Functionce7bf + ld hl, $a + add hl, bc + ld [hl], $4 + call Functionce72c + ret + +; no known jump sources +Functioncdc48: ; cdc48 (33:5c48) + ld a, $4f + call Functionce7bf + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $40 + ret + +; no known jump sources +Functioncdc57: ; cdc57 (33:5c57) + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $20 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_cdc71 + dec [hl] + ret +.asm_cdc71 + call Functionce72c + +; no known jump sources +Functioncdc74: ; cdc74 (33:5c74) + ret + +; known jump sources: cdbbd (33:5bbd), cdbcb (33:5bcb) +Functioncdc75: ; cdc75 (33:5c75) + ld hl, $f + add hl, bc + ld a, [hli] + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + ld hl, $f + add hl, bc + ld [hl], $20 + ld hl, $10 + add hl, bc + ld a, [hl] + sub $8 + ld [hl], a + ret nz + xor a + ld hl, $f + add hl, bc + ld [hli], a + ld [hl], a + call Functionce72c + ret + +; no known jump sources +Functioncdca6: ; cdca6 (33:5ca6) + ld hl, $a + add hl, bc + ld a, [hl] + and a + jr z, .asm_cdcb6 + cp $d8 + jr nc, .asm_cdcb6 + call Functioncc9bd + ret +.asm_cdcb6 + ld hl, $b + add hl, bc + ld d, [hl] + ld hl, $a + add hl, bc + ld a, [hl] + sub d + ld [hl], a + ret + +; no known jump sources +Functioncdcc3: ; cdcc3 (33:5cc3) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdcc6: ; cdcc6 (33:5cc6) + dw Functioncdcca + dw Functioncdced + + +; no known jump sources +Functioncdcca: ; cdcca (33:5cca) + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr z, .asm_cdcd9 + ld hl, $b + add hl, bc + ld a, [hl] + xor $ff + add $3 + ld [hl], a +.asm_cdcd9 + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $8 + ld hl, $b + add hl, bc + ld a, $59 + add [hl] + call Functionce7bf + ret + +; no known jump sources +Functioncdced: ; cdced (33:5ced) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_cdcfa + dec [hl] + call Functioncdcfe + ret +.asm_cdcfa + call Functioncc9bd + ret + +; known jump sources: cdcf6 (33:5cf6) +Functioncdcfe: ; cdcfe (33:5cfe) + ld hl, $10 + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $10 + call Functionce734 + ld d, a + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and a + jr z, .asm_cdd20 + dec a + ret z + ld hl, $a + add hl, bc + ld [hl], d + ret +.asm_cdd20 + ld hl, $a + add hl, bc + ld a, d + xor $ff + inc a + ld [hl], a + ret + +; no known jump sources +Functioncdd2a: ; cdd2a (33:5d2a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdd2d: ; cdd2d (33:5d2d) + dw Functioncdd31 + dw Functioncdd4f + + +; no known jump sources +Functioncdd31: ; cdd31 (33:5d31) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + and $3f + ld hl, $10 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $80 + rlca + ld [hl], a + add $5d + call Functionce7bf + ret + +; no known jump sources +Functioncdd4f: ; cdd4f (33:5d4f) + ld hl, $b + add hl, bc + ld a, [hl] + swap a + ld d, a + ld hl, $10 + add hl, bc + ld a, [hl] + inc [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $7 + add hl, bc + ld a, [hl] + cp $80 + ret nc + ld hl, $10 + add hl, bc + ld a, [hl] + and $3 + jr nz, .asm_cdd87 + ld hl, $8 + add hl, bc + dec [hl] +.asm_cdd87 + and $1 + ret nz + ld hl, $7 + add hl, bc + inc [hl] + ret + +; no known jump sources +Functioncdd90: ; cdd90 (33:5d90) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdd93: ; cdd93 (33:5d93) + dw Functioncdd97 + dw Functioncddbc + + +; no known jump sources +Functioncdd97: ; cdd97 (33:5d97) + call Functionce72c + ld hl, $3 + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + and $80 + rlca + ld hl, $f + add hl, bc + add [hl] + call Functionce7bf + ld hl, $b + add hl, bc + ld a, [hl] + and $7f + ld [hl], a + +; no known jump sources +Functioncddbc: ; cddbc (33:5dbc) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $10 + push af + push de + call Functionce734 + sra a + sra a + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + and $3f + jr z, .asm_cddf0 + and $1f + ret nz + ld hl, $f + add hl, bc + ld a, [hl] + inc a + jr .asm_cddf5 +.asm_cddf0 + ld hl, $f + add hl, bc + ld a, [hl] +.asm_cddf5 + call Functionce7bf + ret + +; no known jump sources +Functioncddf9: ; cddf9 (33:5df9) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cddfc: ; cddfc (33:5dfc) + dw Functioncde02 + dw Functioncde20 + dw Functioncde21 + + +; no known jump sources +Functioncde02: ; cde02 (33:5e02) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + add $63 + call Functionce7bf + ld hl, $b + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, $5e25 + add hl, de + ld a, [hl] + ld hl, $a + add hl, bc + ld [hl], a + +; no known jump sources +Functioncde20: ; cde20 (33:5e20) + ret + +; no known jump sources +Functioncde21: ; cde21 (33:5e21) + call Functioncc9bd + ret +; cde25 (33:5e25) + +INCBIN "baserom.gbc",$cde25,$cde28 - $cde25 + +; no known jump sources +Functioncde28: ; cde28 (33:5e28) + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + ld d, $4 + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $a + add hl, bc + ld d, [hl] + ld hl, $10 + add hl, bc + ld e, [hl] + ld hl, $ffa0 + add hl, de + ld e, l + ld d, h + ld hl, $a + add hl, bc + ld [hl], d + ld hl, $10 + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functioncde54: ; cde54 (33:5e54) + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + dec [hl] + ld d, $10 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $7 + add hl, bc + inc [hl] + ret + +; no known jump sources +Functioncde6b: ; cde6b (33:5e6b) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cde6e: ; cde6e (33:5e6e) + dw Functioncde72 + dw Functioncde88 + + +; no known jump sources +Functioncde72: ; cde72 (33:5e72) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + and a + jr nz, .asm_cde83 + ld hl, $1 + add hl, bc + set 6, [hl] +.asm_cde83 + add $6a + call Functionce7bf + +; no known jump sources +Functioncde88: ; cde88 (33:5e88) + ret + +; no known jump sources +Functioncde89: ; cde89 (33:5e89) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cde8c: ; cde8c (33:5e8c) + dw Functioncde90 + dw Functioncdebf + + +; no known jump sources +Functioncde90: ; cde90 (33:5e90) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $0 + ld hl, $b + add hl, bc + ld e, [hl] + ld a, e + and $70 + swap a + ld [hl], a + ld hl, $9 + add hl, bc + ld a, e + and $80 + jr nz, .asm_cdeb2 + ld a, e + and $f + ld [hl], a + ret +.asm_cdeb2 + ld a, e + and $f + xor $ff + inc a + ld [hl], a + ld a, $6e + call Functionce7bf + ret + +; no known jump sources +Functioncdebf: ; cdebf (33:5ebf) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_cdec9 + dec [hl] + ret +.asm_cdec9 + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld [hl], a + ld hl, $9 + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + ret + +; no known jump sources +Functioncdedd: ; cdedd (33:5edd) + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $18 + push af + push de + call Functionce734 + sra a + sra a + sra a + ld hl, $10 + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $7 + ret nz + ld hl, $10 + add hl, bc + ld a, [hl] + cp $28 + jr nc, .asm_cdf17 + inc [hl] + ret +.asm_cdf17 + call Functioncc9bd + ret + +; no known jump sources +Functioncdf1b: ; cdf1b (33:5f1b) + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $18 + push af + push de + call Functionce734 + sra a + sra a + sra a + ld hl, $10 + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $3 + ret nz + ld hl, $10 + add hl, bc + ld a, [hl] + cp $28 + jr nc, .asm_cdf55 + inc [hl] + ret +.asm_cdf55 + call Functioncc9bd + ret + +; no known jump sources +Functioncdf59: ; cdf59 (33:5f59) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_cdf5c: ; cdf5c (33:5f5c) + dw Functioncdf60 + dw Functioncdedd + + +; no known jump sources +Functioncdf60: ; cdf60 (33:5f60) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + jr nc, .asm_cdf88 + inc [hl] + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + ld d, $18 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $7 + add hl, bc + ld a, [hl] + and $1 + ret nz + ld hl, $8 + add hl, bc + dec [hl] + ret +.asm_cdf88 + call Functionce72c + ret + +; no known jump sources +Functioncdf8c: ; cdf8c (33:5f8c) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $18 + push af + push de + call Functionce734 + sra a + sra a + sra a + ld hl, $10 + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + inc [hl] + inc [hl] + ld a, [hl] + and $7 + ret nz + ld hl, $10 + add hl, bc + ld a, [hl] + cp $e8 + jr z, .asm_cdfc7 + dec [hl] + ret +.asm_cdfc7 + call Functioncc9bd + ret + +; no known jump sources +Functioncdfcb: ; cdfcb (33:5fcb) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $18 + push af + push de + call Functionce734 + sra a + sra a + sra a + ld hl, $10 + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + inc [hl] + inc [hl] + ld a, [hl] + and $3 + ret nz + ld hl, $10 + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_ce007 + dec [hl] + dec [hl] + ret +.asm_ce007 + call Functioncc9bd + ret + +; no known jump sources +Functionce00b: ; ce00b (33:600b) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce00e: ; ce00e (33:600e) + dw Functionce014 + dw Functionce023 + dw Functionce05f + + +; no known jump sources +Functionce014: ; ce014 (33:6014) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $34 + ld hl, $10 + add hl, bc + ld [hl], $10 + +; no known jump sources +Functionce023: ; ce023 (33:6023) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $6c + jr c, .asm_ce02d + ret +.asm_ce02d + ld a, $2 + call Functionce70a + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $10 + add hl, bc + ld d, [hl] + call Functionce734 + bit 7, a + jr nz, .asm_ce046 + xor $ff + inc a +.asm_ce046 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + sub $4 + ld [hl], a + and $1f + cp $20 + ret nz + ld hl, $10 + add hl, bc + srl [hl] + ret + +; no known jump sources +Functionce05f: ; ce05f (33:605f) + call Functioncc9bd + ret + +; no known jump sources +Functionce063: ; ce063 (33:6063) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce066: ; ce066 (33:6066) + dw Functionce06e + dw Functionce083 + dw Functionce091 + dw Functionce09e + + +; no known jump sources +Functionce06e: ; ce06e (33:606e) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + ld hl, $8 + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce083: ; ce083 (33:6083) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $58 + ret nc + ld a, $2 + call Functionce70a + ret + +; no known jump sources +Functionce091: ; ce091 (33:6091) + ld hl, $10 + add hl, bc + ld a, [hl] + cp $20 + jr c, Functionce09e + call Functioncc9bd + ret + +; known jump sources: ce098 (33:6098) +Functionce09e: ; ce09e (33:609e) + ld hl, $10 + add hl, bc + ld a, [hl] + ld d, $8 + call Functionce734 + ld hl, $9 + add hl, bc + ld [hl], a + sra a + xor $ff + inc a + ld hl, $f + add hl, bc + add [hl] + ld hl, $8 + add hl, bc + ld [hl], a + ld hl, $10 + add hl, bc + ld a, [hl] + add $8 + ld [hl], a + ret + +; no known jump sources +Functionce0c5: ; ce0c5 (33:60c5) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce0c8: ; ce0c8 (33:60c8) + dw Functionce0ce + dw Functionce0f8 + dw Functionce0dd + + +; no known jump sources +Functionce0ce: ; ce0ce (33:60ce) + ld hl, $b + add hl, bc + ld a, [hl] + and $f0 + swap a + ld hl, $e + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce0dd: ; ce0dd (33:60dd) + ld hl, $f + add hl, bc + ld a, [hl] + ld d, $10 + call Functionce734 + ld hl, $a + add hl, bc + bit 7, a + jr z, .asm_ce0f0 + ld [hl], a +.asm_ce0f0 + ld hl, $f + add hl, bc + ld a, [hl] + sub $4 + ld [hl], a + +; no known jump sources +Functionce0f8: ; ce0f8 (33:60f8) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + jr c, .asm_ce105 + call Functioncc9bd + ret +.asm_ce105 + ld hl, $b + add hl, bc + ld a, [hl] + call Functionce70a + ret + +; no known jump sources +Functionce10e: ; ce10e (33:610e) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce111: ; ce111 (33:6111) + dw Functionce115 + dw Functionce12a + + +; no known jump sources +Functionce115: ; ce115 (33:6115) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $28 + ld hl, $8 + add hl, bc + ld a, [hl] + sub $28 + ld hl, $10 + add hl, bc + ld [hl], a + +; no known jump sources +Functionce12a: ; ce12a (33:612a) + ld hl, $f + add hl, bc + ld a, [hli] + ld d, [hl] + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + ld hl, $b + add hl, bc + and [hl] + jr nz, .asm_ce149 + ld hl, $7 + add hl, bc + dec [hl] +.asm_ce149 + ld hl, $f + add hl, bc + inc [hl] + ld a, [hl] + and $3f + ret nz + ld hl, $f + add hl, bc + ld [hl], $20 + inc hl + srl [hl] + ret + +; no known jump sources +Functionce15c: ; ce15c (33:615c) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld d, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + inc [hl] + ld a, [hl] + and $1 + jr nz, .asm_ce189 + ld hl, $7 + add hl, bc + dec [hl] +.asm_ce189 + ld hl, $b + add hl, bc + ld a, [hl] + and $3 + jr nz, .asm_ce197 + ld hl, $8 + add hl, bc + inc [hl] +.asm_ce197 + ld hl, $7 + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + cp $5a + jr nc, .asm_ce1aa + ld a, [hl] + and a + jr z, .asm_ce1ac + dec [hl] + ret +.asm_ce1aa + inc [hl] + ret +.asm_ce1ac + call Functioncc9bd + ret + +; no known jump sources +Functionce1b0: ; ce1b0 (33:61b0) + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + ld hl, $f + add hl, bc + ld d, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $10 + add hl, bc + ld a, [hl] + inc [hl] + ld hl, $f + add hl, bc + cp $40 + jr nc, .asm_ce1df + inc [hl] + ret +.asm_ce1df + ld a, [hl] + dec [hl] + and a + ret nz + call Functioncc9bd + ret + +; no known jump sources +Functionce1e7: ; ce1e7 (33:61e7) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce1ea: ; ce1ea (33:61ea) + dw Functionce1ee + dw Functionce1fb + + +; no known jump sources +Functionce1ee: ; ce1ee (33:61ee) + call Functionce72c + ld hl, $8 + add hl, bc + ld a, [hl] + ld hl, $10 + add hl, bc + ld [hl], a + +; no known jump sources +Functionce1fb: ; ce1fb (33:61fb) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $30 + call Functionce734 + ld hl, $10 + add hl, bc + add [hl] + ld hl, $8 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + add $8 + ld d, $30 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + inc [hl] + ret + +; no known jump sources +Functionce226: ; ce226 (33:6226) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce229: ; ce229 (33:6229) + dw Functionce22d + dw Functionce254 + + +; no known jump sources +Functionce22d: ; ce22d (33:622d) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $10 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $10 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $10 + add hl, bc + ld [hl], $f + +; no known jump sources +Functionce254: ; ce254 (33:6254) + ret + +; no known jump sources +Functionce255: ; ce255 (33:6255) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce258: ; ce258 (33:6258) + dw Functionce260 + dw Functionce274 + dw Functionce278 + dw Functionce289 + + +; no known jump sources +Functionce260: ; ce260 (33:6260) + call Functionce72c + ld a, [hBattleTurn] ; $ff00+$e4 + and a + jr nz, .asm_ce26c + ld a, $f0 + jr .asm_ce26e +.asm_ce26c + ld a, $cc +.asm_ce26e + ld hl, $f + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce274: ; ce274 (33:6274) + call Functionce29f + ret + +; no known jump sources +Functionce278: ; ce278 (33:6278) + call Functionce29f + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + ret nc + ld a, $4 + call Functionce70a + ret + +; no known jump sources +Functionce289: ; ce289 (33:6289) + call Functionce29f + ld hl, $7 + add hl, bc + ld a, [hl] + cp $d0 + jr nc, .asm_ce29b + ld a, $4 + call Functionce70a + ret +.asm_ce29b + call Functioncc9bd + ret + +; known jump sources: ce274 (33:6274), ce278 (33:6278), ce289 (33:6289) +Functionce29f: ; ce29f (33:629f) + ld hl, $10 + add hl, bc + ld a, [hl] + and $7 + inc [hl] + srl a + ld e, a + ld d, $0 + ld a, [hSGB] ; $ff00+$e7 + and a + jr nz, .asm_ce2b6 + ld hl, $62c4 + jr .asm_ce2b9 +.asm_ce2b6 + ld hl, $62c8 +.asm_ce2b9 + add hl, de + ld a, [hl] + ld hl, $f + add hl, bc + and [hl] + ld [$cfc8], a + ret +; ce2c4 (33:62c4) + +INCBIN "baserom.gbc",$ce2c4,$ce2cc - $ce2c4 + +; no known jump sources +Functionce2cc: ; ce2cc (33:62cc) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $18 + call Functionce734 + sra a + sra a + sra a + ld hl, $10 + add hl, bc + add [hl] + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + ld d, $18 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $10 + add hl, bc + dec [hl] + dec [hl] + ret + +; no known jump sources +Functionce2fd: ; ce2fd (33:62fd) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce300: ; ce300 (33:6300) + dw Functionce306 + dw Functionce330 + dw Functionce34c + + +; no known jump sources +Functionce306: ; ce306 (33:6306) + ld hl, $a + add hl, bc + ld a, [hl] + cp $e0 + jr nz, .asm_ce319 + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $2 + ret +.asm_ce319 + ld d, a + ld hl, $f + add hl, bc + ld e, [hl] + ld hl, hPushOAM ; $ff80 + add hl, de + ld e, l + ld d, h + ld hl, $a + add hl, bc + ld [hl], d + ld hl, $f + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functionce330: ; ce330 (33:6330) + ld hl, $10 + add hl, bc + ld a, [hl] + and a + jr z, .asm_ce33a + dec [hl] + ret +.asm_ce33a + ld [hl], $4 + ld hl, $f + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + ld hl, $a + add hl, bc + add [hl] + ld [hl], a + ret + +; no known jump sources +Functionce34c: ; ce34c (33:634c) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $84 + jr nc, .asm_ce35b + ld a, $4 + call Functionce70a + ret +.asm_ce35b + call Functioncc9bd + ret + +; no known jump sources +Functionce35f: ; ce35f (33:635f) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce362: ; ce362 (33:6362) + dw Functionce366 + dw Functionce375 + + +; no known jump sources +Functionce366: ; ce366 (33:6366) + call Functionce72c + ld hl, $b + add hl, bc + ld a, [hl] + and $7f + add $81 + call Functionce7bf + +; no known jump sources +Functionce375: ; ce375 (33:6375) + ld hl, $b + add hl, bc + bit 7, [hl] + jr nz, .asm_ce383 + ld hl, $9 + add hl, bc + inc [hl] + ret +.asm_ce383 + ld hl, $9 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionce389: ; ce389 (33:6389) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce38c: ; ce38c (33:638c) + dw Functionce392 + dw Functionce39c + dw Functionce3ae + + +; no known jump sources +Functionce392: ; ce392 (33:6392) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $c + ret + +; no known jump sources +Functionce39c: ; ce39c (33:639c) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_ce3a6 + dec [hl] + ret +.asm_ce3a6 + call Functionce72c + ld a, $20 + call Functionce7bf + +; no known jump sources +Functionce3ae: ; ce3ae (33:63ae) + ld hl, $a + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionce3b4: ; ce3b4 (33:63b4) + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + push af + ld d, $2 + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop af + ld d, $8 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce3d2: ; ce3d2 (33:63d2) + ld hl, $a + add hl, bc + ld a, [hl] + cp $20 + jr c, .asm_ce3df + call Functioncc9bd + ret +.asm_ce3df + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $8 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + and $7 + ret nz + ld hl, $a + add hl, bc + inc [hl] + ret + +; no known jump sources +Functionce3ff: ; ce3ff (33:63ff) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce402: ; ce402 (33:6402) + dw Functionce406 + dw Functionce412 + + +; no known jump sources +Functionce406: ; ce406 (33:6406) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $7 + add hl, bc + add [hl] + ld [hl], a + ret + +; no known jump sources +Functionce412: ; ce412 (33:6412) + call Functioncc9bd + ret + +; no known jump sources +Functionce416: ; ce416 (33:6416) + ld hl, $b + add hl, bc + ld a, [hl] + ld d, $18 + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + sra a + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + ret + +; no known jump sources +Functionce43a: ; ce43a (33:643a) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce43d: ; ce43d (33:643d) + dw Functionce443 + dw Functionce465 + dw Functionce490 + + +; no known jump sources +Functionce443: ; ce443 (33:6443) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $28 + ld hl, $b + add hl, bc + ld a, [hl] + and $f + ld hl, $3 + add hl, bc + add [hl] + call Functionce7bf + ld hl, $b + add hl, bc + ld a, [hl] + and $f0 + or $8 + ld [hl], a + +; no known jump sources +Functionce465: ; ce465 (33:6465) + ld hl, $f + add hl, bc + ld a, [hl] + and a + jr z, .asm_ce48b + dec [hl] + add $8 + ld d, a + ld hl, $b + add hl, bc + ld a, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret +.asm_ce48b + ld [hl], $10 + call Functionce72c + +; no known jump sources +Functionce490: ; ce490 (33:6490) + ld hl, $f + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + call Functioncc9bd + ret + +; no known jump sources +Functionce49c: ; ce49c (33:649c) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce49f: ; ce49f (33:649f) + dw Functionce4a3 + dw Functionce4b0 + + +; no known jump sources +Functionce4a3: ; ce4a3 (33:64a3) + call Functionce72c + ld hl, $b + add hl, bc + ld a, $24 + add [hl] + call Functionce7bf + +; no known jump sources +Functionce4b0: ; ce4b0 (33:64b0) + ld hl, $a + add hl, bc + ld a, [hl] + cp $38 + jr nc, .asm_ce4d8 + inc [hl] + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + ld d, $18 + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ld hl, $8 + add hl, bc + ld a, [hl] + and $1 + ret nz + ld hl, $7 + add hl, bc + dec [hl] + ret +.asm_ce4d8 + call Functioncc9bd + ret + +; no known jump sources +Functionce4dc: ; ce4dc (33:64dc) + ld hl, $b + add hl, bc + ld a, [hl] + and a + ret z + ld d, a + ld hl, $f + add hl, bc + ld a, [hl] + inc [hl] + call Functionce734 + bit 7, a + jr nz, .asm_ce4f4 + xor $ff + inc a +.asm_ce4f4 + ld hl, $a + add hl, bc + ld [hl], a + ld hl, $f + add hl, bc + ld a, [hl] + and $1f + ret nz + ld hl, $b + add hl, bc + srl [hl] + ret + +; no known jump sources +Functionce508: ; ce508 (33:6508) + ld hl, $f + add hl, bc + ld a, [hl] + cp $10 + jr nc, .asm_ce52e + inc [hl] + inc [hl] + ld d, a + ld hl, $b + add hl, bc + ld a, [hl] + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret +.asm_ce52e + call Functioncc9bd + ret + +; no known jump sources +Functionce532: ; ce532 (33:6532) + ld hl, $b + add hl, bc + ld e, [hl] + ld hl, $f + add hl, bc + ld d, [hl] + ld a, e + and $c0 + rlca + rlca + add [hl] + ld [hl], a + ld a, e + and $3f + push af + push de + call Functionce734 + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce55b: ; ce55b (33:655b) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce55e: ; ce55e (33:655e) + dw Functionce564 + dw Functionce56e + dw Functionce577 + + +; no known jump sources +Functionce564: ; ce564 (33:6564) + ld d, $18 + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + jr asm_ce58f + +; no known jump sources +Functionce56e: ; ce56e (33:656e) + call Functionce72c + ld hl, $f + add hl, bc + ld [hl], $18 + +; no known jump sources +Functionce577: ; ce577 (33:6577) + ld hl, $f + add hl, bc + ld a, [hl] + cp $80 + jr nc, .asm_ce58b + ld d, a + add $8 + ld [hl], a + ld hl, $b + add hl, bc + ld a, [hl] + jr asm_ce58f +.asm_ce58b + call Functioncc9bd + ret +asm_ce58f: ; ce58f (33:658f) + call Functionce6f1 + ret + +; no known jump sources +Functionce593: ; ce593 (33:6593) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce596: ; ce596 (33:6596) + dw Functionce5b3 + dw Functionce59a + + +; no known jump sources +Functionce59a: ; ce59a (33:659a) + ld hl, $7 + add hl, bc + ld a, [hl] + cp $30 + jr c, .asm_ce5b0 + ld hl, $7 + add hl, bc + dec [hl] + dec [hl] + ld hl, $8 + add hl, bc + inc [hl] + inc [hl] + ret +.asm_ce5b0 + call Functioncc9bd + +; no known jump sources +Functionce5b3: ; ce5b3 (33:65b3) + ret + +; no known jump sources +Functionce5b4: ; ce5b4 (33:65b4) + ld d, $50 + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + inc [hl] + push af + push de + call Functionce734 + sra a + sra a + ld hl, $f + add hl, bc + add [hl] + inc [hl] + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionce5dc: ; ce5dc (33:65dc) + ld hl, $a + add hl, bc + ld a, [hl] + cp $d0 + jr z, .asm_ce5ea + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret +.asm_ce5ea + call Functioncc9bd + ret + +; no known jump sources +Functionce5ee: ; ce5ee (33:65ee) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce5f1: ; ce5f1 (33:65f1) + dw Functionce5f9 + dw Functionce60a + dw Functionce622 + dw Functionce618 + + +; no known jump sources +Functionce5f9: ; ce5f9 (33:65f9) + ld hl, $b + add hl, bc + ld a, [hl] + and a + jr nz, asm_ce61c + call Functionce72c + ld hl, $a + add hl, bc + ld [hl], $ec + +; no known jump sources +Functionce60a: ; ce60a (33:660a) + ld hl, $a + add hl, bc + ld a, [hl] + cp $4 + jr z, Functionce618 + inc [hl] + inc [hl] + inc [hl] + inc [hl] + ret + +; known jump sources: ce611 (33:6611) +Functionce618: ; ce618 (33:6618) + call Functioncc9bd + ret +asm_ce61c: ; ce61c (33:661c) + call Functionce72c + call Functionce72c + +; no known jump sources +Functionce622: ; ce622 (33:6622) + ld hl, $a + add hl, bc + ld a, [hl] + cp $d8 + ret z + dec [hl] + dec [hl] + dec [hl] + dec [hl] + ret + +; no known jump sources +Functionce62f: ; ce62f (33:662f) + call Functionce71e ; ; ; call does not return + +; no known jump sources +Jumptable_ce632: ; ce632 (33:6632) + dw Functionce63a + dw Functionce648 + dw Functionce65c + dw Functionce672 + + +; no known jump sources +Functionce63a: ; ce63a (33:663a) + ld hl, $b + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + call Functionce72c + ret + +; no known jump sources +Functionce648: ; ce648 (33:6648) + ld hl, $a + add hl, bc + ld a, [hl] + add $4 + cp $70 + jr c, .asm_ce654 + xor a +.asm_ce654 + ld [hl], a + ld hl, $9 + add hl, bc + inc [hl] + inc [hl] + ret + +; no known jump sources +Functionce65c: ; ce65c (33:665c) + ld hl, $a + add hl, bc + ld a, [hl] + add $4 + cp $70 + jr c, .asm_ce668 + xor a +.asm_ce668 + ld [hl], a + ld hl, $9 + add hl, bc + ld a, [hl] + add $8 + ld [hl], a + ret + +; no known jump sources +Functionce672: ; ce672 (33:6672) + ld hl, $a + add hl, bc + ld a, [hl] + add $4 + cp $70 + jr c, .asm_ce67e + xor a +.asm_ce67e + ld [hl], a + ld hl, $9 + add hl, bc + ld a, [hl] + add $4 + ld [hl], a + ret + +; no known jump sources +Functionce688: ; ce688 (33:6688) + ld hl, $7 + add hl, bc + ld d, [hl] + ld hl, $f + add hl, bc + ld e, [hl] + ld hl, $b + add hl, bc + ld a, [hl] + ld l, a + and $f0 + ld h, a + swap a + or h + ld h, a + ld a, l + and $f + swap a + ld l, a + add hl, de + ld e, l + ld d, h + ld hl, $7 + add hl, bc + ld [hl], d + ld hl, $f + add hl, bc + ld [hl], e + ret + +; no known jump sources +Functionce6b3: ; ce6b3 (33:66b3) + ld d, $18 + ld hl, $b + add hl, bc + ld a, [hl] + inc [hl] + call Functionce6f1 + ret + +; no known jump sources +Functionce6bf: ; ce6bf (33:66bf) + ld d, $18 + ld hl, $10 + add hl, bc + ld a, [hl] + inc [hl] + srl a + ld hl, $b + add hl, bc + add [hl] + call Functionce6f1 + ret + +; no known jump sources +Functionce6d2: ; ce6d2 (33:66d2) + ld hl, $f + add hl, bc + ld a, [hl] + cp $20 + jr nc, .asm_ce6ed + inc [hl] + ld hl, $b + add hl, bc + ld d, [hl] + call Functionce734 + xor $ff + inc a + ld hl, $a + add hl, bc + ld [hl], a + ret +.asm_ce6ed + call Functioncc9bd + ret + +; known jump sources: ce58f (33:658f), ce6bb (33:66bb), ce6ce (33:66ce) +Functionce6f1: ; ce6f1 (33:66f1) + push af + push de + call Functionce734 + sra a + sra a + ld hl, $a + add hl, bc + ld [hl], a + pop de + pop af + call Functionce732 + ld hl, $9 + add hl, bc + ld [hl], a + ret + +; known jump sources: cd142 (33:5142), cd154 (33:5154), cd2ad (33:52ad), cd553 (33:5553), cd609 (33:5609), cd706 (33:5706), cd733 (33:5733), ce02f (33:602f), ce08d (33:608d), ce10a (33:610a), ce285 (33:6285), ce297 (33:6297), ce357 (33:6357) +Functionce70a: ; ce70a (33:670a) + and $f + ld e, a + ld hl, $7 + add hl, bc + add [hl] + ld [hl], a + srl e + ld hl, $8 + add hl, bc +.asm_ce719 + dec [hl] + dec e + jr nz, .asm_ce719 + ret + +; known jump sources: cd06e (33:506e), cd0e3 (33:50e3), cd12a (33:512a), cd15c (33:515c), cd212 (33:5212), cd284 (33:5284), cd2be (33:52be), cd306 (33:5306), cd3ae (33:53ae), cd3f2 (33:53f2), cd478 (33:5478), cd58a (33:558a), cd5e9 (33:55e9), cd66a (33:566a), cd6e3 (33:56e3), cd71a (33:571a), cd7a4 (33:57a4), cd80c (33:580c), cd824 (33:5824), cd89a (33:589a), cd900 (33:5900), cd954 (33:5954), cda31 (33:5a31), cda4d (33:5a4d), cdad6 (33:5ad6), cdb06 (33:5b06), cdb80 (33:5b80), cdcc3 (33:5cc3), cdd2a (33:5d2a), cdd90 (33:5d90), cddf9 (33:5df9), cde6b (33:5e6b), cde89 (33:5e89), cdf59 (33:5f59), ce00b (33:600b), ce063 (33:6063), ce0c5 (33:60c5), ce10e (33:610e), ce1e7 (33:61e7), ce226 (33:6226), ce255 (33:6255), ce2fd (33:62fd), ce35f (33:635f), ce389 (33:6389), ce3ff (33:63ff), ce43a (33:643a), ce49c (33:649c), ce55b (33:655b), ce593 (33:6593), ce5ee (33:65ee), ce62f (33:662f) +Functionce71e: ; ce71e (33:671e) + pop de + ld hl, $e + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +; known jump sources: cd0ea (33:50ea), cd17a (33:517a), cd192 (33:5192), cd196 (33:5196), cd1ce (33:51ce), cd1e5 (33:51e5), cd20a (33:520a), cd21e (33:521e), cd22f (33:522f), cd2b5 (33:52b5), cd2c5 (33:52c5), cd31e (33:531e), cd321 (33:5321), cd37a (33:537a), cd3b7 (33:53b7), cd42f (33:542f), cd48d (33:548d), cd49f (33:549f), cd545 (33:5545), cd5a1 (33:55a1), cd5f2 (33:55f2), cd60d (33:560d), cd677 (33:5677), cd694 (33:5694), cd6ea (33:56ea), cd725 (33:5725), cd747 (33:5747), cd76e (33:576e), cd7ab (33:57ab), cd817 (33:5817), cd835 (33:5835), cd88f (33:588f), cd8ab (33:58ab), cd8f5 (33:58f5), cd907 (33:5907), cd961 (33:5961), cd977 (33:5977), cda43 (33:5a43), cda58 (33:5a58), cda76 (33:5a76), cda84 (33:5a84), cdadf (33:5adf), cdaf6 (33:5af6), cdb50 (33:5b50), cdbe2 (33:5be2), cdbe6 (33:5be6), cdc23 (33:5c23), cdc44 (33:5c44), cdc4d (33:5c4d), cdc71 (33:5c71), cdca2 (33:5ca2), cdcd9 (33:5cd9), cdd31 (33:5d31), cdd97 (33:5d97), cde02 (33:5e02), cde72 (33:5e72), cde90 (33:5e90), cdf88 (33:5f88), ce014 (33:6014), ce115 (33:6115), ce1ee (33:61ee), ce22d (33:622d), ce260 (33:6260), ce30f (33:630f), ce366 (33:6366), ce392 (33:6392), ce3a6 (33:63a6), ce443 (33:6443), ce48d (33:648d), ce4a3 (33:64a3), ce56e (33:656e), ce601 (33:6601), ce61c (33:661c), ce61f (33:661f), ce644 (33:6644) +Functionce72c: ; ce72c (33:672c) + ld hl, $e + add hl, bc + inc [hl] + ret + +; known jump sources: cd0d2 (33:50d2), cd11c (33:511c), cd33a (33:533a), cd44a (33:544a), cd7f5 (33:57f5), cd929 (33:5929), cd9bb (33:59bb), cdd69 (33:5d69), cddd3 (33:5dd3), cdefb (33:5efb), cdf39 (33:5f39), cdf72 (33:5f72), cdfaa (33:5faa), cdfe9 (33:5fe9), ce172 (33:6172), ce1c7 (33:61c7), ce218 (33:6218), ce246 (33:6246), ce2ee (33:62ee), ce3c9 (33:63c9), ce3e6 (33:63e6), ce429 (33:6429), ce482 (33:6482), ce4c2 (33:64c2), ce525 (33:6525), ce552 (33:6552), ce5d3 (33:65d3), ce701 (33:6701), ce76c (33:676c) +Functionce732: ; ce732 (33:6732) + add $10 + +; known jump sources: cd09c (33:509c), cd0c8 (33:50c8), cd112 (33:5112), cd1ad (33:51ad), cd1f4 (33:51f4), cd2d7 (33:52d7), cd34d (33:534d), cd440 (33:5440), cd4ca (33:54ca), cd502 (33:5502), cd5c5 (33:55c5), cd6a4 (33:56a4), cd711 (33:5711), cd73e (33:573e), cd7eb (33:57eb), cd86a (33:586a), cd8d6 (33:58d6), cd91f (33:591f), cd9a4 (33:59a4), cda90 (33:5a90), cdb77 (33:5b77), cdc30 (33:5c30), cdc5e (33:5c5e), cdc7b (33:5c7b), cdd07 (33:5d07), cdd5f (33:5d5f), cddc5 (33:5dc5), cde31 (33:5e31), cde5d (33:5e5d), cdee6 (33:5ee6), cdf24 (33:5f24), cdf95 (33:5f95), cdfd4 (33:5fd4), ce03c (33:603c), ce0a5 (33:60a5), ce0e4 (33:60e4), ce130 (33:6130), ce168 (33:6168), ce1bd (33:61bd), ce202 (33:6202), ce237 (33:6237), ce2d3 (33:62d3), ce3be (33:63be), ce41f (33:641f), ce478 (33:6478), ce4ea (33:64ea), ce51b (33:651b), ce548 (33:6548), ce5bf (33:65bf), ce6e1 (33:66e1), ce6f3 (33:66f3), ce766 (33:6766) +Functionce734: ; ce734 (33:6734) + and $3f + cp $20 + jr nc, .asm_ce73f + call Functionce749 + ld a, h + ret +.asm_ce73f + and $1f + call Functionce749 + ld a, h + xor $ff + inc a + ret + +; known jump sources: ce73a (33:673a), ce741 (33:6741) +Functionce749: ; ce749 (33:6749) + ld e, a + ld a, d + ld d, $0 + ld hl, $677f + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $0 +.asm_ce758 + srl a + jr nc, .asm_ce75d + add hl, de +.asm_ce75d + sla e + rl d + and a + jr nz, .asm_ce758 + ret + +; no known jump sources +Functionce765: ; ce765 (33:6765) + ld a, e + call Functionce734 + ld e, a + ret + +; no known jump sources +Functionce76b: ; ce76b (33:676b) + ld a, e + call Functionce732 + ld e, a + ret +; ce771 (33:6771) + +INCBIN "baserom.gbc",$ce771,$ce7bf - $ce771 + +; known jump sources: cd18f (33:518f), cd19b (33:519b), cd1cb (33:51cb), cd1d4 (33:51d4), cd1e2 (33:51e2), cd2ba (33:52ba), cd419 (33:5419), cd434 (33:5434), cd4ab (33:54ab), cd53c (33:553c), cd618 (33:5618), cd6f4 (33:56f4), cd74c (33:574c), cd773 (33:5773), cd81c (33:581c), cd883 (33:5883), cd8e8 (33:58e8), cda40 (33:5a40), cda73 (33:5a73), cda89 (33:5a89), cdc20 (33:5c20), cdc3b (33:5c3b), cdc4a (33:5c4a), cdce9 (33:5ce9), cdd4b (33:5d4b), cddb1 (33:5db1), cddf5 (33:5df5), cde0c (33:5e0c), cde85 (33:5e85), cdebb (33:5ebb), ce372 (33:6372), ce3ab (33:63ab), ce458 (33:6458), ce4ad (33:64ad) +Functionce7bf: ; ce7bf (33:67bf) + ld hl, $3 + add hl, bc + ld [hl], a + ld hl, $c + add hl, bc + ld [hl], $0 + ld hl, $d + add hl, bc + ld [hl], $ff + ret + + +Functionce7d1: ; ce7d1 +.asm_ce7d1 + ld hl, $000c + add hl, bc + ld a, [hl] + and a + jr z, .asm_ce7e1 + dec [hl] + call Functionce823 + ld a, [hli] + push af + jr .asm_ce7fd + +.asm_ce7e1 + ld hl, $000d + add hl, bc + inc [hl] + call Functionce823 + ld a, [hli] + cp $fe + jr z, .asm_ce815 + cp $ff + jr z, .asm_ce807 + push af + ld a, [hl] + push hl + and $3f + ld hl, $000c + add hl, bc + ld [hl], a + pop hl + +.asm_ce7fd + ld a, [hl] + and $c0 + srl a + ld [$d420], a + pop af + ret + +.asm_ce807 + xor a + ld hl, $000c + add hl, bc + ld [hl], a + ld hl, $000d + add hl, bc + dec [hl] + dec [hl] + jr .asm_ce7d1 + +.asm_ce815 + xor a + ld hl, $000c + add hl, bc + ld [hl], a + dec a + ld hl, $000d + add hl, bc + ld [hl], a + jr .asm_ce7d1 +; ce823 + +Functionce823: ; ce823 + ld hl, $0003 + add hl, bc + ld e, [hl] + ld d, $0 + ld hl, $685e + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, $000d + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ret +; ce83c + +Functionce83c: ; ce83c + ld l, a + ld h, $0 + ld de, $6eae + add hl, hl + add hl, hl + add hl, de + ret +; ce846 + + +; known jump sources: cc4b0 (33:44b0) +Functionce846: ; ce846 (33:6846) + push hl + 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 Functione73 + pop bc + ret +; ce85e (33:685e) + + +INCBIN "baserom.gbc", $ce85e, $cfcf6 - $ce85e + + +AnimObjGFX: ; cfcf6 + +object_gfx: MACRO +; label, # tiles + db \2 + db BANK(\1) + dw \1 +ENDM + + object_gfx AnimObj00GFX, 0 + object_gfx AnimObj01GFX, 21 + object_gfx AnimObj02GFX, 6 + object_gfx AnimObj03GFX, 6 + object_gfx AnimObj04GFX, 20 + object_gfx AnimObj05GFX, 26 + object_gfx AnimObj06GFX, 18 + object_gfx AnimObj07GFX, 12 + object_gfx AnimObj08GFX, 9 + object_gfx AnimObj09GFX, 17 + object_gfx AnimObj10GFX, 6 + object_gfx AnimObj11GFX, 10 + object_gfx AnimObj12GFX, 9 + object_gfx AnimObj13GFX, 13 + object_gfx AnimObj14GFX, 16 + object_gfx AnimObj15GFX, 2 + object_gfx AnimObj16GFX, 11 + object_gfx AnimObj17GFX, 9 + object_gfx AnimObj18GFX, 9 + object_gfx AnimObj19GFX, 19 + object_gfx AnimObj20GFX, 10 + object_gfx AnimObj21GFX, 12 + object_gfx AnimObj22GFX, 18 + object_gfx AnimObj23GFX, 13 + object_gfx AnimObj24GFX, 10 + object_gfx AnimObj25GFX, 27 + object_gfx AnimObj26GFX, 12 + object_gfx AnimObj27GFX, 14 + object_gfx AnimObj28GFX, 16 + object_gfx AnimObj29GFX, 7 + object_gfx AnimObj30GFX, 8 + object_gfx AnimObj31GFX, 40 + object_gfx AnimObj32GFX, 36 + object_gfx AnimObj33GFX, 16 + object_gfx AnimObj34GFX, 48 + object_gfx AnimObj35GFX, 18 + object_gfx AnimObj36GFX, 38 + object_gfx AnimObj37GFX, 35 + object_gfx AnimObj38GFX, 18 + object_gfx AnimObj39GFX, 24 + object_gfx NULL, 1 + object_gfx NULL, 1 +; cfd9e + diff --git a/battle/anims.asm b/battle/anims.asm new file mode 100644 index 000000000..e3836480b --- /dev/null +++ b/battle/anims.asm @@ -0,0 +1,5310 @@ +BattleAnimations: ; c906f + dw BattleAnim_0 + dw BattleAnim_Pound + dw BattleAnim_KarateChop + dw BattleAnim_Doubleslap + dw BattleAnim_CometPunch + dw BattleAnim_MegaPunch + dw BattleAnim_PayDay + dw BattleAnim_FirePunch + dw BattleAnim_IcePunch + dw BattleAnim_Thunderpunch + dw BattleAnim_Scratch + dw BattleAnim_Vicegrip + dw BattleAnim_Guillotine + dw BattleAnim_RazorWind + dw BattleAnim_SwordsDance + dw BattleAnim_Cut + dw BattleAnim_Gust + dw BattleAnim_WingAttack + dw BattleAnim_Whirlwind + dw BattleAnim_Fly + dw BattleAnim_Bind + dw BattleAnim_Slam + dw BattleAnim_VineWhip + dw BattleAnim_Stomp + dw BattleAnim_DoubleKick + dw BattleAnim_MegaKick + dw BattleAnim_JumpKick + dw BattleAnim_RollingKick + dw BattleAnim_SandAttack + dw BattleAnim_Headbutt + dw BattleAnim_HornAttack + dw BattleAnim_FuryAttack + dw BattleAnim_HornDrill + dw BattleAnim_Tackle + dw BattleAnim_BodySlam + dw BattleAnim_Wrap + dw BattleAnim_TakeDown + dw BattleAnim_Thrash + dw BattleAnim_DoubleEdge + dw BattleAnim_TailWhip + dw BattleAnim_PoisonSting + dw BattleAnim_Twineedle + dw BattleAnim_PinMissile + dw BattleAnim_Leer + dw BattleAnim_Bite + dw BattleAnim_Growl + dw BattleAnim_Roar + dw BattleAnim_Sing + dw BattleAnim_Supersonic + dw BattleAnim_Sonicboom + dw BattleAnim_Disable + dw BattleAnim_Acid + dw BattleAnim_Ember + dw BattleAnim_Flamethrower + dw BattleAnim_Mist + dw BattleAnim_WaterGun + dw BattleAnim_HydroPump + dw BattleAnim_Surf + dw BattleAnim_IceBeam + dw BattleAnim_Blizzard + dw BattleAnim_Psybeam + dw BattleAnim_Bubblebeam + dw BattleAnim_AuroraBeam + dw BattleAnim_HyperBeam + dw BattleAnim_Peck + dw BattleAnim_DrillPeck + dw BattleAnim_Submission + dw BattleAnim_LowKick + dw BattleAnim_Counter + dw BattleAnim_SeismicToss + dw BattleAnim_Strength + dw BattleAnim_Absorb + dw BattleAnim_MegaDrain + dw BattleAnim_LeechSeed + dw BattleAnim_Growth + dw BattleAnim_RazorLeaf + dw BattleAnim_Solarbeam + dw BattleAnim_Poisonpowder + dw BattleAnim_StunSpore + dw BattleAnim_SleepPowder + dw BattleAnim_PetalDance + dw BattleAnim_StringShot + dw BattleAnim_DragonRage + dw BattleAnim_FireSpin + dw BattleAnim_Thundershock + dw BattleAnim_Thunderbolt + dw BattleAnim_ThunderWave + dw BattleAnim_Thunder + dw BattleAnim_RockThrow + dw BattleAnim_Earthquake + dw BattleAnim_Fissure + dw BattleAnim_Dig + dw BattleAnim_Toxic + dw BattleAnim_Confusion + dw BattleAnim_PsychicM + dw BattleAnim_Hypnosis + dw BattleAnim_Meditate + dw BattleAnim_Agility + dw BattleAnim_QuickAttack + dw BattleAnim_Rage + dw BattleAnim_Teleport + dw BattleAnim_NightShade + dw BattleAnim_Mimic + dw BattleAnim_Screech + dw BattleAnim_DoubleTeam + dw BattleAnim_Recover + dw BattleAnim_Harden + dw BattleAnim_Minimize + dw BattleAnim_Smokescreen + dw BattleAnim_ConfuseRay + dw BattleAnim_Withdraw + dw BattleAnim_DefenseCurl + dw BattleAnim_Barrier + dw BattleAnim_LightScreen + dw BattleAnim_Haze + dw BattleAnim_Reflect + dw BattleAnim_FocusEnergy + dw BattleAnim_Bide + dw BattleAnim_Metronome + dw BattleAnim_MirrorMove + dw BattleAnim_Selfdestruct + dw BattleAnim_EggBomb + dw BattleAnim_Lick + dw BattleAnim_Smog + dw BattleAnim_Sludge + dw BattleAnim_BoneClub + dw BattleAnim_FireBlast + dw BattleAnim_Waterfall + dw BattleAnim_Clamp + dw BattleAnim_Swift + dw BattleAnim_SkullBash + dw BattleAnim_SpikeCannon + dw BattleAnim_Constrict + dw BattleAnim_Amnesia + dw BattleAnim_Kinesis + dw BattleAnim_Softboiled + dw BattleAnim_HiJumpKick + dw BattleAnim_Glare + dw BattleAnim_DreamEater + dw BattleAnim_PoisonGas + dw BattleAnim_Barrage + dw BattleAnim_LeechLife + dw BattleAnim_LovelyKiss + dw BattleAnim_SkyAttack + dw BattleAnim_Transform + dw BattleAnim_Bubble + dw BattleAnim_DizzyPunch + dw BattleAnim_Spore + dw BattleAnim_Flash + dw BattleAnim_Psywave + dw BattleAnim_Splash + dw BattleAnim_AcidArmor + dw BattleAnim_Crabhammer + dw BattleAnim_Explosion + dw BattleAnim_FurySwipes + dw BattleAnim_Bonemerang + dw BattleAnim_Rest + dw BattleAnim_RockSlide + dw BattleAnim_HyperFang + dw BattleAnim_Sharpen + dw BattleAnim_Conversion + dw BattleAnim_TriAttack + dw BattleAnim_SuperFang + dw BattleAnim_Slash + dw BattleAnim_Substitute + dw BattleAnim_Struggle + dw BattleAnim_Sketch + dw BattleAnim_TripleKick + dw BattleAnim_Thief + dw BattleAnim_SpiderWeb + dw BattleAnim_MindReader + dw BattleAnim_Nightmare + dw BattleAnim_FlameWheel + dw BattleAnim_Snore + dw BattleAnim_Curse + dw BattleAnim_Flail + dw BattleAnim_Conversion2 + dw BattleAnim_Aeroblast + dw BattleAnim_CottonSpore + dw BattleAnim_Reversal + dw BattleAnim_Spite + dw BattleAnim_PowderSnow + dw BattleAnim_Protect + dw BattleAnim_MachPunch + dw BattleAnim_ScaryFace + dw BattleAnim_FaintAttack + dw BattleAnim_SweetKiss + dw BattleAnim_BellyDrum + dw BattleAnim_SludgeBomb + dw BattleAnim_MudSlap + dw BattleAnim_Octazooka + dw BattleAnim_Spikes + dw BattleAnim_ZapCannon + dw BattleAnim_Foresight + dw BattleAnim_DestinyBond + dw BattleAnim_PerishSong + dw BattleAnim_IcyWind + dw BattleAnim_Detect + dw BattleAnim_BoneRush + dw BattleAnim_LockOn + dw BattleAnim_Outrage + dw BattleAnim_Sandstorm + dw BattleAnim_GigaDrain + dw BattleAnim_Endure + dw BattleAnim_Charm + dw BattleAnim_Rollout + dw BattleAnim_FalseSwipe + dw BattleAnim_Swagger + dw BattleAnim_MilkDrink + dw BattleAnim_Spark + dw BattleAnim_FuryCutter + dw BattleAnim_SteelWing + dw BattleAnim_MeanLook + dw BattleAnim_Attract + dw BattleAnim_SleepTalk + dw BattleAnim_HealBell + dw BattleAnim_Return + dw BattleAnim_Present + dw BattleAnim_Frustration + dw BattleAnim_Safeguard + dw BattleAnim_PainSplit + dw BattleAnim_SacredFire + dw BattleAnim_Magnitude + dw BattleAnim_Dynamicpunch + dw BattleAnim_Megahorn + dw BattleAnim_Dragonbreath + dw BattleAnim_BatonPass + dw BattleAnim_Encore + dw BattleAnim_Pursuit + dw BattleAnim_RapidSpin + dw BattleAnim_SweetScent + dw BattleAnim_IronTail + dw BattleAnim_MetalClaw + dw BattleAnim_VitalThrow + dw BattleAnim_MorningSun + dw BattleAnim_Synthesis + dw BattleAnim_Moonlight + dw BattleAnim_HiddenPower + dw BattleAnim_CrossChop + dw BattleAnim_Twister + dw BattleAnim_RainDance + dw BattleAnim_SunnyDay + dw BattleAnim_Crunch + dw BattleAnim_MirrorCoat + dw BattleAnim_PsychUp + dw BattleAnim_Extremespeed + dw BattleAnim_Ancientpower + dw BattleAnim_ShadowBall + dw BattleAnim_FutureSight + dw BattleAnim_RockSmash + dw BattleAnim_Whirlpool + dw BattleAnim_BeatUp + dw BattleAnim_252 + dw BattleAnim_253 + dw BattleAnim_254 + dw BattleAnim_SweetScent2 + dw BattleAnim_ThrowPokeBall + dw BattleAnim_SendOutMon + dw BattleAnim_ReturnMon + dw BattleAnim_Confused + dw BattleAnim_Slp + dw BattleAnim_Brn + dw BattleAnim_Psn + dw BattleAnim_Sap + dw BattleAnim_Frz + dw BattleAnim_Par + dw BattleAnim_InLove + dw BattleAnim_InSandstorm + dw BattleAnim_InNightmare + dw BattleAnim_InWhirlpool + dw BattleAnim_Miss + dw BattleAnim_EnemyDamage + dw BattleAnim_EnemyStatDown + dw BattleAnim_PlayerStatDown + dw BattleAnim_PlayerDamage + dw BattleAnim_Wobble + dw BattleAnim_Shake + dw BattleAnim_HitConfusion +; c929b + +BattleAnim_0: ; c929b +BattleAnim_252: ; c929b +BattleAnim_253: ; c929b +BattleAnim_254: ; c929b +BattleAnim_MirrorMove: ; c929b + anim_ret +; c929c + +BattleAnim_SweetScent2: ; c929c + anim_2gfx ANIM_GFX_FLOWER, ANIM_GFX_MISC + anim_obj ANIM_OBJ_FLOWER, 64, 96, $2 + anim_wait 2 + anim_obj ANIM_OBJ_FLOWER, 64, 80, $2 + anim_wait 64 + anim_obj ANIM_OBJ_COTTON, 136, 40, $15 + anim_obj ANIM_OBJ_COTTON, 136, 40, $2a + anim_obj ANIM_OBJ_COTTON, 136, 40, $3f + anim_bgeffect $6, $0, $2, $0 + anim_wait 128 + anim_ret +; c92c1 + +BattleAnim_ThrowPokeBall: ; c92c1 + anim_jumpif $0, BattleAnim_ThrowPokeBall_branch_c92f2 + anim_jumpif $1, BattleAnim_ThrowPokeBall_branch_c9347 + anim_jumpif $2, BattleAnim_ThrowPokeBall_branch_c9305 + anim_jumpif $4, BattleAnim_ThrowPokeBall_branch_c9326 + anim_2gfx ANIM_GFX_POKE_BALL, ANIM_GFX_SMOKE + anim_sound $1a, SFX_THROW_BALL + anim_obj $15, 68, 92, $40 + anim_wait 36 + anim_obj $15, 136, 65, $0 + anim_setobj $2, $7 + anim_wait 16 + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 136, 64, $10 + anim_wait 16 + anim_jump BattleAnim_ThrowPokeBall_branch_c9392 +; c92f2 + +BattleAnim_ThrowPokeBall_branch_c92f2: ; c92f2 + anim_2gfx ANIM_GFX_POKE_BALL, ANIM_GFX_HIT + anim_sound $1a, SFX_THROW_BALL + anim_obj $16, 64, 92, $20 + anim_wait 20 + anim_obj $1, 112, 40, $0 + anim_wait 32 + anim_ret +; c9305 + +BattleAnim_ThrowPokeBall_branch_c9305: ; c9305 + anim_2gfx ANIM_GFX_POKE_BALL, ANIM_GFX_SMOKE + anim_sound $1a, SFX_THROW_BALL + anim_obj $15, 68, 92, $40 + anim_wait 36 + anim_obj $15, 136, 65, $0 + anim_setobj $2, $7 + anim_wait 16 + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 136, 64, $10 + anim_wait 16 + anim_jump BattleAnim_ThrowPokeBall_branch_c9392 +; c9326 + +BattleAnim_ThrowPokeBall_branch_c9326: ; c9326 + anim_2gfx ANIM_GFX_POKE_BALL, ANIM_GFX_SMOKE + anim_sound $1a, SFX_THROW_BALL + anim_obj $15, 68, 92, $40 + anim_wait 36 + anim_obj $15, 136, 65, $0 + anim_setobj $2, $7 + anim_wait 16 + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 136, 64, $10 + anim_wait 16 + anim_jump BattleAnim_ThrowPokeBall_branch_c9392 +; c9347 + +BattleAnim_ThrowPokeBall_branch_c9347: ; c9347 + anim_3gfx ANIM_GFX_POKE_BALL, ANIM_GFX_SMOKE, ANIM_GFX_SPEED + anim_sound $1a, SFX_THROW_BALL + anim_obj $15, 64, 92, $20 + anim_wait 36 + anim_obj $15, 136, 65, $0 + anim_setobj $2, $7 + anim_wait 16 + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 136, 64, $10 + anim_wait 24 + anim_sound $1, SFX_MASTER_BALL + anim_obj $2b, 136, 56, $30 + anim_obj $2b, 136, 56, $31 + anim_obj $2b, 136, 56, $32 + anim_obj $2b, 136, 56, $33 + anim_obj $2b, 136, 56, $34 + anim_obj $2b, 136, 56, $35 + anim_obj $2b, 136, 56, $36 + anim_obj $2b, 136, 56, $37 + anim_wait 64 +BattleAnim_ThrowPokeBall_branch_c9392: ; c9392 + anim_bgeffect ANIM_BG_RETURN_MON, $0, $0, $0 + anim_wait 8 + anim_incobj $2 + anim_wait 16 + anim_sound $1, SFX_CHANGE_DEX_MODE + anim_incobj $1 + anim_wait 32 + anim_sound $1, SFX_BALL_BOUNCE + anim_wait 32 + anim_wait 32 + anim_wait 32 + anim_wait 8 + anim_setvar $0 +BattleAnim_ThrowPokeBall_branch_c93aa: ; c93aa + anim_wait 48 + anim_checkpokeball + anim_jumpvar $1, BattleAnim_ThrowPokeBall_branch_c93bc + anim_jumpvar $2, BattleAnim_ThrowPokeBall_branch_c93be + anim_incobj $1 + anim_sound $1, SFX_BALL_WIGGLE + anim_jump BattleAnim_ThrowPokeBall_branch_c93aa +; c93bc + +BattleAnim_ThrowPokeBall_branch_c93bc: ; c93bc + anim_clearsprites + anim_ret +; c93be + +BattleAnim_ThrowPokeBall_branch_c93be: ; c93be + anim_setobj $1, $b + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 136, 64, $10 + anim_wait 2 + anim_bgeffect ANIM_BG_ENTER_MON, $0, $0, $0 + anim_wait 32 + anim_ret +; c93d1 + +BattleAnim_SendOutMon: ; c93d1 + anim_jumpif $0, BattleAnim_SendOutMon_branch_c9471 + anim_jumpif $1, BattleAnim_SendOutMon_branch_c941c + anim_jumpif $2, BattleAnim_SendOutMon_branch_c93fa + anim_1gfx ANIM_GFX_SMOKE + anim_call BattleAnim_SendOutMon_branch_cbca7 + anim_bgeffect $2b, $0, $1, $0 + anim_sound $0, SFX_BALL_POOF + anim_obj $1b, 48, 96, $0 + anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0 + anim_wait 128 + anim_wait 4 + anim_call BattleAnim_SendOutMon_branch_cbcb7 + anim_ret +; c93fa + +BattleAnim_SendOutMon_branch_c93fa: ; c93fa + anim_1gfx ANIM_GFX_SMOKE + anim_call BattleAnim_SendOutMon_branch_cbca7 + anim_bgeffect $2a, $0, $1, $0 + anim_wait 1 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 4 + anim_sound $0, SFX_BALL_POOF + anim_obj $1b, 48, 96, $0 + anim_incbgeffect $2a + anim_wait 96 + anim_incbgeffect $2a + anim_call BattleAnim_SendOutMon_branch_cbcb7 + anim_ret +; c941c + +BattleAnim_SendOutMon_branch_c941c: ; c941c + anim_1gfx ANIM_GFX_SPEED + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $3 + anim_bgeffect $6, $0, $2, $0 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $0 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $8 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $10 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $18 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $20 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $28 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $30 + anim_wait 4 + anim_sound $0, SFX_SHINE + anim_obj $6d, 48, 96, $38 + anim_wait 32 + anim_ret +; c9471 + +BattleAnim_SendOutMon_branch_c9471: ; c9471 + anim_1gfx ANIM_GFX_SMOKE + anim_sound $0, SFX_BALL_POOF + anim_obj $1c, 44, 96, $0 + anim_wait 4 + anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; c9483 + +BattleAnim_ReturnMon: ; c9483 + anim_sound $0, SFX_BALL_POOF +BattleAnim_BatonPass_branch_c9486: ; c9486 + anim_bgeffect ANIM_BG_RETURN_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; c948d + +BattleAnim_Confused: ; c948d + anim_1gfx ANIM_GFX_STATUS + anim_sound $0, SFX_KINESIS + anim_obj ANIM_OBJ_CHICK, 44, 56, $15 + anim_obj ANIM_OBJ_CHICK, 44, 56, $aa + anim_obj ANIM_OBJ_CHICK, 44, 56, $bf + anim_wait 96 + anim_ret +; c94a3 + +BattleAnim_Slp: ; c94a3 + anim_1gfx ANIM_GFX_STATUS + anim_sound $0, SFX_TAIL_WHIP +BattleAnim_Slp_branch_c94a8: ; c94a8 + anim_obj $54, 64, 80, $0 + anim_wait 40 + anim_loop $3, BattleAnim_Slp_branch_c94a8 + anim_wait 32 + anim_ret +; c94b4 + +BattleAnim_Brn: ; c94b4 + anim_1gfx ANIM_GFX_FIRE +BattleAnim_Brn_branch_c94b6: ; c94b6 + anim_sound $0, SFX_BURN + anim_obj $10, 56, 88, $10 + anim_wait 4 + anim_loop $3, BattleAnim_Brn_branch_c94b6 + anim_wait 6 + anim_ret +; c94c5 + +BattleAnim_Psn: ; c94c5 + anim_1gfx ANIM_GFX_POISON + anim_sound $0, SFX_POISON + anim_obj ANIM_OBJ_SKULL, 64, 56, $0 + anim_wait 8 + anim_sound $0, SFX_POISON + anim_obj ANIM_OBJ_SKULL, 48, 56, $0 + anim_wait 8 + anim_ret +; c94da + +BattleAnim_Sap: ; c94da + anim_1gfx ANIM_GFX_CHARGE + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 128, 48, $2 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 64, $3 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 32, $4 + anim_wait 16 + anim_ret +; c94f8 + +BattleAnim_Frz: ; c94f8 + anim_1gfx ANIM_GFX_ICE + anim_obj ANIM_OBJ_FROZEN, 44, 110, $0 + anim_sound $0, SFX_SHINE + anim_wait 16 + anim_sound $0, SFX_SHINE + anim_wait 16 + anim_ret +; c9508 + +BattleAnim_Par: ; c9508 + anim_1gfx ANIM_GFX_STATUS + anim_bgeffect $6, $0, $2, $0 + anim_sound $0, SFX_THUNDERSHOCK + anim_obj ANIM_OBJ_PARALYZED, 20, 88, $42 + anim_obj ANIM_OBJ_PARALYZED, 76, 88, $c2 + anim_wait 128 + anim_ret +; c951e + +BattleAnim_InLove: ; c951e + anim_1gfx ANIM_GFX_OBJECTS + anim_sound $0, SFX_LICK + anim_obj ANIM_OBJ_HEART, 64, 76, $0 + anim_wait 32 + anim_sound $0, SFX_LICK + anim_obj ANIM_OBJ_HEART, 36, 72, $0 + anim_wait 32 + anim_ret +; c9533 + +BattleAnim_InSandstorm: ; c9533 + anim_1gfx ANIM_GFX_POWDER + anim_obj $a2, 88, 0, $0 + anim_wait 8 + anim_obj $a2, 72, 0, $1 + anim_wait 8 + anim_obj $a2, 56, 0, $2 +BattleAnim_InSandstorm_branch_c9546: ; c9546 + anim_sound $1, SFX_MENU + anim_wait 8 + anim_loop $6, BattleAnim_InSandstorm_branch_c9546 + anim_wait 8 + anim_ret +; c9550 + +BattleAnim_InNightmare: ; c9550 + anim_1gfx ANIM_GFX_ANGELS + anim_sound $0, SFX_BUBBLEBEAM + anim_obj $95, 68, 80, $0 + anim_wait 40 + anim_ret +; c955c + +BattleAnim_InWhirlpool: ; c955c + anim_1gfx ANIM_GFX_WIND + anim_bgeffect ANIM_BG_WHIRLPOOL, $0, $0, $0 + anim_sound $1, SFX_SURF +BattleAnim_InWhirlpool_branch_c9566: ; c9566 + anim_obj ANIM_OBJ_GUST, 132, 72, $0 + anim_wait 6 + anim_loop $6, BattleAnim_InWhirlpool_branch_c9566 + anim_incbgeffect ANIM_BG_WHIRLPOOL + anim_wait 1 + anim_ret +; c9574 + +BattleAnim_HitConfusion: ; c9574 + anim_1gfx ANIM_GFX_HIT + anim_sound $0, SFX_POUND + anim_obj $4, 44, 96, $0 + anim_wait 16 + anim_ret +; c9580 + +BattleAnim_Miss: ; c9580 + anim_ret +; c9581 + +BattleAnim_EnemyDamage: ; c9581 +BattleAnim_EnemyDamage_branch_c9581: ; c9581 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $0, $0 + anim_wait 5 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 5 + anim_loop $3, BattleAnim_EnemyDamage_branch_c9581 + anim_ret +; c9592 + +BattleAnim_EnemyStatDown: ; c9592 + anim_call BattleAnim_EnemyStatDown_branch_cbcc2 + anim_bgeffect ANIM_BG_VIBRATE_MON, $0, $0, $0 + anim_wait 40 + anim_call BattleAnim_EnemyStatDown_branch_cbcd2 + anim_wait 1 + anim_ret +; c95a0 + +BattleAnim_PlayerStatDown: ; c95a0 + anim_call BattleAnim_PlayerStatDown_branch_cbcc2 + anim_bgeffect ANIM_BG_WOBBLE_MON, $0, $0, $0 + anim_wait 40 + anim_call BattleAnim_PlayerStatDown_branch_cbcd2 + anim_wait 1 + anim_ret +; c95ae + +BattleAnim_PlayerDamage: ; c95ae + anim_bgeffect $20, $20, $2, $20 + anim_wait 40 + anim_ret +; c95b5 + +BattleAnim_Wobble: ; c95b5 + anim_bgeffect $35, $0, $0, $0 + anim_wait 40 + anim_ret +; c95bc + +BattleAnim_Shake: ; c95bc + anim_bgeffect $1f, $20, $2, $40 + anim_wait 40 + anim_ret +; c95c3 + +BattleAnim_Pound: ; c95c3 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_POUND + anim_obj $8, 136, 56, $0 + anim_wait 6 + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; c95d5 + +BattleAnim_KarateChop: ; c95d5 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_KARATE_CHOP + anim_obj $8, 136, 40, $0 + anim_wait 6 + anim_obj $1, 136, 40, $0 + anim_wait 6 + anim_sound $1, SFX_KARATE_CHOP + anim_obj $8, 136, 44, $0 + anim_wait 6 + anim_obj $1, 136, 44, $0 + anim_wait 6 + anim_sound $1, SFX_KARATE_CHOP + anim_obj $8, 136, 48, $0 + anim_wait 6 + anim_obj $1, 136, 48, $0 + anim_wait 16 + anim_ret +; c9605 + +BattleAnim_Doubleslap: ; c9605 + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_Doubleslap_branch_c961b + anim_sound $1, SFX_DOUBLESLAP + anim_obj $8, 144, 48, $0 + anim_wait 6 + anim_obj $1, 144, 48, $0 + anim_wait 8 + anim_ret +; c961b + +BattleAnim_Doubleslap_branch_c961b: ; c961b + anim_sound $1, SFX_DOUBLESLAP + anim_obj $8, 120, 48, $0 + anim_wait 6 + anim_obj $1, 120, 48, $0 + anim_wait 8 + anim_ret +; c962b + +BattleAnim_CometPunch: ; c962b + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_CometPunch_branch_c9641 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $6, 144, 48, $0 + anim_wait 6 + anim_obj $1, 144, 48, $0 + anim_wait 8 + anim_ret +; c9641 + +BattleAnim_CometPunch_branch_c9641: ; c9641 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $6, 120, 64, $0 + anim_wait 6 + anim_obj $1, 120, 64, $0 + anim_wait 8 + anim_ret +; c9651 + +BattleAnim_Bide_branch_c9651: ; c9651 +BattleAnim_MegaPunch: ; c9651 + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_wait 48 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 +BattleAnim_Bide_branch_c965e: ; c965e +BattleAnim_MegaPunch_branch_c965e: ; c965e + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $6, 136, 56, $0 + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_obj $6, 136, 56, $0 + anim_wait 6 + anim_loop $3, BattleAnim_Bide_branch_c965e + anim_ret +; c9677 + +BattleAnim_Stomp: ; c9677 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_STOMP + anim_obj $7, 136, 40, $0 + anim_wait 6 + anim_obj $1, 136, 40, $0 + anim_wait 6 + anim_sound $1, SFX_STOMP + anim_obj $7, 136, 44, $0 + anim_wait 6 + anim_obj $1, 136, 44, $0 + anim_wait 6 + anim_sound $1, SFX_STOMP + anim_obj $7, 136, 48, $0 + anim_wait 6 + anim_obj $1, 136, 48, $0 + anim_wait 16 + anim_ret +; c96a7 + +BattleAnim_DoubleKick: ; c96a7 + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_DoubleKick_branch_c96bd + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 144, 48, $0 + anim_wait 6 + anim_obj $1, 144, 48, $0 + anim_wait 8 + anim_ret +; c96bd + +BattleAnim_DoubleKick_branch_c96bd: ; c96bd + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 120, 64, $0 + anim_wait 6 + anim_obj $1, 120, 64, $0 + anim_wait 8 + anim_ret +; c96cd + +BattleAnim_JumpKick: ; c96cd + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_JumpKick_branch_c96f1 + anim_sound $1, SFX_JUMP_KICK + anim_obj $7, 112, 72, $0 + anim_obj $7, 100, 60, $0 + anim_setobj $1, $2 + anim_setobj $2, $2 + anim_wait 24 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $4, 136, 48, $0 + anim_wait 16 + anim_ret +; c96f1 + +BattleAnim_JumpKick_branch_c96f1: ; c96f1 + anim_wait 8 + anim_sound $0, SFX_DOUBLE_KICK + anim_obj $4, 44, 88, $0 + anim_wait 16 + anim_ret +; c96fc + +BattleAnim_HiJumpKick: ; c96fc + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_jumpif $1, BattleAnim_HiJumpKick_branch_c971e + anim_wait 32 + anim_sound $1, SFX_JUMP_KICK + anim_obj $7, 112, 72, $0 + anim_setobj $1, $2 + anim_wait 16 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $4, 136, 48, $0 + anim_wait 16 + anim_ret +; c971e + +BattleAnim_HiJumpKick_branch_c971e: ; c971e + anim_wait 16 + anim_sound $0, SFX_DOUBLE_KICK + anim_obj $4, 44, 88, $0 + anim_wait 16 + anim_ret +; c9729 + +BattleAnim_RollingKick: ; c9729 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 112, 56, $0 + anim_setobj $1, $3 + anim_wait 12 + anim_obj $1, 136, 48, $0 + anim_wait 16 + anim_ret +; c973e + +BattleAnim_MegaKick: ; c973e + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_wait 67 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 +BattleAnim_MegaKick_branch_c974b: ; c974b + anim_sound $1, SFX_MEGA_KICK + anim_obj $7, 136, 56, $0 + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_obj $7, 136, 56, $0 + anim_wait 6 + anim_loop $3, BattleAnim_MegaKick_branch_c974b + anim_ret +; c9764 + +BattleAnim_HyperFang: ; c9764 + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $20, $1, $0 + anim_sound $1, SFX_BITE + anim_obj $9, 136, 56, $0 + anim_wait 6 + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; c977b + +BattleAnim_SuperFang: ; c977b + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_wait 48 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 +BattleAnim_SuperFang_branch_c9788: ; c9788 + anim_sound $1, SFX_BITE + anim_obj $9, 136, 56, $0 + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_obj $9, 136, 56, $0 + anim_wait 6 + anim_loop $3, BattleAnim_SuperFang_branch_c9788 + anim_ret +; c97a1 + +BattleAnim_Ember: ; c97a1 + anim_1gfx ANIM_GFX_FIRE + anim_sound $1a, SFX_EMBER + anim_obj $b, 64, 96, $12 + anim_wait 4 + anim_sound $1a, SFX_EMBER + anim_obj $b, 64, 100, $14 + anim_wait 4 + anim_sound $1a, SFX_EMBER + anim_obj $b, 64, 84, $13 + anim_wait 16 + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_sound $1, SFX_EMBER + anim_obj $b, 120, 68, $30 + anim_obj $b, 132, 68, $30 + anim_obj $b, 144, 68, $30 + anim_wait 32 + anim_ret +; c97d8 + +BattleAnim_FirePunch: ; c97d8 + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_FIRE + anim_obj $a, 136, 56, $43 + anim_call BattleAnim_FirePunch_branch_cbbcc + anim_wait 16 + anim_ret +; c97e5 + +BattleAnim_FireSpin: ; c97e5 + anim_1gfx ANIM_GFX_FIRE +BattleAnim_FireSpin_branch_c97e7: ; c97e7 + anim_sound $1a, SFX_EMBER + anim_obj $e, 64, 88, $4 + anim_wait 2 + anim_sound $1a, SFX_EMBER + anim_obj $e, 64, 96, $3 + anim_wait 2 + anim_sound $1a, SFX_EMBER + anim_obj $e, 64, 88, $3 + anim_wait 2 + anim_sound $1a, SFX_EMBER + anim_obj $e, 64, 96, $4 + anim_wait 2 + anim_loop $2, BattleAnim_FireSpin_branch_c97e7 + anim_wait 96 + anim_ret +; c9811 + +BattleAnim_DragonRage: ; c9811 + anim_1gfx ANIM_GFX_FIRE +BattleAnim_DragonRage_branch_c9813: ; c9813 + anim_sound $1a, SFX_EMBER + anim_obj $c, 64, 92, $0 + anim_wait 3 + anim_loop $10, BattleAnim_DragonRage_branch_c9813 + anim_wait 64 + anim_ret +; c9822 + +BattleAnim_Flamethrower: ; c9822 + anim_1gfx ANIM_GFX_FIRE + anim_sound $1a, SFX_EMBER + anim_obj $d, 64, 92, $3 + anim_wait 2 + anim_obj $d, 75, 86, $5 + anim_wait 2 + anim_obj $d, 85, 81, $7 + anim_wait 2 + anim_obj $d, 96, 76, $9 + anim_wait 2 + anim_obj $d, 106, 71, $b + anim_wait 2 + anim_obj $d, 116, 66, $c + anim_wait 2 + anim_obj $d, 126, 61, $a + anim_wait 2 + anim_obj $d, 136, 56, $8 + anim_wait 16 +BattleAnim_Flamethrower_branch_c9857: ; c9857 + anim_sound $1, SFX_EMBER + anim_wait 16 + anim_loop $6, BattleAnim_Flamethrower_branch_c9857 + anim_wait 16 + anim_ret +; c9861 + +BattleAnim_FireBlast: ; c9861 + anim_1gfx ANIM_GFX_FIRE +BattleAnim_FireBlast_branch_c9863: ; c9863 + anim_sound $1a, SFX_EMBER + anim_obj $f, 64, 92, $7 + anim_wait 6 + anim_loop $a, BattleAnim_FireBlast_branch_c9863 +BattleAnim_FireBlast_branch_c9870: ; c9870 + anim_sound $1, SFX_EMBER + anim_wait 8 + anim_loop $a, BattleAnim_FireBlast_branch_c9870 + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_incobj $7 + anim_incobj $8 + anim_incobj $9 + anim_incobj $a + anim_wait 2 +BattleAnim_FireBlast_branch_c988d: ; c988d + anim_sound $1, SFX_EMBER + anim_obj $f, 136, 56, $1 + anim_obj $f, 136, 56, $2 + anim_obj $f, 136, 56, $3 + anim_obj $f, 136, 56, $4 + anim_obj $f, 136, 56, $5 + anim_wait 16 + anim_loop $2, BattleAnim_FireBlast_branch_c988d + anim_wait 32 + anim_ret +; c98b0 + +BattleAnim_IcePunch: ; c98b0 + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_ICE + anim_obj $a, 136, 56, $43 + anim_call BattleAnim_IcePunch_branch_cbbdf + anim_wait 32 + anim_ret +; c98bd + +BattleAnim_IceBeam: ; c98bd + anim_1gfx ANIM_GFX_ICE +BattleAnim_IceBeam_branch_c98bf: ; c98bf + anim_sound $1a, SFX_SHINE + anim_obj $13, 64, 92, $4 + anim_wait 4 + anim_loop $5, BattleAnim_IceBeam_branch_c98bf + anim_obj $29, 136, 74, $10 +BattleAnim_IceBeam_branch_c98d1: ; c98d1 + anim_sound $1a, SFX_SHINE + anim_obj $13, 64, 92, $4 + anim_wait 4 + anim_loop $f, BattleAnim_IceBeam_branch_c98d1 + anim_wait 48 + anim_sound $1, SFX_SHINE + anim_wait 8 + anim_sound $1, SFX_SHINE + anim_wait 8 + anim_ret +; c98e8 + +BattleAnim_Blizzard: ; c98e8 + anim_1gfx ANIM_GFX_ICE +BattleAnim_Blizzard_branch_c98ea: ; c98ea + anim_sound $1a, SFX_SHINE + anim_obj $11, 64, 88, $63 + anim_wait 2 + anim_sound $1a, SFX_SHINE + anim_obj $11, 64, 80, $64 + anim_wait 2 + anim_sound $1a, SFX_SHINE + anim_obj $11, 64, 96, $63 + anim_wait 2 + anim_loop $3, BattleAnim_Blizzard_branch_c98ea + anim_bgeffect ANIM_BG_WHITE_HUES, $0, $8, $0 + anim_wait 32 + anim_obj $29, 136, 74, $10 + anim_wait 128 + anim_sound $1, SFX_SHINE + anim_wait 8 + anim_sound $1, SFX_SHINE + anim_wait 24 + anim_ret +; c991e + +BattleAnim_Bubble: ; c991e + anim_1gfx ANIM_GFX_BUBBLE + anim_sound $82, SFX_WATER_GUN + anim_obj $21, 64, 92, $c1 + anim_wait 6 + anim_sound $82, SFX_WATER_GUN + anim_obj $21, 64, 92, $e1 + anim_wait 6 + anim_sound $82, SFX_WATER_GUN + anim_obj $21, 64, 92, $d1 + anim_wait 128 + anim_wait 32 + anim_ret +; c993d + +BattleAnim_Bubblebeam: ; c993d + anim_1gfx ANIM_GFX_BUBBLE +BattleAnim_Bubblebeam_branch_c993f: ; c993f + anim_sound $42, SFX_BUBBLEBEAM + anim_obj $21, 64, 92, $92 + anim_wait 6 + anim_sound $42, SFX_BUBBLEBEAM + anim_obj $21, 64, 92, $b3 + anim_wait 6 + anim_sound $42, SFX_BUBBLEBEAM + anim_obj $21, 64, 92, $f4 + anim_wait 8 + anim_loop $3, BattleAnim_Bubblebeam_branch_c993f + anim_wait 64 + anim_clearobjs + anim_bgeffect $30, $0, $0, $0 + anim_wait 1 + anim_call BattleAnim_Bubblebeam_branch_cbcca + anim_bgeffect $31, $1c, $0, $0 + anim_wait 19 + anim_call BattleAnim_Bubblebeam_branch_cbcd2 + anim_bgeffect $32, $0, $0, $0 + anim_wait 8 + anim_ret +; c9979 + +BattleAnim_WaterGun: ; c9979 + anim_bgeffect $30, $0, $0, $0 + anim_1gfx ANIM_GFX_WATER + anim_call BattleAnim_WaterGun_branch_cbcca + anim_sound $42, SFX_WATER_GUN + anim_obj $24, 64, 88, $0 + anim_wait 8 + anim_obj $24, 64, 76, $0 + anim_wait 8 + anim_obj $24, 64, 82, $0 + anim_wait 24 + anim_bgeffect $31, $1c, $0, $0 + anim_wait 8 + anim_bgeffect $31, $8, $0, $0 + anim_wait 8 + anim_bgeffect $31, $30, $0, $0 + anim_wait 32 + anim_call BattleAnim_WaterGun_branch_cbcd2 + anim_bgeffect $32, $0, $0, $0 + anim_wait 16 + anim_ret +; c99b4 + +BattleAnim_HydroPump: ; c99b4 + anim_bgeffect $30, $0, $0, $0 + anim_1gfx ANIM_GFX_WATER + anim_call BattleAnim_HydroPump_branch_cbcca + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 108, 72, $0 + anim_bgeffect $31, $1c, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 116, 72, $0 + anim_bgeffect $31, $8, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 124, 72, $0 + anim_bgeffect $31, $30, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 132, 72, $0 + anim_bgeffect $31, $1c, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 140, 72, $0 + anim_bgeffect $31, $8, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 148, 72, $0 + anim_bgeffect $31, $30, $0, $0 + anim_wait 8 + anim_sound $1, SFX_HYDRO_PUMP + anim_obj $25, 156, 72, $0 + anim_bgeffect $31, $1c, $0, $0 + anim_wait 32 + anim_call BattleAnim_HydroPump_branch_cbcd2 + anim_bgeffect $32, $0, $0, $0 + anim_wait 16 + anim_ret +; c9a2a + +BattleAnim_Surf: ; c9a2a + anim_1gfx ANIM_GFX_BUBBLE + anim_bgeffect ANIM_BG_SURF, $0, $0, $0 + anim_obj $22, 88, 104, $8 +BattleAnim_Surf_branch_c9a36: ; c9a36 + anim_sound $1, SFX_SURF + anim_wait 32 + anim_loop $4, BattleAnim_Surf_branch_c9a36 + anim_incobj $1 + anim_wait 56 + anim_ret +; c9a42 + +BattleAnim_VineWhip: ; c9a42 + anim_1gfx ANIM_GFX_WHIP + anim_sound $1, SFX_VINE_WHIP + anim_obj $40, 116, 52, $80 + anim_wait 4 + anim_sound $1, SFX_VINE_WHIP + anim_obj $3f, 128, 60, $0 + anim_wait 4 + anim_incobj $1 + anim_wait 4 + anim_ret +; c9a5a + +BattleAnim_LeechSeed: ; c9a5a + anim_1gfx ANIM_GFX_PLANT + anim_sound $42, SFX_VINE_WHIP + anim_obj $4a, 48, 80, $20 + anim_wait 8 + anim_sound $42, SFX_VINE_WHIP + anim_obj $4a, 48, 80, $30 + anim_wait 8 + anim_sound $42, SFX_VINE_WHIP + anim_obj $4a, 48, 80, $28 + anim_wait 32 + anim_sound $1, SFX_CHARGE + anim_wait 128 + anim_ret +; c9a7c + +BattleAnim_RazorLeaf: ; c9a7c + anim_1gfx ANIM_GFX_PLANT + anim_sound $0, SFX_VINE_WHIP + anim_obj $14, 48, 80, $28 + anim_obj $14, 48, 80, $5c + anim_obj $14, 48, 80, $10 + anim_obj $14, 48, 80, $e8 + anim_obj $14, 48, 80, $9c + anim_obj $14, 48, 80, $d0 + anim_wait 6 + anim_obj $14, 48, 80, $1c + anim_obj $14, 48, 80, $50 + anim_obj $14, 48, 80, $dc + anim_obj $14, 48, 80, $90 + anim_wait 80 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $3 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $5 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $7 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $9 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $1 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $2 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $4 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $6 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $8 + anim_wait 2 + anim_sound $42, SFX_VINE_WHIP + anim_incobj $a + anim_wait 64 + anim_ret +; c9af2 + +BattleAnim_Solarbeam: ; c9af2 + anim_jumpif $0, BattleAnim_Solarbeam_branch_c9b30 + anim_1gfx ANIM_GFX_CHARGE + anim_sound $0, SFX_CHARGE + anim_obj $3d, 48, 84, $0 + anim_obj $3c, 48, 84, $0 + anim_obj $3c, 48, 84, $8 + anim_obj $3c, 48, 84, $10 + anim_obj $3c, 48, 84, $18 + anim_obj $3c, 48, 84, $20 + anim_obj $3c, 48, 84, $28 + anim_obj $3c, 48, 84, $30 + anim_obj $3c, 48, 84, $38 + anim_wait 104 + anim_bgeffect ANIM_BG_FLASH_WHITE, $0, $4, $2 + anim_wait 64 + anim_ret +; c9b30 + +BattleAnim_Solarbeam_branch_c9b30: ; c9b30 + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect $6, $0, $2, $0 + anim_call BattleAnim_Solarbeam_branch_cbb39 + anim_wait 48 + anim_ret +; c9b3c + +BattleAnim_Thunderpunch: ; c9b3c + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_LIGHTNING + anim_obj $a, 136, 56, $43 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $2 + anim_sound $1, SFX_THUNDER + anim_obj $2f, 152, 68, $0 + anim_wait 64 + anim_ret +; c9b53 + +BattleAnim_Thundershock: ; c9b53 + anim_2gfx ANIM_GFX_LIGHTNING, ANIM_GFX_EXPLOSION + anim_obj $34, 136, 56, $2 + anim_wait 16 + anim_sound $1, SFX_THUNDERSHOCK + anim_obj $33, 136, 56, $0 + anim_wait 96 + anim_ret +; c9b66 + +BattleAnim_Thunderbolt: ; c9b66 + anim_2gfx ANIM_GFX_LIGHTNING, ANIM_GFX_EXPLOSION + anim_obj $32, 136, 56, $2 + anim_wait 16 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $1, SFX_THUNDERSHOCK + anim_obj $31, 136, 56, $0 + anim_wait 64 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_wait 64 + anim_ret +; c9b84 + +BattleAnim_ThunderWave: ; c9b84 + anim_1gfx ANIM_GFX_LIGHTNING + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $3 + anim_sound $1, SFX_THUNDERSHOCK + anim_obj $30, 136, 56, $0 + anim_wait 20 + anim_bgp $1b + anim_incobj $1 + anim_wait 96 + anim_ret +; c9b9a + +BattleAnim_Thunder: ; c9b9a + anim_1gfx ANIM_GFX_LIGHTNING + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $6, $20 + anim_sound $1, SFX_THUNDER + anim_obj $2e, 120, 68, $0 + anim_wait 16 + anim_sound $1, SFX_THUNDER + anim_obj $2f, 152, 68, $0 + anim_wait 16 + anim_sound $1, SFX_THUNDER + anim_obj $2d, 136, 68, $0 + anim_wait 48 + anim_ret +; c9bbd + +BattleAnim_RazorWind: ; c9bbd + anim_jumpif $1, BattleAnim_RazorWind_branch_c9fb5 + anim_1gfx ANIM_GFX_WHIP + anim_bgeffect $6, $0, $1, $0 +BattleAnim_RazorWind_branch_c9bc8: ; c9bc8 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $1, SFX_RAZOR_WIND + anim_obj $42, 152, 40, $3 + anim_wait 4 + anim_sound $1, SFX_RAZOR_WIND + anim_obj $42, 136, 56, $3 + anim_wait 4 + anim_sound $1, SFX_RAZOR_WIND + anim_obj $42, 152, 64, $3 + anim_wait 4 + anim_sound $1, SFX_RAZOR_WIND + anim_obj $41, 120, 40, $83 + anim_wait 4 + anim_sound $1, SFX_RAZOR_WIND + anim_obj $41, 120, 64, $83 + anim_wait 4 + anim_loop $3, BattleAnim_RazorWind_branch_c9bc8 + anim_wait 24 + anim_ret +; c9c00 + +BattleAnim_Sonicboom_JP: ; c9c00 + anim_2gfx ANIM_GFX_WHIP, ANIM_GFX_HIT +BattleAnim_Sonicboom_JP_branch_c9c03: ; c9c03 + anim_sound $c, SFX_RAZOR_WIND + anim_obj $43, 64, 80, $3 + anim_wait 8 + anim_sound $c, SFX_RAZOR_WIND + anim_obj $43, 64, 88, $2 + anim_wait 8 + anim_sound $c, SFX_RAZOR_WIND + anim_obj $43, 64, 96, $4 + anim_wait 8 + anim_loop $2, BattleAnim_Sonicboom_JP_branch_c9c03 + anim_wait 32 + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; c9c36 + +BattleAnim_Gust: ; c9c36 +BattleAnim_Sonicboom: ; c9c36 + anim_2gfx ANIM_GFX_WIND, ANIM_GFX_HIT +BattleAnim_Gust_branch_c9c39: ; c9c39 +BattleAnim_Sonicboom_branch_c9c39: ; c9c39 + anim_sound $1, SFX_RAZOR_WIND + anim_obj ANIM_OBJ_GUST, 136, 72, $0 + anim_wait 6 + anim_loop $9, BattleAnim_Gust_branch_c9c39 + anim_obj $1, 144, 64, $18 + anim_wait 8 + anim_obj $1, 128, 32, $18 + anim_wait 16 + anim_ret +; c9c53 + +BattleAnim_Selfdestruct: ; c9c53 + anim_1gfx ANIM_GFX_EXPLOSION + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $24 + anim_jumpif $1, BattleAnim_Selfdestruct_branch_c9c63 + anim_call BattleAnim_Selfdestruct_branch_cbb8f + anim_wait 16 + anim_ret +; c9c63 + +BattleAnim_Selfdestruct_branch_c9c63: ; c9c63 + anim_call BattleAnim_Selfdestruct_branch_cbb62 + anim_wait 5 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_loop $2, BattleAnim_Selfdestruct_branch_c9c63 + anim_wait 16 + anim_ret +; c9c72 + +BattleAnim_Explosion: ; c9c72 + anim_1gfx ANIM_GFX_EXPLOSION + anim_bgeffect $1f, $60, $4, $10 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $24 + anim_jumpif $1, BattleAnim_Explosion_branch_c9c87 + anim_call BattleAnim_Explosion_branch_cbb8f + anim_wait 16 + anim_ret +; c9c87 + +BattleAnim_Explosion_branch_c9c87: ; c9c87 + anim_call BattleAnim_Explosion_branch_cbb62 + anim_wait 5 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_loop $2, BattleAnim_Explosion_branch_c9c87 + anim_wait 16 + anim_ret +; c9c96 + +BattleAnim_Acid: ; c9c96 + anim_1gfx ANIM_GFX_POISON + anim_call BattleAnim_Acid_branch_cbc35 + anim_wait 64 + anim_ret +; c9c9d + +BattleAnim_RockThrow: ; c9c9d + anim_1gfx ANIM_GFX_ROCKS + anim_bgeffect $1f, $60, $1, $0 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 128, 64, $40 + anim_wait 2 + anim_sound $1, SFX_STRENGTH + anim_obj $1d, 120, 68, $30 + anim_wait 2 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 152, 68, $30 + anim_wait 2 + anim_sound $1, SFX_STRENGTH + anim_obj $1d, 144, 64, $40 + anim_wait 2 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 136, 68, $30 + anim_wait 96 + anim_ret +; c9cd2 + +BattleAnim_RockSlide: ; c9cd2 + anim_1gfx ANIM_GFX_ROCKS + anim_bgeffect $1f, $c0, $1, $0 +BattleAnim_RockSlide_branch_c9cd9: ; c9cd9 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 128, 64, $40 + anim_wait 4 + anim_sound $1, SFX_STRENGTH + anim_obj $1d, 120, 68, $30 + anim_wait 4 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 152, 68, $30 + anim_wait 4 + anim_sound $1, SFX_STRENGTH + anim_obj $1d, 144, 64, $40 + anim_wait 4 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 136, 68, $30 + anim_wait 16 + anim_loop $4, BattleAnim_RockSlide_branch_c9cd9 + anim_wait 96 + anim_ret +; c9d0c + +BattleAnim_Sing: ; c9d0c + anim_1gfx ANIM_GFX_NOISE + anim_sound $42, SFX_SING +BattleAnim_Sing_branch_c9d11: ; c9d11 + anim_obj $23, 64, 92, $0 + anim_wait 8 + anim_obj $23, 64, 92, $1 + anim_wait 8 + anim_obj $23, 64, 92, $2 + anim_wait 8 + anim_obj $23, 64, 92, $0 + anim_wait 8 + anim_obj $23, 64, 92, $2 + anim_wait 8 + anim_loop $4, BattleAnim_Sing_branch_c9d11 + anim_wait 64 + anim_ret +; c9d35 + +BattleAnim_Poisonpowder: ; c9d35 +BattleAnim_SleepPowder: ; c9d35 +BattleAnim_Spore: ; c9d35 +BattleAnim_StunSpore: ; c9d35 + anim_1gfx ANIM_GFX_POWDER +BattleAnim_Poisonpowder_branch_c9d37: ; c9d37 +BattleAnim_SleepPowder_branch_c9d37: ; c9d37 +BattleAnim_Spore_branch_c9d37: ; c9d37 +BattleAnim_StunSpore_branch_c9d37: ; c9d37 + anim_sound $1, SFX_POWDER + anim_obj $26, 104, 16, $0 + anim_wait 4 + anim_sound $1, SFX_POWDER + anim_obj $26, 136, 16, $0 + anim_wait 4 + anim_sound $1, SFX_POWDER + anim_obj $26, 112, 16, $0 + anim_wait 4 + anim_sound $1, SFX_POWDER + anim_obj $26, 128, 16, $0 + anim_wait 4 + anim_sound $1, SFX_POWDER + anim_obj $26, 120, 16, $0 + anim_wait 4 + anim_loop $2, BattleAnim_Poisonpowder_branch_c9d37 + anim_wait 96 + anim_ret +; c9d6a + +BattleAnim_HyperBeam: ; c9d6a + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect $1f, $30, $4, $10 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $40 + anim_bgeffect $6, $0, $2, $0 + anim_call BattleAnim_HyperBeam_branch_cbb39 + anim_wait 48 + anim_ret +; c9d80 + +BattleAnim_AuroraBeam: ; c9d80 + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_wait 64 + anim_call BattleAnim_AuroraBeam_branch_cbb39 + anim_wait 48 + anim_incobj $5 + anim_wait 64 + anim_ret +; c9d95 + +BattleAnim_Vicegrip: ; c9d95 + anim_1gfx ANIM_GFX_CUT + anim_sound $1, SFX_VICEGRIP + anim_obj $37, 152, 40, $0 + anim_obj $39, 120, 72, $0 + anim_wait 32 + anim_ret +; c9da6 + +BattleAnim_Scratch: ; c9da6 + anim_1gfx ANIM_GFX_CUT + anim_sound $1, SFX_SCRATCH + anim_obj $37, 144, 48, $0 + anim_obj $37, 140, 44, $0 + anim_obj $37, 136, 40, $0 + anim_wait 32 + anim_ret +; c9dbc + +BattleAnim_FurySwipes: ; c9dbc + anim_1gfx ANIM_GFX_CUT + anim_jumpif $1, BattleAnim_FurySwipes_branch_c9dd9 + anim_sound $1, SFX_SCRATCH + anim_obj $37, 144, 48, $0 + anim_obj $37, 140, 44, $0 + anim_obj $37, 136, 40, $0 + anim_sound $1, SFX_SCRATCH + anim_wait 32 + anim_ret +; c9dd9 + +BattleAnim_FurySwipes_branch_c9dd9: ; c9dd9 + anim_sound $1, SFX_SCRATCH + anim_obj $38, 120, 48, $0 + anim_obj $38, 124, 44, $0 + anim_obj $38, 128, 40, $0 + anim_sound $1, SFX_SCRATCH + anim_wait 32 + anim_ret +; c9df0 + +BattleAnim_Cut: ; c9df0 + anim_1gfx ANIM_GFX_CUT + anim_sound $1, SFX_CUT + anim_obj $3a, 152, 40, $0 + anim_wait 32 + anim_ret +; c9dfc + +BattleAnim_Slash: ; c9dfc + anim_1gfx ANIM_GFX_CUT + anim_sound $1, SFX_CUT + anim_obj $3a, 152, 40, $0 + anim_obj $3a, 148, 36, $0 + anim_wait 32 + anim_ret +; c9e0d + +BattleAnim_Clamp: ; c9e0d + anim_2gfx ANIM_GFX_CUT, ANIM_GFX_HIT + anim_obj $35, 136, 56, $a0 + anim_obj $35, 136, 56, $20 + anim_wait 16 + anim_sound $1, SFX_BITE + anim_obj $1, 144, 48, $18 + anim_wait 32 + anim_sound $1, SFX_BITE + anim_obj $1, 128, 64, $18 + anim_wait 16 + anim_ret +; c9e2e + +BattleAnim_Bite: ; c9e2e + anim_2gfx ANIM_GFX_CUT, ANIM_GFX_HIT + anim_obj $36, 136, 56, $98 + anim_obj $36, 136, 56, $18 + anim_wait 8 + anim_sound $1, SFX_BITE + anim_obj $1, 144, 48, $18 + anim_wait 16 + anim_sound $1, SFX_BITE + anim_obj $1, 128, 64, $18 + anim_wait 8 + anim_ret +; c9e4f + +BattleAnim_Teleport: ; c9e4f + anim_1gfx ANIM_GFX_SPEED + anim_call BattleAnim_Teleport_branch_cbca7 + anim_bgeffect ANIM_BG_TELEPORT, $0, $1, $0 + anim_wait 32 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_wait 3 + anim_incbgeffect ANIM_BG_TELEPORT + anim_call BattleAnim_Teleport_branch_cbcb7 + anim_bgeffect $6, $0, $1, $0 + anim_call BattleAnim_Teleport_branch_cbb12 + anim_wait 64 + anim_ret +; c9e6f + +BattleAnim_Fly: ; c9e6f + anim_jumpif $1, BattleAnim_Fly_branch_c9e89 + anim_jumpif $2, BattleAnim_Fly_branch_c9e82 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 136, 56, $0 + anim_wait 32 +BattleAnim_Fly_branch_c9e82: ; c9e82 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; c9e89 + +BattleAnim_Fly_branch_c9e89: ; c9e89 + anim_1gfx ANIM_GFX_SPEED + anim_bgeffect $6, $0, $1, $0 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_call BattleAnim_Fly_branch_cbb12 + anim_wait 64 + anim_ret +; c9e9a + +BattleAnim_DoubleTeam: ; c9e9a + anim_call BattleAnim_DoubleTeam_branch_cbcaf + anim_sound $0, SFX_PSYBEAM + anim_bgeffect ANIM_BG_DOUBLE_TEAM, $0, $1, $0 + anim_wait 96 + anim_incbgeffect ANIM_BG_DOUBLE_TEAM + anim_wait 24 + anim_incbgeffect ANIM_BG_DOUBLE_TEAM + anim_call BattleAnim_DoubleTeam_branch_cbcb7 + anim_ret +; c9eaf + +BattleAnim_Recover: ; c9eaf + anim_1gfx ANIM_GFX_BUBBLE + anim_call BattleAnim_Recover_branch_cbca7 + anim_sound $0, SFX_FULL_HEAL + anim_bgeffect $18, $0, $1, $40 + anim_obj $2c, 44, 88, $30 + anim_obj $2c, 44, 88, $31 + anim_obj $2c, 44, 88, $32 + anim_obj $2c, 44, 88, $33 + anim_obj $2c, 44, 88, $34 + anim_obj $2c, 44, 88, $35 + anim_obj $2c, 44, 88, $36 + anim_obj $2c, 44, 88, $37 + anim_wait 64 + anim_incbgeffect $18 + anim_call BattleAnim_Recover_branch_cbcb7 + anim_ret +; c9eeb + +BattleAnim_Absorb: ; c9eeb + anim_1gfx ANIM_GFX_CHARGE + anim_obj $3d, 44, 88, $0 +BattleAnim_Absorb_branch_c9ef2: ; c9ef2 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 128, 48, $2 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 64, $3 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 32, $4 + anim_wait 6 + anim_loop $5, BattleAnim_Absorb_branch_c9ef2 + anim_wait 32 + anim_ret +; c9f13 + +BattleAnim_MegaDrain: ; c9f13 + anim_1gfx ANIM_GFX_CHARGE + anim_call BattleAnim_MegaDrain_branch_cbca7 + anim_bgeffect $1c, $0, $0, $10 + anim_setvar $0 +BattleAnim_MegaDrain_branch_c9f1f: ; c9f1f + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 128, 48, $2 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 64, $3 + anim_wait 6 + anim_sound $1b, SFX_WATER_GUN + anim_obj $45, 136, 32, $4 + anim_wait 6 + anim_incvar + anim_jumpvar $7, BattleAnim_MegaDrain_branch_c9f4e + anim_jumpvar $2, BattleAnim_MegaDrain_branch_c9f46 + anim_jump BattleAnim_MegaDrain_branch_c9f1f +; c9f46 + +BattleAnim_MegaDrain_branch_c9f46: ; c9f46 + anim_obj $3d, 44, 88, $0 + anim_jump BattleAnim_MegaDrain_branch_c9f1f +; c9f4e + +BattleAnim_MegaDrain_branch_c9f4e: ; c9f4e + anim_wait 32 + anim_incbgeffect $1c + anim_call BattleAnim_MegaDrain_branch_cbcb7 + anim_ret +; c9f55 + +BattleAnim_EggBomb: ; c9f55 + anim_2gfx ANIM_GFX_EGG, ANIM_GFX_EXPLOSION + anim_sound $0, SFX_SWITCH_POKEMON + anim_obj $46, 44, 104, $1 + anim_wait 128 + anim_wait 96 + anim_incobj $1 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 + anim_sound $1, SFX_EGG_BOMB + anim_obj $18, 128, 64, $0 + anim_wait 8 + anim_sound $1, SFX_EGG_BOMB + anim_obj $18, 144, 68, $0 + anim_wait 8 + anim_sound $1, SFX_EGG_BOMB + anim_obj $18, 136, 72, $0 + anim_wait 24 + anim_ret +; c9f85 + +BattleAnim_Softboiled: ; c9f85 + anim_2gfx ANIM_GFX_EGG, ANIM_GFX_BUBBLE + anim_call BattleAnim_Softboiled_branch_cbca7 + anim_sound $0, SFX_SWITCH_POKEMON + anim_obj $46, 44, 104, $6 + anim_wait 128 + anim_incobj $2 + anim_obj $46, 76, 104, $b + anim_wait 16 + anim_bgeffect $18, $0, $1, $40 + anim_sound $0, SFX_METRONOME +BattleAnim_Softboiled_branch_c9fa4: ; c9fa4 + anim_obj $2c, 44, 88, $20 + anim_wait 8 + anim_loop $8, BattleAnim_Softboiled_branch_c9fa4 + anim_wait 128 + anim_incbgeffect $18 + anim_call BattleAnim_Softboiled_branch_cbcb7 + anim_ret +; c9fb5 + +BattleAnim_FocusEnergy: ; c9fb5 +BattleAnim_RazorWind_branch_c9fb5: ; c9fb5 +BattleAnim_SkullBash_branch_c9fb5: ; c9fb5 +BattleAnim_SkyAttack_branch_c9fb5: ; c9fb5 + anim_1gfx ANIM_GFX_SPEED + anim_call BattleAnim_FocusEnergy_branch_cbca7 + anim_bgeffect $16, $0, $1, $40 + anim_bgeffect $6, $0, $2, $0 +BattleAnim_FocusEnergy_branch_c9fc4: ; c9fc4 +BattleAnim_RazorWind_branch_c9fc4: ; c9fc4 +BattleAnim_SkullBash_branch_c9fc4: ; c9fc4 +BattleAnim_SkyAttack_branch_c9fc4: ; c9fc4 + anim_sound $0, SFX_SWORDS_DANCE + anim_obj $47, 44, 108, $6 + anim_wait 2 + anim_obj $47, 36, 108, $6 + anim_wait 2 + anim_obj $47, 52, 108, $8 + anim_wait 2 + anim_obj $47, 28, 108, $8 + anim_wait 2 + anim_obj $47, 60, 108, $6 + anim_wait 2 + anim_obj $47, 20, 108, $8 + anim_wait 2 + anim_obj $47, 68, 108, $8 + anim_wait 2 + anim_loop $3, BattleAnim_FocusEnergy_branch_c9fc4 + anim_wait 8 + anim_incbgeffect $16 + anim_call BattleAnim_FocusEnergy_branch_cbcb7 + anim_ret +; c9ffc + +BattleAnim_Bide: ; c9ffc + anim_jumpif $0, BattleAnim_Bide_branch_c9651 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Bide_branch_cbca7 + anim_sound $0, SFX_ESCAPE_ROPE + anim_bgeffect $1a, $0, $1, $20 + anim_wait 72 + anim_incbgeffect $1a + anim_call BattleAnim_Bide_branch_cbcb7 + anim_ret +; ca014 + +BattleAnim_Bind: ; ca014 + anim_1gfx ANIM_GFX_ROPE + anim_sound $1, SFX_BIND + anim_obj $48, 132, 64, $0 + anim_wait 8 + anim_obj $49, 132, 56, $0 + anim_wait 8 + anim_obj $48, 132, 48, $0 + anim_wait 64 + anim_sound $1, SFX_BIND + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_wait 96 + anim_ret +; ca036 + +BattleAnim_Wrap: ; ca036 + anim_1gfx ANIM_GFX_ROPE + anim_sound $1, SFX_BIND + anim_obj $48, 132, 64, $0 + anim_wait 8 + anim_obj $48, 132, 56, $0 + anim_wait 8 + anim_obj $48, 132, 48, $0 + anim_wait 64 + anim_sound $1, SFX_BIND + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_wait 96 + anim_ret +; ca058 + +BattleAnim_Confusion: ; ca058 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Confusion_branch_cbcca + anim_sound $1, SFX_PSYCHIC + anim_bgeffect ANIM_BG_NIGHT_SHADE, $0, $0, $8 + anim_wait 128 + anim_incbgeffect ANIM_BG_NIGHT_SHADE + anim_call BattleAnim_Confusion_branch_cbcd2 + anim_ret +; ca06c + +BattleAnim_Constrict: ; ca06c + anim_1gfx ANIM_GFX_ROPE + anim_sound $1, SFX_BIND + anim_obj $49, 132, 64, $0 + anim_wait 8 + anim_obj $48, 132, 48, $0 + anim_wait 8 + anim_obj $49, 132, 40, $0 + anim_wait 8 + anim_obj $48, 132, 56, $0 + anim_wait 64 + anim_ret +; ca08a + +BattleAnim_Earthquake: ; ca08a + anim_bgeffect $1f, $60, $4, $10 +BattleAnim_Earthquake_branch_ca08f: ; ca08f + anim_sound $1, SFX_EMBER + anim_wait 24 + anim_loop $4, BattleAnim_Earthquake_branch_ca08f + anim_ret +; ca098 + +BattleAnim_Fissure: ; ca098 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $40 + anim_bgeffect $1f, $60, $4, $0 +BattleAnim_Fissure_branch_ca0a2: ; ca0a2 + anim_sound $1, SFX_EMBER + anim_wait 24 + anim_loop $4, BattleAnim_Fissure_branch_ca0a2 + anim_ret +; ca0ab + +BattleAnim_Growl: ; ca0ab + anim_1gfx ANIM_GFX_NOISE + anim_enemyfeetobj + anim_bgeffect $6, $0, $2, $0 + anim_cry $0 +BattleAnim_Growl_branch_ca0b5: ; ca0b5 + anim_call BattleAnim_Growl_branch_cbbbc + anim_wait 16 + anim_loop $3, BattleAnim_Growl_branch_ca0b5 + anim_wait 9 + anim_bgeffect ANIM_BG_FEET_FOLLOW, $0, $1, $0 + anim_wait 8 + anim_bgeffect $19, $0, $0, $40 + anim_wait 64 + anim_incbgeffect $19 + anim_wait 1 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 5 + anim_incobj $a + anim_wait 8 + anim_ret +; ca0d7 + +BattleAnim_Roar: ; ca0d7 + anim_1gfx ANIM_GFX_NOISE + anim_bgeffect $6, $0, $2, $0 + anim_cry $1 +BattleAnim_Roar_branch_ca0e0: ; ca0e0 + anim_call BattleAnim_Roar_branch_cbbbc + anim_wait 16 + anim_loop $3, BattleAnim_Roar_branch_ca0e0 + anim_wait 16 + anim_jumpif $0, BattleAnim_Roar_branch_ca0f3 + anim_bgeffect $27, $0, $0, $0 + anim_wait 64 +BattleAnim_Roar_branch_ca0f3: ; ca0f3 + anim_ret +; ca0f4 + +BattleAnim_Supersonic: ; ca0f4 + anim_1gfx ANIM_GFX_PSYCHIC +BattleAnim_Supersonic_branch_ca0f6: ; ca0f6 + anim_sound $1a, SFX_SUPERSONIC + anim_obj $4c, 64, 88, $2 + anim_wait 4 + anim_loop $a, BattleAnim_Supersonic_branch_ca0f6 + anim_wait 64 + anim_ret +; ca105 + +BattleAnim_Screech: ; ca105 + anim_1gfx ANIM_GFX_PSYCHIC + anim_bgeffect $1f, $8, $1, $20 + anim_sound $1a, SFX_SCREECH +BattleAnim_Screech_branch_ca10f: ; ca10f + anim_obj $4c, 64, 88, $2 + anim_wait 2 + anim_loop $2, BattleAnim_Screech_branch_ca10f + anim_wait 64 + anim_ret +; ca11b + +BattleAnim_ConfuseRay: ; ca11b + anim_1gfx ANIM_GFX_SPEED + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect $8, $0, $4, $0 + anim_obj $4d, 64, 88, $0 + anim_obj $4d, 64, 88, $80 + anim_obj $4d, 64, 88, $88 + anim_obj $4d, 64, 88, $90 + anim_obj $4d, 64, 88, $98 + anim_obj $4d, 64, 88, $a0 + anim_obj $4d, 64, 88, $a8 + anim_obj $4d, 64, 88, $b0 + anim_obj $4d, 64, 88, $b8 +BattleAnim_ConfuseRay_branch_ca154: ; ca154 + anim_sound $1a, SFX_WHIRLWIND + anim_wait 16 + anim_loop $8, BattleAnim_ConfuseRay_branch_ca154 + anim_wait 32 + anim_ret +; ca15e + +BattleAnim_Leer: ; ca15e + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect $6, $0, $2, $0 + anim_call BattleAnim_Leer_branch_cbadc + anim_wait 16 + anim_ret +; ca16a + +BattleAnim_Reflect: ; ca16a + anim_1gfx ANIM_GFX_REFLECT + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $0, SFX_SHINE + anim_obj $50, 72, 80, $0 + anim_wait 24 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $0, SFX_SHINE + anim_obj $50, 72, 80, $0 + anim_wait 64 + anim_ret +; ca18e + +BattleAnim_LightScreen: ; ca18e + anim_2gfx ANIM_GFX_SPEED, ANIM_GFX_REFLECT + anim_bgeffect $6, $0, $2, $0 + anim_sound $0, SFX_FLASH + anim_obj $50, 72, 80, $0 + anim_wait 4 + anim_obj $6d, 72, 80, $0 + anim_wait 4 + anim_obj $6d, 72, 80, $8 + anim_wait 4 + anim_obj $6d, 72, 80, $10 + anim_wait 4 + anim_obj $6d, 72, 80, $18 + anim_wait 4 + anim_obj $50, 72, 80, $0 + anim_obj $6d, 72, 80, $20 + anim_wait 4 + anim_obj $6d, 72, 80, $28 + anim_wait 4 + anim_obj $6d, 72, 80, $30 + anim_wait 4 + anim_obj $6d, 72, 80, $38 + anim_wait 64 + anim_ret +; ca1d5 + +BattleAnim_Amnesia: ; ca1d5 + anim_1gfx ANIM_GFX_STATUS + anim_sound $0, SFX_LICK + anim_obj $53, 64, 80, $2 + anim_wait 16 + anim_obj $53, 68, 80, $1 + anim_wait 16 + anim_obj $53, 72, 80, $0 + anim_wait 64 + anim_ret +; ca1ed + +BattleAnim_DizzyPunch: ; ca1ed + anim_2gfx ANIM_GFX_STATUS, ANIM_GFX_HIT + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 136, 40, $0 + anim_obj $2, 136, 64, $0 + anim_wait 16 + anim_sound $1, SFX_KINESIS + anim_obj ANIM_OBJ_CHICK, 136, 24, $15 + anim_obj ANIM_OBJ_CHICK, 136, 24, $aa + anim_obj ANIM_OBJ_CHICK, 136, 24, $bf + anim_wait 96 + anim_ret +; ca212 + +BattleAnim_Rest: ; ca212 + anim_1gfx ANIM_GFX_STATUS + anim_sound $0, SFX_TAIL_WHIP +BattleAnim_Rest_branch_ca217: ; ca217 + anim_obj $54, 64, 80, $0 + anim_wait 40 + anim_loop $3, BattleAnim_Rest_branch_ca217 + anim_wait 32 + anim_ret +; ca223 + +BattleAnim_AcidArmor: ; ca223 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_AcidArmor_branch_cbcaf + anim_bgeffect ANIM_BG_ACID_ARMOR, $0, $1, $8 + anim_sound $0, SFX_MEGA_PUNCH + anim_wait 64 + anim_incbgeffect ANIM_BG_ACID_ARMOR + anim_call BattleAnim_AcidArmor_branch_cbcb7 + anim_ret +; ca237 + +BattleAnim_Splash: ; ca237 + anim_1gfx ANIM_GFX_HIT + anim_sound $0, SFX_VICEGRIP + anim_call BattleAnim_Splash_branch_cbcaf + anim_bgeffect $22, $0, $1, $0 + anim_wait 96 + anim_incbgeffect $22 + anim_call BattleAnim_Splash_branch_cbcb7 + anim_ret +; ca24b + +BattleAnim_Dig: ; ca24b + anim_2gfx ANIM_GFX_SAND, ANIM_GFX_HIT + anim_jumpif $0, BattleAnim_Dig_branch_ca27d + anim_jumpif $2, BattleAnim_Dig_branch_ca286 + anim_call BattleAnim_Dig_branch_cbcaf + anim_bgeffect $23, $0, $1, $1 + anim_obj $57, 72, 104, $0 +BattleAnim_Dig_branch_ca263: ; ca263 + anim_sound $0, SFX_RAZOR_WIND + anim_obj $56, 56, 104, $0 + anim_wait 16 + anim_loop $6, BattleAnim_Dig_branch_ca263 + anim_wait 32 + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_wait 8 + anim_incbgeffect $23 + anim_call BattleAnim_Dig_branch_cbcb7 + anim_ret +; ca27d + +BattleAnim_Dig_branch_ca27d: ; ca27d + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $1, 136, 56, $0 + anim_wait 32 +BattleAnim_Dig_branch_ca286: ; ca286 + anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; ca28d + +BattleAnim_SandAttack: ; ca28d + anim_1gfx ANIM_GFX_SAND + anim_call BattleAnim_SandAttack_branch_cbc5b + anim_ret +; ca293 + +BattleAnim_StringShot: ; ca293 + anim_1gfx ANIM_GFX_WEB + anim_bgeffect $7, $0, $2, $0 + anim_sound $1a, SFX_MENU + anim_obj $5a, 64, 80, $0 + anim_wait 4 + anim_sound $1, SFX_MENU + anim_obj $5a, 132, 48, $1 + anim_wait 4 + anim_sound $1a, SFX_MENU + anim_obj $5a, 64, 88, $0 + anim_wait 4 + anim_sound $1, SFX_MENU + anim_obj $5a, 132, 64, $1 + anim_wait 4 + anim_sound $1a, SFX_MENU + anim_obj $5a, 64, 84, $0 + anim_wait 4 + anim_sound $1, SFX_MENU + anim_obj $5a, 132, 56, $2 + anim_wait 64 + anim_ret +; ca2d1 + +BattleAnim_Headbutt: ; ca2d1 + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $14, $2, $0 + anim_wait 32 + anim_call BattleAnim_Headbutt_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_HEADBUTT + anim_obj $1, 136, 56, $0 + anim_wait 8 + anim_call BattleAnim_Headbutt_branch_cbcb7 + anim_ret +; ca2ef + +BattleAnim_Tackle: ; ca2ef + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Tackle_branch_cbcaf + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_TACKLE + anim_obj $0, 136, 48, $0 + anim_wait 8 + anim_call BattleAnim_Tackle_branch_cbcb7 + anim_ret +; ca307 + +BattleAnim_BodySlam: ; ca307 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_BodySlam_branch_cbcaf + anim_bgeffect $22, $0, $1, $0 + anim_wait 32 + anim_incbgeffect $22 + anim_wait 4 + anim_bgeffect $25, $0, $1, $0 + anim_wait 3 + anim_sound $1, SFX_TACKLE + anim_obj $1, 136, 48, $0 + anim_wait 6 + anim_sound $1, SFX_TACKLE + anim_obj $1, 144, 48, $0 + anim_wait 3 + anim_call BattleAnim_BodySlam_branch_cbcb7 + anim_ret +; ca331 + +BattleAnim_TakeDown: ; ca331 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_TakeDown_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 3 + anim_sound $1, SFX_TACKLE + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_obj $1, 128, 56, $0 + anim_wait 6 + anim_sound $1, SFX_TACKLE + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_obj $1, 144, 48, $0 + anim_wait 3 + anim_call BattleAnim_TakeDown_branch_cbcb7 + anim_ret +; ca35c + +BattleAnim_DoubleEdge: ; ca35c + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_DoubleEdge_branch_cbca7 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $10 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 3 + anim_sound $1, SFX_TACKLE + anim_obj $0, 128, 48, $0 + anim_wait 6 + anim_sound $1, SFX_TACKLE + anim_obj $0, 144, 48, $0 + anim_wait 3 + anim_call BattleAnim_DoubleEdge_branch_cbcb7 + anim_ret +; ca382 + +BattleAnim_Submission: ; ca382 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Submission_branch_cbcc2 + anim_bgeffect $26, $0, $0, $0 + anim_sound $1, SFX_SUBMISSION + anim_wait 32 + anim_obj $1, 120, 48, $0 + anim_wait 32 + anim_obj $1, 152, 56, $0 + anim_wait 32 + anim_obj $1, 136, 52, $0 + anim_wait 32 + anim_incbgeffect $26 + anim_call BattleAnim_Submission_branch_cbcd2 + anim_ret +; ca3a8 + +BattleAnim_Whirlwind: ; ca3a8 + anim_1gfx ANIM_GFX_WIND +BattleAnim_Whirlwind_branch_ca3aa: ; ca3aa + anim_sound $0, SFX_RAZOR_WIND + anim_obj ANIM_OBJ_GUST, 64, 112, $0 + anim_wait 6 + anim_loop $9, BattleAnim_Whirlwind_branch_ca3aa + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_incobj $7 + anim_incobj $8 + anim_incobj $9 + anim_sound $42, SFX_WHIRLWIND + anim_wait 128 + anim_jumpif $0, BattleAnim_Whirlwind_branch_ca3d7 + anim_bgeffect $27, $0, $0, $0 + anim_wait 64 +BattleAnim_Whirlwind_branch_ca3d7: ; ca3d7 + anim_ret +; ca3d8 + +BattleAnim_Hypnosis: ; ca3d8 + anim_1gfx ANIM_GFX_PSYCHIC +BattleAnim_Hypnosis_branch_ca3da: ; ca3da + anim_sound $1a, SFX_SUPERSONIC + anim_obj $4c, 64, 88, $2 + anim_obj $4c, 56, 80, $2 + anim_wait 8 + anim_loop $3, BattleAnim_Hypnosis_branch_ca3da + anim_wait 56 + anim_ret +; ca3ee + +BattleAnim_Haze: ; ca3ee + anim_1gfx ANIM_GFX_HAZE + anim_sound $1, SFX_SURF +BattleAnim_Haze_branch_ca3f3: ; ca3f3 + anim_obj $5b, 48, 56, $0 + anim_obj $5b, 132, 16, $0 + anim_wait 12 + anim_loop $5, BattleAnim_Haze_branch_ca3f3 + anim_wait 96 + anim_ret +; ca404 + +BattleAnim_Mist: ; ca404 + anim_obp0 $54 + anim_1gfx ANIM_GFX_HAZE + anim_sound $0, SFX_SURF +BattleAnim_Mist_branch_ca40b: ; ca40b + anim_obj $5c, 48, 56, $0 + anim_wait 8 + anim_loop $a, BattleAnim_Mist_branch_ca40b + anim_wait 96 + anim_ret +; ca417 + +BattleAnim_Smog: ; ca417 + anim_1gfx ANIM_GFX_HAZE + anim_sound $1, SFX_BUBBLEBEAM +BattleAnim_Smog_branch_ca41c: ; ca41c + anim_obj $5d, 132, 16, $0 + anim_wait 8 + anim_loop $a, BattleAnim_Smog_branch_ca41c + anim_wait 96 + anim_ret +; ca428 + +BattleAnim_PoisonGas: ; ca428 + anim_1gfx ANIM_GFX_HAZE + anim_sound $42, SFX_BUBBLEBEAM +BattleAnim_PoisonGas_branch_ca42d: ; ca42d + anim_obj $5e, 44, 80, $2 + anim_wait 8 + anim_loop $a, BattleAnim_PoisonGas_branch_ca42d + anim_wait 128 + anim_ret +; ca439 + +BattleAnim_HornAttack: ; ca439 + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_obj $5f, 72, 80, $1 + anim_wait 16 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; ca44c + +BattleAnim_FuryAttack: ; ca44c + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_obj $5f, 72, 72, $2 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $4, 128, 40, $0 + anim_wait 8 + anim_obj $5f, 80, 88, $2 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $4, 136, 56, $0 + anim_wait 8 + anim_obj $5f, 76, 80, $2 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $4, 132, 48, $0 + anim_wait 8 + anim_ret +; ca47d + +BattleAnim_HornDrill: ; ca47d + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $40 + anim_obj $5f, 72, 80, $3 + anim_wait 8 +BattleAnim_HornDrill_branch_ca48b: ; ca48b + anim_sound $1, SFX_HORN_ATTACK + anim_obj $0, 132, 40, $0 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $0, 140, 48, $0 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $0, 132, 56, $0 + anim_wait 8 + anim_sound $1, SFX_HORN_ATTACK + anim_obj $0, 124, 48, $0 + anim_wait 8 + anim_loop $3, BattleAnim_HornDrill_branch_ca48b + anim_ret +; ca4b4 + +BattleAnim_PoisonSting: ; ca4b4 + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_obj $60, 64, 92, $14 + anim_wait 16 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 136, 56, $0 + anim_wait 16 + anim_ret +; ca4c7 + +BattleAnim_Twineedle: ; ca4c7 + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_sound $1, SFX_POISON_STING + anim_obj $60, 64, 92, $14 + anim_obj $60, 56, 84, $14 + anim_wait 16 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 136, 56, $0 + anim_obj $5, 128, 48, $0 + anim_wait 16 + anim_ret +; ca4e7 + +BattleAnim_PinMissile: ; ca4e7 + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT +BattleAnim_PinMissile_branch_ca4ea: ; ca4ea + anim_obj $60, 64, 92, $28 + anim_wait 8 + anim_obj $60, 56, 84, $28 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 136, 56, $0 + anim_wait 8 + anim_obj $60, 52, 88, $28 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 128, 48, $0 + anim_wait 8 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 132, 52, $0 + anim_loop $3, BattleAnim_PinMissile_branch_ca4ea + anim_wait 16 + anim_ret +; ca51a + +BattleAnim_SpikeCannon: ; ca51a + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT +BattleAnim_SpikeCannon_branch_ca51d: ; ca51d + anim_obj $60, 64, 92, $18 + anim_wait 8 + anim_obj $60, 56, 84, $18 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 136, 56, $0 + anim_wait 8 + anim_obj $60, 52, 88, $18 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 128, 48, $0 + anim_wait 8 + anim_sound $1, SFX_POISON_STING + anim_obj $5, 132, 52, $0 + anim_loop $3, BattleAnim_SpikeCannon_branch_ca51d + anim_wait 16 + anim_ret +; ca54d + +BattleAnim_Transform: ; ca54d + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Transform_branch_cbcaf + anim_transform + anim_sound $0, SFX_PSYBEAM + anim_bgeffect $28, $0, $1, $0 + anim_wait 48 + anim_updateactorpic + anim_incbgeffect $28 + anim_wait 48 + anim_call BattleAnim_Transform_branch_cbcb7 + anim_ret +; ca564 + +BattleAnim_PetalDance: ; ca564 + anim_sound $0, SFX_MENU + anim_2gfx ANIM_GFX_FLOWER, ANIM_GFX_HIT +BattleAnim_PetalDance_branch_ca56a: ; ca56a + anim_obj $61, 48, 56, $0 + anim_wait 11 + anim_loop $8, BattleAnim_PetalDance_branch_ca56a + anim_wait 128 + anim_wait 64 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $0, 136, 56, $0 + anim_wait 16 + anim_ret +; ca580 + +BattleAnim_Barrage: ; ca580 + anim_2gfx ANIM_GFX_EGG, ANIM_GFX_EXPLOSION + anim_sound $1a, SFX_THROW_BALL + anim_obj $62, 64, 92, $10 + anim_wait 36 + anim_sound $1, SFX_EGG_BOMB + anim_obj $18, 136, 56, $0 + anim_wait 16 + anim_ret +; ca596 + +BattleAnim_PayDay: ; ca596 + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_STATUS + anim_sound $1, SFX_POUND + anim_obj $1, 128, 56, $0 + anim_wait 16 + anim_sound $1, SFX_PAY_DAY + anim_obj $63, 120, 76, $1 + anim_wait 64 + anim_ret +; ca5ac + +BattleAnim_Mimic: ; ca5ac + anim_1gfx ANIM_GFX_SPEED + anim_obp0 $fc + anim_sound $ff, SFX_LICK + anim_obj $65, 132, 44, $0 + anim_obj $65, 132, 44, $8 + anim_obj $65, 132, 44, $10 + anim_obj $65, 132, 44, $18 + anim_obj $65, 132, 44, $20 + anim_obj $65, 132, 44, $28 + anim_obj $65, 132, 44, $30 + anim_obj $65, 132, 44, $38 + anim_wait 128 + anim_wait 48 + anim_ret +; ca5de + +BattleAnim_LovelyKiss: ; ca5de + anim_2gfx ANIM_GFX_OBJECTS, ANIM_GFX_ANGELS + anim_bgeffect $7, $0, $2, $0 + anim_obj $96, 152, 40, $0 + anim_wait 32 + anim_sound $1, SFX_LICK + anim_obj ANIM_OBJ_HEART, 128, 40, $0 + anim_wait 40 + anim_ret +; ca5f6 + +BattleAnim_Bonemerang: ; ca5f6 + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_HIT + anim_sound $1a, SFX_HYDRO_PUMP + anim_obj $67, 88, 56, $1c + anim_wait 24 + anim_sound $1, SFX_MOVE_PUZZLE_PIECE + anim_obj $1, 136, 56, $0 + anim_wait 24 + anim_ret +; ca60c + +BattleAnim_Swift: ; ca60c + anim_1gfx ANIM_GFX_OBJECTS + anim_sound $1a, SFX_METRONOME + anim_obj $6a, 64, 88, $4 + anim_wait 4 + anim_obj $6a, 64, 72, $4 + anim_wait 4 + anim_obj $6a, 64, 76, $4 + anim_wait 64 + anim_ret +; ca624 + +BattleAnim_Crabhammer: ; ca624 + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_wait 48 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 +BattleAnim_Crabhammer_branch_ca631: ; ca631 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 136, 56, $0 + anim_wait 12 + anim_loop $3, BattleAnim_Crabhammer_branch_ca631 + anim_ret +; ca63f + +BattleAnim_SkullBash: ; ca63f + anim_jumpif $1, BattleAnim_SkullBash_branch_c9fb5 + anim_1gfx ANIM_GFX_HIT + anim_bgeffect $1f, $14, $2, $0 + anim_wait 32 + anim_call BattleAnim_SkullBash_branch_cbca7 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 +BattleAnim_SkullBash_branch_ca659: ; ca659 + anim_sound $1, SFX_HEADBUTT + anim_obj $1, 136, 56, $0 + anim_wait 8 + anim_loop $3, BattleAnim_SkullBash_branch_ca659 + anim_call BattleAnim_SkullBash_branch_cbcb7 + anim_ret +; ca66a + +BattleAnim_Kinesis: ; ca66a + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_NOISE + anim_bgeffect $6, $0, $2, $0 + anim_obj $6b, 80, 76, $0 + anim_wait 32 +BattleAnim_Kinesis_branch_ca678: ; ca678 + anim_sound $0, SFX_KINESIS + anim_obj $4b, 64, 88, $0 + anim_wait 32 + anim_loop $3, BattleAnim_Kinesis_branch_ca678 + anim_wait 32 + anim_sound $0, SFX_KINESIS_2 + anim_wait 32 + anim_ret +; ca68b + +BattleAnim_Peck: ; ca68b + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_PECK + anim_obj $2, 128, 48, $0 + anim_wait 8 + anim_sound $1, SFX_PECK + anim_obj $2, 136, 56, $0 + anim_wait 16 + anim_ret +; ca6a0 + +BattleAnim_DrillPeck: ; ca6a0 + anim_1gfx ANIM_GFX_HIT +BattleAnim_DrillPeck_branch_ca6a2: ; ca6a2 + anim_sound $1, SFX_PECK + anim_obj $2, 124, 56, $0 + anim_wait 4 + anim_sound $1, SFX_PECK + anim_obj $2, 132, 48, $0 + anim_wait 4 + anim_sound $1, SFX_PECK + anim_obj $2, 140, 56, $0 + anim_wait 4 + anim_sound $1, SFX_PECK + anim_obj $2, 132, 64, $0 + anim_wait 4 + anim_loop $5, BattleAnim_DrillPeck_branch_ca6a2 + anim_wait 16 + anim_ret +; ca6cc + +BattleAnim_Guillotine: ; ca6cc + anim_1gfx ANIM_GFX_CUT + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $10 + anim_bgeffect $1f, $40, $2, $0 + anim_sound $1, SFX_VICEGRIP + anim_obj $37, 156, 44, $0 + anim_obj $37, 152, 40, $0 + anim_obj $37, 148, 36, $0 + anim_obj $39, 124, 76, $0 + anim_obj $39, 120, 72, $0 + anim_obj $39, 116, 68, $0 + anim_obj $39, 120, 72, $0 + anim_wait 32 + anim_ret +; ca700 + +BattleAnim_Flash: ; ca700 + anim_1gfx ANIM_GFX_SPEED + anim_sound $1, SFX_FLASH + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $6, $20 + anim_wait 4 + anim_obj $6c, 136, 56, $0 + anim_wait 4 + anim_obj $6c, 136, 56, $8 + anim_wait 4 + anim_obj $6c, 136, 56, $10 + anim_wait 4 + anim_obj $6c, 136, 56, $18 + anim_wait 4 + anim_obj $6c, 136, 56, $20 + anim_wait 4 + anim_obj $6c, 136, 56, $28 + anim_wait 4 + anim_obj $6c, 136, 56, $30 + anim_wait 4 + anim_obj $6c, 136, 56, $38 + anim_wait 32 + anim_ret +; ca73c + +BattleAnim_Substitute: ; ca73c + anim_sound $0, SFX_SURF + anim_jumpif $3, BattleAnim_Substitute_branch_ca77c + anim_jumpif $2, BattleAnim_Substitute_branch_ca76e + anim_jumpif $1, BattleAnim_Substitute_branch_ca760 + anim_1gfx ANIM_GFX_SMOKE + anim_bgeffect $27, $0, $1, $0 + anim_wait 48 + anim_raisesub + anim_obj $1c, 48, 96, $0 + anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; ca760 + +BattleAnim_Substitute_branch_ca760: ; ca760 + anim_bgeffect $27, $0, $1, $0 + anim_wait 48 + anim_dropsub + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; ca76e + +BattleAnim_Substitute_branch_ca76e: ; ca76e + anim_bgeffect $27, $0, $1, $0 + anim_wait 48 + anim_raisesub + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; ca77c + +BattleAnim_Substitute_branch_ca77c: ; ca77c + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_wait 48 + anim_dropsub + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 32 + anim_ret +; ca78a + +BattleAnim_Minimize: ; ca78a + anim_sound $0, SFX_SURF + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Minimize_branch_cbcaf + anim_minimize + anim_bgeffect $28, $0, $1, $0 + anim_wait 48 + anim_updateactorpic + anim_incbgeffect $28 + anim_wait 48 + anim_call BattleAnim_Minimize_branch_cbcb7 + anim_ret +; ca7a1 + +BattleAnim_SkyAttack: ; ca7a1 + anim_jumpif $1, BattleAnim_SkyAttack_branch_c9fb5 + anim_1gfx ANIM_GFX_SKY_ATTACK + anim_bgeffect $27, $0, $1, $0 + anim_wait 32 + anim_sound $0, SFX_HYPER_BEAM + anim_obj $6e, 48, 88, $40 + anim_wait 64 + anim_incobj $1 + anim_wait 21 + anim_sound $1, SFX_HYPER_BEAM + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_wait 64 + anim_incobj $1 + anim_wait 32 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 16 + anim_ret +; ca7cc + +BattleAnim_NightShade: ; ca7cc + anim_1gfx ANIM_GFX_HIT + anim_bgp $1b + anim_obp1 $1b + anim_wait 32 + anim_call BattleAnim_NightShade_branch_cbcca + anim_bgeffect ANIM_BG_NIGHT_SHADE, $0, $0, $8 + anim_sound $1, SFX_PSYCHIC + anim_wait 96 + anim_incbgeffect ANIM_BG_NIGHT_SHADE + anim_call BattleAnim_NightShade_branch_cbcd2 + anim_ret +; ca7e5 + +BattleAnim_Lick: ; ca7e5 + anim_1gfx ANIM_GFX_WATER + anim_sound $1, SFX_LICK + anim_obj $6f, 136, 56, $0 + anim_wait 64 + anim_ret +; ca7f1 + +BattleAnim_TriAttack: ; ca7f1 + anim_3gfx ANIM_GFX_FIRE, ANIM_GFX_ICE, ANIM_GFX_LIGHTNING + anim_call BattleAnim_TriAttack_branch_cbbcc + anim_wait 16 + anim_call BattleAnim_TriAttack_branch_cbbdf + anim_wait 16 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $4 + anim_sound $1, SFX_THUNDER + anim_obj $2f, 152, 68, $0 + anim_wait 16 + anim_ret +; ca80c + +BattleAnim_Withdraw: ; ca80c + anim_1gfx ANIM_GFX_REFLECT + anim_call BattleAnim_Withdraw_branch_cbcaf + anim_bgeffect $21, $0, $1, $50 + anim_wait 48 + anim_sound $0, SFX_SHINE + anim_obj $70, 48, 88, $0 + anim_wait 64 + anim_incobj $2 + anim_wait 1 + anim_incbgeffect $21 + anim_call BattleAnim_Withdraw_branch_cbcb7 + anim_ret +; ca829 + +BattleAnim_Psybeam: ; ca829 + anim_1gfx ANIM_GFX_PSYCHIC + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect $8, $0, $4, $0 +BattleAnim_Psybeam_branch_ca835: ; ca835 + anim_sound $1a, SFX_PSYBEAM + anim_obj $4c, 64, 88, $4 + anim_wait 4 + anim_loop $a, BattleAnim_Psybeam_branch_ca835 + anim_wait 48 + anim_ret +; ca844 + +BattleAnim_DreamEater: ; ca844 + anim_1gfx ANIM_GFX_BUBBLE + anim_bgp $1b + anim_obp0 $27 + anim_sound $1b, SFX_WATER_GUN + anim_call BattleAnim_DreamEater_branch_cbab3 + anim_wait 128 + anim_wait 48 + anim_ret +; ca853 + +BattleAnim_LeechLife: ; ca853 + anim_1gfx ANIM_GFX_BUBBLE + anim_sound $1b, SFX_WATER_GUN + anim_call BattleAnim_LeechLife_branch_cbab3 + anim_wait 128 + anim_wait 48 + anim_ret +; ca85e + +BattleAnim_Harden: ; ca85e + anim_1gfx ANIM_GFX_REFLECT + anim_obp0 $0 + anim_call BattleAnim_Harden_branch_cbca7 + anim_call BattleAnim_Harden_branch_cbc43 + anim_call BattleAnim_Harden_branch_cbcb7 + anim_ret +; ca86c + +BattleAnim_Psywave: ; ca86c + anim_1gfx ANIM_GFX_PSYCHIC + anim_bgeffect ANIM_BG_PSYCHIC, $0, $0, $0 +BattleAnim_Psywave_branch_ca873: ; ca873 + anim_sound $1a, SFX_PSYCHIC + anim_obj $4c, 64, 80, $2 + anim_wait 8 + anim_sound $1a, SFX_PSYCHIC + anim_obj $4c, 64, 88, $3 + anim_wait 8 + anim_sound $1a, SFX_PSYCHIC + anim_obj $4c, 64, 96, $4 + anim_wait 8 + anim_loop $3, BattleAnim_Psywave_branch_ca873 + anim_wait 32 + anim_incbgeffect ANIM_BG_PSYCHIC + anim_wait 4 + anim_ret +; ca897 + +BattleAnim_Glare: ; ca897 + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $20 + anim_bgeffect $6, $0, $2, $0 + anim_call BattleAnim_Glare_branch_cbadc + anim_wait 16 + anim_ret +; ca8a8 + +BattleAnim_Thrash: ; ca8a8 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_POUND + anim_obj $8, 120, 72, $0 + anim_obj $0, 120, 72, $0 + anim_wait 6 + anim_sound $1, SFX_MOVE_PUZZLE_PIECE + anim_obj $6, 136, 56, $0 + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 152, 40, $0 + anim_obj $0, 152, 40, $0 + anim_wait 16 + anim_ret +; ca8d5 + +BattleAnim_Growth: ; ca8d5 + anim_bgeffect ANIM_BG_WHITE_HUES, $0, $8, $0 + anim_1gfx ANIM_GFX_CHARGE + anim_sound $0, SFX_SWORDS_DANCE + anim_obj $72, 48, 108, $0 + anim_obj $72, 48, 108, $8 + anim_obj $72, 48, 108, $10 + anim_obj $72, 48, 108, $18 + anim_obj $72, 48, 108, $20 + anim_obj $72, 48, 108, $28 + anim_obj $72, 48, 108, $30 + anim_obj $72, 48, 108, $38 + anim_wait 64 + anim_ret +; ca909 + +BattleAnim_Conversion2: ; ca909 + anim_1gfx ANIM_GFX_EXPLOSION + anim_sound $ff, SFX_SHARPEN + anim_obj $73, 132, 44, $0 + anim_obj $73, 132, 44, $8 + anim_obj $73, 132, 44, $10 + anim_obj $73, 132, 44, $18 + anim_obj $73, 132, 44, $20 + anim_obj $73, 132, 44, $28 + anim_obj $73, 132, 44, $30 + anim_obj $73, 132, 44, $38 + anim_wait 128 + anim_wait 48 + anim_ret +; ca939 + +BattleAnim_Smokescreen: ; ca939 + anim_3gfx ANIM_GFX_HAZE, ANIM_GFX_EGG, ANIM_GFX_SMOKE + anim_sound $1a, SFX_THROW_BALL + anim_obj $75, 64, 92, $6c + anim_wait 24 + anim_incobj $1 + anim_sound $1, SFX_BALL_POOF + anim_obj $1c, 108, 70, $10 + anim_wait 8 +BattleAnim_Smokescreen_branch_ca951: ; ca951 + anim_sound $1, SFX_MENU + anim_obj $74, 132, 60, $20 + anim_wait 8 + anim_loop $5, BattleAnim_Smokescreen_branch_ca951 + anim_wait 128 + anim_ret +; ca960 + +BattleAnim_Strength: ; ca960 + anim_2gfx ANIM_GFX_ROCKS, ANIM_GFX_HIT + anim_bgeffect $20, $10, $1, $20 + anim_sound $0, SFX_STRENGTH + anim_obj $1f, 64, 104, $1 + anim_wait 128 + anim_incobj $1 + anim_wait 20 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 132, 40, $0 + anim_wait 16 + anim_ret +; ca97e + +BattleAnim_SwordsDance: ; ca97e + anim_1gfx ANIM_GFX_WHIP + anim_sound $0, SFX_SWORDS_DANCE + anim_obj $76, 48, 108, $0 + anim_obj $76, 48, 108, $d + anim_obj $76, 48, 108, $1a + anim_obj $76, 48, 108, $27 + anim_obj $76, 48, 108, $34 + anim_wait 56 + anim_ret +; ca99e + +BattleAnim_QuickAttack: ; ca99e + anim_2gfx ANIM_GFX_SPEED, ANIM_GFX_HIT + anim_sound $0, SFX_MENU + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_obj $77, 24, 88, $2 + anim_obj $77, 32, 88, $1 + anim_obj $77, 40, 88, $0 + anim_obj $77, 48, 88, $80 + anim_obj $77, 56, 88, $81 + anim_obj $77, 64, 88, $82 + anim_wait 12 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 136, 56, $0 + anim_wait 8 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 16 + anim_ret +; ca9d8 + +BattleAnim_Meditate: ; ca9d8 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Meditate_branch_cbca7 + anim_sound $0, SFX_PSYBEAM + anim_bgeffect $28, $0, $1, $0 + anim_wait 48 + anim_incbgeffect $28 + anim_wait 48 + anim_call BattleAnim_Meditate_branch_cbcb7 + anim_ret +; ca9ed + +BattleAnim_Sharpen: ; ca9ed + anim_1gfx ANIM_GFX_SHAPES + anim_obp0 $e4 + anim_call BattleAnim_Sharpen_branch_cbca7 + anim_sound $0, SFX_SHARPEN + anim_bgeffect $18, $0, $1, $40 + anim_obj $78, 48, 88, $0 + anim_wait 96 + anim_incobj $2 + anim_incbgeffect $18 + anim_call BattleAnim_Sharpen_branch_cbcb7 + anim_ret +; caa0a + +BattleAnim_DefenseCurl: ; caa0a + anim_1gfx ANIM_GFX_SHAPES + anim_obp0 $e4 + anim_call BattleAnim_DefenseCurl_branch_cbca7 + anim_sound $0, SFX_SHARPEN + anim_bgeffect $18, $0, $1, $40 + anim_obj $79, 48, 88, $0 + anim_wait 96 + anim_incobj $2 + anim_incbgeffect $18 + anim_call BattleAnim_DefenseCurl_branch_cbcb7 + anim_ret +; caa27 + +BattleAnim_SeismicToss: ; caa27 + anim_2gfx ANIM_GFX_GLOBE, ANIM_GFX_HIT + anim_bgeffect $20, $10, $1, $20 + anim_sound $0, SFX_STRENGTH + anim_obj $20, 64, 104, $1 + anim_wait 128 + anim_incobj $1 + anim_wait 20 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 132, 40, $0 + anim_wait 16 + anim_ret +; caa45 + +BattleAnim_Rage: ; caa45 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Rage_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_sound $0, SFX_RAGE + anim_wait 72 + anim_incbgeffect $1a + anim_call BattleAnim_Rage_branch_cbcb7 + anim_sound $1, SFX_MOVE_PUZZLE_PIECE + anim_obj $0, 120, 72, $0 + anim_wait 6 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 152, 40, $0 + anim_wait 16 + anim_ret +; caa74 + +BattleAnim_Agility: ; caa74 + anim_1gfx ANIM_GFX_WIND + anim_obp0 $fc + anim_call BattleAnim_Agility_branch_cbca7 + anim_bgeffect $18, $0, $1, $40 + anim_obj $7d, 8, 24, $10 + anim_obj $7d, 8, 48, $2 + anim_obj $7d, 8, 88, $8 + anim_wait 4 + anim_obj $7d, 8, 32, $6 + anim_obj $7d, 8, 56, $c + anim_obj $7d, 8, 80, $4 + anim_obj $7d, 8, 104, $e +BattleAnim_Agility_branch_caaa4: ; caaa4 + anim_sound $0, SFX_RAZOR_WIND + anim_wait 4 + anim_loop $12, BattleAnim_Agility_branch_caaa4 + anim_incbgeffect $18 + anim_call BattleAnim_Agility_branch_cbcb7 + anim_ret +; caab2 + +BattleAnim_BoneClub: ; caab2 + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_MISC + anim_obj $68, 64, 88, $2 + anim_wait 32 + anim_sound $1, SFX_BONE_CLUB + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; caac5 + +BattleAnim_Barrier: ; caac5 + anim_1gfx ANIM_GFX_REFLECT + anim_enemyfeetobj + anim_bgeffect $6, $0, $2, $0 + anim_wait 8 + anim_sound $0, SFX_SHINE + anim_obj $50, 72, 80, $0 + anim_wait 32 + anim_sound $0, SFX_SHINE + anim_obj $50, 72, 80, $0 + anim_wait 32 + anim_ret +; caae1 + +BattleAnim_Waterfall: ; caae1 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Waterfall_branch_cbcaf + anim_bgeffect $25, $0, $1, $0 + anim_wait 16 + anim_call BattleAnim_Waterfall_branch_cbcb7 + anim_sound $1, SFX_LICK + anim_obj $1, 136, 56, $0 + anim_wait 3 + anim_sound $1, SFX_LICK + anim_obj $1, 136, 48, $0 + anim_wait 3 + anim_sound $1, SFX_LICK + anim_obj $1, 136, 40, $0 + anim_wait 3 + anim_sound $1, SFX_LICK + anim_obj $1, 136, 32, $0 + anim_wait 3 + anim_sound $1, SFX_LICK + anim_obj $1, 136, 24, $0 + anim_wait 8 + anim_ret +; cab1d + +BattleAnim_PsychicM: ; cab1d + anim_1gfx ANIM_GFX_PSYCHIC + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_bgeffect ANIM_BG_PSYCHIC, $0, $0, $0 +BattleAnim_PsychicM_branch_cab29: ; cab29 + anim_sound $1a, SFX_PSYCHIC + anim_obj $4c, 64, 88, $2 + anim_wait 8 + anim_loop $8, BattleAnim_PsychicM_branch_cab29 + anim_wait 96 + anim_incbgeffect ANIM_BG_PSYCHIC + anim_wait 4 + anim_ret +; cab3b + +BattleAnim_Sludge: ; cab3b + anim_1gfx ANIM_GFX_POISON + anim_call BattleAnim_Sludge_branch_cbc15 + anim_wait 56 + anim_ret +; cab42 + +BattleAnim_Toxic: ; cab42 + anim_1gfx ANIM_GFX_POISON + anim_bgeffect ANIM_BG_BLACK_HUES, $0, $8, $0 + anim_call BattleAnim_Toxic_branch_cbc35 + anim_wait 32 + anim_call BattleAnim_Toxic_branch_cbc15 + anim_wait 64 + anim_ret +; cab52 + +BattleAnim_Metronome: ; cab52 + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_SPEED + anim_sound $0, SFX_METRONOME + anim_obj $7a, 72, 88, $0 +BattleAnim_Metronome_branch_cab5d: ; cab5d + anim_obj $7b, 72, 80, $0 + anim_wait 8 + anim_loop $5, BattleAnim_Metronome_branch_cab5d + anim_wait 48 + anim_ret +; cab69 + +BattleAnim_Counter: ; cab69 + anim_1gfx ANIM_GFX_HIT +BattleAnim_Counter_branch_cab6b: ; cab6b + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $6, $2 + anim_sound $1, SFX_POUND + anim_obj $8, 120, 72, $0 + anim_obj $0, 120, 72, $0 + anim_wait 6 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $6, $2 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $6, 136, 40, $0 + anim_obj $0, 136, 40, $0 + anim_wait 6 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $6, $2 + anim_sound $1, SFX_MEGA_KICK + anim_obj $7, 152, 56, $0 + anim_obj $0, 152, 56, $0 + anim_wait 6 + anim_loop $3, BattleAnim_Counter_branch_cab6b + anim_wait 16 + anim_ret +; cabaa + +BattleAnim_LowKick: ; cabaa + anim_1gfx ANIM_GFX_HIT + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 124, 64, $0 + anim_obj $0, 124, 64, $0 + anim_wait 6 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 132, 64, $0 + anim_obj $0, 132, 64, $0 + anim_wait 6 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $2 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 140, 64, $0 + anim_obj $0, 140, 64, $0 + anim_wait 16 + anim_ret +; cabe6 + +BattleAnim_WingAttack: ; cabe6 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 148, 56, $0 + anim_obj $1, 116, 56, $0 + anim_wait 6 + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 144, 56, $0 + anim_obj $1, 120, 56, $0 + anim_wait 6 + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 140, 56, $0 + anim_obj $1, 124, 56, $0 + anim_wait 16 + anim_ret +; cac13 + +BattleAnim_Slam: ; cac13 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_WING_ATTACK + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $2 + anim_obj $1, 124, 40, $0 + anim_wait 16 + anim_ret +; cac24 + +BattleAnim_Disable: ; cac24 + anim_2gfx ANIM_GFX_LIGHTNING, ANIM_GFX_STATUS + anim_bgeffect $6, $0, $2, $0 + anim_obj $7c, 132, 56, $0 + anim_wait 16 + anim_sound $1, SFX_BIND + anim_obj ANIM_OBJ_PARALYZED, 104, 56, $42 + anim_obj ANIM_OBJ_PARALYZED, 160, 56, $c2 + anim_wait 96 + anim_ret +; cac41 + +BattleAnim_TailWhip: ; cac41 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_TailWhip_branch_cbcaf + anim_sound $0, SFX_TAIL_WHIP + anim_bgeffect $26, $0, $1, $0 + anim_wait 32 + anim_incbgeffect $26 + anim_call BattleAnim_TailWhip_branch_cbcb7 + anim_ret +; cac55 + +BattleAnim_Struggle: ; cac55 + anim_1gfx ANIM_GFX_HIT + anim_sound $1, SFX_POUND + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; cac61 + +BattleAnim_Sketch: ; cac61 + anim_1gfx ANIM_GFX_OBJECTS + anim_call BattleAnim_Sketch_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_sound $0, SFX_SKETCH + anim_obj $98, 72, 80, $0 + anim_wait 80 + anim_incbgeffect $1a + anim_call BattleAnim_Sketch_branch_cbcb7 + anim_wait 1 + anim_ret +; cac7b + +BattleAnim_TripleKick: ; cac7b + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_TripleKick_branch_cac95 + anim_jumpif $2, BattleAnim_TripleKick_branch_caca5 + anim_sound $1, SFX_MEGA_KICK + anim_obj $7, 144, 48, $0 + anim_wait 6 + anim_obj $1, 144, 48, $0 + anim_wait 8 + anim_ret +; cac95 + +BattleAnim_TripleKick_branch_cac95: ; cac95 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 120, 64, $0 + anim_wait 6 + anim_obj $1, 120, 64, $0 + anim_wait 8 + anim_ret +; caca5 + +BattleAnim_TripleKick_branch_caca5: ; caca5 + anim_sound $1, SFX_DOUBLE_KICK + anim_obj $7, 132, 32, $0 + anim_wait 6 + anim_obj $1, 132, 32, $0 + anim_wait 8 + anim_ret +; cacb5 + +BattleAnim_Thief: ; cacb5 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Thief_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 16 + anim_sound $1, SFX_THIEF + anim_obj $1, 128, 48, $0 + anim_wait 16 + anim_call BattleAnim_Thief_branch_cbcb7 + anim_wait 1 + anim_1gfx ANIM_GFX_STATUS + anim_sound $1, SFX_THIEF_2 + anim_obj $8b, 120, 76, $1 + anim_wait 64 + anim_ret +; cacd9 + +BattleAnim_SpiderWeb: ; cacd9 + anim_1gfx ANIM_GFX_WEB + anim_bgeffect $7, $0, $2, $0 + anim_obj $92, 132, 48, $0 + anim_sound $1a, SFX_SPIDER_WEB + anim_obj $5a, 64, 80, $0 + anim_wait 4 + anim_obj $5a, 64, 88, $0 + anim_wait 4 + anim_obj $5a, 64, 84, $0 + anim_wait 64 + anim_ret +; cacfb + +BattleAnim_MindReader: ; cacfb + anim_1gfx ANIM_GFX_MISC + anim_sound $1, SFX_MIND_READER +BattleAnim_MindReader_branch_cad00: ; cad00 + anim_obj $88, 132, 48, $3 + anim_obj $88, 132, 48, $12 + anim_obj $88, 132, 48, $20 + anim_obj $88, 132, 48, $31 + anim_wait 16 + anim_loop $2, BattleAnim_MindReader_branch_cad00 + anim_wait 32 + anim_ret +; cad1b + +BattleAnim_Nightmare: ; cad1b + anim_1gfx ANIM_GFX_ANGELS + anim_bgp $1b + anim_obp0 $f + anim_obj $94, 132, 40, $0 + anim_obj $94, 132, 40, $a0 + anim_sound $1, SFX_NIGHTMARE + anim_wait 96 + anim_ret +; cad30 + +BattleAnim_FlameWheel: ; cad30 + anim_1gfx ANIM_GFX_FIRE +BattleAnim_FlameWheel_branch_cad32: ; cad32 + anim_sound $0, SFX_EMBER + anim_obj $7f, 48, 96, $0 + anim_wait 6 + anim_loop $8, BattleAnim_FlameWheel_branch_cad32 + anim_wait 96 + anim_call BattleAnim_FlameWheel_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $3 + anim_sound $1, SFX_EMBER + anim_obj $f, 136, 48, $1 + anim_obj $f, 136, 48, $4 + anim_obj $f, 136, 48, $5 + anim_wait 8 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 4 + anim_incobj $9 + anim_wait 8 + anim_ret +; cad6b + +BattleAnim_Snore: ; cad6b + anim_2gfx ANIM_GFX_STATUS, ANIM_GFX_NOISE + anim_obj $54, 64, 80, $0 + anim_wait 32 + anim_bgeffect $1f, $60, $2, $0 + anim_sound $0, SFX_SNORE +BattleAnim_Snore_branch_cad7c: ; cad7c + anim_call BattleAnim_Snore_branch_cbbbc + anim_wait 16 + anim_loop $2, BattleAnim_Snore_branch_cad7c + anim_wait 8 + anim_ret +; cad86 + +BattleAnim_Curse: ; cad86 + anim_jumpif $1, BattleAnim_Curse_branch_cada3 + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_OBJECTS + anim_obj $a5, 68, 72, $0 + anim_sound $0, SFX_CURSE + anim_wait 32 + anim_incobj $1 + anim_wait 12 + anim_sound $0, SFX_POISON_STING + anim_obj $4, 44, 96, $0 + anim_wait 16 + anim_ret +; cada3 + +BattleAnim_Curse_branch_cada3: ; cada3 + anim_1gfx ANIM_GFX_SPEED + anim_call BattleAnim_Curse_branch_cbca7 + anim_bgeffect $19, $0, $1, $40 + anim_sound $0, SFX_SHARPEN + anim_wait 64 + anim_incbgeffect $19 + anim_wait 1 + anim_bgeffect $16, $0, $1, $40 +BattleAnim_Curse_branch_cadb9: ; cadb9 + anim_sound $0, SFX_SWORDS_DANCE + anim_obj $47, 44, 108, $6 + anim_wait 2 + anim_obj $47, 36, 108, $6 + anim_wait 2 + anim_obj $47, 52, 108, $8 + anim_wait 2 + anim_obj $47, 28, 108, $8 + anim_wait 2 + anim_obj $47, 60, 108, $6 + anim_wait 2 + anim_obj $47, 20, 108, $8 + anim_wait 2 + anim_obj $47, 68, 108, $8 + anim_wait 2 + anim_loop $3, BattleAnim_Curse_branch_cadb9 + anim_wait 8 + anim_incbgeffect $16 + anim_call BattleAnim_Curse_branch_cbcb7 + anim_ret +; cadf1 + +BattleAnim_Flail: ; cadf1 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Flail_branch_cbca7 + anim_sound $0, SFX_SUBMISSION + anim_bgeffect $2c, $0, $1, $0 + anim_wait 8 + anim_obj $1, 120, 48, $0 + anim_wait 8 + anim_obj $1, 152, 48, $0 + anim_wait 8 + anim_obj $1, 136, 48, $0 + anim_wait 8 + anim_incbgeffect $2c + anim_call BattleAnim_Flail_branch_cbcb7 + anim_ret +; cae17 + +BattleAnim_Conversion: ; cae17 + anim_1gfx ANIM_GFX_EXPLOSION + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_sound $ff, SFX_SHARPEN + anim_obj $91, 48, 88, $0 + anim_obj $91, 48, 88, $8 + anim_obj $91, 48, 88, $10 + anim_obj $91, 48, 88, $18 + anim_obj $91, 48, 88, $20 + anim_obj $91, 48, 88, $28 + anim_obj $91, 48, 88, $30 + anim_obj $91, 48, 88, $38 + anim_wait 128 + anim_ret +; cae4b + +BattleAnim_Aeroblast: ; cae4b + anim_2gfx ANIM_GFX_BEAM, ANIM_GFX_AEROBLAST + anim_bgp $1b + anim_bgeffect $1f, $50, $4, $10 + anim_bgeffect $6, $0, $2, $0 + anim_sound $0, SFX_AEROBLAST + anim_obj $b3, 72, 88, $0 + anim_wait 32 + anim_sound $0, SFX_HYPER_BEAM + anim_obj $27, 80, 84, $0 + anim_wait 2 + anim_sound $1, SFX_HYPER_BEAM + anim_obj $27, 96, 76, $0 + anim_wait 2 + anim_sound $1, SFX_HYPER_BEAM + anim_obj $27, 112, 68, $0 + anim_obj $28, 126, 62, $0 + anim_wait 48 + anim_ret +; cae84 + +BattleAnim_CottonSpore: ; cae84 + anim_obp0 $54 + anim_1gfx ANIM_GFX_MISC + anim_sound $1, SFX_POWDER +BattleAnim_CottonSpore_branch_cae8b: ; cae8b + anim_obj $81, 132, 32, $0 + anim_wait 8 + anim_loop $5, BattleAnim_CottonSpore_branch_cae8b + anim_wait 96 + anim_ret +; cae97 + +BattleAnim_Reversal: ; cae97 + anim_2gfx ANIM_GFX_SHINE, ANIM_GFX_HIT + anim_bgeffect $7, $0, $0, $0 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $4, 112, 64, $0 + anim_wait 2 + anim_sound $1, SFX_SHINE + anim_obj $a7, 120, 56, $0 + anim_wait 2 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $4, 128, 56, $0 + anim_wait 2 + anim_sound $1, SFX_SHINE + anim_obj $a7, 136, 48, $0 + anim_wait 2 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $4, 144, 48, $0 + anim_wait 2 + anim_sound $1, SFX_SHINE + anim_obj $a7, 152, 40, $0 + anim_wait 24 + anim_ret +; caed6 + +BattleAnim_Spite: ; caed6 + anim_1gfx ANIM_GFX_ANGELS + anim_obj $a4, 132, 16, $0 + anim_sound $1, SFX_SPITE + anim_wait 96 + anim_ret +; caee2 + +BattleAnim_PowderSnow: ; caee2 + anim_1gfx ANIM_GFX_ICE +BattleAnim_PowderSnow_branch_caee4: ; caee4 + anim_sound $1a, SFX_SHINE + anim_obj $8f, 64, 88, $23 + anim_wait 2 + anim_sound $1a, SFX_SHINE + anim_obj $8f, 64, 80, $24 + anim_wait 2 + anim_sound $1a, SFX_SHINE + anim_obj $8f, 64, 96, $23 + anim_wait 2 + anim_loop $2, BattleAnim_PowderSnow_branch_caee4 + anim_bgeffect ANIM_BG_WHITE_HUES, $0, $8, $0 + anim_wait 40 + anim_call BattleAnim_PowderSnow_branch_cbbdf + anim_wait 32 + anim_ret +; caf0e + +BattleAnim_Protect: ; caf0e + anim_1gfx ANIM_GFX_OBJECTS + anim_bgeffect $7, $0, $2, $0 + anim_obj $8a, 80, 80, $0 + anim_obj $8a, 80, 80, $d + anim_obj $8a, 80, 80, $1a + anim_obj $8a, 80, 80, $27 + anim_obj $8a, 80, 80, $34 + anim_sound $0, SFX_PROTECT + anim_wait 96 + anim_ret +; caf33 + +BattleAnim_MachPunch: ; caf33 + anim_2gfx ANIM_GFX_SPEED, ANIM_GFX_HIT + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_sound $0, SFX_MENU + anim_obj $77, 24, 88, $2 + anim_obj $77, 32, 88, $1 + anim_obj $77, 40, 88, $0 + anim_obj $77, 48, 88, $80 + anim_obj $77, 56, 88, $81 + anim_obj $77, 64, 88, $82 + anim_wait 12 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $6, 136, 56, $0 + anim_wait 6 + anim_obj $1, 136, 56, $0 + anim_wait 8 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 16 + anim_ret +; caf73 + +BattleAnim_ScaryFace: ; caf73 + anim_1gfx ANIM_GFX_BEAM + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_bgeffect $6, $0, $2, $0 + anim_call BattleAnim_ScaryFace_branch_cbadc + anim_wait 64 + anim_ret +; caf84 + +BattleAnim_FaintAttack: ; caf84 + anim_1gfx ANIM_GFX_HIT + anim_sound $0, SFX_CURSE + anim_call BattleAnim_FaintAttack_branch_cbca7 + anim_bgeffect $1d, $0, $1, $80 + anim_wait 96 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $4, 120, 32, $0 + anim_wait 8 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $4, 152, 40, $0 + anim_wait 8 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $4, 136, 48, $0 + anim_wait 32 + anim_incbgeffect $1d + anim_call BattleAnim_FaintAttack_branch_cbcb7 + anim_wait 4 + anim_ret +; cafb4 + +BattleAnim_SweetKiss: ; cafb4 + anim_2gfx ANIM_GFX_OBJECTS, ANIM_GFX_ANGELS + anim_bgeffect $7, $0, $2, $0 + anim_obj $97, 96, 40, $0 + anim_sound $1, SFX_SWEET_KISS + anim_wait 32 + anim_sound $1, SFX_SWEET_KISS_2 + anim_obj ANIM_OBJ_HEART, 120, 40, $0 + anim_wait 40 + anim_ret +; cafcf + +BattleAnim_BellyDrum: ; cafcf + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_NOISE + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 24 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 24 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 24 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_sound $0, SFX_BELLY_DRUM + anim_obj $aa, 64, 104, $0 + anim_obj $ab, 64, 92, $f8 + anim_wait 12 + anim_ret +; cb051 + +BattleAnim_SludgeBomb: ; cb051 + anim_2gfx ANIM_GFX_EGG, ANIM_GFX_POISON + anim_bgeffect ANIM_BG_BLACK_HUES, $0, $8, $0 + anim_sound $1a, SFX_SLUDGE_BOMB + anim_obj $62, 64, 92, $10 + anim_wait 36 + anim_call BattleAnim_SludgeBomb_branch_cbc15 + anim_wait 64 + anim_ret +; cb067 + +BattleAnim_MudSlap: ; cb067 + anim_1gfx ANIM_GFX_SAND + anim_obp0 $fc + anim_call BattleAnim_MudSlap_branch_cbc5b + anim_ret +; cb06f + +BattleAnim_Octazooka: ; cb06f + anim_3gfx ANIM_GFX_HAZE, ANIM_GFX_EGG, ANIM_GFX_SMOKE + anim_sound $1a, SFX_SLUDGE_BOMB + anim_obj $8c, 64, 92, $4 + anim_wait 16 + anim_obj $1c, 132, 56, $10 + anim_wait 8 + anim_jumpif $0, BattleAnim_Octazooka_branch_cb091 +BattleAnim_Octazooka_branch_cb086: ; cb086 + anim_obj $74, 132, 60, $20 + anim_wait 8 + anim_loop $5, BattleAnim_Octazooka_branch_cb086 + anim_wait 128 +BattleAnim_Octazooka_branch_cb091: ; cb091 + anim_ret +; cb092 + +BattleAnim_Spikes: ; cb092 + anim_1gfx ANIM_GFX_MISC + anim_sound $1a, SFX_MENU + anim_obj $8e, 48, 88, $20 + anim_wait 8 + anim_sound $1a, SFX_MENU + anim_obj $8e, 48, 88, $30 + anim_wait 8 + anim_sound $1a, SFX_MENU + anim_obj $8e, 48, 88, $28 + anim_wait 64 + anim_ret +; cb0b0 + +BattleAnim_ZapCannon: ; cb0b0 + anim_2gfx ANIM_GFX_LIGHTNING, ANIM_GFX_EXPLOSION + anim_bgp $1b + anim_obp0 $30 + anim_sound $1a, SFX_ZAP_CANNON + anim_obj $a3, 64, 92, $2 + anim_wait 40 + anim_sound $1, SFX_THUNDERSHOCK + anim_obj $32, 136, 56, $2 + anim_wait 16 + anim_obj $31, 136, 56, $0 + anim_wait 128 + anim_ret +; cb0d0 + +BattleAnim_Foresight: ; cb0d0 + anim_1gfx ANIM_GFX_SHINE + anim_call BattleAnim_Foresight_branch_cbcc2 + anim_bgeffect $7, $0, $0, $0 + anim_sound $1, SFX_FORESIGHT + anim_obj $a7, 132, 40, $0 + anim_wait 24 + anim_bgeffect $19, $0, $0, $40 + anim_wait 64 + anim_incbgeffect $19 + anim_call BattleAnim_Foresight_branch_cbcd2 + anim_wait 8 + anim_ret +; cb0f0 + +BattleAnim_DestinyBond: ; cb0f0 + anim_1gfx ANIM_GFX_ANGELS + anim_bgp $1b + anim_obp0 $0 + anim_jumpif $1, BattleAnim_DestinyBond_branch_cb104 + anim_sound $1a, SFX_WHIRLWIND + anim_obj $9b, 44, 120, $2 + anim_wait 128 + anim_ret +; cb104 + +BattleAnim_DestinyBond_branch_cb104: ; cb104 + anim_obj $9b, 132, 76, $0 + anim_sound $1, SFX_KINESIS + anim_bgeffect ANIM_BG_RETURN_MON, $0, $0, $0 + anim_wait 32 + anim_ret +; cb113 + +BattleAnim_PerishSong: ; cb113 + anim_1gfx ANIM_GFX_NOISE + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_sound $2, SFX_PERISH_SONG + anim_obj $a6, 88, 0, $0 + anim_obj $a6, 88, 0, $8 + anim_obj $a6, 88, 0, $10 + anim_obj $a6, 88, 0, $18 + anim_obj $a6, 88, 0, $20 + anim_obj $a6, 88, 0, $28 + anim_obj $a6, 88, 0, $30 + anim_obj $a6, 88, 0, $38 + anim_wait 112 + anim_ret +; cb14c + +BattleAnim_IcyWind: ; cb14c + anim_1gfx ANIM_GFX_SPEED + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_playerheadobj + anim_sound $0, SFX_PSYCHIC +BattleAnim_IcyWind_branch_cb15c: ; cb15c + anim_wait 8 + anim_obj $ae, 64, 88, $4 + anim_wait 8 + anim_obj $ae, 64, 80, $4 + anim_wait 8 + anim_obj $ae, 64, 96, $4 + anim_wait 8 + anim_loop $2, BattleAnim_IcyWind_branch_cb15c + anim_wait 16 + anim_bgeffect ANIM_BG_HEAD_FOLLOW, $0, $1, $0 + anim_wait 6 + anim_bgeffect ANIM_BG_NIGHT_SHADE, $0, $0, $8 + anim_wait 64 + anim_incbgeffect ANIM_BG_NIGHT_SHADE + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 4 + anim_incobj $7 + anim_wait 1 + anim_ret +; cb18c + +BattleAnim_Detect: ; cb18c + anim_1gfx ANIM_GFX_SHINE + anim_bgeffect $7, $0, $0, $0 + anim_sound $0, SFX_FORESIGHT + anim_obj $a7, 64, 88, $0 + anim_wait 24 + anim_ret +; cb19d + +BattleAnim_BoneRush: ; cb19d + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_MISC + anim_sound $1, SFX_BONE_CLUB + anim_obj $69, 132, 56, $2 + anim_wait 16 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 120, 48, $0 + anim_wait 16 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 144, 64, $0 + anim_wait 16 + anim_ret +; cb1bc + +BattleAnim_LockOn: ; cb1bc + anim_1gfx ANIM_GFX_MISC + anim_sound $1, SFX_MIND_READER +BattleAnim_LockOn_branch_cb1c1: ; cb1c1 + anim_obj $87, 132, 48, $3 + anim_obj $87, 132, 48, $12 + anim_obj $87, 132, 48, $20 + anim_obj $87, 132, 48, $31 + anim_wait 16 + anim_loop $2, BattleAnim_LockOn_branch_cb1c1 + anim_wait 32 + anim_ret +; cb1dc + +BattleAnim_Outrage: ; cb1dc + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Outrage_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_sound $0, SFX_OUTRAGE + anim_wait 72 + anim_incbgeffect $1a + anim_call BattleAnim_Outrage_branch_cbcb7 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $3 + anim_sound $1, SFX_MOVE_PUZZLE_PIECE + anim_obj $0, 120, 72, $0 + anim_wait 6 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 152, 40, $0 + anim_wait 16 + anim_ret +; cb210 + +BattleAnim_Sandstorm: ; cb210 + anim_1gfx ANIM_GFX_POWDER + anim_obj $a2, 88, 0, $0 + anim_wait 8 + anim_obj $a2, 72, 0, $1 + anim_wait 8 + anim_obj $a2, 56, 0, $2 +BattleAnim_Sandstorm_branch_cb223: ; cb223 + anim_sound $1, SFX_MENU + anim_wait 8 + anim_loop $10, BattleAnim_Sandstorm_branch_cb223 + anim_wait 8 + anim_ret +; cb22d + +BattleAnim_GigaDrain: ; cb22d + anim_2gfx ANIM_GFX_BUBBLE, ANIM_GFX_CHARGE + anim_call BattleAnim_GigaDrain_branch_cbca7 + anim_bgeffect $1c, $0, $0, $10 + anim_sound $1b, SFX_GIGA_DRAIN + anim_call BattleAnim_GigaDrain_branch_cbab3 + anim_wait 48 + anim_wait 128 + anim_incbgeffect $1c + anim_call BattleAnim_GigaDrain_branch_cbcb7 + anim_wait 1 + anim_1gfx ANIM_GFX_SHINE + anim_bgeffect $7, $0, $0, $0 +BattleAnim_GigaDrain_branch_cb24d: ; cb24d + anim_sound $0, SFX_METRONOME + anim_obj $9d, 24, 64, $0 + anim_wait 5 + anim_obj $9d, 56, 104, $0 + anim_wait 5 + anim_obj $9d, 24, 104, $0 + anim_wait 5 + anim_obj $9d, 56, 64, $0 + anim_wait 5 + anim_obj $9d, 40, 84, $0 + anim_wait 5 + anim_loop $2, BattleAnim_GigaDrain_branch_cb24d + anim_wait 32 + anim_ret +; cb274 + +BattleAnim_Endure: ; cb274 + anim_1gfx ANIM_GFX_SPEED + anim_call BattleAnim_Endure_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_bgeffect $7, $0, $2, $0 +BattleAnim_Endure_branch_cb283: ; cb283 + anim_sound $0, SFX_SWORDS_DANCE + anim_obj $47, 44, 108, $6 + anim_wait 2 + anim_obj $47, 36, 108, $6 + anim_wait 2 + anim_obj $47, 52, 108, $8 + anim_wait 2 + anim_obj $47, 28, 108, $8 + anim_wait 2 + anim_obj $47, 60, 108, $6 + anim_wait 2 + anim_obj $47, 20, 108, $8 + anim_wait 2 + anim_obj $47, 68, 108, $8 + anim_wait 2 + anim_loop $5, BattleAnim_Endure_branch_cb283 + anim_wait 8 + anim_incbgeffect $1a + anim_call BattleAnim_Endure_branch_cbcb7 + anim_ret +; cb2bb + +BattleAnim_Charm: ; cb2bb + anim_1gfx ANIM_GFX_OBJECTS + anim_call BattleAnim_Charm_branch_cbca7 + anim_bgeffect $26, $0, $1, $0 + anim_sound $0, SFX_ATTRACT + anim_obj ANIM_OBJ_HEART, 64, 80, $0 + anim_wait 32 + anim_incbgeffect $26 + anim_call BattleAnim_Charm_branch_cbcb7 + anim_wait 4 + anim_ret +; cb2d5 + +BattleAnim_Rollout: ; cb2d5 + anim_1gfx ANIM_GFX_HIT + anim_sound $0, SFX_SPARK + anim_call BattleAnim_Rollout_branch_cbcaf + anim_bgeffect $2e, $60, $1, $1 + anim_bgeffect $25, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $3, 136, 40, $0 + anim_wait 8 + anim_call BattleAnim_Rollout_branch_cbcb7 + anim_ret +; cb2f5 + +BattleAnim_FalseSwipe: ; cb2f5 + anim_2gfx ANIM_GFX_SHINE, ANIM_GFX_CUT + anim_bgeffect $7, $0, $0, $0 + anim_sound $1, SFX_CUT + anim_obj $3a, 152, 40, $0 + anim_wait 4 + anim_obj $9d, 136, 40, $0 + anim_wait 32 + anim_ret +; cb30d + +BattleAnim_Swagger: ; cb30d + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_WIND +BattleAnim_Swagger_branch_cb310: ; cb310 + anim_sound $0, SFX_MENU + anim_obj $a9, 72, 88, $44 + anim_wait 32 + anim_loop $2, BattleAnim_Swagger_branch_cb310 + anim_wait 32 + anim_sound $1, SFX_KINESIS_2 + anim_obj $83, 104, 40, $0 + anim_wait 40 + anim_ret +; cb328 + +BattleAnim_MilkDrink: ; cb328 + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_BUBBLE + anim_call BattleAnim_MilkDrink_branch_cbca7 + anim_obj $82, 74, 104, $0 + anim_wait 16 + anim_bgeffect $18, $0, $1, $40 + anim_sound $0, SFX_MILK_DRINK +BattleAnim_MilkDrink_branch_cb33c: ; cb33c + anim_obj $2c, 44, 88, $20 + anim_wait 8 + anim_loop $8, BattleAnim_MilkDrink_branch_cb33c + anim_wait 128 + anim_incbgeffect $18 + anim_call BattleAnim_MilkDrink_branch_cbcb7 + anim_ret +; cb34d + +BattleAnim_Spark: ; cb34d + anim_2gfx ANIM_GFX_LIGHTNING, ANIM_GFX_EXPLOSION + anim_sound $0, SFX_ZAP_CANNON + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $4, $3 + anim_obj $30, 48, 92, $0 + anim_wait 24 + anim_setobj $1, $3 + anim_wait 1 + anim_call BattleAnim_Spark_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_sound $0, SFX_SPARK + anim_wait 16 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 4 + anim_incobj $2 + anim_wait 1 + anim_sound $1, SFX_THUNDERSHOCK + anim_obj $32, 136, 56, $2 + anim_obj $33, 136, 56, $0 + anim_wait 32 + anim_ret +; cb386 + +BattleAnim_FuryCutter: ; cb386 + anim_1gfx ANIM_GFX_CUT +BattleAnim_FuryCutter_branch_cb388: ; cb388 + anim_sound $1, SFX_CUT + anim_jumpand $1, BattleAnim_FuryCutter_branch_cb397 + anim_obj $3a, 152, 40, $0 + anim_jump BattleAnim_FuryCutter_branch_cb39c +; cb397 + +BattleAnim_FuryCutter_branch_cb397: ; cb397 + anim_obj $3b, 112, 40, $0 +BattleAnim_FuryCutter_branch_cb39c: ; cb39c + anim_wait 16 + anim_jumpuntil BattleAnim_FuryCutter_branch_cb388 + anim_ret +; cb3a1 + +BattleAnim_SteelWing: ; cb3a1 + anim_1gfx ANIM_GFX_REFLECT + anim_obp0 $0 + anim_sound $0, SFX_RAGE + anim_call BattleAnim_SteelWing_branch_cbca7 + anim_call BattleAnim_SteelWing_branch_cbc43 + anim_call BattleAnim_SteelWing_branch_cbcb7 + anim_1gfx ANIM_GFX_HIT + anim_resetobp0 + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 148, 56, $0 + anim_obj $1, 116, 56, $0 + anim_wait 6 + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 144, 56, $0 + anim_obj $1, 120, 56, $0 + anim_wait 6 + anim_sound $1, SFX_WING_ATTACK + anim_obj $1, 140, 56, $0 + anim_obj $1, 124, 56, $0 + anim_wait 16 + anim_ret +; cb3df + +BattleAnim_MeanLook: ; cb3df + anim_1gfx ANIM_GFX_PSYCHIC + anim_obp0 $e0 + anim_sound $1, SFX_MEAN_LOOK + anim_obj $ac, 148, 32, $0 + anim_wait 5 + anim_obj $ac, 116, 64, $0 + anim_wait 5 + anim_obj $ac, 148, 64, $0 + anim_wait 5 + anim_obj $ac, 116, 32, $0 + anim_wait 5 + anim_obj $ac, 132, 48, $0 + anim_wait 128 + anim_ret +; cb405 + +BattleAnim_Attract: ; cb405 + anim_1gfx ANIM_GFX_OBJECTS +BattleAnim_Attract_branch_cb407: ; cb407 + anim_sound $0, SFX_ATTRACT + anim_obj $66, 44, 80, $2 + anim_wait 8 + anim_loop $5, BattleAnim_Attract_branch_cb407 + anim_wait 128 + anim_wait 64 + anim_ret +; cb417 + +BattleAnim_SleepTalk: ; cb417 + anim_1gfx ANIM_GFX_STATUS +BattleAnim_SleepTalk_branch_cb419: ; cb419 + anim_sound $0, SFX_STRENGTH + anim_obj $54, 64, 80, $0 + anim_wait 40 + anim_loop $2, BattleAnim_SleepTalk_branch_cb419 + anim_wait 32 + anim_ret +; cb428 + +BattleAnim_HealBell: ; cb428 + anim_2gfx ANIM_GFX_MISC, ANIM_GFX_NOISE + anim_obj $84, 72, 56, $0 + anim_wait 32 +BattleAnim_HealBell_branch_cb431: ; cb431 + anim_sound $0, SFX_HEAL_BELL + anim_obj $85, 72, 52, $0 + anim_wait 8 + anim_sound $0, SFX_HEAL_BELL + anim_obj $85, 72, 52, $1 + anim_wait 8 + anim_sound $0, SFX_HEAL_BELL + anim_obj $85, 72, 52, $2 + anim_wait 8 + anim_sound $0, SFX_HEAL_BELL + anim_obj $85, 72, 52, $0 + anim_wait 8 + anim_sound $0, SFX_HEAL_BELL + anim_obj $85, 72, 52, $2 + anim_wait 8 + anim_loop $4, BattleAnim_HealBell_branch_cb431 + anim_wait 64 + anim_ret +; cb464 + +BattleAnim_Return: ; cb464 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Return_branch_cbcaf + anim_bgeffect $22, $0, $1, $0 + anim_sound $0, SFX_RETURN + anim_wait 64 + anim_incbgeffect $22 + anim_wait 32 + anim_bgeffect $25, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $3, 136, 40, $0 + anim_wait 8 + anim_call BattleAnim_Return_branch_cbcb7 + anim_ret +; cb488 + +BattleAnim_Present: ; cb488 + anim_2gfx ANIM_GFX_STATUS, ANIM_GFX_BUBBLE + anim_sound $1, SFX_PRESENT + anim_obj $8d, 64, 88, $6c + anim_wait 56 + anim_obj $53, 104, 48, $0 + anim_wait 48 + anim_incobj $2 + anim_jumpif $3, BattleAnim_Present_branch_cb4b2 + anim_incobj $1 + anim_wait 1 + anim_1gfx ANIM_GFX_EXPLOSION + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $12 +BattleAnim_Present_branch_cb4aa: ; cb4aa + anim_call BattleAnim_Present_branch_cbb8f + anim_wait 16 + anim_jumpuntil BattleAnim_Present_branch_cb4aa + anim_ret +; cb4b2 + +BattleAnim_Present_branch_cb4b2: ; cb4b2 + anim_sound $1, SFX_METRONOME +BattleAnim_Present_branch_cb4b5: ; cb4b5 + anim_obj $2c, 132, 48, $24 + anim_wait 8 + anim_loop $8, BattleAnim_Present_branch_cb4b5 + anim_wait 128 + anim_ret +; cb4c1 + +BattleAnim_Frustration: ; cb4c1 + anim_1gfx ANIM_GFX_MISC + anim_sound $0, SFX_KINESIS_2 + anim_obj $83, 72, 80, $0 + anim_wait 40 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_Frustration_branch_cbca7 + anim_bgeffect $26, $0, $1, $0 + anim_wait 8 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 120, 48, $0 + anim_wait 8 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 152, 48, $0 + anim_wait 8 + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 136, 48, $0 + anim_wait 8 + anim_incbgeffect $26 + anim_wait 1 + anim_call BattleAnim_Frustration_branch_cbcb7 + anim_ret +; cb4f9 + +BattleAnim_Safeguard: ; cb4f9 + anim_1gfx ANIM_GFX_MISC + anim_bgeffect $6, $0, $2, $0 + anim_obj $89, 80, 80, $0 + anim_obj $89, 80, 80, $d + anim_obj $89, 80, 80, $1a + anim_obj $89, 80, 80, $27 + anim_obj $89, 80, 80, $34 + anim_sound $0, SFX_PROTECT + anim_wait 96 + anim_ret +; cb51e + +BattleAnim_PainSplit: ; cb51e + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_OBJECTS + anim_call BattleAnim_PainSplit_branch_cbcaf + anim_bgeffect $25, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_TACKLE + anim_obj $4, 112, 48, $0 + anim_obj $4, 76, 96, $0 + anim_wait 8 + anim_call BattleAnim_PainSplit_branch_cbcb7 + anim_wait 1 + anim_ret +; cb53d + +BattleAnim_SacredFire: ; cb53d + anim_1gfx ANIM_GFX_FIRE + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 +BattleAnim_SacredFire_branch_cb549: ; cb549 + anim_sound $0, SFX_EMBER + anim_obj $80, 48, 104, $0 + anim_wait 8 + anim_loop $8, BattleAnim_SacredFire_branch_cb549 + anim_wait 96 + anim_call BattleAnim_SacredFire_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_EMBER + anim_obj $f, 136, 48, $1 + anim_obj $f, 136, 48, $4 + anim_obj $f, 136, 48, $5 + anim_wait 8 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 4 + anim_incobj $9 + anim_wait 8 + anim_ret +; cb57d + +BattleAnim_Magnitude: ; cb57d + anim_1gfx ANIM_GFX_ROCKS +BattleAnim_Magnitude_branch_cb57f: ; cb57f + anim_bgeffect $1f, $e, $4, $0 + anim_sound $1, SFX_STRENGTH + anim_obj $1e, 128, 64, $40 + anim_wait 2 + anim_obj $1e, 120, 68, $30 + anim_wait 2 + anim_obj $1e, 152, 68, $30 + anim_wait 2 + anim_obj $1e, 144, 64, $40 + anim_wait 2 + anim_obj $1e, 136, 68, $30 + anim_wait 2 + anim_jumpuntil BattleAnim_Magnitude_branch_cb57f + anim_wait 96 + anim_ret +; cb5aa + +BattleAnim_Dynamicpunch: ; cb5aa + anim_2gfx ANIM_GFX_HIT, ANIM_GFX_EXPLOSION + anim_sound $1, SFX_COMET_PUNCH + anim_obj $a, 136, 56, $43 + anim_wait 16 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $12 + anim_call BattleAnim_Dynamicpunch_branch_cbb8f + anim_wait 16 + anim_ret +; cb5c0 + +BattleAnim_Megahorn: ; cb5c0 + anim_2gfx ANIM_GFX_HORN, ANIM_GFX_HIT + anim_bgeffect $1f, $40, $2, $0 + anim_wait 48 + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $3 + anim_obj $5f, 72, 80, $1 + anim_sound $1, SFX_HORN_ATTACK + anim_wait 16 + anim_obj $0, 136, 56, $0 + anim_wait 16 + anim_ret +; cb5de + +BattleAnim_Dragonbreath: ; cb5de + anim_1gfx ANIM_GFX_FIRE + anim_sound $1a, SFX_EMBER +BattleAnim_Dragonbreath_branch_cb5e3: ; cb5e3 + anim_obj $90, 64, 92, $4 + anim_wait 4 + anim_loop $a, BattleAnim_Dragonbreath_branch_cb5e3 + anim_wait 64 + anim_ret +; cb5ef + +BattleAnim_BatonPass: ; cb5ef + anim_1gfx ANIM_GFX_MISC + anim_obj $86, 44, 104, $20 + anim_sound $0, SFX_BATON_PASS + anim_call BattleAnim_BatonPass_branch_c9486 + anim_wait 64 + anim_ret +; cb5fe + +BattleAnim_Encore: ; cb5fe + anim_1gfx ANIM_GFX_OBJECTS + anim_obj $99, 64, 80, $90 + anim_obj $99, 64, 80, $10 + anim_sound $0, SFX_ENCORE + anim_wait 16 + anim_obj $9a, 64, 72, $2c + anim_wait 32 + anim_obj $9a, 64, 72, $34 + anim_wait 16 + anim_ret +; cb61b + +BattleAnim_Pursuit: ; cb61b + anim_1gfx ANIM_GFX_HIT + anim_jumpif $1, BattleAnim_Pursuit_branch_cb62b + anim_sound $1, SFX_COMET_PUNCH + anim_obj $1, 136, 56, $0 + anim_wait 16 + anim_ret +; cb62b + +BattleAnim_Pursuit_branch_cb62b: ; cb62b + anim_bgeffect ANIM_BG_HIDE_MON, $0, $0, $0 + anim_wait 4 + anim_call BattleAnim_Pursuit_branch_cbcc2 + anim_obj $ad, 132, 64, $0 + anim_wait 64 + anim_obj $ad, 132, 64, $1 + anim_sound $1, SFX_BALL_POOF + anim_bgeffect ANIM_BG_ENTER_MON, $0, $0, $0 + anim_wait 64 + anim_incobj $3 + anim_wait 16 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $0, 120, 56, $0 + anim_bgeffect $2d, $0, $0, $0 + anim_wait 16 + anim_call BattleAnim_Pursuit_branch_cbcd2 + anim_wait 1 + anim_ret +; cb65e + +BattleAnim_RapidSpin: ; cb65e + anim_2gfx ANIM_GFX_WIND, ANIM_GFX_HIT + anim_obp0 $e4 +BattleAnim_RapidSpin_branch_cb663: ; cb663 + anim_sound $0, SFX_MENU + anim_obj $a8, 44, 112, $0 + anim_wait 2 + anim_loop $5, BattleAnim_RapidSpin_branch_cb663 + anim_wait 24 + anim_call BattleAnim_RapidSpin_branch_cbcaf + anim_bgeffect $25, $0, $1, $0 + anim_wait 4 + anim_resetobp0 + anim_sound $1, SFX_MEGA_KICK + anim_obj $4, 136, 40, $0 + anim_wait 8 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 4 + anim_incobj $6 + anim_wait 1 + anim_ret +; cb68e + +BattleAnim_SweetScent: ; cb68e + anim_2gfx ANIM_GFX_FLOWER, ANIM_GFX_MISC + anim_sound $0, SFX_SWEET_SCENT + anim_obj ANIM_OBJ_FLOWER, 64, 96, $2 + anim_wait 2 + anim_obj ANIM_OBJ_FLOWER, 64, 80, $2 + anim_wait 96 + anim_obp0 $54 + anim_sound $1, SFX_SWEET_SCENT_2 + anim_obj ANIM_OBJ_COTTON, 136, 40, $15 + anim_obj ANIM_OBJ_COTTON, 136, 40, $2a + anim_obj ANIM_OBJ_COTTON, 136, 40, $3f + anim_wait 128 + anim_ret +; cb6b6 + +BattleAnim_IronTail: ; cb6b6 + anim_1gfx ANIM_GFX_REFLECT + anim_obp0 $0 + anim_sound $0, SFX_RAGE + anim_call BattleAnim_IronTail_branch_cbca7 + anim_call BattleAnim_IronTail_branch_cbc43 + anim_wait 4 + anim_1gfx ANIM_GFX_HIT + anim_resetobp0 + anim_bgeffect $26, $0, $1, $0 + anim_wait 16 + anim_sound $1, SFX_MEGA_KICK + anim_obj $0, 136, 48, $0 + anim_wait 16 + anim_incbgeffect $26 + anim_call BattleAnim_IronTail_branch_cbcb7 + anim_ret +; cb6dc + +BattleAnim_MetalClaw: ; cb6dc + anim_1gfx ANIM_GFX_REFLECT + anim_obp0 $0 + anim_sound $0, SFX_RAGE + anim_call BattleAnim_MetalClaw_branch_cbca7 + anim_call BattleAnim_MetalClaw_branch_cbc43 + anim_call BattleAnim_MetalClaw_branch_cbcb7 + anim_1gfx ANIM_GFX_CUT + anim_resetobp0 + anim_sound $1, SFX_SCRATCH + anim_obj $37, 144, 48, $0 + anim_obj $37, 140, 44, $0 + anim_obj $37, 136, 40, $0 + anim_wait 32 + anim_ret +; cb703 + +BattleAnim_VitalThrow: ; cb703 + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_VitalThrow_branch_cbca7 + anim_bgeffect $2f, $0, $1, $0 + anim_wait 16 + anim_sound $0, SFX_MENU + anim_obj $4, 64, 96, $0 + anim_wait 8 + anim_sound $0, SFX_MENU + anim_obj $4, 56, 88, $0 + anim_wait 8 + anim_sound $0, SFX_MENU + anim_obj $4, 68, 104, $0 + anim_wait 8 + anim_incbgeffect $2f + anim_wait 16 + anim_call BattleAnim_VitalThrow_branch_cbcb7 + anim_sound $1, SFX_MEGA_PUNCH + anim_obj $3, 132, 56, $0 + anim_wait 16 + anim_ret +; cb739 + +BattleAnim_MorningSun: ; cb739 + anim_1gfx ANIM_GFX_SHINE + anim_bgeffect $7, $0, $0, $0 + anim_sound $0, SFX_MORNING_SUN +BattleAnim_MorningSun_branch_cb743: ; cb743 + anim_obj $9c, 16, 48, $88 + anim_wait 6 + anim_loop $5, BattleAnim_MorningSun_branch_cb743 + anim_wait 32 + anim_jumpif $0, BattleAnim_MorningSun_branch_cb756 + anim_call BattleAnim_MorningSun_branch_cbc6a + anim_ret +; cb756 + +BattleAnim_MorningSun_branch_cb756: ; cb756 + anim_call BattleAnim_MorningSun_branch_cbc80 + anim_ret +; cb75a + +BattleAnim_Synthesis: ; cb75a + anim_1gfx ANIM_GFX_SHINE + anim_call BattleAnim_Synthesis_branch_cbca7 + anim_bgeffect $18, $0, $1, $40 + anim_bgeffect $7, $0, $0, $0 + anim_sound $0, SFX_OUTRAGE + anim_wait 72 + anim_incbgeffect $18 + anim_call BattleAnim_Synthesis_branch_cbcb7 + anim_jumpif $1, BattleAnim_Synthesis_branch_cb77a + anim_call BattleAnim_Synthesis_branch_cbc6a + anim_ret +; cb77a + +BattleAnim_Synthesis_branch_cb77a: ; cb77a + anim_call BattleAnim_Synthesis_branch_cbc80 + anim_ret +; cb77e + +BattleAnim_Crunch: ; cb77e + anim_2gfx ANIM_GFX_CUT, ANIM_GFX_HIT + anim_bgp $1b + anim_obp0 $c0 + anim_bgeffect $1f, $20, $2, $0 + anim_obj $36, 136, 56, $a8 + anim_obj $36, 136, 56, $28 + anim_wait 8 + anim_sound $1, SFX_BITE + anim_obj $0, 144, 48, $18 + anim_wait 16 + anim_sound $1, SFX_BITE + anim_obj $0, 128, 64, $18 + anim_wait 8 + anim_ret +; cb7a8 + +BattleAnim_Moonlight: ; cb7a8 + anim_1gfx ANIM_GFX_SHINE + anim_bgp $1b + anim_bgeffect $7, $0, $0, $0 + anim_obj $9e, 0, 40, $0 + anim_obj $9e, 16, 56, $0 + anim_obj $9e, 32, 72, $0 + anim_obj $9e, 48, 88, $0 + anim_obj $9e, 64, 104, $0 + anim_wait 1 + anim_sound $0, SFX_MOONLIGHT + anim_wait 63 + anim_jumpif $3, BattleAnim_Moonlight_branch_cb7d7 + anim_call BattleAnim_Moonlight_branch_cbc6a + anim_ret +; cb7d7 + +BattleAnim_Moonlight_branch_cb7d7: ; cb7d7 + anim_call BattleAnim_Moonlight_branch_cbc80 + anim_ret +; cb7db + +BattleAnim_HiddenPower: ; cb7db + anim_1gfx ANIM_GFX_CHARGE + anim_call BattleAnim_HiddenPower_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_bgeffect $7, $0, $2, $0 + anim_obj $9f, 44, 88, $0 + anim_obj $9f, 44, 88, $8 + anim_obj $9f, 44, 88, $10 + anim_obj $9f, 44, 88, $18 + anim_obj $9f, 44, 88, $20 + anim_obj $9f, 44, 88, $28 + anim_obj $9f, 44, 88, $30 + anim_obj $9f, 44, 88, $38 +BattleAnim_HiddenPower_branch_cb812: ; cb812 + anim_sound $0, SFX_SWORDS_DANCE + anim_wait 8 + anim_loop $c, BattleAnim_HiddenPower_branch_cb812 + anim_incbgeffect $1a + anim_call BattleAnim_HiddenPower_branch_cbcb7 + anim_wait 1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_incobj $7 + anim_incobj $8 + anim_incobj $9 + anim_wait 16 + anim_1gfx ANIM_GFX_HIT + anim_obj $0, 136, 56, $0 + anim_wait 32 + anim_ret +; cb83a + +BattleAnim_CrossChop: ; cb83a + anim_1gfx ANIM_GFX_CUT + anim_sound $1, SFX_CUT + anim_obj $a0, 152, 40, $0 + anim_obj $a1, 120, 72, $0 + anim_wait 8 + anim_bgeffect $1f, $58, $2, $0 + anim_wait 92 + anim_sound $1, SFX_VICEGRIP + anim_bgeffect ANIM_BG_FLASH_INVERTED, $0, $8, $10 + anim_wait 16 + anim_ret +; cb85a + +BattleAnim_Twister: ; cb85a + anim_2gfx ANIM_GFX_WIND, ANIM_GFX_HIT +BattleAnim_Twister_branch_cb85d: ; cb85d + anim_sound $0, SFX_RAZOR_WIND + anim_obj ANIM_OBJ_GUST, 64, 112, $0 + anim_wait 6 + anim_loop $9, BattleAnim_Twister_branch_cb85d +BattleAnim_Twister_branch_cb86a: ; cb86a + anim_sound $0, SFX_RAZOR_WIND + anim_wait 8 + anim_loop $8, BattleAnim_Twister_branch_cb86a + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_incobj $7 + anim_incobj $8 + anim_incobj $9 + anim_wait 64 + anim_obj $1, 144, 64, $18 +BattleAnim_Twister_branch_cb88a: ; cb88a + anim_sound $1, SFX_RAZOR_WIND + anim_wait 8 + anim_loop $4, BattleAnim_Twister_branch_cb88a + anim_obj $1, 128, 32, $18 +BattleAnim_Twister_branch_cb897: ; cb897 + anim_sound $1, SFX_RAZOR_WIND + anim_wait 8 + anim_loop $4, BattleAnim_Twister_branch_cb897 + anim_incobj $1 + anim_incobj $2 + anim_incobj $3 + anim_incobj $4 + anim_incobj $5 + anim_incobj $6 + anim_incobj $7 + anim_incobj $8 + anim_incobj $9 + anim_wait 32 + anim_ret +; cb8b3 + +BattleAnim_RainDance: ; cb8b3 + anim_1gfx ANIM_GFX_WATER + anim_bgp $f8 + anim_obp0 $7c + anim_sound $1, SFX_RAIN_DANCE + anim_obj $af, 88, 0, $0 + anim_wait 8 + anim_obj $af, 88, 0, $1 + anim_wait 8 + anim_obj $af, 88, 0, $2 + anim_wait 128 + anim_ret +; cb8cf + +BattleAnim_SunnyDay: ; cb8cf + anim_1gfx ANIM_GFX_WATER + anim_bgp $90 + anim_sound $1, SFX_MORNING_SUN + anim_obj $af, 88, 0, $2 + anim_wait 8 + anim_obj $af, 88, 0, $2 + anim_wait 8 + anim_obj $af, 88, 0, $2 + anim_wait 128 + anim_ret +; cb8e9 + +BattleAnim_MirrorCoat: ; cb8e9 + anim_2gfx ANIM_GFX_REFLECT, ANIM_GFX_SPEED + anim_bgeffect $6, $0, $2, $0 +BattleAnim_MirrorCoat_branch_cb8f1: ; cb8f1 + anim_sound $0, SFX_SHINE + anim_obj $50, 72, 80, $0 + anim_obj $ae, 64, 72, $4 + anim_wait 8 + anim_obj $ae, 64, 88, $4 + anim_wait 8 + anim_obj $ae, 64, 80, $4 + anim_wait 8 + anim_obj $ae, 64, 96, $4 + anim_wait 8 + anim_loop $3, BattleAnim_MirrorCoat_branch_cb8f1 + anim_wait 32 + anim_ret +; cb917 + +BattleAnim_PsychUp: ; cb917 + anim_1gfx ANIM_GFX_STATUS + anim_call BattleAnim_PsychUp_branch_cbca7 + anim_bgeffect $1a, $0, $1, $20 + anim_sound $0, SFX_PSYBEAM + anim_obj $b1, 44, 88, $0 + anim_obj $b1, 44, 88, $10 + anim_obj $b1, 44, 88, $20 + anim_obj $b1, 44, 88, $30 + anim_wait 64 + anim_incbgeffect $1a + anim_call BattleAnim_PsychUp_branch_cbcb7 + anim_wait 16 + anim_ret +; cb940 + +BattleAnim_Extremespeed: ; cb940 + anim_2gfx ANIM_GFX_SPEED, ANIM_GFX_CUT + anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0 + anim_sound $0, SFX_MENU + anim_obj $77, 24, 88, $2 + anim_obj $77, 32, 88, $1 + anim_obj $77, 40, 88, $0 + anim_obj $77, 48, 88, $80 + anim_obj $77, 56, 88, $81 + anim_obj $77, 64, 88, $82 + anim_wait 12 + anim_sound $1, SFX_CUT + anim_obj $3a, 152, 40, $0 + anim_wait 32 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 16 + anim_ret +; cb97a + +BattleAnim_Ancientpower: ; cb97a + anim_2gfx ANIM_GFX_ROCKS, ANIM_GFX_HIT + anim_sound $0, SFX_SPARK + anim_obj $b2, 64, 108, $20 + anim_wait 8 + anim_sound $0, SFX_SPARK + anim_obj $b2, 75, 102, $20 + anim_wait 8 + anim_sound $0, SFX_SPARK + anim_obj $b2, 85, 97, $20 + anim_wait 8 + anim_sound $0, SFX_SPARK + anim_obj $b2, 96, 92, $20 + anim_wait 8 + anim_sound $1, SFX_SPARK + anim_obj $b2, 106, 87, $20 + anim_wait 8 + anim_sound $1, SFX_SPARK + anim_obj $b2, 116, 82, $20 + anim_wait 8 + anim_sound $1, SFX_SPARK + anim_obj $b2, 126, 77, $20 + anim_wait 8 + anim_sound $1, SFX_SPARK + anim_obj $0, 136, 56, $0 + anim_wait 6 + anim_ret +; cb9c6 + +BattleAnim_ShadowBall: ; cb9c6 + anim_2gfx ANIM_GFX_EGG, ANIM_GFX_SMOKE + anim_bgp $1b + anim_sound $1a, SFX_SLUDGE_BOMB + anim_obj $b4, 64, 92, $2 + anim_wait 32 + anim_obj $1c, 132, 56, $10 + anim_wait 24 + anim_ret +; cb9db + +BattleAnim_FutureSight: ; cb9db + anim_1gfx ANIM_GFX_WIND + anim_bgeffect $6, $0, $2, $0 + anim_bgeffect ANIM_BG_ALTERNATE_HUES, $0, $2, $0 + anim_bgeffect ANIM_BG_PSYCHIC, $0, $0, $0 + anim_obj $7d, 8, 24, $10 + anim_obj $7d, 8, 48, $2 + anim_obj $7d, 8, 88, $8 + anim_wait 4 + anim_obj $7d, 8, 32, $6 + anim_obj $7d, 8, 56, $c + anim_obj $7d, 8, 80, $4 + anim_obj $7d, 8, 104, $e +BattleAnim_FutureSight_branch_cba10: ; cba10 + anim_sound $0, SFX_THROW_BALL + anim_wait 16 + anim_loop $4, BattleAnim_FutureSight_branch_cba10 + anim_incbgeffect ANIM_BG_PSYCHIC + anim_ret +; cba1b + +BattleAnim_RockSmash: ; cba1b + anim_2gfx ANIM_GFX_ROCKS, ANIM_GFX_HIT + anim_sound $1, SFX_SPARK + anim_obj $1, 128, 56, $0 + anim_sound $1, SFX_SPARK + anim_obj $b5, 128, 64, $28 + anim_obj $b5, 128, 64, $5c + anim_sound $1, SFX_SPARK + anim_obj $b5, 128, 64, $10 + anim_obj $b5, 128, 64, $e8 + anim_sound $1, SFX_SPARK + anim_obj $b5, 128, 64, $9c + anim_obj $b5, 128, 64, $d0 + anim_wait 6 + anim_sound $1, SFX_SPARK + anim_obj $b5, 128, 64, $1c + anim_obj $b5, 128, 64, $50 + anim_sound $1, SFX_SPARK + anim_obj $b5, 128, 64, $dc + anim_obj $b5, 128, 64, $90 + anim_wait 32 + anim_ret +; cba6a + +BattleAnim_Whirlpool: ; cba6a + anim_1gfx ANIM_GFX_WIND + anim_bgeffect ANIM_BG_WHIRLPOOL, $0, $0, $0 + anim_sound $1, SFX_SURF + anim_wait 16 +BattleAnim_Whirlpool_branch_cba75: ; cba75 + anim_obj ANIM_OBJ_GUST, 132, 72, $0 + anim_wait 6 + anim_loop $9, BattleAnim_Whirlpool_branch_cba75 + anim_wait 64 + anim_incbgeffect ANIM_BG_WHIRLPOOL + anim_wait 1 + anim_ret +; cba84 + +BattleAnim_BeatUp: ; cba84 + anim_jumpif $0, BattleAnim_BeatUp_branch_cba9b + anim_sound $0, SFX_BALL_POOF + anim_bgeffect ANIM_BG_RETURN_MON, $0, $1, $0 + anim_wait 16 + anim_beatup + anim_sound $0, SFX_BALL_POOF + anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0 + anim_wait 16 +BattleAnim_BeatUp_branch_cba9b: ; cba9b + anim_1gfx ANIM_GFX_HIT + anim_call BattleAnim_BeatUp_branch_cbca7 + anim_bgeffect ANIM_BG_TACKLE, $0, $1, $0 + anim_wait 4 + anim_sound $1, SFX_BEAT_UP + anim_obj $0, 136, 48, $0 + anim_wait 8 + anim_call BattleAnim_BeatUp_branch_cbcb7 + anim_ret +; cbab3 + +BattleAnim_DreamEater_branch_cbab3: ; cbab3 +BattleAnim_GigaDrain_branch_cbab3: ; cbab3 +BattleAnim_LeechLife_branch_cbab3: ; cbab3 + anim_obj $71, 132, 44, $0 + anim_obj $71, 132, 44, $8 + anim_obj $71, 132, 44, $10 + anim_obj $71, 132, 44, $18 + anim_obj $71, 132, 44, $20 + anim_obj $71, 132, 44, $28 + anim_obj $71, 132, 44, $30 + anim_obj $71, 132, 44, $38 + anim_ret +; cbadc + +BattleAnim_Glare_branch_cbadc: ; cbadc +BattleAnim_Leer_branch_cbadc: ; cbadc +BattleAnim_ScaryFace_branch_cbadc: ; cbadc + anim_sound $1a, SFX_LEER + anim_obj $4e, 72, 84, $0 + anim_obj $4e, 64, 80, $0 + anim_obj $4e, 88, 76, $0 + anim_obj $4e, 80, 72, $0 + anim_obj $4e, 104, 68, $0 + anim_obj $4e, 96, 64, $0 + anim_obj $4e, 120, 60, $0 + anim_obj $4e, 112, 56, $0 + anim_obj $4f, 130, 54, $0 + anim_obj $4f, 122, 50, $0 + anim_ret +; cbb12 + +BattleAnim_Fly_branch_cbb12: ; cbb12 +BattleAnim_Teleport_branch_cbb12: ; cbb12 + anim_sound $0, SFX_WARP_TO + anim_obj $44, 44, 108, $0 + anim_obj $44, 44, 100, $0 + anim_obj $44, 44, 92, $0 + anim_obj $44, 44, 84, $0 + anim_obj $44, 44, 76, $0 + anim_obj $44, 44, 68, $0 + anim_obj $44, 44, 60, $0 + anim_ret +; cbb39 + +BattleAnim_AuroraBeam_branch_cbb39: ; cbb39 +BattleAnim_HyperBeam_branch_cbb39: ; cbb39 +BattleAnim_Solarbeam_branch_cbb39: ; cbb39 + anim_sound $0, SFX_HYPER_BEAM + anim_obj $27, 64, 92, $0 + anim_wait 4 + anim_sound $0, SFX_HYPER_BEAM + anim_obj $27, 80, 84, $0 + anim_wait 4 + anim_sound $1, SFX_HYPER_BEAM + anim_obj $27, 96, 76, $0 + anim_wait 4 + anim_sound $1, SFX_HYPER_BEAM + anim_obj $27, 112, 68, $0 + anim_obj $28, 126, 62, $0 + anim_ret +; cbb62 + +BattleAnim_Explosion_branch_cbb62: ; cbb62 +BattleAnim_Selfdestruct_branch_cbb62: ; cbb62 + anim_sound $0, SFX_EGG_BOMB + anim_obj $17, 24, 64, $0 + anim_wait 5 + anim_sound $0, SFX_EGG_BOMB + anim_obj $17, 56, 104, $0 + anim_wait 5 + anim_sound $0, SFX_EGG_BOMB + anim_obj $17, 24, 104, $0 + anim_wait 5 + anim_sound $0, SFX_EGG_BOMB + anim_obj $17, 56, 64, $0 + anim_wait 5 + anim_sound $0, SFX_EGG_BOMB + anim_obj $17, 40, 84, $0 + anim_ret +; cbb8f + +BattleAnim_Dynamicpunch_branch_cbb8f: ; cbb8f +BattleAnim_Explosion_branch_cbb8f: ; cbb8f +BattleAnim_Present_branch_cbb8f: ; cbb8f +BattleAnim_Selfdestruct_branch_cbb8f: ; cbb8f + anim_sound $1, SFX_EGG_BOMB + anim_obj $17, 148, 32, $0 + anim_wait 5 + anim_sound $1, SFX_EGG_BOMB + anim_obj $17, 116, 72, $0 + anim_wait 5 + anim_sound $1, SFX_EGG_BOMB + anim_obj $17, 148, 72, $0 + anim_wait 5 + anim_sound $1, SFX_EGG_BOMB + anim_obj $17, 116, 32, $0 + anim_wait 5 + anim_sound $1, SFX_EGG_BOMB + anim_obj $17, 132, 52, $0 + anim_ret +; cbbbc + +BattleAnim_Growl_branch_cbbbc: ; cbbbc +BattleAnim_Roar_branch_cbbbc: ; cbbbc +BattleAnim_Snore_branch_cbbbc: ; cbbbc + anim_obj $4b, 64, 76, $0 + anim_obj $4b, 64, 88, $1 + anim_obj $4b, 64, 100, $2 + anim_ret +; cbbcc + +BattleAnim_FirePunch_branch_cbbcc: ; cbbcc +BattleAnim_TriAttack_branch_cbbcc: ; cbbcc + anim_sound $1, SFX_EMBER +BattleAnim_FirePunch_branch_cbbcf: ; cbbcf +BattleAnim_TriAttack_branch_cbbcf: ; cbbcf + anim_obj $10, 136, 56, $10 + anim_obj $10, 136, 56, $90 + anim_wait 4 + anim_loop $4, BattleAnim_FirePunch_branch_cbbcf + anim_ret +; cbbdf + +BattleAnim_IcePunch_branch_cbbdf: ; cbbdf +BattleAnim_PowderSnow_branch_cbbdf: ; cbbdf +BattleAnim_TriAttack_branch_cbbdf: ; cbbdf + anim_sound $1, SFX_SHINE + anim_obj $12, 128, 42, $0 + anim_wait 6 + anim_sound $1, SFX_SHINE + anim_obj $12, 144, 70, $0 + anim_wait 6 + anim_sound $1, SFX_SHINE + anim_obj $12, 120, 56, $0 + anim_wait 6 + anim_sound $1, SFX_SHINE + anim_obj $12, 152, 56, $0 + anim_wait 6 + anim_sound $1, SFX_SHINE + anim_obj $12, 144, 42, $0 + anim_wait 6 + anim_sound $1, SFX_SHINE + anim_obj $12, 128, 70, $0 + anim_ret +; cbc15 + +BattleAnim_SludgeBomb_branch_cbc15: ; cbc15 +BattleAnim_Sludge_branch_cbc15: ; cbc15 +BattleAnim_Toxic_branch_cbc15: ; cbc15 + anim_sound $1, SFX_UNKNOWN_7F + anim_obj $1a, 132, 72, $0 + anim_wait 8 + anim_sound $1, SFX_UNKNOWN_7F + anim_obj $1a, 116, 72, $0 + anim_wait 8 + anim_sound $1, SFX_UNKNOWN_7F + anim_obj $1a, 148, 72, $0 + anim_wait 8 + anim_loop $5, BattleAnim_SludgeBomb_branch_cbc15 + anim_ret +; cbc35 + +BattleAnim_Acid_branch_cbc35: ; cbc35 +BattleAnim_Toxic_branch_cbc35: ; cbc35 + anim_sound $1a, SFX_BUBBLEBEAM + anim_obj $19, 64, 92, $10 + anim_wait 5 + anim_loop $8, BattleAnim_Acid_branch_cbc35 + anim_ret +; cbc43 + +BattleAnim_Harden_branch_cbc43: ; cbc43 +BattleAnim_IronTail_branch_cbc43: ; cbc43 +BattleAnim_MetalClaw_branch_cbc43: ; cbc43 +BattleAnim_SteelWing_branch_cbc43: ; cbc43 + anim_sound $0, SFX_SHINE + anim_bgeffect $17, $0, $1, $40 + anim_wait 8 + anim_obj $51, 48, 84, $0 + anim_wait 32 + anim_obj $51, 48, 84, $0 + anim_wait 64 + anim_incbgeffect $17 + anim_ret +; cbc5b + +BattleAnim_MudSlap_branch_cbc5b: ; cbc5b +BattleAnim_SandAttack_branch_cbc5b: ; cbc5b + anim_sound $1a, SFX_MENU + anim_obj $58, 64, 92, $4 + anim_wait 4 + anim_loop $8, BattleAnim_MudSlap_branch_cbc5b + anim_wait 32 + anim_ret +; cbc6a + +BattleAnim_Moonlight_branch_cbc6a: ; cbc6a +BattleAnim_MorningSun_branch_cbc6a: ; cbc6a +BattleAnim_Synthesis_branch_cbc6a: ; cbc6a + anim_sound $0, SFX_METRONOME + anim_obj $9d, 44, 64, $0 + anim_wait 5 + anim_obj $9d, 24, 96, $0 + anim_wait 5 + anim_obj $9d, 56, 104, $0 + anim_wait 21 + anim_ret +; cbc80 + +BattleAnim_Moonlight_branch_cbc80: ; cbc80 +BattleAnim_MorningSun_branch_cbc80: ; cbc80 +BattleAnim_Synthesis_branch_cbc80: ; cbc80 + anim_sound $0, SFX_METRONOME +BattleAnim_Moonlight_branch_cbc83: ; cbc83 +BattleAnim_MorningSun_branch_cbc83: ; cbc83 +BattleAnim_Synthesis_branch_cbc83: ; cbc83 + anim_obj $9d, 24, 64, $0 + anim_wait 5 + anim_obj $9d, 56, 104, $0 + anim_wait 5 + anim_obj $9d, 24, 104, $0 + anim_wait 5 + anim_obj $9d, 56, 64, $0 + anim_wait 5 + anim_obj $9d, 40, 84, $0 + anim_wait 5 + anim_loop $2, BattleAnim_Moonlight_branch_cbc83 + anim_wait 16 + anim_ret +; cbca7 + +BattleAnim_Agility_branch_cbca7: ; cbca7 +BattleAnim_BeatUp_branch_cbca7: ; cbca7 +BattleAnim_Bide_branch_cbca7: ; cbca7 +BattleAnim_Charm_branch_cbca7: ; cbca7 +BattleAnim_Curse_branch_cbca7: ; cbca7 +BattleAnim_DefenseCurl_branch_cbca7: ; cbca7 +BattleAnim_DoubleEdge_branch_cbca7: ; cbca7 +BattleAnim_Endure_branch_cbca7: ; cbca7 +BattleAnim_FaintAttack_branch_cbca7: ; cbca7 +BattleAnim_Flail_branch_cbca7: ; cbca7 +BattleAnim_FlameWheel_branch_cbca7: ; cbca7 +BattleAnim_FocusEnergy_branch_cbca7: ; cbca7 +BattleAnim_Frustration_branch_cbca7: ; cbca7 +BattleAnim_GigaDrain_branch_cbca7: ; cbca7 +BattleAnim_Harden_branch_cbca7: ; cbca7 +BattleAnim_Headbutt_branch_cbca7: ; cbca7 +BattleAnim_HiddenPower_branch_cbca7: ; cbca7 +BattleAnim_IronTail_branch_cbca7: ; cbca7 +BattleAnim_Meditate_branch_cbca7: ; cbca7 +BattleAnim_MegaDrain_branch_cbca7: ; cbca7 +BattleAnim_MetalClaw_branch_cbca7: ; cbca7 +BattleAnim_MilkDrink_branch_cbca7: ; cbca7 +BattleAnim_Outrage_branch_cbca7: ; cbca7 +BattleAnim_PsychUp_branch_cbca7: ; cbca7 +BattleAnim_Rage_branch_cbca7: ; cbca7 +BattleAnim_RazorWind_branch_cbca7: ; cbca7 +BattleAnim_Recover_branch_cbca7: ; cbca7 +BattleAnim_SacredFire_branch_cbca7: ; cbca7 +BattleAnim_SendOutMon_branch_cbca7: ; cbca7 +BattleAnim_Sharpen_branch_cbca7: ; cbca7 +BattleAnim_Sketch_branch_cbca7: ; cbca7 +BattleAnim_SkullBash_branch_cbca7: ; cbca7 +BattleAnim_SkyAttack_branch_cbca7: ; cbca7 +BattleAnim_Softboiled_branch_cbca7: ; cbca7 +BattleAnim_Spark_branch_cbca7: ; cbca7 +BattleAnim_SteelWing_branch_cbca7: ; cbca7 +BattleAnim_Synthesis_branch_cbca7: ; cbca7 +BattleAnim_TakeDown_branch_cbca7: ; cbca7 +BattleAnim_Teleport_branch_cbca7: ; cbca7 +BattleAnim_Thief_branch_cbca7: ; cbca7 +BattleAnim_VitalThrow_branch_cbca7: ; cbca7 + anim_enemyfeetobj + anim_bgeffect ANIM_BG_FEET_FOLLOW, $0, $0, $0 + anim_wait 6 + anim_ret +; cbcaf + +BattleAnim_AcidArmor_branch_cbcaf: ; cbcaf +BattleAnim_BodySlam_branch_cbcaf: ; cbcaf +BattleAnim_Dig_branch_cbcaf: ; cbcaf +BattleAnim_DoubleTeam_branch_cbcaf: ; cbcaf +BattleAnim_Minimize_branch_cbcaf: ; cbcaf +BattleAnim_PainSplit_branch_cbcaf: ; cbcaf +BattleAnim_RapidSpin_branch_cbcaf: ; cbcaf +BattleAnim_Return_branch_cbcaf: ; cbcaf +BattleAnim_Rollout_branch_cbcaf: ; cbcaf +BattleAnim_Splash_branch_cbcaf: ; cbcaf +BattleAnim_Tackle_branch_cbcaf: ; cbcaf +BattleAnim_TailWhip_branch_cbcaf: ; cbcaf +BattleAnim_Transform_branch_cbcaf: ; cbcaf +BattleAnim_Waterfall_branch_cbcaf: ; cbcaf +BattleAnim_Withdraw_branch_cbcaf: ; cbcaf + anim_playerheadobj + anim_bgeffect ANIM_BG_HEAD_FOLLOW, $0, $0, $0 + anim_wait 6 + anim_ret +; cbcb7 + +BattleAnim_AcidArmor_branch_cbcb7: ; cbcb7 +BattleAnim_Agility_branch_cbcb7: ; cbcb7 +BattleAnim_BeatUp_branch_cbcb7: ; cbcb7 +BattleAnim_Bide_branch_cbcb7: ; cbcb7 +BattleAnim_BodySlam_branch_cbcb7: ; cbcb7 +BattleAnim_Charm_branch_cbcb7: ; cbcb7 +BattleAnim_Curse_branch_cbcb7: ; cbcb7 +BattleAnim_DefenseCurl_branch_cbcb7: ; cbcb7 +BattleAnim_Dig_branch_cbcb7: ; cbcb7 +BattleAnim_DoubleEdge_branch_cbcb7: ; cbcb7 +BattleAnim_DoubleTeam_branch_cbcb7: ; cbcb7 +BattleAnim_Endure_branch_cbcb7: ; cbcb7 +BattleAnim_FaintAttack_branch_cbcb7: ; cbcb7 +BattleAnim_Flail_branch_cbcb7: ; cbcb7 +BattleAnim_FocusEnergy_branch_cbcb7: ; cbcb7 +BattleAnim_Frustration_branch_cbcb7: ; cbcb7 +BattleAnim_GigaDrain_branch_cbcb7: ; cbcb7 +BattleAnim_Harden_branch_cbcb7: ; cbcb7 +BattleAnim_Headbutt_branch_cbcb7: ; cbcb7 +BattleAnim_HiddenPower_branch_cbcb7: ; cbcb7 +BattleAnim_IronTail_branch_cbcb7: ; cbcb7 +BattleAnim_Meditate_branch_cbcb7: ; cbcb7 +BattleAnim_MegaDrain_branch_cbcb7: ; cbcb7 +BattleAnim_MetalClaw_branch_cbcb7: ; cbcb7 +BattleAnim_MilkDrink_branch_cbcb7: ; cbcb7 +BattleAnim_Minimize_branch_cbcb7: ; cbcb7 +BattleAnim_Outrage_branch_cbcb7: ; cbcb7 +BattleAnim_PainSplit_branch_cbcb7: ; cbcb7 +BattleAnim_PsychUp_branch_cbcb7: ; cbcb7 +BattleAnim_Rage_branch_cbcb7: ; cbcb7 +BattleAnim_RazorWind_branch_cbcb7: ; cbcb7 +BattleAnim_Recover_branch_cbcb7: ; cbcb7 +BattleAnim_Return_branch_cbcb7: ; cbcb7 +BattleAnim_Rollout_branch_cbcb7: ; cbcb7 +BattleAnim_SendOutMon_branch_cbcb7: ; cbcb7 +BattleAnim_Sharpen_branch_cbcb7: ; cbcb7 +BattleAnim_Sketch_branch_cbcb7: ; cbcb7 +BattleAnim_SkullBash_branch_cbcb7: ; cbcb7 +BattleAnim_SkyAttack_branch_cbcb7: ; cbcb7 +BattleAnim_Softboiled_branch_cbcb7: ; cbcb7 +BattleAnim_Splash_branch_cbcb7: ; cbcb7 +BattleAnim_SteelWing_branch_cbcb7: ; cbcb7 +BattleAnim_Synthesis_branch_cbcb7: ; cbcb7 +BattleAnim_Tackle_branch_cbcb7: ; cbcb7 +BattleAnim_TailWhip_branch_cbcb7: ; cbcb7 +BattleAnim_TakeDown_branch_cbcb7: ; cbcb7 +BattleAnim_Teleport_branch_cbcb7: ; cbcb7 +BattleAnim_Thief_branch_cbcb7: ; cbcb7 +BattleAnim_Transform_branch_cbcb7: ; cbcb7 +BattleAnim_VitalThrow_branch_cbcb7: ; cbcb7 +BattleAnim_Waterfall_branch_cbcb7: ; cbcb7 +BattleAnim_Withdraw_branch_cbcb7: ; cbcb7 + anim_wait 1 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $0, $0 + anim_wait 5 + anim_incobj $1 + anim_wait 1 + anim_ret +; cbcc2 + +BattleAnim_EnemyStatDown_branch_cbcc2: ; cbcc2 +BattleAnim_Foresight_branch_cbcc2: ; cbcc2 +BattleAnim_PlayerStatDown_branch_cbcc2: ; cbcc2 +BattleAnim_Pursuit_branch_cbcc2: ; cbcc2 +BattleAnim_Submission_branch_cbcc2: ; cbcc2 + anim_enemyfeetobj + anim_bgeffect ANIM_BG_FEET_FOLLOW, $0, $1, $0 + anim_wait 6 + anim_ret +; cbcca + +BattleAnim_Bubblebeam_branch_cbcca: ; cbcca +BattleAnim_Confusion_branch_cbcca: ; cbcca +BattleAnim_HydroPump_branch_cbcca: ; cbcca +BattleAnim_NightShade_branch_cbcca: ; cbcca +BattleAnim_WaterGun_branch_cbcca: ; cbcca + anim_playerheadobj + anim_bgeffect ANIM_BG_HEAD_FOLLOW, $0, $1, $0 + anim_wait 4 + anim_ret +; cbcd2 + +BattleAnim_Bubblebeam_branch_cbcd2: ; cbcd2 +BattleAnim_Confusion_branch_cbcd2: ; cbcd2 +BattleAnim_EnemyStatDown_branch_cbcd2: ; cbcd2 +BattleAnim_Foresight_branch_cbcd2: ; cbcd2 +BattleAnim_HydroPump_branch_cbcd2: ; cbcd2 +BattleAnim_NightShade_branch_cbcd2: ; cbcd2 +BattleAnim_PlayerStatDown_branch_cbcd2: ; cbcd2 +BattleAnim_Pursuit_branch_cbcd2: ; cbcd2 +BattleAnim_Submission_branch_cbcd2: ; cbcd2 +BattleAnim_WaterGun_branch_cbcd2: ; cbcd2 + anim_wait 1 + anim_bgeffect ANIM_BG_SHOW_MON, $0, $1, $0 + anim_wait 4 + anim_incobj $1 + anim_wait 1 + anim_ret +; cbcdd + diff --git a/battle/bg_effects.asm b/battle/bg_effects.asm new file mode 100644 index 000000000..d2af6af6b --- /dev/null +++ b/battle/bg_effects.asm @@ -0,0 +1,2938 @@ +; BG effects for use in battle animations. + +; no known jump sources +Functionc8000: ; c8000 (32:4000) + ld hl, $d3fa + ld e, $5 +.asm_c8005 + ld a, [hl] + and a + jr z, .asm_c8012 + ld c, l + ld b, h + push hl + push de + call Functionc804a + pop de + pop hl +.asm_c8012 + ld bc, $4 + add hl, bc + dec e + jr nz, .asm_c8005 + ret + +; no known jump sources +Functionc801a: ; c801a (32:401a) + ld hl, $d3fa + ld e, $5 +.asm_c801f + ld a, [hl] + and a + jr z, .asm_c802c + ld bc, $4 + add hl, bc + dec e + jr nz, .asm_c801f + scf + ret +.asm_c802c + ld c, l + ld b, h + ld hl, $0 + add hl, bc + ld a, [$d419] + ld [hli], a + ld a, [$d41a] + ld [hli], a + ld a, [$d41b] + ld [hli], a + ld a, [$d41c] + ld [hl], a + ret + +; known jump sources: c80c6 (32:40c6), c811c (32:411c), c8139 (32:4139), c814d (32:414d), c8164 (32:4164), c81e6 (32:41e6), c81ef (32:41ef), c822c (32:422c), c827d (32:427d), c8299 (32:4299), c82ea (32:42ea), c8377 (32:4377), c8437 (32:4437), c85ca (32:45ca), c85ff (32:45ff), c8d13 (32:4d13), c8dd0 (32:4dd0), c8e26 (32:4e26), c8e4e (32:4e4e), c8f15 (32:4f15) +EndBattleBGEffect: ; c8043 (32:4043) + ld hl, 0 + add hl, bc + ld [hl], 0 + ret + +; known jump sources: c800d (32:400d) +Functionc804a: ; c804a (32:404a) + ld hl, 0 + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, BattleBGEffects + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +; no known jump sources +BattleBGEffects: ; c805a (32:405a) + dw BattleBGEffect_0 + dw Functionc80eb + dw Functionc80f3 + dw Functionc812d + dw Functionc8141 + dw Functionc8155 + dw Functionc8171 + dw Functionc818b + dw Functionc81a5 + dw Functionc81b3 + dw Functionc81ea + dw Functionc837b + dw Functionc83a8 + dw Functionc8545 + dw Functionc8599 + dw Functionc863f + dw Functionc8662 + dw Functionc8214 + dw Functionc8281 + dw Functionc8689 + dw Functionc8709 + dw Functionc8be8 + dw Functionc8bf2 + dw Functionc8bfd + dw Functionc8c08 + dw Functionc8c14 + dw Functionc8c20 + dw Functionc8c30 + dw Functionc8b00 + dw Functionc8c3c + dw Functionc8c55 + dw Functionc8cf9 + dw Functionc8d02 + dw Functionc8761 + dw Functionc89ee + dw Functionc87a7 + dw Functionc8805 + dw Functionc8837 + dw Functionc892a + dw Functionc82f5 + dw Functionc89b5 + dw Functionc8607 + dw Functionc8a3a + dw Functionc8acc + dw Functionc8964 + dw Functionc88e7 + dw Functionc8ce1 + dw Functionc8919 + dw Functionc85c2 + dw Functionc85ce + dw Functionc8603 + dw Functionc8c61 + dw Functionc8ca2 + dw Functionc8d3a + + +; no known jump sources +BattleBGEffect_0: ; c80c6 (32:40c6) + call EndBattleBGEffect + ret + +; known jump sources: c8b7d (32:4b7d), c8d80 (32:4d80), c8dd8 (32:4dd8) +Functionc80ca: ; c80ca (32:40ca) + ld hl, $1 + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +; known jump sources: c81b3 (32:41b3), c8214 (32:4214), c8281 (32:4281), c82f5 (32:42f5), c83ed (32:43ed), c8545 (32:4545), c8599 (32:4599), c8607 (32:4607), c863f (32:463f), c8662 (32:4662), c8689 (32:4689), c8709 (32:4709), c8761 (32:4761), c87a7 (32:47a7), c8805 (32:4805), c8837 (32:4837), c88e7 (32:48e7), c8919 (32:4919), c892a (32:492a), c8964 (32:4964), c89b5 (32:49b5), c89ee (32:49ee), c8a3a (32:4a3a), c8acc (32:4acc), c8b05 (32:4b05), c8c61 (32:4c61), c8ca2 (32:4ca2) +Functionc80d7: ; c80d7 (32:40d7) + pop de + ld hl, $1 + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +; known jump sources: c81c0 (32:41c0), c8230 (32:4230), c825a (32:425a), c829d (32:429d), c82c7 (32:42c7), c8302 (32:4302), c835c (32:435c), c841d (32:441d), c854e (32:454e), c85a2 (32:45a2), c8610 (32:4610), c8648 (32:4648), c866b (32:466b), c8698 (32:4698), c86cb (32:46cb), c8712 (32:4712), c876a (32:476a), c87b2 (32:47b2), c87db (32:47db), c8810 (32:4810), c8842 (32:4842), c8876 (32:4876), c8890 (32:4890), c88f6 (32:48f6), c8933 (32:4933), c896d (32:496d), c89be (32:49be), c89f7 (32:49f7), c8a49 (32:4a49), c8a84 (32:4a84), c8a96 (32:4a96), c8ad3 (32:4ad3), c8b0e (32:4b0e), c8c68 (32:4c68), c8cab (32:4cab), c8d8b (32:4d8b), c8dec (32:4dec), c8def (32:4def), c8df2 (32:4df2) +Functionc80e5: ; c80e5 (32:40e5) + ld hl, $1 + add hl, bc + inc [hl] + ret + +; no known jump sources +Functionc80eb: ; c80eb (32:40eb) + ld de, .inverted + jp Functionc80fb +; c80f1 (32:40f1) + +.inverted + db %11100100 ; 3210 + db %00011011 ; 0123 +; c80f3 + +; no known jump sources +Functionc80f3: ; c80f3 (32:40f3) + ld de, .white + jp Functionc80fb +; c80f9 (32:40f9) + +.white + db %11100100 ; 3210 + db %00000000 ; 0000 +; c80fb + +; known jump sources: c80ee (32:40ee), c80f6 (32:40f6) +Functionc80fb: ; c80fb (32:40fb) + ld a, $1 + ld [$d419], a + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c810a + dec [hl] + ret + +.asm_c810a + ld hl, $2 + add hl, bc + ld a, [hl] + ld hl, $1 + add hl, bc + ld [hl], a + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_c8120 + call EndBattleBGEffect + ret + +.asm_c8120 + dec a + ld [hl], a + and 1 + ld l, a + ld h, 0 + add hl, de + ld a, [hl] + ld [$cfc7], a + ret + +; no known jump sources +Functionc812d: ; c812d (32:412d) + ld de, $413d + call Functionc8d57 + jr c, .asm_c8139 + ld [$cfc7], a + ret +.asm_c8139 + call EndBattleBGEffect + ret +; c813d (32:413d) + +INCBIN "baserom.gbc",$c813d,$c8141 - $c813d + +; no known jump sources +Functionc8141: ; c8141 (32:4141) + ld de, $4151 + call Functionc8d57 + jr c, .asm_c814d + ld [$cfc7], a + ret +.asm_c814d + call EndBattleBGEffect + ret +; c8151 (32:4151) + +INCBIN "baserom.gbc",$c8151,$c8155 - $c8151 + +; no known jump sources +Functionc8155: ; c8155 (32:4155) + ld de, $4168 + call Functionc8d57 + jr c, .asm_c8164 + ld [$cfc7], a + ld [$cfc9], a + ret +.asm_c8164 + call EndBattleBGEffect + ret +; c8168 (32:4168) + +INCBIN "baserom.gbc",$c8168,$c8171 - $c8168 + +; no known jump sources +Functionc8171: ; c8171 (32:4171) + call Functionc9059 + jr nz, .asm_c817b + ld de, $4185 + jr .asm_c817e +.asm_c817b + ld de, $4188 +.asm_c817e + call Functionc8d57 + ld [$cfc8], a + ret +; c8185 (32:4185) + +INCBIN "baserom.gbc",$c8185,$c818b - $c8185 + +; no known jump sources +Functionc818b: ; c818b (32:418b) + call Functionc9059 + jr nz, .asm_c8195 + ld de, $419f + jr .asm_c8198 +.asm_c8195 + ld de, $41a2 +.asm_c8198 + call Functionc8d57 + ld [$cfc8], a + ret +; c819f (32:419f) + +INCBIN "baserom.gbc",$c819f,$c81a5 - $c819f + +; no known jump sources +Functionc81a5: ; c81a5 (32:41a5) + ld de, $41af + call Functionc8d57 + ld [$cfc7], a + ret +; c81af (32:41af) + +INCBIN "baserom.gbc",$c81af,$c81b3 - $c81af + +; no known jump sources +Functionc81b3: ; c81b3 (32:41b3) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c81b6: ; c81b6 (32:41b6) + dw Functionc81c0 + dw Functionc80e5 + dw Functionc80e5 + dw Functionc80e5 + dw Functionc81e3 + + +; no known jump sources +Functionc81c0: ; c81c0 (32:41c0) + call Functionc80e5 + push bc + call Functionc9038 + jr nz, .asm_c81d1 + ld hl, $c4ac + ld bc, $707 + jr .asm_c81d7 +.asm_c81d1 + ld hl, $c51a + ld bc, $606 +.asm_c81d7 + call ClearBox + pop bc + xor a + ld [hBGMapThird], a ; $ff00+$d5 + ld a, $1 + ld [hBGMapMode], a ; $ff00+$d4 + ret + +; no known jump sources +Functionc81e3: ; c81e3 (32:41e3) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + call EndBattleBGEffect + ret + +; no known jump sources +Functionc81ea: ; c81ea (32:41ea) + call Functionc9042 + jr z, .asm_c81f3 + call EndBattleBGEffect + ret +.asm_c81f3 + call Functionc9038 + jr nz, .asm_c81fd + ld de, $4210 + jr .asm_c8200 +.asm_c81fd + ld de, $420c +.asm_c8200 + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + call Functionc83ed + ret +; c820c (32:420c) + +INCBIN "baserom.gbc",$c820c,$c8214 - $c820c + +; no known jump sources +Functionc8214: ; c8214 (32:4214) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8217: ; c8217 (32:4217) + dw Functionc8223 + dw Functionc825a + dw Functionc80e5 + dw Functionc80e5 + dw Functionc80e5 + dw Functionc827a + + +; no known jump sources +Functionc8223: ; c8223 (32:4223) + call Functionc9042 + jr z, .asm_c8230 + ld hl, $d40e + inc [hl] + call EndBattleBGEffect + ret +.asm_c8230 + call Functionc80e5 + push bc + call Functionc9038 + jr nz, .asm_c8242 + ld a, $b8 + ld [$d419], a + ld a, $84 + jr .asm_c8249 +.asm_c8242 + ld a, $b9 + ld [$d419], a + ld a, $30 +.asm_c8249 + ld [$d41a], a + ld a, $40 + ld [$d41b], a + xor a + ld [$d41c], a + call Functionc82ee + pop bc + ret + +; no known jump sources +Functionc825a: ; c825a (32:425a) + call Functionc80e5 + push bc + call Functionc9038 + jr nz, .asm_c826b + ld hl, $c524 + ld bc, $107 + jr .asm_c8271 +.asm_c826b + ld hl, $c51a + ld bc, $106 +.asm_c8271 + call ClearBox + ld a, $1 + ld [hBGMapMode], a ; $ff00+$d4 + pop bc + ret + +; no known jump sources +Functionc827a: ; c827a (32:427a) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + call EndBattleBGEffect + ret + +; no known jump sources +Functionc8281: ; c8281 (32:4281) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8284: ; c8284 (32:4284) + dw Functionc8290 + dw Functionc82c7 + dw Functionc80e5 + dw Functionc80e5 + dw Functionc80e5 + dw Functionc82e7 + + +; no known jump sources +Functionc8290: ; c8290 (32:4290) + call Functionc9042 + jr z, .asm_c829d + ld hl, $d40e + inc [hl] + call EndBattleBGEffect + ret +.asm_c829d + call Functionc80e5 + push bc + call Functionc9038 + jr nz, .asm_c82af + ld a, $ba + ld [$d419], a + ld a, $84 + jr .asm_c82b6 +.asm_c82af + ld a, $bb + ld [$d419], a + ld a, $30 +.asm_c82b6 + ld [$d41a], a + ld a, $40 + ld [$d41b], a + xor a + ld [$d41c], a + call Functionc82ee + pop bc + ret + +; no known jump sources +Functionc82c7: ; c82c7 (32:42c7) + call Functionc80e5 + push bc + call Functionc9038 + jr nz, .asm_c82d8 + ld hl, $c510 + ld bc, $207 + jr .asm_c82de +.asm_c82d8 + ld hl, $c51a + ld bc, $206 +.asm_c82de + call ClearBox + ld a, $1 + ld [hBGMapMode], a ; $ff00+$d4 + pop bc + ret + +; no known jump sources +Functionc82e7: ; c82e7 (32:42e7) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + call EndBattleBGEffect + ret + +; known jump sources: c8255 (32:4255), c82c2 (32:42c2) +Functionc82ee: ; c82ee (32:42ee) + callab Functioncc9a1 + ret + +; no known jump sources +Functionc82f5: ; c82f5 (32:42f5) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c82f8: ; c82f8 (32:42f8) + dw Functionc8302 + dw Functionc831d + dw Functionc80e5 + dw Functionc80e5 + dw Functionc8365 + + +; no known jump sources +Functionc8302: ; c8302 (32:4302) + call Functionc80e5 + call Functionc9038 + ld [hl], a + ld hl, $2 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c8315 + ld a, $9 + jr .asm_c8317 +.asm_c8315 + ld a, $8 +.asm_c8317 + ld hl, $3 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionc831d: ; c831d (32:431d) + ld hl, $2 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c833e + ld hl, $c518 + ld de, $806 +.asm_c832b + push de + push hl +.asm_c832d + inc hl + ld a, [hld] + ld [hli], a + dec d + jr nz, .asm_c832d + pop hl + ld de, $14 + add hl, de + pop de + dec e + jr nz, .asm_c832b + jr .asm_c8355 +.asm_c833e + ld hl, $c4b3 + ld de, $807 +.asm_c8344 + push de + push hl +.asm_c8346 + dec hl + ld a, [hli] + ld [hld], a + dec d + jr nz, .asm_c8346 + pop hl + ld de, $14 + add hl, de + pop de + dec e + jr nz, .asm_c8344 +.asm_c8355 + xor a + ld [hBGMapThird], a ; $ff00+$d5 + ld a, $1 + ld [hBGMapMode], a ; $ff00+$d4 + call Functionc80e5 + ld hl, $3 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionc8365: ; c8365 (32:4365) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c8377 + ld hl, $1 + add hl, bc + ld [hl], $1 + ret +.asm_c8377 + call EndBattleBGEffect + ret + +; no known jump sources +Functionc837b: ; c837b (32:437b) + call Functionc9038 + jr nz, .asm_c8385 + ld de, $439e + jr .asm_c8388 +.asm_c8385 + ld de, $4394 +.asm_c8388 + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + call Functionc83ed + ret +; c8394 (32:4394) + +INCBIN "baserom.gbc",$c8394,$c83a8 - $c8394 + +; no known jump sources +Functionc83a8: ; c83a8 (32:43a8) + call Functionc9038 + jr nz, .asm_c83b2 + ld de, $43d7 + jr .asm_c83b5 +.asm_c83b2 + ld de, $43c1 +.asm_c83b5 + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + call Functionc83ed + ret +; c83c1 (32:43c1) + +INCBIN "baserom.gbc",$c83c1,$c83ed - $c83c1 + +; known jump sources: c8208 (32:4208), c8390 (32:4390), c83bd (32:43bd) +Functionc83ed: ; c83ed (32:43ed) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c83f0: ; c83f0 (32:43f0) + dw Functionc83fa + dw Functionc80e5 + dw Functionc80e5 + dw Functionc842a + dw Functionc8434 + + +; known jump sources: c8428 (32:4428) +Functionc83fa: ; c83fa (32:43fa) + ld hl, $3 + add hl, bc + ld e, [hl] + ld d, $0 + inc [hl] + ld a, [$d41a] + ld l, a + ld a, [$d41b] + ld h, a + add hl, de + add hl, de + add hl, de + ld a, [hl] + cp $ff + jr z, Functionc8434 + cp $fe + jr z, .asm_c8425 + cp $fd + jr z, .asm_c841d + call Functionc8458 +.asm_c841d + call Functionc80e5 + ld a, $1 + ld [hBGMapMode], a ; $ff00+$d4 + ret +.asm_c8425 + call Functionc843b + jr Functionc83fa + +; no known jump sources +Functionc842a: ; c842a (32:442a) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + ld hl, $1 + add hl, bc + ld [hl], $0 + ret + +; known jump sources: c8410 (32:4410) +Functionc8434: ; c8434 (32:4434) + xor a + ld [hBGMapMode], a ; $ff00+$d4 + call EndBattleBGEffect + ret + +; known jump sources: c8425 (32:4425) +Functionc843b: ; c843b (32:443b) + push bc + inc hl + ld a, [hli] + ld b, a + and $f + ld c, a + ld a, b + swap a + and $f + ld b, a + ld e, [hl] + ld d, $0 + ld hl, $449c + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call ClearBox + pop bc + ret + +; known jump sources: c841a (32:441a) +Functionc8458: ; c8458 (32:4458) + push bc + push hl + ld e, [hl] + ld d, $0 + ld hl, $44a8 + add hl, de + add hl, de + add hl, de + ld a, [hli] + ld b, a + and $f + ld c, a + ld a, b + swap a + and $f + ld b, a + ld e, [hl] + inc hl + ld d, [hl] + pop hl + inc hl + ld a, [hli] + ld [$d419], a + push de + ld e, [hl] + ld d, $0 + ld hl, $449c + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de +.asm_c8484 + push bc + push hl + ld a, [$d419] + ld b, a +.asm_c848a + ld a, [de] + add b + ld [hli], a + inc de + dec c + jr nz, .asm_c848a + pop hl + ld bc, $14 + add hl, bc + pop bc + dec b + jr nz, .asm_c8484 + pop bc + ret +; c849c (32:449c) + +INCBIN "baserom.gbc",$c849c,$c8545 - $c849c + +; no known jump sources +Functionc8545: ; c8545 (32:4545) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8548: ; c8548 (32:4548) + dw Functionc854e + dw Functionc8557 + dw Functionc8561 + + +; no known jump sources +Functionc854e: ; c854e (32:454e) + call Functionc80e5 + ld de, $202 + call Functionc8f69 + +; no known jump sources +Functionc8557: ; c8557 (32:4557) + ld a, [hLCDStatCustom] ; $ff00+$c6 + and a + ret z + push bc + call Functionc8565 + pop bc + ret + +; no known jump sources +Functionc8561: ; c8561 (32:4561) + call Functionc8f0a + ret + +; known jump sources: c855c (32:455c) +Functionc8565: ; c8565 (32:4565) + ld hl, $d422 + ld de, $d423 + ld c, $3f + ld a, [hl] + push af +.asm_c856f + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_c856f + pop af + ld [hl], a + ld de, $d200 + ld hl, $d422 + ld bc, $0 +.asm_c8580 + ld a, [$FF00+$c7] + cp e + jr nc, .asm_c858b + push hl + add hl, bc + ld a, [hl] + pop hl + jr .asm_c858c +.asm_c858b + xor a +.asm_c858c + ld [de], a + ld a, c + inc a + and $3f + ld c, a + inc de + ld a, e + cp $5f + jr c, .asm_c8580 + ret + +; no known jump sources +Functionc8599: ; c8599 (32:4599) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c859c: ; c859c (32:459c) + dw Functionc85a2 + dw Functionc85ba + dw Functionc85be + + +; no known jump sources +Functionc85a2: ; c85a2 (32:45a2) + call Functionc80e5 + call Functionc8eca + ld a, $42 + ld [hLCDStatCustom], a ; $ff00+$c6 + xor a + ld [$FF00+$c7], a + ld a, $5e + ld [$FF00+$c8], a + ld de, $202 + call Functionc8f2e + ret + +; no known jump sources +Functionc85ba: ; c85ba (32:45ba) + call Functionc8fef + ret + +; no known jump sources +Functionc85be: ; c85be (32:45be) + call Functionc8f0a + ret + +; no known jump sources +Functionc85c2: ; c85c2 (32:45c2) + call Functionc8eca + ld a, $42 + call Functionc8ede + call EndBattleBGEffect + ret + +; no known jump sources +Functionc85ce: ; c85ce (32:45ce) + ld hl, $3 + add hl, bc + ld a, [hl] + ld e, a + add $4 + ld [hl], a + ld hl, $2 + add hl, bc + ld a, [hl] + and $f0 + swap a + xor $ff + add $4 + ld d, a + ld hl, $1 + add hl, bc + ld a, [hl] + ld [$d419], a + ld hl, $2 + add hl, bc + ld a, [hl] + cp $20 + jr nc, .asm_c85fc + inc [hl] + inc [hl] + call Functionc8f9a + ret +.asm_c85fc + call Functionc8eca + call EndBattleBGEffect + ret + +; no known jump sources +Functionc8603: ; c8603 (32:4603) + call Functionc8f0a + ret + +; no known jump sources +Functionc8607: ; c8607 (32:4607) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c860a: ; c860a (32:460a) + dw Functionc8610 + dw Functionc862e + dw Functionc863b + + +; no known jump sources +Functionc8610: ; c8610 (32:4610) + call Functionc80e5 + call Functionc8eca + ld a, $43 + ld [hLCDStatCustom], a ; $ff00+$c6 + xor a + ld [$FF00+$c7], a + ld a, $5f + ld [$FF00+$c8], a + ld de, $605 + call Functionc8f2e + ld hl, $3 + add hl, bc + ld [hl], $0 + ret + +; no known jump sources +Functionc862e: ; c862e (32:462e) + ld hl, $3 + add hl, bc + ld a, [hl] + inc [hl] + and $3 + ret nz + call Functionc8fef + ret + +; no known jump sources +Functionc863b: ; c863b (32:463b) + call Functionc8f0a + ret + +; no known jump sources +Functionc863f: ; c863f (32:463f) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8642: ; c8642 (32:4642) + dw Functionc8648 + dw Functionc865a + dw Functionc865e + + +; no known jump sources +Functionc8648: ; c8648 (32:4648) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld de, $605 + call Functionc8f2e + ret + +; no known jump sources +Functionc865a: ; c865a (32:465a) + call Functionc8fef + ret + +; no known jump sources +Functionc865e: ; c865e (32:465e) + call Functionc8f0a + ret + +; no known jump sources +Functionc8662: ; c8662 (32:4662) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8665: ; c8665 (32:4665) + dw Functionc866b + dw Functionc8681 + dw Functionc8685 + + +; no known jump sources +Functionc866b: ; c866b (32:466b) + call Functionc80e5 + call Functionc8eca + ld a, $42 + call Functionc8ede + ld hl, $3 + add hl, bc + ld e, [hl] + ld d, $2 + call Functionc8f2e + ret + +; no known jump sources +Functionc8681: ; c8681 (32:4681) + call Functionc8fef + ret + +; no known jump sources +Functionc8685: ; c8685 (32:4685) + call Functionc8f0a + ret + +; no known jump sources +Functionc8689: ; c8689 (32:4689) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c868c: ; c868c (32:468c) + dw Functionc8698 + dw Functionc86af + dw Functionc86cf + dw Functionc86bd + dw Functionc86e9 + dw Functionc8705 + + +; no known jump sources +Functionc8698: ; c8698 (32:4698) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $2 + add hl, bc + ld [hl], $0 + ret + +; no known jump sources +Functionc86af: ; c86af (32:46af) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $10 + jr nc, asm_c86cb + inc [hl] + call Functionc86ea + ret + +; no known jump sources +Functionc86bd: ; c86bd (32:46bd) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $ff + jr z, asm_c86cb + dec [hl] + call Functionc86ea + ret +asm_c86cb: ; c86cb (32:46cb) + call Functionc80e5 + ret + +; no known jump sources +Functionc86cf: ; c86cf (32:46cf) + ld hl, $2 + add hl, bc + ld a, [hl] + ld d, $2 + call Functionc905d + ld hl, $3 + add hl, bc + add [hl] + call Functionc86ea + ld hl, $2 + add hl, bc + ld a, [hl] + add $4 + ld [hl], a + +; no known jump sources +Functionc86e9: ; c86e9 (32:46e9) + ret + +; known jump sources: c86b9 (32:46b9), c86c7 (32:46c7), c86de (32:46de) +Functionc86ea: ; c86ea (32:46ea) + ld e, a + xor $ff + inc a + ld d, a + ld h, $d2 + ld a, [$FF00+$c7] + ld l, a + ld a, [$FF00+$c8] + sub l + srl a + push af +.asm_c86fa + ld [hl], e + inc hl + ld [hl], d + inc hl + dec a + jr nz, .asm_c86fa + pop af + ret nc + ld [hl], e + ret + +; no known jump sources +Functionc8705: ; c8705 (32:4705) + call Functionc8f0a + ret + +; no known jump sources +Functionc8709: ; c8709 (32:4709) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c870c: ; c870c (32:470c) + dw Functionc8712 + dw Functionc8732 + dw Functionc875d + + +; no known jump sources +Functionc8712: ; c8712 (32:4712) + call Functionc80e5 + call Functionc8eca + ld a, $42 + call Functionc8ede + ld hl, $3 + add hl, bc + ld e, [hl] + ld d, $2 + call Functionc8f2e + ld h, $d2 + ld a, [$FF00+$c8] + ld l, a + ld [hl], $0 + dec l + ld [hl], $0 + ret + +; no known jump sources +Functionc8732: ; c8732 (32:4732) + ld a, [$FF00+$c8] + ld l, a + ld h, $d2 + ld e, l + ld d, h + dec de +.asm_c873a + ld a, [de] + dec de + ld [hld], a + ld a, [$FF00+$c7] + cp l + jr nz, .asm_c873a + ld [hl], $90 + ld a, [$FF00+$c8] + ld l, a + ld a, [hl] + cp $1 + jr c, .asm_c8752 + cp $90 + jr z, .asm_c8752 + ld [hl], $0 +.asm_c8752 + dec l + ld a, [hl] + cp $2 + ret c + cp $90 + ret z + ld [hl], $0 + ret + +; no known jump sources +Functionc875d: ; c875d (32:475d) + call Functionc8f0a + ret + +; no known jump sources +Functionc8761: ; c8761 (32:4761) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8764: ; c8764 (32:4764) + dw Functionc876a + dw Functionc8781 + dw Functionc87a3 + + +; no known jump sources +Functionc876a: ; c876a (32:476a) + call Functionc80e5 + call Functionc8eca + ld a, $42 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $2 + add hl, bc + ld [hl], $1 + ret + +; no known jump sources +Functionc8781: ; c8781 (32:4781) + ld hl, $3 + add hl, bc + ld a, [hl] + and $3f + ld d, a + ld hl, $2 + add hl, bc + ld a, [hl] + cp d + ret nc + call Functionc901b + ld hl, $3 + add hl, bc + ld a, [hl] + rlca + rlca + and $3 + ld hl, $2 + add hl, bc + add [hl] + ld [hl], a + ret + +; no known jump sources +Functionc87a3: ; c87a3 (32:47a3) + call Functionc8f0a + ret + +; no known jump sources +Functionc87a7: ; c87a7 (32:47a7) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c87aa: ; c87aa (32:47aa) + dw Functionc87b2 + dw Functionc87cf + dw Functionc87de + dw Functionc8801 + + +; no known jump sources +Functionc87b2: ; c87b2 (32:47b2) + call Functionc80e5 + call Functionc8eca + ld a, $42 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $2 + add hl, bc + ld [hl], $2 + ld hl, $3 + add hl, bc + ld [hl], $0 + ret + +; no known jump sources +Functionc87cf: ; c87cf (32:47cf) + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c87d9 + dec [hl] + ret +.asm_c87d9 + ld [hl], $10 + call Functionc80e5 + +; no known jump sources +Functionc87de: ; c87de (32:47de) + ld a, [$FF00+$c7] + ld l, a + ld a, [$FF00+$c8] + sub l + dec a + ld hl, $2 + add hl, bc + cp [hl] + ret c + ld a, [hl] + push af + and $7 + jr nz, .asm_c87f6 + ld hl, $1 + add hl, bc + dec [hl] +.asm_c87f6 + pop af + call Functionc901b + ld hl, $2 + add hl, bc + inc [hl] + inc [hl] + ret + +; no known jump sources +Functionc8801: ; c8801 (32:4801) + call Functionc8f0a + ret + +; no known jump sources +Functionc8805: ; c8805 (32:4805) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8808: ; c8808 (32:4808) + dw Functionc8810 + dw Functionc8869 + dw Functionc8888 + dw Functionc8833 + + +; no known jump sources +Functionc8810: ; c8810 (32:4810) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld [hl], $0 + call Functionc9038 + jr nz, .asm_c882f + ld a, $2 + jr .asm_c8831 +.asm_c882f + ld a, $fe +.asm_c8831 + ld [hl], a + ret + +; no known jump sources +Functionc8833: ; c8833 (32:4833) + call Functionc8f0a + ret + +; no known jump sources +Functionc8837: ; c8837 (32:4837) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c883a: ; c883a (32:483a) + dw Functionc8842 + dw Functionc8869 + dw Functionc8888 + dw Functionc8865 + + +; no known jump sources +Functionc8842: ; c8842 (32:4842) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ef4 + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld [hl], $0 + call Functionc9038 + jr nz, .asm_c8861 + ld a, $2 + jr .asm_c8863 +.asm_c8861 + ld a, $fe +.asm_c8863 + ld [hl], a + ret + +; no known jump sources +Functionc8865: ; c8865 (32:4865) + call Functionc8f0a + ret + +; no known jump sources +Functionc8869: ; c8869 (32:4869) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $f8 + jr z, .asm_c8876 + cp $8 + jr nz, .asm_c8879 +.asm_c8876 + call Functionc80e5 +.asm_c8879 + call Functionc88a5 + ld hl, $2 + add hl, bc + ld a, [hl] + ld hl, $3 + add hl, bc + add [hl] + ld [hl], a + ret + +; no known jump sources +Functionc8888: ; c8888 (32:4888) + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_c8893 + call Functionc80e5 +.asm_c8893 + call Functionc88a5 + ld hl, $2 + add hl, bc + ld a, [hl] + xor $ff + inc a + ld hl, $3 + add hl, bc + add [hl] + ld [hl], a + ret + +; known jump sources: c8879 (32:4879), c8893 (32:4893) +Functionc88a5: ; c88a5 (32:48a5) + push af + ld a, [FXAnimIDHi] ; $cfc3 + or a + jr nz, .asm_c88b3 + ld a, [FXAnimIDLo] ; $cfc2 + cp $cd + jr z, .asm_c88b7 +.asm_c88b3 + pop af + jp Functionc900b +.asm_c88b7 + ld a, [$FF00+$c7] + ld d, a + ld a, [$FF00+$c8] + sub d + ld d, a + ld h, $d2 + ld a, [hSCY] ; $ff00+$d0 + or a + jr nz, .asm_c88d0 + ld a, [$FF00+$c7] + or a + jr z, .asm_c88d6 + dec a + ld l, a + ld [hl], $0 + jr .asm_c88d6 +.asm_c88d0 + ld a, [$FF00+$c8] + dec a + ld l, a + ld [hl], $0 +.asm_c88d6 + ld a, [hSCY] ; $ff00+$d0 + ld l, a + ld a, [$FF00+$c7] + sub l + jr nc, .asm_c88e0 + xor a + dec d +.asm_c88e0 + ld l, a + pop af +.asm_c88e2 + ld [hli], a + dec d + jr nz, .asm_c88e2 + ret + +; no known jump sources +Functionc88e7: ; c88e7 (32:48e7) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c88ea: ; c88ea (32:48ea) + dw Functionc88f6 + dw Functionc8869 + dw Functionc8888 + dw Functionc88f2 + + +; no known jump sources +Functionc88f2: ; c88f2 (32:48f2) + call Functionc8f0a + ret + +; no known jump sources +Functionc88f6: ; c88f6 (32:48f6) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld [hl], $0 + call Functionc9038 + jr nz, .asm_c8915 + ld a, $fe + jr .asm_c8917 +.asm_c8915 + ld a, $2 +.asm_c8917 + ld [hl], a + ret + +; no known jump sources +Functionc8919: ; c8919 (32:4919) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c891c: ; c891c (32:491c) + dw Functionc88f6 + dw Functionc8869 + dw Functionc8929 + dw Functionc8888 + dw Functionc8926 + + +; no known jump sources +Functionc8926: ; c8926 (32:4926) + call Functionc8f0a + +; no known jump sources +Functionc8929: ; c8929 (32:4929) + ret + +; no known jump sources +Functionc892a: ; c892a (32:492a) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c892d: ; c892d (32:492d) + dw Functionc8933 + dw Functionc894a + dw Functionc8960 + + +; no known jump sources +Functionc8933: ; c8933 (32:4933) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld [hl], $0 + ret + +; no known jump sources +Functionc894a: ; c894a (32:494a) + ld hl, $3 + add hl, bc + ld a, [hl] + ld d, $8 + call Functionc905d + call Functionc900b + ld hl, $3 + add hl, bc + ld a, [hl] + add $4 + ld [hl], a + ret + +; no known jump sources +Functionc8960: ; c8960 (32:4960) + call Functionc8f0a + ret + +; no known jump sources +Functionc8964: ; c8964 (32:4964) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8967: ; c8967 (32:4967) + dw Functionc896d + dw Functionc8985 + dw Functionc89b1 + + +; no known jump sources +Functionc896d: ; c896d (32:496d) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + xor a + ld hl, $2 + add hl, bc + ld [hli], a + ld [hl], a + ret + +; no known jump sources +Functionc8985: ; c8985 (32:4985) + ld hl, $3 + add hl, bc + ld a, [hl] + ld d, $6 + call Functionc905d + push af + ld hl, $2 + add hl, bc + ld a, [hl] + ld d, $2 + call Functionc905d + ld e, a + pop af + add e + call Functionc900b + ld hl, $2 + add hl, bc + ld a, [hl] + add $8 + ld [hl], a + ld hl, $3 + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + ret + +; no known jump sources +Functionc89b1: ; c89b1 (32:49b1) + call Functionc8f0a + ret + +; no known jump sources +Functionc89b5: ; c89b5 (32:49b5) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c89b8: ; c89b8 (32:49b8) + dw Functionc89be + dw Functionc89ca + dw Functionc89da + + +; no known jump sources +Functionc89be: ; c89be (32:49be) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ret + +; no known jump sources +Functionc89ca: ; c89ca (32:49ca) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $20 + ret nc + inc [hl] + ld d, a + ld e, $4 + call Functionc8f2e + ret + +; no known jump sources +Functionc89da: ; c89da (32:49da) + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c89ea + dec [hl] + ld d, a + ld e, $4 + call Functionc8f2e + ret +.asm_c89ea + call Functionc8f0a + ret + +; no known jump sources +Functionc89ee: ; c89ee (32:49ee) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c89f1: ; c89f1 (32:49f1) + dw Functionc89f7 + dw Functionc8a14 + dw Functionc8a36 + + +; no known jump sources +Functionc89f7: ; c89f7 (32:49f7) + call Functionc80e5 + call Functionc8eca + ld a, $42 + call Functionc8ef4 + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $2 + add hl, bc + ld [hl], $1 + ld hl, $3 + add hl, bc + ld [hl], $20 + ret + +; no known jump sources +Functionc8a14: ; c8a14 (32:4a14) + ld hl, $2 + add hl, bc + ld a, [hl] + cp $38 + ret nc + push af + ld hl, $3 + add hl, bc + ld a, [hl] + ld d, $10 + call Functionc9066 + add $10 + ld d, a + pop af + add d + call Functionc901b + ld hl, $3 + add hl, bc + inc [hl] + inc [hl] + ret + +; no known jump sources +Functionc8a36: ; c8a36 (32:4a36) + call Functionc8f0a + ret + +; no known jump sources +Functionc8a3a: ; c8a3a (32:4a3a) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8a3d: ; c8a3d (32:4a3d) + dw Functionc8a49 + dw Functionc8a6f + dw Functionc8a70 + dw Functionc8a88 + dw Functionc8a6f + dw Functionc8aac + + +; no known jump sources +Functionc8a49: ; c8a49 (32:4a49) + call Functionc80e5 + ld a, $e4 + call Functionc8ecb + ld a, $47 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld a, [$FF00+$c7] + ld l, a + ld h, $d2 +.asm_c8a60 + ld a, [$FF00+$c8] + cp l + jr z, .asm_c8a69 + xor a + ld [hli], a + jr .asm_c8a60 +.asm_c8a69 + ld hl, $3 + add hl, bc + ld [hl], $0 + +; no known jump sources +Functionc8a6f: ; c8a6f (32:4a6f) + ret + +; no known jump sources +Functionc8a70: ; c8a70 (32:4a70) + call Functionc8ab0 + jr nc, .asm_c8a79 + call Functionc8a9a + ret +.asm_c8a79 + ld hl, $3 + add hl, bc + ld [hl], $0 + ld a, [$FF00+$c7] + inc a + ld [$FF00+$c7], a + call Functionc80e5 + ret + +; no known jump sources +Functionc8a88: ; c8a88 (32:4a88) + call Functionc8ab0 + jr nc, .asm_c8a96 + call Functionc8a9a + ld a, [$FF00+$c8] + dec a + ld l, a + ld [hl], e + ret +.asm_c8a96 + call Functionc80e5 + ret + +; known jump sources: c8a75 (32:4a75), c8a8d (32:4a8d) +Functionc8a9a: ; c8a9a (32:4a9a) + ld e, a + ld a, [$FF00+$c7] + ld l, a + ld a, [$FF00+$c8] + sub l + srl a + ld h, $d2 +.asm_c8aa5 + ld [hl], e + inc hl + inc hl + dec a + jr nz, .asm_c8aa5 + ret + +; no known jump sources +Functionc8aac: ; c8aac (32:4aac) + call Functionc8f19 + ret + +; known jump sources: c8a70 (32:4a70), c8a88 (32:4a88) +Functionc8ab0: ; c8ab0 (32:4ab0) + ld hl, $3 + add hl, bc + ld a, [hl] + inc [hl] + srl a + srl a + srl a + ld e, a + ld d, $0 + ld hl, $4ac7 + add hl, de + ld a, [hl] + cp $ff + ret +; c8ac7 (32:4ac7) + +INCBIN "baserom.gbc",$c8ac7,$c8acc - $c8ac7 + +; no known jump sources +Functionc8acc: ; c8acc (32:4acc) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8acf: ; c8acf (32:4acf) + dw Functionc8ad3 + dw Functionc8ae5 + + +; no known jump sources +Functionc8ad3: ; c8ad3 (32:4ad3) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld hl, $2 + add hl, bc + ld [hl], $40 + ret + +; no known jump sources +Functionc8ae5: ; c8ae5 (32:4ae5) + ld hl, $2 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c8afc + dec [hl] + srl a + srl a + srl a + and $f + ld d, a + ld e, a + call Functionc8f2e + ret +.asm_c8afc + call Functionc8f0a + ret + +; no known jump sources +Functionc8b00: ; c8b00 (32:4b00) + ld a, [hCGB] ; $ff00+$e6 + and a + jr nz, asm_c8b7a + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8b08: ; c8b08 (32:4b08) + dw Functionc8b0e + dw Functionc8b22 + dw Functionc8b60 + + +; no known jump sources +Functionc8b0e: ; c8b0e (32:4b0e) + call Functionc80e5 + ld a, $e4 + call Functionc8ecb + ld a, $47 + ld [hLCDStatCustom], a ; $ff00+$c6 + xor a + ld [$FF00+$c7], a + ld a, $60 + ld [$FF00+$c8], a + ret + +; no known jump sources +Functionc8b22: ; c8b22 (32:4b22) + ld hl, $3 + add hl, bc + ld a, [hl] + inc [hl] + ld e, a + and $7 + ret nz + ld a, e + and $18 + sla a + swap a + sla a + ld e, a + ld d, $0 + push bc + call Functionc9038 + jr nz, .asm_c8b4d + ld hl, $4bd8 + add hl, de + ld a, [hli] + ld [$cfc9], a + ld d, a + ld e, [hl] + ld bc, $2f30 + jr .asm_c8b5b +.asm_c8b4d + ld hl, $4be0 + add hl, de + ld d, [hl] + inc hl + ld a, [hl] + ld [$cfc9], a + ld e, a + ld bc, $3728 +.asm_c8b5b + call Functionc8b6c + pop bc + ret + +; no known jump sources +Functionc8b60: ; c8b60 (32:4b60) + call Functionc8f19 + ld a, $e4 + ld [$cfc7], a + ld [$cfc9], a + ret + +; known jump sources: c8b5b (32:4b5b) +Functionc8b6c: ; c8b6c (32:4b6c) + ld hl, $d200 +.asm_c8b6f + ld [hl], d + inc hl + dec b + jr nz, .asm_c8b6f +.asm_c8b74 + ld [hl], e + inc hl + dec c + jr nz, .asm_c8b74 + ret +asm_c8b7a: ; c8b7a (32:4b7a) + ld de, $4b81 + call Functionc80ca + jp [hl] +; c8b81 (32:4b81) + +INCBIN "baserom.gbc",$c8b81,$c8be8 - $c8b81 + +; no known jump sources +Functionc8be8: ; c8be8 (32:4be8) + ld de, $4bef + call Functionc8d77 + ret +; c8bef (32:4bef) + +INCBIN "baserom.gbc",$c8bef,$c8bf2 - $c8bef + +; no known jump sources +Functionc8bf2: ; c8bf2 (32:4bf2) + ld de, $4bf9 + call Functionc8d77 + ret +; c8bf9 (32:4bf9) + +INCBIN "baserom.gbc",$c8bf9,$c8bfd - $c8bf9 + +; no known jump sources +Functionc8bfd: ; c8bfd (32:4bfd) + ld de, $4c04 + call Functionc8d77 + ret +; c8c04 (32:4c04) + +INCBIN "baserom.gbc",$c8c04,$c8c08 - $c8c04 + +; no known jump sources +Functionc8c08: ; c8c08 (32:4c08) + ld de, $4c0f + call Functionc8d77 + ret +; c8c0f (32:4c0f) + +INCBIN "baserom.gbc",$c8c0f,$c8c14 - $c8c0f + +; no known jump sources +Functionc8c14: ; c8c14 (32:4c14) + ld de, $4c1b + call Functionc8d77 + ret +; c8c1b (32:4c1b) + +INCBIN "baserom.gbc",$c8c1b,$c8c20 - $c8c1b + +; no known jump sources +Functionc8c20: ; c8c20 (32:4c20) + ld de, $4c27 + call Functionc8d77 + ret +; c8c27 (32:4c27) + +INCBIN "baserom.gbc",$c8c27,$c8c30 - $c8c27 + +; no known jump sources +Functionc8c30: ; c8c30 (32:4c30) + ld de, $4c37 + call Functionc8d77 + ret +; c8c37 (32:4c37) + +INCBIN "baserom.gbc",$c8c37,$c8c3c - $c8c37 + +; no known jump sources +Functionc8c3c: ; c8c3c (32:4c3c) + ld de, $4c43 + call Functionc8d77 + ret +; c8c43 (32:4c43) + +INCBIN "baserom.gbc",$c8c43,$c8c55 - $c8c43 + +; no known jump sources +Functionc8c55: ; c8c55 (32:4c55) + ld de, $4c5c + call Functionc8d77 + ret +; c8c5c (32:4c5c) + +INCBIN "baserom.gbc",$c8c5c,$c8c61 - $c8c5c + +; no known jump sources +Functionc8c61: ; c8c61 (32:4c61) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8c64: ; c8c64 (32:4c64) + dw Functionc8c68 + dw Functionc8c85 + + +; no known jump sources +Functionc8c68: ; c8c68 (32:4c68) + call Functionc80e5 + call Functionc8eca + ld a, $43 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $2 + add hl, bc + ld [hl], $1 + ld hl, $3 + add hl, bc + ld [hl], $20 + ret + +; no known jump sources +Functionc8c85: ; c8c85 (32:4c85) + ld hl, $3 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c8c9e + dec [hl] + and $1 + ret nz + ld hl, $2 + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + call Functionc900b + ret +.asm_c8c9e + call Functionc8f0a + ret + +; no known jump sources +Functionc8ca2: ; c8ca2 (32:4ca2) + call Functionc80d7 ; ; ; call does not return + +; no known jump sources +Jumptable_c8ca5: ; c8ca5 (32:4ca5) + dw Functionc8cab + dw Functionc8cc3 + dw Functionc8cdd + + +; no known jump sources +Functionc8cab: ; c8cab (32:4cab) + call Functionc80e5 + call Functionc8eca + ld a, $43 + ld [hLCDStatCustom], a ; $ff00+$c6 + xor a + ld [$FF00+$c7], a + ld a, $37 + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld [hl], $0 + ret + +; no known jump sources +Functionc8cc3: ; c8cc3 (32:4cc3) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $40 + jr nc, Functionc8cdd + ld d, $6 + call Functionc905d + call Functionc900b + ld hl, $3 + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + ret + +; known jump sources: c8cca (32:4cca) +Functionc8cdd: ; c8cdd (32:4cdd) + call Functionc8f0a + ret + +; no known jump sources +Functionc8ce1: ; c8ce1 (32:4ce1) + call Functionc8d0b + jr c, .asm_c8cea + bit 7, a + jr z, .asm_c8ceb +.asm_c8cea + xor a +.asm_c8ceb + push af + call DelayFrame + pop af + ld [hSCY], a ; $ff00+$d0 + xor $ff + inc a + ld [$d314], a + ret + +; no known jump sources +Functionc8cf9: ; c8cf9 (32:4cf9) + call Functionc8d0b + jr nc, .asm_c8cff + xor a +.asm_c8cff + ld [hSCX], a ; $ff00+$cf + ret + +; no known jump sources +Functionc8d02: ; c8d02 (32:4d02) + call Functionc8d0b + jr nc, .asm_c8d08 + xor a +.asm_c8d08 + ld [hSCY], a ; $ff00+$d0 + ret + +; known jump sources: c8ce1 (32:4ce1), c8cf9 (32:4cf9), c8d02 (32:4d02) +Functionc8d0b: ; c8d0b (32:4d0b) + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_c8d18 + call EndBattleBGEffect + scf + ret +.asm_c8d18 + dec [hl] + ld hl, $3 + add hl, bc + ld a, [hl] + and $f + jr z, .asm_c8d2a + dec [hl] + ld hl, $2 + add hl, bc + ld a, [hl] + and a + ret +.asm_c8d2a + ld a, [hl] + swap a + or [hl] + ld [hl], a + ld hl, $2 + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + and a + ret + +; no known jump sources +Functionc8d3a: ; c8d3a (32:4d3a) + ld hl, $3 + add hl, bc + ld a, [hl] + cp $40 + jr nc, .asm_c8d53 + ld d, $6 + call Functionc905d + ld [hSCX], a ; $ff00+$cf + ld hl, $3 + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + ret +.asm_c8d53 + xor a + ld [hSCX], a ; $ff00+$cf + ret + +; known jump sources: c8130 (32:4130), c8144 (32:4144), c8158 (32:4158), c817e (32:417e), c8198 (32:4198), c81a8 (32:41a8) +Functionc8d57: ; c8d57 (32:4d57) + ld hl, $1 + add hl, bc + ld a, [hl] + and a + jr z, .asm_c8d69 + + dec [hl] + ld hl, $3 + add hl, bc + ld a, [hl] + call Functionc8eb2 + ret + +.asm_c8d69 + ld hl, $2 + add hl, bc + ld a, [hl] + ld hl, $1 + add hl, bc + ld [hl], a + call Functionc8eac + ret + +; known jump sources: c8beb (32:4beb), c8bf5 (32:4bf5), c8c00 (32:4c00), c8c0b (32:4c0b), c8c17 (32:4c17), c8c23 (32:4c23), c8c33 (32:4c33), c8c3f (32:4c3f), c8c58 (32:4c58) +Functionc8d77: ; c8d77 (32:4d77) + ld a, [hCGB] ; $ff00+$e6 + and a + jr nz, asm_c8dd4 + push de + ld de, Jumptable_c8d85 + call Functionc80ca + pop de + jp [hl] + +; no known jump sources +Jumptable_c8d85: ; c8d85 (32:4d85) + dw Functionc8d8b + dw Functionc8daa + dw Functionc8dc9 + + +; no known jump sources +Functionc8d8b: ; c8d8b (32:4d8b) + call Functionc80e5 + ld a, $e4 + call Functionc8ecb + ld a, $47 + call Functionc8ede + ld a, [$FF00+$c8] + inc a + ld [$FF00+$c8], a + ld hl, $3 + add hl, bc + ld a, [hl] + ld [hl], $0 + ld hl, $2 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionc8daa: ; c8daa (32:4daa) + ld hl, $2 + add hl, bc + ld a, [hl] + and $f + jr z, .asm_c8db5 + dec [hl] + ret +.asm_c8db5 + ld a, [hl] + swap a + or [hl] + ld [hl], a + call Functionc8eac + jr c, .asm_c8dc3 + call Functionc900b + ret +.asm_c8dc3 + ld hl, $3 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionc8dc9: ; c8dc9 (32:4dc9) + call Functionc8f19 + ld a, $e4 + ld [rBGP], a ; $ff00+$47 + call EndBattleBGEffect + ret +asm_c8dd4: ; c8dd4 (32:4dd4) + push de + ld de, Jumptable_c8ddd + call Functionc80ca + pop de + jp [hl] + +; no known jump sources +Jumptable_c8ddd: ; c8ddd (32:4ddd) + dw Functionc8de7 + dw Functionc8e02 + dw Functionc8e21 + dw Functionc8e2a + dw Functionc8e49 + + +; no known jump sources +Functionc8de7: ; c8de7 (32:4de7) + call Functionc9038 + jr nz, .asm_c8df2 + call Functionc80e5 + call Functionc80e5 +.asm_c8df2 + call Functionc80e5 + ld hl, $3 + add hl, bc + ld a, [hl] + ld [hl], $0 + ld hl, $2 + add hl, bc + ld [hl], a + ret + +; no known jump sources +Functionc8e02: ; c8e02 (32:4e02) + ld hl, $2 + add hl, bc + ld a, [hl] + and $f + jr z, .asm_c8e0d + dec [hl] + ret +.asm_c8e0d + ld a, [hl] + swap a + or [hl] + ld [hl], a + call Functionc8eac + jr c, .asm_c8e1b + call Functionc8e52 + ret +.asm_c8e1b + ld hl, $3 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionc8e21: ; c8e21 (32:4e21) + ld a, $e4 + call Functionc8e52 + call EndBattleBGEffect + ret + +; no known jump sources +Functionc8e2a: ; c8e2a (32:4e2a) + ld hl, $2 + add hl, bc + ld a, [hl] + and $f + jr z, .asm_c8e35 + dec [hl] + ret +.asm_c8e35 + ld a, [hl] + swap a + or [hl] + ld [hl], a + call Functionc8eac + jr c, .asm_c8e43 + call Functionc8e7f + ret +.asm_c8e43 + ld hl, $3 + add hl, bc + dec [hl] + ret + +; no known jump sources +Functionc8e49: ; c8e49 (32:4e49) + ld a, $e4 + call Functionc8e7f + call EndBattleBGEffect + ret + +; known jump sources: c8e17 (32:4e17), c8e23 (32:4e23) +Functionc8e52: ; c8e52 (32:4e52) + ld h, a + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $5 + ld [rSVBK], a ; $ff00+$70 + ld a, h + push bc + push af + ld hl, BGPals ; $d080 + ld de, Unkn1Pals ; $d000 + ld b, a + ld c, $1 + call CopyPals + ld hl, $d0c8 + ld de, $d048 + pop af + ld b, a + ld c, $1 + call CopyPals + pop bc + pop af + ld [rSVBK], a ; $ff00+$70 + ld a, $1 + ld [hCGBPalUpdate], a ; $ff00+$e5 + ret + +; known jump sources: c8e3f (32:4e3f), c8e4b (32:4e4b) +Functionc8e7f: ; c8e7f (32:4e7f) + ld h, a + ld a, [rSVBK] ; $ff00+$70 + push af + ld a, $5 + ld [rSVBK], a ; $ff00+$70 + ld a, h + push bc + push af + ld hl, $d088 + ld de, $d008 + ld b, a + ld c, $1 + call CopyPals + ld hl, OBPals ; $d0c0 + ld de, MartPointer ; $d040 (aliases: Unkn2Pals) + pop af + ld b, a + ld c, $1 + call CopyPals + pop bc + pop af + ld [rSVBK], a ; $ff00+$70 + ld a, $1 + ld [hCGBPalUpdate], a ; $ff00+$e5 + ret + +; known jump sources: c8d73 (32:4d73), c8dba (32:4dba), c8e12 (32:4e12), c8e3a (32:4e3a) +Functionc8eac: ; c8eac (32:4eac) + ld hl, $3 + add hl, bc + ld a, [hl] + inc [hl] + +; known jump sources: c8d65 (32:4d65) +Functionc8eb2: ; c8eb2 (32:4eb2) + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + cp $ff + jr z, .asm_c8ec8 + cp $fe + jr nz, .asm_c8ec6 + ld a, [de] + ld hl, $3 + add hl, bc + ld [hl], $0 +.asm_c8ec6 + and a + ret +.asm_c8ec8 + scf + ret + +; known jump sources: c85a5 (32:45a5), c85c2 (32:45c2), c85fc (32:45fc), c8613 (32:4613), c864b (32:464b), c866e (32:466e), c869b (32:469b), c8715 (32:4715), c876d (32:476d), c87b5 (32:47b5), c8813 (32:4813), c8845 (32:4845), c88f9 (32:48f9), c8936 (32:4936), c8970 (32:4970), c89c1 (32:49c1), c89fa (32:49fa), c8ad6 (32:4ad6), c8c6b (32:4c6b), c8cae (32:4cae), c8f0f (32:4f0f), c8f2a (32:4f2a) +Functionc8eca: ; c8eca (32:4eca) + xor a + +; known jump sources: c8a4e (32:4a4e), c8b13 (32:4b13), c8d90 (32:4d90) +Functionc8ecb: ; c8ecb (32:4ecb) + ld hl, CurMartEnd ; $d100 (aliases: LYOverrides) + ld e, $99 +.asm_c8ed0 + ld [hli], a + dec e + jr nz, .asm_c8ed0 + ld hl, $d200 + ld e, $91 +.asm_c8ed9 + ld [hli], a + dec e + jr nz, .asm_c8ed9 + ret + +; known jump sources: c85c7 (32:45c7), c8650 (32:4650), c8673 (32:4673), c86a0 (32:46a0), c871a (32:471a), c8772 (32:4772), c87ba (32:47ba), c8818 (32:4818), c88fe (32:48fe), c893b (32:493b), c8975 (32:4975), c89c6 (32:49c6), c8a53 (32:4a53), c8adb (32:4adb), c8c70 (32:4c70), c8d95 (32:4d95) +Functionc8ede: ; c8ede (32:4ede) + ld [hLCDStatCustom], a ; $ff00+$c6 + call Functionc9038 + jr nz, .asm_c8eea + ld de, $36 + jr .asm_c8eed +.asm_c8eea + ld de, $2f5e +.asm_c8eed + ld a, d + ld [$FF00+$c7], a + ld a, e + ld [$FF00+$c8], a + ret + +; known jump sources: c884a (32:484a), c89ff (32:49ff) +Functionc8ef4: ; c8ef4 (32:4ef4) + ld [hLCDStatCustom], a ; $ff00+$c6 + call Functionc9038 + jr nz, .asm_c8f00 + ld de, $36 + jr .asm_c8f03 +.asm_c8f00 + ld de, $2d5e +.asm_c8f03 + ld a, d + ld [$FF00+$c7], a + ld a, e + ld [$FF00+$c8], a + ret + +; known jump sources: c8561 (32:4561), c85be (32:45be), c8603 (32:4603), c863b (32:463b), c865e (32:465e), c8685 (32:4685), c8705 (32:4705), c875d (32:475d), c87a3 (32:47a3), c8801 (32:4801), c8833 (32:4833), c8865 (32:4865), c88f2 (32:48f2), c8926 (32:4926), c8960 (32:4960), c89b1 (32:49b1), c89ea (32:49ea), c8a36 (32:4a36), c8afc (32:4afc), c8c9e (32:4c9e), c8cdd (32:4cdd) +Functionc8f0a: ; c8f0a (32:4f0a) + xor a + ld [$FF00+$c7], a + ld [$FF00+$c8], a + call Functionc8eca + xor a + ld [hLCDStatCustom], a ; $ff00+$c6 + call EndBattleBGEffect + ret + +; known jump sources: c8aac (32:4aac), c8b60 (32:4b60), c8dc9 (32:4dc9) +Functionc8f19: ; c8f19 (32:4f19) + xor a + ld [hLCDStatCustom], a ; $ff00+$c6 + ld a, $e4 + ld [rBGP], a ; $ff00+$47 + ld [$cfc7], a + ld [$cfc9], a + ld [$FF00+$c7], a + ld [$FF00+$c8], a + call Functionc8eca + ret + +; known jump sources: c85b6 (32:45b6), c8624 (32:4624), c8656 (32:4656), c867d (32:467d), c8724 (32:4724), c89d6 (32:49d6), c89e6 (32:49e6), c8af8 (32:4af8) +Functionc8f2e: ; c8f2e (32:4f2e) + push bc + xor a + ld [$d419], a + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + ld a, $80 + ld [$d41c], a + ld bc, $d200 +.asm_c8f43 + ld a, [$FF00+$c7] + cp c + jr nc, .asm_c8f58 + ld a, [$FF00+$c8] + cp c + jr c, .asm_c8f58 + ld a, [$d41b] + ld d, a + ld a, [$d419] + call Functionc905d + ld [bc], a +.asm_c8f58 + inc bc + ld a, [$d41a] + ld hl, $d419 + add [hl] + ld [hl], a + ld hl, $d41c + dec [hl] + jr nz, .asm_c8f43 + pop bc + ret + +; known jump sources: c8554 (32:4554) +Functionc8f69: ; c8f69 (32:4f69) + push bc + xor a + ld [$d419], a + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + ld a, $40 + ld [$d41c], a + ld bc, $d422 +.asm_c8f7e + ld a, [$d41b] + ld d, a + ld a, [$d419] + call Functionc905d + ld [bc], a + inc bc + ld a, [$d41a] + ld hl, $d419 + add [hl] + ld [hl], a + ld hl, $d41c + dec [hl] + jr nz, .asm_c8f7e + pop bc + ret + +; known jump sources: c85f8 (32:45f8) +Functionc8f9a: ; c8f9a (32:4f9a) + push bc + ld [$d41c], a + ld a, e + ld [$d41a], a + ld a, d + ld [$d41b], a + call Functionc8fe4 + ld hl, $d200 + add hl, de + ld c, l + ld b, h +.asm_c8faf + ld a, [$d41c] + and a + jr z, .asm_c8fe1 + dec a + ld [$d41c], a + push af + ld a, [$d41b] + ld d, a + ld a, [$d41a] + push hl + call Functionc905d + ld e, a + pop hl + ld a, [$FF00+$c8] + cp c + jr c, .asm_c8fcf + ld a, e + ld [bc], a + inc bc +.asm_c8fcf + ld a, [$FF00+$c7] + cp l + jr nc, .asm_c8fd6 + ld [hl], e + dec hl +.asm_c8fd6 + ld a, [$d41a] + add $4 + ld [$d41a], a + pop af + jr .asm_c8faf +.asm_c8fe1 + pop bc + and a + ret + +; known jump sources: c8fa6 (32:4fa6) +Functionc8fe4: ; c8fe4 (32:4fe4) + ld a, [$FF00+$c7] + ld e, a + ld a, [$d419] + add e + ld e, a + ld d, $0 + ret + +; known jump sources: c85ba (32:45ba), c8637 (32:4637), c865a (32:465a), c8681 (32:4681) +Functionc8fef: ; c8fef (32:4fef) + push bc + ld a, [$FF00+$c7] + ld l, a + inc a + ld e, a + ld h, $d2 + ld d, h + ld a, [$FF00+$c8] + sub l + and a + jr z, .asm_c9009 + ld c, a + ld a, [hl] + push af +.asm_c9001 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_c9001 + pop af + ld [hl], a +.asm_c9009 + pop bc + ret + +; known jump sources: c88b4 (32:48b4), c8954 (32:4954), c899d (32:499d), c8c9a (32:4c9a), c8cd1 (32:4cd1), c8dbf (32:4dbf) +Functionc900b: ; c900b (32:500b) + push af + ld h, $d2 + ld a, [$FF00+$c7] + ld l, a + ld a, [$FF00+$c8] + sub l + ld d, a + pop af +.asm_c9016 + ld [hli], a + dec d + jr nz, .asm_c9016 + ret + +; known jump sources: c8790 (32:4790), c87f7 (32:47f7), c8a2c (32:4a2c) +Functionc901b: ; c901b (32:501b) + push af + ld e, a + ld a, [$FF00+$c7] + ld l, a + ld a, [$FF00+$c8] + sub l + sub e + ld d, a + ld h, $d2 + ld a, [$FF00+$c7] + ld l, a + ld a, $90 +.asm_c902c + ld [hli], a + dec e + jr nz, .asm_c902c + pop af + xor $ff +.asm_c9033 + ld [hli], a + dec d + jr nz, .asm_c9033 + ret + +; known jump sources: c81c4 (32:41c4), c81f3 (32:41f3), c8234 (32:4234), c825e (32:425e), c82a1 (32:42a1), c82cb (32:42cb), c8305 (32:4305), c837b (32:437b), c83a8 (32:43a8), c8826 (32:4826), c8858 (32:4858), c890c (32:490c), c8b39 (32:4b39), c8de7 (32:4de7), c8ee0 (32:4ee0), c8ef6 (32:4ef6) +Functionc9038: ; c9038 (32:5038) + ld hl, $2 + add hl, bc + ld a, [hBattleTurn] ; $ff00+$e4 + and $1 + xor [hl] + ret + +; known jump sources: c81ea (32:41ea), c8223 (32:4223), c8290 (32:4290) +Functionc9042: ; c9042 (32:5042) + ld hl, $2 + add hl, bc + ld a, [hBattleTurn] ; $ff00+$e4 + and $1 + xor [hl] + jr nz, .asm_c9053 + ld a, [EnemySubStatus3] ; $c66f + and $60 + ret +.asm_c9053 + ld a, [PlayerSubStatus3] ; $c66a + and $60 + ret + +; known jump sources: c8171 (32:4171), c818b (32:418b) +Functionc9059: ; c9059 (32:5059) + ld a, [hSGB] ; $ff00+$e7 + and a + ret + +; known jump sources: c86d6 (32:46d6), c8951 (32:4951), c898c (32:498c), c8997 (32:4997), c8cce (32:4cce), c8d45 (32:4d45), c8f54 (32:4f54), c8f85 (32:4f85), c8fc2 (32:4fc2) +Functionc905d: ; c905d (32:505d) + ld e, a + callab Functionce765 + ld a, e + ret + +; known jump sources: c8a24 (32:4a24) +Functionc9066: ; c9066 (32:5066) + ld e, a + callab Functionce76b + ld a, e + ret +; c906f (32:506f) + + diff --git a/battle/core.asm b/battle/core.asm new file mode 100644 index 000000000..728d5e5bf --- /dev/null +++ b/battle/core.asm @@ -0,0 +1,9481 @@ +; Core components of the battle engine. + + +Function3c000: ; 3c000 + xor a + ld [$c664], a + ld [$c6fc], a + ld [$d0ec], a + ld [BattleEnded], a + inc a + ld [$d264], a + ld hl, OTPartyMon1CurHP + ld bc, $002f + ld d, $3 +.asm_3c019 + inc d + ld a, [hli] + or [hl] + jr nz, .asm_3c021 + add hl, bc + jr .asm_3c019 + +.asm_3c021 + ld a, d + ld [$d430], a + ld a, [InLinkBattle] + and a + jr z, .asm_3c031 + ld a, [$ffcb] + cp $2 +.data_3c02f + db $28 + db $1b + +.asm_3c031 + ld a, [IsInBattle] + dec a + jr z, .asm_3c047 + xor a + ld [$c718], a + call Function3d834 + call Function3d867 + call Function3dc18 + call Function3d4e1 + +.asm_3c047 + ld c, $28 + call DelayFrames + call Function309d + call Function3d873 + ld a, d + and a + jp z, LostBattle + call Function30b4 + ld a, [BattleType] + cp $2 + jp z, Function3c0e2 + cp $3 + jp z, Function3c0e2 + xor a + ld [CurPartyMon], a +.asm_3c06b + call Function3d887 + jr nz, .asm_3c076 + ld hl, CurPartyMon + inc [hl] + jr .asm_3c06b + +.asm_3c076 + ld a, [CurBattleMon] + ld [$c71a], a + ld a, [CurPartyMon] + ld [CurBattleMon], a + inc a + ld hl, PartyCount + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [CurPartySpecies], a + ld [TempBattleMonSpecies], a + ld hl, $c505 + ld a, $9 + call Function3d490 + call Function309d + call Function3d57a + call Function3da0d + call Function3dab1 + call Function3f26d + call Function3dbde + call Function3dc18 + call Function3db5f + call EmptyBattleTextBox + call Function309d + call SetPlayerTurn + call Function3dc23 + ld a, [InLinkBattle] + and a + jr z, .asm_3c0df + ld a, [$ffcb] + cp $2 + jr nz, .asm_3c0df + xor a + ld [$c718], a + call Function3d834 + call Function3d867 + call Function3dc18 + call Function3d4e1 + call SetEnemyTurn + call Function3dc23 + +.asm_3c0df + jp Function3c12f +; 3c0e2 + +Function3c0e2: ; 3c0e2 + jp Function3e139 +; 3c0e5 + + + +Function3c0e5: ; 3c0e5 + call Function30b4 + ld a, [$d0ee] + and $c0 + add $2 + ld [$d0ee], a + ld a, [InLinkBattle] + and a + ld hl, $47bd + jr z, .asm_3c115 + ld a, [$d0ee] + and $c0 + ld [$d0ee], a + ld hl, $47cf + call Function3d2e0 + jr nc, .asm_3c115 + ld hl, $cd2a + bit 4, [hl] + jr nz, .asm_3c118 + ld hl, $5863 + +.asm_3c115 + call StdBattleTextBox + +.asm_3c118 + call Function3ceec + call Function3d2e0 + jr c, .asm_3c126 + + ld de, SFX_RUN + call PlaySFX + +.asm_3c126 + call SetPlayerTurn + ld a, 1 + ld [BattleEnded], a + ret +; 3c12f + +Function3c12f: ; 3c12f + call Function3c1bf + call Function3c3f5 + jp c, .asm_3c1be + xor a + ld [$c710], a + ld [$c711], a + ld [$d264], a + ld [$c73f], a + ld [$c740], a + ld [CurDamage], a + ld [$d257], a + call Function3c27c + call UpdateBattleMonInParty + callba AIChooseMove + call Function3d2f1 + jr nz, .asm_3c174 + callba Function100da5 + callba Function100641 + callba Function100dd8 + jp c, .asm_3c1be + +.asm_3c174 + call Function3c410 + jr c, .asm_3c18a +.asm_3c179 + call Function3e139 + jr c, .asm_3c1be + ld a, [BattleEnded] + and a + jr nz, .asm_3c1be + ld a, [$d232] + and a + jr nz, .asm_3c1be + +.asm_3c18a + call Function3c434 + jr nz, .asm_3c179 + call Function3c300 + jr c, .asm_3c1be + call Function3c314 + jr c, .asm_3c19e + call Function3c5fe + jr .asm_3c1a1 + +.asm_3c19e + call Function3c664 + +.asm_3c1a1 + call Function3d2e0 + jr c, .asm_3c1be + ld a, [$d232] + and a + jr nz, .asm_3c1be + ld a, [BattleEnded] + and a + jr nz, .asm_3c1be + call Function3c1d6 + ld a, [BattleEnded] + and a + jr nz, .asm_3c1be + jp Function3c12f + +.asm_3c1be + ret +; 3c1bf + +Function3c1bf: ; 3c1bf + ret +; 3c1c0 + + +Function3c1c0: ; 3c1c0 + ld a, $5 + call GetSRAMBank + ld hl, $a89b + inc [hl] + jr nz, .asm_3c1d2 + dec hl + inc [hl] + jr nz, .asm_3c1d2 + dec [hl] + inc hl + dec [hl] + +.asm_3c1d2 + call CloseSRAM + ret +; 3c1d6 + + +Function3c1d6: ; 3c1d6 + ld a, [$ffcb] + cp $1 + jr z, .asm_3c1fe + call Function3c23c + ret c + call Function3ca26 + call Function3c23c + ret c + call HandleWeather + call Function3c23c + ret c + call Function3c874 + call Function3c23c + ret c + call Function3c801 + call Function3c23c + ret c + jr .asm_3c21e + +.asm_3c1fe + call Function3c25c + ret c + call Function3ca26 + call Function3c25c + ret c + call HandleWeather + call Function3c25c + ret c + call Function3c874 + call Function3c25c + ret c + call Function3c801 + call Function3c25c + ret c + +.asm_3c21e + call Function3c8eb + call Function3c93c + call Function3ca8f + call Function3cafb + call Function3cb36 + call Function3de97 + call Function3dcf9 + call UpdateBattleMonInParty + call Function309d + jp Function3c4df +; 3c23c + +Function3c23c: ; 3c23c + call Function3c710 + jr nz, .asm_3c24a + call Function3d14e + ld a, [BattleEnded] + and a + jr nz, .asm_3c25a + +.asm_3c24a + call Function3c70b + jr nz, .asm_3c258 + call Function3cd55 + ld a, [BattleEnded] + and a + jr nz, .asm_3c25a + +.asm_3c258 + and a + ret + +.asm_3c25a + scf + ret +; 3c25c + +Function3c25c: ; 3c25c + call Function3c70b + jr nz, .asm_3c26a + call Function3cd55 + ld a, [BattleEnded] + and a + jr nz, .asm_3c27a + +.asm_3c26a + call Function3c710 + jr nz, .asm_3c278 + call Function3d14e + ld a, [BattleEnded] + and a + jr nz, .asm_3c27a + +.asm_3c278 + and a + ret + +.asm_3c27a + scf + ret +; 3c27c + +Function3c27c: ; 3c27c + ld a, [$ffcb] + cp $1 + jr z, .asm_3c287 + call .asm_3c28a + jr .asm_3c296 + +.asm_3c287 + call .asm_3c296 +.asm_3c28a + call SetPlayerTurn + ld de, PartyMon1Item + ld a, [CurBattleMon] + ld b, a + jr .asm_3c2a0 + +.asm_3c296 + call SetEnemyTurn + ld de, OTPartyMon1Item + ld a, [CurOTMon] + ld b, a + +.asm_3c2a0 + push de + push bc + callab GetUserItem + ld a, [hl] + ld [$d265], a + sub $98 + pop bc + pop de + ret nz + ld [hl], a + ld h, d + ld l, e + ld a, b + call GetPartyLocation + xor a + ld [hl], a + ld a, $2 + call _GetBattleVar + push af + set 7, [hl] + ld a, $c + call _GetBattleVar + push hl + push af + xor a + ld [hl], a + ld [AttackMissed], a + ld [EffectFailed], a + callba BattleCommand77 + pop af + pop hl + ld [hl], a + call GetItemName + ld hl, $4bde + call StdBattleTextBox + callab BattleCommand8c + pop af + bit 7, a + ret nz + xor a + ld [$cfca], a + ld de, $0103 + call Function3ee0f + call Function3c8e4 + ld hl, $4d97 + jp StdBattleTextBox +; 3c300 + +Function3c300: ; 3c300 + ld a, [InLinkBattle] + and a + jr z, .asm_3c30d + ld a, [$d430] + cp $f + jr z, .asm_3c30f + +.asm_3c30d + and a + ret + +.asm_3c30f + call Function3c0e5 + scf + ret +; 3c314 + +Function3c314: ; 3c314 + ld a, [InLinkBattle] + and a + jr z, .asm_3c35b + ld a, [$d430] + cp $e + jr z, .asm_3c35b + cp $d + jr z, .asm_3c35b + sub $4 + jr c, .asm_3c35b + ld a, [$d0ec] + cp $2 + jr nz, .asm_3c34c + ld a, [$ffcb] + cp $2 + jr z, .asm_3c341 + call BattleRandom + cp $80 + jp c, .asm_3c3f1 + jp Function3c3f3 + +.asm_3c341 + call BattleRandom + cp $80 + jp c, Function3c3f3 + jp .asm_3c3f1 + +.asm_3c34c + callab Function3846c + call SetEnemyTurn + call Function3dc23 + jp Function3c3f3 + +.asm_3c35b + ld a, [$d0ec] + and a + jp nz, .asm_3c3f1 + call Function3c5b4 + jr z, .asm_3c36d + jp c, .asm_3c3f1 + jp Function3c3f3 + +.asm_3c36d + call SetPlayerTurn + callab GetUserItem + push bc + callab GetOpponentItem + pop de + ld a, d + cp $4a + jr nz, .asm_3c391 + ld a, b + cp $4a + jr z, .asm_3c39f + call BattleRandom + cp e + jr nc, .asm_3c3c5 + jp .asm_3c3f1 + +.asm_3c391 + ld a, b + cp $4a + jr nz, .asm_3c3c5 + call BattleRandom + cp c + jr nc, .asm_3c3c5 + jp Function3c3f3 + +.asm_3c39f + ld a, [$ffcb] + cp $2 + jr z, .asm_3c3b5 + call BattleRandom + cp c + jp c, Function3c3f3 + call BattleRandom + cp e + jp c, .asm_3c3f1 + jr .asm_3c3c5 + +.asm_3c3b5 + call BattleRandom + cp e + jp c, .asm_3c3f1 + call BattleRandom + cp c + jp c, Function3c3f3 + jr .asm_3c3c5 + +.asm_3c3c5 + ld de, BattleMonSpd + ld hl, EnemyMonSpd + ld c, $2 + call StringCmp + jr z, .asm_3c3d8 + jp nc, .asm_3c3f1 + jp Function3c3f3 + +.asm_3c3d8 + ld a, [$ffcb] + cp $2 + jr z, .asm_3c3e9 + call BattleRandom + cp $80 + jp c, .asm_3c3f1 + jp Function3c3f3 + +.asm_3c3e9 + call BattleRandom + cp $80 + jp c, Function3c3f3 +.asm_3c3f1 + scf + ret +; 3c3f3 + +Function3c3f3: ; 3c3f3 + and a + ret +; 3c3f5 + +Function3c3f5: ; 3c3f5 + ld a, [BattleType] + cp $6 + jr nz, .asm_3c40e + ld a, [$dc79] + and a + jr nz, .asm_3c40e + ld a, [$d0ee] + and $c0 + add $2 + ld [$d0ee], a + scf + ret + +.asm_3c40e + and a + ret +; 3c410 + +Function3c410: ; 3c410 + ld a, [PlayerSubStatus4] + and $20 + jp nz, Function3c432 + ld hl, EnemySubStatus3 + res 3, [hl] + ld hl, PlayerSubStatus3 + res 3, [hl] + ld a, [hl] + and $12 + jp nz, Function3c432 + ld hl, PlayerSubStatus1 + bit 6, [hl] + jp nz, Function3c432 + and a + ret +; 3c432 + +Function3c432: ; 3c432 + scf + ret +; 3c434 + +Function3c434: ; 3c434 + call Function3c410 + jp c, .asm_3c4ba + ld hl, PlayerSubStatus5 + bit 4, [hl] + jr z, .asm_3c449 + ld a, [LastPlayerMove] + ld [CurPlayerMove], a + jr .asm_3c47c + +.asm_3c449 + ld a, [$d0ec] + cp $2 + jr z, .asm_3c4ce + and a + jr nz, .asm_3c4b5 + ld a, [PlayerSubStatus3] + and $1 + jr nz, .asm_3c4ba + xor a + ld [$d235], a + inc a + ld [FXAnimIDLo], a + call Function3e4bc + push af + call Function30b4 + call UpdateBattleHuds + ld a, [CurPlayerMove] + cp $a5 + jr z, .asm_3c476 + call PlayClickSFX + +.asm_3c476 + ld a, $1 + ld [hBGMapMode], a + pop af + ret nz + +.asm_3c47c + call SetPlayerTurn + callab UpdateMoveData + xor a + ld [$c732], a + ld a, [PlayerMoveEffect] + cp $77 + jr z, .asm_3c494 + xor a + ld [PlayerFuryCutterCount], a + +.asm_3c494 + ld a, [PlayerMoveEffect] + cp $51 + jr z, .asm_3c4a4 + ld hl, PlayerSubStatus4 + res 6, [hl] + xor a + ld [$c72b], a + +.asm_3c4a4 + ld a, [PlayerMoveEffect] + cp $6f + jr z, .asm_3c4c9 + cp $74 + jr z, .asm_3c4c9 + xor a + ld [$c679], a + jr .asm_3c4c9 + +.asm_3c4b5 + ld hl, PlayerSubStatus3 + res 0, [hl] + +.asm_3c4ba + xor a + ld [PlayerFuryCutterCount], a + ld [$c679], a + ld [$c72b], a + ld hl, PlayerSubStatus4 + res 6, [hl] + +.asm_3c4c9 + call Function3e7c1 + xor a + ret + +.asm_3c4ce + xor a + ld [PlayerFuryCutterCount], a + ld [$c679], a + ld [$c72b], a + ld hl, PlayerSubStatus4 + res 6, [hl] + xor a + ret +; 3c4df + +Function3c4df: ; 3c4df + ld a, [$ffcb] + cp $1 + jr z, .asm_3c4ea + call .asm_3c4ed + jr .asm_3c518 + +.asm_3c4ea + call .asm_3c518 +.asm_3c4ed + ld hl, PlayerSubStatus5 + bit 4, [hl] + ret z + ld a, [PlayerEncoreCount] + dec a + ld [PlayerEncoreCount], a + jr z, .asm_3c50a + ld hl, BattleMonPPMove1 + ld a, [CurMoveNum] + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + and $3f + ret nz + +.asm_3c50a + ld hl, PlayerSubStatus5 + res 4, [hl] + call SetEnemyTurn + ld hl, $4c8a + jp StdBattleTextBox + +.asm_3c518 + ld hl, EnemySubStatus5 + bit 4, [hl] + ret z + ld a, [EnemyEncoreCount] + dec a + ld [EnemyEncoreCount], a + jr z, .asm_3c535 + ld hl, EnemyMonPPMove1 + ld a, [CurEnemyMoveNum] + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + and $3f + ret nz + +.asm_3c535 + ld hl, EnemySubStatus5 + res 4, [hl] + call SetPlayerTurn + ld hl, $4c8a + jp StdBattleTextBox +; 3c543 + + +Function3c543: ; 3c543 + ld a, [IsInBattle] + dec a + jr nz, .Stay + + ld a, [PlayerSubStatus5] + bit 7, a + jr nz, .Stay + + ld a, [$c731] + and a + jr nz, .Stay + + ld a, [EnemyMonStatus] + and 1 << FRZ | SLP + jr nz, .Stay + + ld a, [TempEnemyMonSpecies] + ld de, 1 + ld hl, AlwaysFleeMons + call IsInArray + jr c, .Flee + + call BattleRandom + ld b, a + cp $80 + jr nc, .Stay + + push bc + ld a, [TempEnemyMonSpecies] + ld de, 1 + ld hl, OftenFleeMons + call IsInArray + pop bc + jr c, .Flee + + ld a, b + cp $1a + jr nc, .Stay + + ld a, [TempEnemyMonSpecies] + ld de, 1 + ld hl, SometimesFleeMons + call IsInArray + jr c, .Flee + +.Stay + and a + ret + +.Flee + scf + ret +; 3c59a + +FleeMons: + +SometimesFleeMons: ; 3c59a + db MAGNEMITE + db GRIMER + db TANGELA + db MR__MIME + db EEVEE + db PORYGON + db DRATINI + db DRAGONAIR + db TOGETIC + db UMBREON + db UNOWN + db SNUBBULL + db HERACROSS + db -1 + +OftenFleeMons: ; 3c5a8 + db CUBONE + db ARTICUNO + db ZAPDOS + db MOLTRES + db QUAGSIRE + db DELIBIRD + db PHANPY + db TEDDIURSA + db -1 + +AlwaysFleeMons: ; 3c5b1 + db RAIKOU + db ENTEI +; db SUICUNE + db -1 +; 3c5b4 + + +Function3c5b4: ; 3c5b4 + ld a, [CurPlayerMove] + call GetMovePriority + ld b, a + push bc + ld a, [CurEnemyMove] + call GetMovePriority + pop bc + cp b + ret +; 3c5c5 + +GetMovePriority: ; 3c5c5 + ld b, a + cp VITAL_THROW + ld a, 0 + ret z + call Function3c5ec + ld hl, .data_3c5df +.loop + ld a, [hli] + cp b + jr z, .asm_3c5dd + inc hl + cp $ff + jr nz, .loop + ld a, 1 + ret + +.asm_3c5dd + ld a, [hl] + ret +; 3c5df + +.data_3c5df + db EFFECT_PROTECT, 3 + db EFFECT_ENDURE, 3 + db EFFECT_PRIORITY_HIT, 2 + db EFFECT_WHIRLWIND, 0 + db EFFECT_COUNTER, 0 + db EFFECT_MIRROR_COAT, 0 + db $ff +; 3c5ec + + +Function3c5ec: ; 3c5ec + ld a, b + dec a + ld hl, $5afc + ld bc, $0007 + call AddNTimes + ld a, $10 + call GetFarByte + ld b, a + ret +; 3c5fe + +Function3c5fe: ; 3c5fe + call Function309d + call Function3c543 + jp c, Function3c0e5 + call SetEnemyTurn + ld a, $1 + ld [$c70f], a + callab Function38000 + jr c, .asm_3c62f + call Function3c6de + call Function3d2e0 + ret c + ld a, [$d232] + and a + ret nz + call Function3c710 + jp z, Function3d14e + call Function3c70b + jp z, Function3cd55 + +.asm_3c62f + call SetEnemyTurn + call Function3c716 + jp z, Function3cd55 + call RefreshBattleHuds + call Function3c6cf + call Function3d2e0 + ret c + ld a, [$d232] + and a + ret nz + call Function3c70b + jp z, Function3cd55 + call Function3c710 + jp z, Function3d14e + call SetPlayerTurn + call Function3c716 + jp z, Function3d14e + call RefreshBattleHuds + xor a + ld [$d0ec], a + ret +; 3c664 + +Function3c664: ; 3c664 + xor a + ld [$c70f], a + call SetEnemyTurn + callab Function38000 + push af + call Function3c6cf + pop bc + ld a, [$d232] + and a + ret nz + call Function3d2e0 + ret c + call Function3c70b + jp z, Function3cd55 + call Function3c710 + jp z, Function3d14e + push bc + call SetPlayerTurn + call Function3c716 + pop bc + jp z, Function3d14e + push bc + call RefreshBattleHuds + pop af + jr c, .asm_3c6be + call Function309d + call Function3c543 + jp c, Function3c0e5 + call Function3c6de + call Function3d2e0 + ret c + ld a, [$d232] + and a + ret nz + call Function3c710 + jp z, Function3d14e + call Function3c70b + jp z, Function3cd55 + +.asm_3c6be + call SetEnemyTurn + call Function3c716 + jp z, Function3cd55 + call RefreshBattleHuds + xor a + ld [$d0ec], a + ret +; 3c6cf + +Function3c6cf: ; 3c6cf + call SetPlayerTurn + call Function3c6fe + callab DoPlayerTurn + jp Function3c6ed +; 3c6de + +Function3c6de: ; 3c6de + call SetEnemyTurn + call Function3c6fe + callab DoEnemyTurn + jp Function3c6ed +; 3c6ed + +Function3c6ed: ; 3c6ed + ld a, $5 + call _GetBattleVar + res 2, [hl] + res 5, [hl] + ld a, $9 + call _GetBattleVar + res 6, [hl] + ret +; 3c6fe + +Function3c6fe: ; 3c6fe + ld a, $4 + call _GetBattleVar + res 6, [hl] + ret +; 3c706 + +Function3c706: ; 3c706 + ld a, [hBattleTurn] + and a + jr z, Function3c710 +Function3c70b: ; 3c70b + ld hl, EnemyMonHPHi + jr asm_3c713 + +Function3c710: ; 3c710 + ld hl, BattleMonHP + +asm_3c713 + ld a, [hli] + or [hl] + ret +; 3c716 + +Function3c716: ; 3c716 + call Function3c706 + ret z + ld a, $a + call GetBattleVar + and $18 + jr z, .asm_3c768 + ld hl, $47e2 + ld de, $0106 + and $10 + jr z, .asm_3c733 + ld hl, $47f8 + ld de, $0105 + +.asm_3c733 + push de + call StdBattleTextBox + pop de + xor a + ld [$cfca], a + call Function3ee0f + call GetEighthMaxHP + ld de, $c674 + ld a, [hBattleTurn] + and a + jr z, .asm_3c74d + ld de, $c67c + +.asm_3c74d + ld a, $4 + call GetBattleVar + bit 0, a + jr z, .asm_3c765 + call Function3cc76 + ld a, [de] + inc a + ld [de], a + ld hl, $0000 +.asm_3c75f + add hl, bc + dec a + jr nz, .asm_3c75f + ld b, h + ld c, l + +.asm_3c765 + call Function3cc3f + +.asm_3c768 + call Function3c706 + jp z, .asm_3c7f7 + ld a, $3 + call _GetBattleVar + bit 7, [hl] + jr z, .asm_3c7a1 + call Function3c8e4 + xor a + ld [$cfca], a + ld de, $0107 + ld a, $7 + call GetBattleVar + and $60 + call z, Function3ee0f + call Function3c8e4 + call GetEighthMaxHP + call Function3cc3f + ld a, $1 + ld [hBGMapMode], a + call Function3ccef + ld hl, $480e + call StdBattleTextBox + +.asm_3c7a1 + call Function3c706 + jr z, .asm_3c7f7 + ld a, $0 + call _GetBattleVar + bit 0, [hl] + jr z, .asm_3c7c5 + xor a + ld [$cfca], a + ld de, $010c + call Function3ee0f + call GetQuarterMaxHP + call Function3cc3f + ld hl, $4822 + call StdBattleTextBox + +.asm_3c7c5 + call Function3c706 + jr z, .asm_3c7f7 + ld a, $0 + call _GetBattleVar + bit 1, [hl] + jr z, .asm_3c7e9 + xor a + ld [$cfca], a + ld de, $010c + call Function3ee0f + call GetQuarterMaxHP + call Function3cc3f + ld hl, $4836 + call StdBattleTextBox + +.asm_3c7e9 + ld hl, BattleMonHP + ld a, [hBattleTurn] + and a + jr z, .asm_3c7f4 + ld hl, EnemyMonHPHi + +.asm_3c7f4 + ld a, [hli] + or [hl] + ret nz + +.asm_3c7f7 + call RefreshBattleHuds + ld c, $14 + call DelayFrames + xor a + ret +; 3c801 + +Function3c801: ; 3c801 + ld a, [$ffcb] + cp $1 + jr z, .asm_3c813 + call SetPlayerTurn + call .asm_3c81c + call SetEnemyTurn + jp .asm_3c81c + +.asm_3c813 + call SetEnemyTurn + call .asm_3c81c + call SetPlayerTurn +.asm_3c81c + ld hl, PlayerPerishCount + ld a, [hBattleTurn] + and a + jr z, .asm_3c827 + ld hl, EnemyPerishCount + +.asm_3c827 + ld a, $0 + call GetBattleVar + bit 4, a + ret z + dec [hl] + ld a, [hl] + ld [$d265], a + push af + ld hl, $4864 + call StdBattleTextBox + pop af + ret nz + ld a, $0 + call _GetBattleVar + res 4, [hl] + ld a, [hBattleTurn] + and a + jr nz, .asm_3c85c + ld hl, BattleMonHP + xor a + ld [hli], a + ld [hl], a + ld hl, PartyMon1CurHP + ld a, [CurBattleMon] + call GetPartyLocation + xor a + ld [hli], a + ld [hl], a + ret + +.asm_3c85c + ld hl, EnemyMonHPHi + xor a + ld [hli], a + ld [hl], a + ld a, [IsInBattle] + dec a + ret z + ld hl, OTPartyMon1CurHP + ld a, [CurOTMon] + call GetPartyLocation + xor a + ld [hli], a + ld [hl], a + ret +; 3c874 + +Function3c874: ; 3c874 + ld a, [$ffcb] + cp $1 + jr z, .asm_3c886 + call SetPlayerTurn + call .asm_3c88f + call SetEnemyTurn + jp .asm_3c88f + +.asm_3c886 + call SetEnemyTurn + call .asm_3c88f + call SetPlayerTurn +.asm_3c88f + ld hl, $c730 + ld de, $c72e + ld a, [hBattleTurn] + and a + jr z, .asm_3c8a0 + ld hl, $c731 + ld de, $c72f + +.asm_3c8a0 + ld a, [hl] + and a + ret z + ld a, $3 + call GetBattleVar + bit 4, a + ret nz + ld a, [de] + ld [$d265], a + ld [FXAnimIDLo], a + call GetMoveName + dec [hl] + jr z, .asm_3c8de + ld a, $2 + call GetBattleVar + and $60 + jr nz, .asm_3c8d3 + call Function3c8e4 + xor a + ld [$cfca], a + ld [FXAnimIDHi], a + ld a, $37 + call Predef + call Function3c8e4 + +.asm_3c8d3 + call Function3cc76 + call Function3cc3f + ld hl, $4de2 + jr .asm_3c8e1 + +.asm_3c8de + ld hl, $4df5 + +.asm_3c8e1 + jp StdBattleTextBox +; 3c8e4 + +Function3c8e4: ; 3c8e4 + ld a, [hBattleTurn] + xor $1 + ld [hBattleTurn], a + ret +; 3c8eb + +Function3c8eb: ; 3c8eb + ld a, [$ffcb] + cp $1 + jr z, .asm_3c8fd + call SetPlayerTurn + call .asm_3c906 + call SetEnemyTurn + jp .asm_3c906 + +.asm_3c8fd + call SetEnemyTurn + call .asm_3c906 + call SetPlayerTurn +.asm_3c906 + callab GetUserItem + ld a, [hl] + ld [$d265], a + call GetItemName + ld a, b + cp $3 + ret nz + ld hl, BattleMonHP + ld a, [hBattleTurn] + and a + jr z, .asm_3c922 + ld hl, EnemyMonHPHi + +.asm_3c922 + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + ld a, [hli] + cp b + jr nz, .asm_3c92d + ld a, [hl] + cp c + ret z + +.asm_3c92d + call Function3cc76 + call Function3c8e4 + call Function3ccef + ld hl, $4880 + jp StdBattleTextBox +; 3c93c + +Function3c93c: ; 3c93c + ld a, [$ffcb] + cp $1 + jr z, .asm_3c94e + call SetPlayerTurn + call .asm_3c957 + call SetEnemyTurn + jp .asm_3c957 + +.asm_3c94e + call SetEnemyTurn + call .asm_3c957 + call SetPlayerTurn +.asm_3c957 + callab GetUserItem + ld a, b + cp $6 + jr nz, .asm_3c9ae + ld hl, PartyMon1PP + ld a, [CurBattleMon] + call GetPartyLocation + ld d, h + ld e, l + ld hl, PartyMon1Move1 + ld a, [CurBattleMon] + call GetPartyLocation + ld a, [hBattleTurn] + and a + jr z, .asm_3c99b + ld de, $c739 + ld hl, $c735 + ld a, [IsInBattle] + dec a + jr z, .asm_3c99b + ld hl, OTPartyMon1PPMove1 + ld a, [CurOTMon] + call GetPartyLocation + ld d, h + ld e, l + ld hl, OTPartyMon1Move1 + ld a, [CurOTMon] + call GetPartyLocation + +.asm_3c99b + ld c, $0 +.asm_3c99d + ld a, [hl] + and a + jr z, .asm_3c9ae + ld a, [de] + and $3f + jr z, .asm_3c9af + inc hl + inc de + inc c + ld a, c + cp $4 + jr nz, .asm_3c99d + +.asm_3c9ae + ret + +.asm_3c9af + ld a, [hl] + cp $a6 + ld b, $1 + jr z, .asm_3c9b8 + ld b, $5 + +.asm_3c9b8 + ld a, [de] + add b + ld [de], a + push bc + push bc + ld a, [hl] + ld [$d265], a + ld de, BattleMonItem + ld hl, BattleMonPPMove1 + ld a, [hBattleTurn] + and a + jr z, .asm_3c9d2 + ld de, EnemyMonItem + ld hl, EnemyMonPPMove1 + +.asm_3c9d2 + inc de + pop bc + ld b, $0 + add hl, bc + push hl + ld h, d + ld l, e + add hl, bc + pop de + pop bc + ld a, [$d265] + cp [hl] + jr nz, .asm_3c9f5 + ld a, [hBattleTurn] + and a + ld a, [PlayerSubStatus5] + jr z, .asm_3c9ee + ld a, [EnemySubStatus5] + +.asm_3c9ee + bit 3, a + jr nz, .asm_3c9f5 + ld a, [de] + add b + ld [de], a + +.asm_3c9f5 + callab GetUserItem + ld a, [hl] + ld [$d265], a + xor a + ld [hl], a + call Function3df12 + ld a, [hBattleTurn] + and a + jr z, .asm_3ca12 + ld a, [IsInBattle] + dec a + jr z, .asm_3ca14 + call Function3df1f + +.asm_3ca12 + xor a + ld [hl], a + +.asm_3ca14 + call GetItemName + call Function3c8e4 + call Function3ddc8 + call Function3c8e4 + ld hl, $4899 + jp StdBattleTextBox +; 3ca26 + +Function3ca26: ; 3ca26 + ld a, [$ffcb] + cp $1 + jr z, .asm_3ca38 + call SetPlayerTurn + call .asm_3ca41 + call SetEnemyTurn + jp .asm_3ca41 + +.asm_3ca38 + call SetEnemyTurn + call .asm_3ca41 + call SetPlayerTurn +.asm_3ca41 + ld hl, $c71d + ld a, [hBattleTurn] + and a + jr z, .asm_3ca4c + ld hl, $c71e + +.asm_3ca4c + ld a, [hl] + and a + ret z + dec a + ld [hl], a + cp $1 + ret nz + ld hl, $48b6 + call StdBattleTextBox + ld a, $10 + call _GetBattleVar + push af + ld a, $f8 + ld [hl], a + callab UpdateMoveData + xor a + ld [AttackMissed], a + ld [AlreadyDisobeyed], a + ld a, $a + ld [TypeModifier], a + callab DoMove + xor a + ld [CurDamage], a + ld [$d257], a + ld a, $10 + call _GetBattleVar + pop af + ld [hl], a + call UpdateBattleMonInParty + jp UpdateEnemyMonInParty +; 3ca8f + +Function3ca8f: ; 3ca8f + ld a, [$ffcb] + cp $1 + jr z, .asm_3ca9a + call .asm_3ca9d + jr .asm_3cac9 + +.asm_3ca9a + call .asm_3cac9 +.asm_3ca9d + ld a, [BattleMonStatus] + bit 5, a + ret z + ld a, [$c73f] + and a + ret nz + call BattleRandom + cp $19 + ret nc + xor a + ld [BattleMonStatus], a + ld a, [CurBattleMon] + ld hl, PartyMon1Status + call GetPartyLocation + ld [hl], $0 + call UpdateBattleHuds + call SetEnemyTurn + ld hl, $524b + jp StdBattleTextBox + +.asm_3cac9 + ld a, [EnemyMonStatus] + bit 5, a + ret z + ld a, [$c740] + and a + ret nz + call BattleRandom + cp $19 + ret nc + xor a + ld [EnemyMonStatus], a + ld a, [IsInBattle] + dec a + jr z, .asm_3caef + ld a, [CurOTMon] + ld hl, OTPartyMon1Status + call GetPartyLocation + ld [hl], $0 + +.asm_3caef + call UpdateBattleHuds + call SetPlayerTurn + ld hl, $524b + jp StdBattleTextBox +; 3cafb + +Function3cafb: ; 3cafb + ld a, [$ffcb] + cp $1 + jr z, .asm_3cb06 + call .asm_3cb09 + jr .asm_3cb1c + +.asm_3cb06 + call .asm_3cb1c +.asm_3cb09 + ld a, [PlayerScreens] + bit 2, a + ret z + ld hl, $c701 + dec [hl] + ret nz + res 2, a + ld [PlayerScreens], a + xor a + jr .asm_3cb2e + +.asm_3cb1c + ld a, [EnemyScreens] + bit 2, a + ret z + ld hl, $c705 + dec [hl] + ret nz + res 2, a + ld [EnemyScreens], a + ld a, $1 + +.asm_3cb2e + ld [hBattleTurn], a + ld hl, $48d2 + jp StdBattleTextBox +; 3cb36 + + +Function3cb36: ; 3cb36 + ld a, [$ffcb] + cp 1 + jr z, .Both + call .CheckPlayer + jr .CheckEnemy + +.Both + call .CheckEnemy + +.CheckPlayer + call SetPlayerTurn + ld de, .Your + call .asm_3cb6f + ld hl, PlayerScreens + ld de, PlayerLightScreenCount + jr .FadeScreens + +.CheckEnemy + call SetEnemyTurn + ld de, .Enemy + call .asm_3cb6f + ld hl, EnemyScreens + ld de, EnemyLightScreenCount + +.FadeScreens + bit SCREENS_LIGHT_SCREEN, [hl] + call nz, FadeLightScreen + bit SCREENS_REFLECT, [hl] + call nz, FadeReflect + ret + +.asm_3cb6f + ld hl, StringBuffer1 + jp CopyName2 +; 3cb75 + +.Your + db "Your@" +.Enemy + db "Enemy@" +; 3cb80 + + +FadeLightScreen: ; 3cb80 + ld a, [de] + dec a + ld [de], a + ret nz + res SCREENS_LIGHT_SCREEN, [hl] + push hl + push de + ld hl, BattleText_0x808e7 + call StdBattleTextBox + pop de + pop hl + ret +; 3cb91 + +FadeReflect: ; 3cb91 + inc de + ld a, [de] + dec a + ld [de], a + ret nz + res SCREENS_REFLECT, [hl] + ld hl, BattleText_0x80905 + jp StdBattleTextBox +; 3cb9e + +HandleWeather: ; 3cb9e + + ld a, [Weather] + cp 0 + ret z + + ld hl, WeatherCount + dec [hl] + jr z, .asm_3cc13 + + ld hl, .WeatherMessages + call .asm_3cc1e + ld a, [Weather] + cp WEATHER_SANDSTORM + ret nz + ld a, [$ffcb] + cp 1 + jr z, .asm_3cbc7 + +; Player first + call SetPlayerTurn + call .asm_3cbd0 + call SetEnemyTurn + jr .asm_3cbd0 + +.asm_3cbc7 +; Enemy first + call SetEnemyTurn + call .asm_3cbd0 + call SetPlayerTurn + +.asm_3cbd0 + ld a, BATTLE_VARS_SUBSTATUS3 + call GetBattleVar + bit SUBSTATUS_UNDERGROUND, a + ret nz + + ld hl, BattleMonType1 + ld a, [hBattleTurn] + and a + jr z, .asm_3cbe3 + ld hl, EnemyMonType1 + +.asm_3cbe3 + ld a, [hli] + cp ROCK + ret z + cp GROUND + ret z + cp STEEL + ret z + + ld a, [hl] + cp ROCK + ret z + cp GROUND + ret z + cp STEEL + ret z + + call Function3c8e4 + xor a + ld [$cfca], a + ld de, $010b + call Function3ee17 + call Function3c8e4 + call GetEighthMaxHP + call Function3cc3f + + ld hl, BattleText_0x8084d + jp StdBattleTextBox + +.asm_3cc13 + ld hl, .WeatherEndedMessages + call .asm_3cc1e + xor a + ld [Weather], a + ret + +.asm_3cc1e + ld a, [Weather] + dec a + ld c, a + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp StdBattleTextBox +; 3cc2d + +.WeatherMessages + dw BattleText_0x8091f + dw BattleText_0x80938 + dw BattleText_0x80951 +.WeatherEndedMessages + dw BattleText_0x80967 + dw BattleText_0x8097a + dw BattleText_0x8098f +; 3cc39 + +Function3cc39: ; 3cc39 + call Function3cc45 + jp Function3cd3c +; 3cc3f + +Function3cc3f: ; 3cc3f + call Function3cc45 + jp Function3cd36 +; 3cc45 + + + +Function3cc45: ; 3cc45 + ld hl, BattleMonHP + ld a, [hBattleTurn] + and a + jr z, .asm_3cc50 + ld hl, EnemyMonHPHi + +.asm_3cc50 + inc hl + ld a, [hl] + ld [$d1ec], a + sub c + ld [hld], a + ld [$d1ee], a + ld a, [hl] + ld [$d1ed], a + sbc b + ld [hl], a + ld [$d1ef], a + ret nc + ld a, [$d1ec] + ld c, a + ld a, [$d1ed] + ld b, a + xor a + ld [hli], a + ld [hl], a + ld [$d1ee], a + ld [$d1ef], a + ret +; 3cc76 + +Function3cc76: ; 3cc76 + call GetQuarterMaxHP + srl c + srl c + ld a, c + and a + jr nz, .asm_3cc82 + inc c + +.asm_3cc82 + ret +; 3cc83 + + +GetEighthMaxHP: ; 3cc83 +; output: bc + call GetQuarterMaxHP +; assumes nothing can have 1024 or more hp +; halve result + srl c +; round up + ld a, c + and a + jr nz, .end + inc c +.end + ret +; 3cc8e + + +GetQuarterMaxHP: ; 3cc8e +; output: bc + call GetMaxHP + +; quarter result + srl b + rr c + srl b + rr c + +; assumes nothing can have 1024 or more hp +; round up + ld a, c + and a + jr nz, .end + inc c +.end + ret +; 3cc9f + + +GetHalfMaxHP: ; 3cc9f +; output: bc + call GetMaxHP + +; halve reslut + srl b + rr c + +; floor = 1 + ld a, c + or b + jr nz, .end + inc c +.end + ret +; 3ccac + + +GetMaxHP: ; 3ccac +; output: bc, Buffer1-2 + +; player + ld hl, BattleMonMaxHP + +; whose turn? + ld a, [hBattleTurn] + and a + jr z, .gethp + +; enemy + ld hl, EnemyMonMaxHP + +.gethp + ld a, [hli] + ld [Buffer2], a + ld b, a + + ld a, [hl] + ld [Buffer1], a + ld c, a + ret +; 3ccc2 + +Function3ccc2: ; 3ccc2 + ld hl, BattleMonHP + ld a, [hBattleTurn] + and a + jr z, .asm_3cccd + ld hl, EnemyMonHP + +.asm_3cccd + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + srl b + rr c + ld a, [hli] + ld [Buffer2], a + ld a, [hl] + ld [Buffer1], a + ret +; 3ccde + +Function3ccde: ; 3ccde + ld hl, BattleMonHP + 1 + ld a, [hBattleTurn] + and a + jr z, .asm_3cce9 + ld hl, EnemyMonHP + 1 + +.asm_3cce9 + ld a, c + sub [hl] + dec hl + ld a, b + sbc [hl] + ret +; 3ccef + + +Function3ccef: ; 3ccef + ld hl, EnemyMonMaxHP + ld a, [hBattleTurn] + and a + jr z, .asm_3ccfa + ld hl, BattleMonMaxHP + +.asm_3ccfa + ld a, [hli] + ld [Buffer2], a + ld a, [hld] + ld [Buffer1], a + dec hl + ld a, [hl] + ld [$d1ec], a + add c + ld [hld], a + ld [$d1ee], a + ld a, [hl] + ld [$d1ed], a + adc b + ld [hli], a + ld [$d1ef], a + ld a, [Buffer1] + ld c, a + ld a, [hld] + sub c + ld a, [Buffer2] + ld b, a + ld a, [hl] + sbc b + jr c, .asm_3cd2d + ld a, b + ld [hli], a + ld [$d1ef], a + ld a, c + ld [hl], a + ld [$d1ee], a + +.asm_3cd2d + call Function3c8e4 + call Function3cd36 + jp Function3c8e4 +; 3cd36 + +Function3cd36: ; 3cd36 + call Function3cd3c + jp UpdateBattleHuds +; 3cd3c + + +Function3cd3c: ; 3cd3c + ld hl, $c55e + ld a, [hBattleTurn] + and a + ld a, $1 + jr z, .asm_3cd4a + ld hl, $c4ca + xor a + +.asm_3cd4a + push bc + ld [$d10a], a + ld a, $b + call Predef + pop bc + ret +; 3cd55 + +Function3cd55: ; 3cd55 + call Function3cf14 + ld hl, BattleMonHP + ld a, [hli] + or [hl] + call z, Function3cef1 + xor a + ld [$c6f7], a + call Function3ce01 + call Function3d873 + ld a, d + and a + jp z, LostBattle + ld hl, BattleMonHP + ld a, [hli] + or [hl] + call nz, Function3df48 + ld a, $1 + ld [hBGMapMode], a + ld c, $3c + call DelayFrames + ld a, [IsInBattle] + dec a + jr nz, .asm_3cd8c + ld a, $1 + ld [BattleEnded], a + ret + +.asm_3cd8c + call Function3cf35 + jp z, Function3cfa4 + ld hl, BattleMonHP + ld a, [hli] + or [hl] + jr nz, .asm_3cdba + call Function3d1f8 + jr nc, .asm_3cda4 + ld a, $1 + ld [BattleEnded], a + ret + +.asm_3cda4 + call Function3d227 + call Function3d2e0 + jp c, Function3c0e5 + ld a, $1 + ld [$d0ec], a + call Function3cf4a + jp z, Function3c0e5 + jr asm_3cdca + +.asm_3cdba + ld a, $1 + ld [$d0ec], a + call Function3cf4a + jp z, Function3c0e5 + xor a + ld [$d0ec], a + ret + +asm_3cdca + ld a, [$ffcb] + cp $1 + jr z, .asm_3cde6 + call ClearSprites + ld hl, $c4a1 + ld bc, $040a + call ClearBox + call Function3d2b3 + ld a, $1 + call asm_3cf78 + jr .asm_3cdfc + +.asm_3cde6 + ld a, [CurPartyMon] + push af + ld a, $1 + call asm_3cf78 + call ClearSprites + call Function309d + pop af + ld [CurPartyMon], a + call Function3d2b3 + +.asm_3cdfc + xor a + ld [$d0ec], a + ret +; 3ce01 + +Function3ce01: ; 3ce01 + call UpdateBattleMonInParty + ld a, [IsInBattle] + dec a + jr z, .asm_3ce16 + ld a, [CurOTMon] + ld hl, OTPartyMon1CurHP + call GetPartyLocation + xor a + ld [hli], a + ld [hl], a + +.asm_3ce16 + ld hl, PlayerSubStatus3 + res 2, [hl] + xor a + ld hl, EnemyDamageTaken + ld [hli], a + ld [hl], a + call Function3d834 + call Function3dc18 + ld a, [IsInBattle] + dec a + jr z, .asm_3ce2f + jr .asm_3ce37 + +.asm_3ce2f + call Function3ceec + ld a, $1 + ld [$c6fd], a + +.asm_3ce37 + ld hl, BattleMonHP + ld a, [hli] + or [hl] + jr nz, .asm_3ce47 + ld a, [$c6f7] + and a + jr nz, .asm_3ce47 + call Function3d1aa + +.asm_3ce47 + call Function3d873 + ld a, d + and a + ret z + ld a, [IsInBattle] + dec a + call z, Function3d0ea + call EmptyBattleTextBox + call Function309d + ld a, [$d0ee] + and $c0 + ld [$d0ee], a + call Function3ceaa + jr z, .asm_3ce72 + ld hl, EnemyMonBaseStats + ld b, $7 +.asm_3ce6c + srl [hl] + inc hl + dec b + jr nz, .asm_3ce6c + +.asm_3ce72 + ld hl, EnemyMonBaseStats + ld de, $c720 + ld bc, $0007 + call CopyBytes + xor a + ld [$c71f], a + call Function3ee3b + call Function3ceaa + ret z + ld a, [$c664] + push af + ld a, d + ld [$c664], a + ld hl, $c720 + ld de, EnemyMonBaseStats + ld bc, $0007 + call CopyBytes + ld a, $1 + ld [$c71f], a + call Function3ee3b + pop af + ld [$c664], a + ret +; 3ceaa + +Function3ceaa: ; 3ceaa + ld a, [PartyCount] + ld b, a + ld hl, PartyMon1Species + ld c, $1 + ld d, $0 +.asm_3ceb5 + push hl + push bc + ld bc, $0022 + add hl, bc + ld a, [hli] + or [hl] + pop bc + pop hl + jr z, .asm_3ced1 + push hl + push bc + ld bc, $0001 + add hl, bc + pop bc + ld a, [hl] + pop hl + cp $39 + jr nz, .asm_3ced1 + ld a, d + or c + ld d, a + +.asm_3ced1 + sla c + push de + ld de, $0030 + add hl, de + pop de + dec b + jr nz, .asm_3ceb5 + ld a, d + ld e, $0 + ld b, $6 +.asm_3cee1 + srl a + jr nc, .asm_3cee6 + inc e + +.asm_3cee6 + dec b + jr nz, .asm_3cee1 + ld a, e + and a + ret +; 3ceec + + + +Function3ceec: ; 3ceec + xor a + ld [Danger], a + ret +; 3cef1 + +Function3cef1: ; 3cef1 + call Function3ceec + call WaitSFX + ld a, $f0 + ld [CryTracks], a + ld a, [BattleMonSpecies] + call Function37b6 + call Function3d43b + ld hl, $c535 + ld bc, $050b + call ClearBox + ld hl, BattleText_0x80a75 + jp StdBattleTextBox +; 3cf14 + +Function3cf14: ; 3cf14 + call WaitSFX + ld de, SFX_KINESIS + call PlaySFX + call Function3d432 + ld de, SFX_UNKNOWN_2A + call PlaySFX + hlcoord 1, 0 + ld bc, $040a + call ClearBox + ld hl, BattleText_0x809a8 + jp StdBattleTextBox +; 3cf35 + +Function3cf35: ; 3cf35 + ld a, [OTPartyCount] + ld b, a + xor a + ld hl, OTPartyMon1CurHP + ld de, $0030 +.asm_3cf40 + or [hl] + inc hl + or [hl] + dec hl + add hl, de + dec b + jr nz, .asm_3cf40 + and a + ret +; 3cf4a + +Function3cf4a: ; 3cf4a + ld hl, EnemyHPPal + ld e, $30 + call Function3e12e + call WaitBGMap + callba Function2c012 + ld a, [InLinkBattle] + and a + jr z, .asm_3cf6d + call Function3e8e4 + ld a, [$d430] + cp $f + ret z + call Function30b4 + +.asm_3cf6d + ld hl, BattleMonHP + ld a, [hli] + or [hl] + ld a, $0 + jr nz, asm_3cf78 + inc a + ret + +asm_3cf78 + push af + xor a + ld [$c718], a + call Function3d834 + call Function3d867 + call Function3dc18 + pop af + and a + jr nz, .asm_3cf8f + call Function3d4e1 + jr .asm_3cf92 + +.asm_3cf8f + call asm_3d517 + +.asm_3cf92 + call Function3d57a + call SetEnemyTurn + call Function3dc23 + xor a + ld [EnemyMoveAnimation], a + ld [$d0ec], a + inc a + ret +; 3cfa4 + +Function3cfa4: ; 3cfa4 + call Function3ceec + ld a, $1 + ld [$c6fd], a + ld [BattleEnded], a + ld a, [InLinkBattle] + and a + ld a, b + call z, Function3d0ea + callab Function39939 + ld hl, BattleText_0x809da + call StdBattleTextBox + call Function3d2f1 + jr z, .asm_3cff5 + ld a, [InLinkBattle] + and a + ret nz + ld a, [$cfc0] + bit 0, a + jr nz, .asm_3d006 + call Function3ebd8 + ld c, $28 + call DelayFrames + ld a, [BattleType] + cp $1 + jr nz, .asm_3cfe8 + ld a, $2 + call Predef + +.asm_3cfe8 + ld a, [$c2cc] + bit 0, a + jr nz, .asm_3cff2 + call Function3718 + +.asm_3cff2 + jp Function3d02b + +.asm_3cff5 + call Function3ebd8 + ld c, $28 + call DelayFrames + ld c, $4 + callba Function4ea0a + ret + +.asm_3d006 + call Function3ebd8 + ld c, $28 + call DelayFrames + call EmptyBattleTextBox + ld c, $3 + callba Function11c000 + call Functiona80 + ld hl, $c6ec + ld a, [hli] + or [hl] + inc hl + or [hl] + ret nz + call ClearTileMap + call WhiteBGMap + ret +; 3d02b + +Function3d02b: ; 3d02b + ld a, [$c73d] + and a + call nz, Function3d099 + call Function3d0b1 + push af + ld a, $0 + jr nc, .asm_3d044 + ld a, [$d854] + and $7 + cp $3 + jr nz, .asm_3d044 + inc a + +.asm_3d044 + ld b, a + ld c, $4 +.asm_3d047 + ld a, b + and a + jr z, .asm_3d052 + call Function3d081 + dec c + dec b + jr .asm_3d047 + +.asm_3d052 + ld a, c + and a + jr z, .asm_3d05c + call Function3d08d + dec c + jr .asm_3d052 + +.asm_3d05c + call Function3d099 + call Function3d099 + pop af + jr nc, .asm_3d07b + ld a, [$d854] + and $7 + jr z, .asm_3d07b + ld hl, SentToMomTexts + dec a + ld c, a + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp StdBattleTextBox + +.asm_3d07b + ld hl, BattleText_0x809be + jp StdBattleTextBox +; 3d081 + +Function3d081: ; 3d081 + push bc + ld hl, $c688 + ld de, $d853 + call Function3d0be + pop bc + ret +; 3d08d + +Function3d08d: ; 3d08d + push bc + ld hl, $c688 + ld de, $d850 + call Function3d0be + pop bc + ret +; 3d099 + +Function3d099: ; 3d099 + ld hl, $c688 + sla [hl] + dec hl + rl [hl] + dec hl + rl [hl] + ret nc + ld a, $ff + ld [hli], a + ld [hli], a + ld [hl], a + ret +; 3d0ab + +SentToMomTexts: ; 3d0ab + dw BattleText_0x809fc + dw BattleText_0x80a2a + dw BattleText_0x80a3d +; 3d0b1 + + +Function3d0b1: ; 3d0b1 + ld hl, $d853 + ld a, [hld] + cp $3f + ld a, [hld] + sbc $42 + ld a, [hl] + sbc $f + ret +; 3d0be + +Function3d0be: ; 3d0be + ld c, $3 + and a + push de + push hl + push bc + ld b, h + ld c, l + callba Function106008 + pop bc + pop hl +.asm_3d0ce + ld a, [de] + adc [hl] + ld [de], a + dec de + dec hl + dec c + jr nz, .asm_3d0ce + pop hl + ld a, [hld] + cp $3f + ld a, [hld] + sbc $42 + ld a, [hl] + sbc $f + ret c + ld [hl], $f + inc hl + ld [hl], $42 + inc hl + ld [hl], $3f + ret +; 3d0ea + +Function3d0ea: ; 3d0ea + push de + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld de, MUSIC_WILD_VICTORY + ld a, [IsInBattle] + dec a + jr nz, .asm_3d113 + push de + call Function3ceaa + pop de + jr nz, .asm_3d11e + ld hl, $c6ec + ld a, [hli] + or [hl] + jr nz, .asm_3d11e + ld a, [$c664] + and a + jr z, .asm_3d121 + jr .asm_3d11e + +.asm_3d113 + ld de, MUSIC_GYM_VICTORY + call IsJohtoGymLeader + jr c, .asm_3d11e + ld de, MUSIC_TRAINER_VICTORY + +.asm_3d11e + call PlayMusic + +.asm_3d121 + pop de + ret +; 3d123 + + + +; These functions check if the current opponent is a gym leader or one of a +; few other special trainers. + +; Note: KantoGymLeaders is a subset of JohtoGymLeaders. If you wish to +; differentiate between the two, call IsKantoGymLeader first. + +; The Lance and Red entries are unused for music checks; those trainers are +; accounted for elsewhere. + +IsKantoGymLeader: ; 0x3d123 + ld hl, KantoGymLeaders + jr IsGymLeaderCommon + +IsJohtoGymLeader: ; 0x3d128 + ld hl, JohtoGymLeaders +IsGymLeaderCommon: + push de + ld a, [OtherTrainerClass] + ld de, $0001 + call IsInArray + pop de + ret +; 0x3d137 + +JohtoGymLeaders: + db FALKNER + db WHITNEY + db BUGSY + db MORTY + db PRYCE + db JASMINE + db CHUCK + db CLAIR + db WILL + db BRUNO + db KAREN + db KOGA +; fallthrough +; these two entries are unused + db CHAMPION + db RED +; fallthrough +KantoGymLeaders: + db BROCK + db MISTY + db LT_SURGE + db ERIKA + db JANINE + db SABRINA + db BLAINE + db BLUE + db $ff + + +Function3d14e: ; 3d14e + call Function3cef1 + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + call z, Function3cf14 + ld a, $1 + ld [$c6f7], a + call Function3d1aa + call Function3d873 + ld a, d + and a + jp z, LostBattle + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + jr nz, .asm_3d185 + call Function3ce01 + ld a, [IsInBattle] + dec a + jr nz, .asm_3d17f + ld a, $1 + ld [BattleEnded], a + ret + +.asm_3d17f + call Function3cf35 + jp z, Function3cfa4 + +.asm_3d185 + call Function3d1f8 + jr nc, .asm_3d190 + ld a, $1 + ld [BattleEnded], a + ret + +.asm_3d190 + call Function3d227 + call Function3d2e0 + jp c, Function3c0e5 + ld a, c + and a + ret nz + ld a, $1 + ld [$d0ec], a + call Function3cf4a + jp z, Function3c0e5 + jp asm_3cdca +; 3d1aa + +Function3d1aa: ; 3d1aa + ld a, [CurBattleMon] + ld c, a + ld hl, $c664 + ld b, $0 + ld a, $3 + call Predef + ld hl, EnemySubStatus3 + res 2, [hl] + xor a + ld [Danger], a + ld hl, PlayerDamageTaken + ld [hli], a + ld [hl], a + ld [BattleMonStatus], a + call UpdateBattleMonInParty + ld c, $6 + ld a, [BattleMonLevel] + add $1e + ld b, a + ld a, [EnemyMonLevel] + cp b + jr c, .asm_3d1dc + ld c, $8 + +.asm_3d1dc + ld a, [CurBattleMon] + ld [CurPartyMon], a + callab ChangeHappiness + ld a, [$d0ee] + and $c0 + add $1 + ld [$d0ee], a + ld a, [$c6f7] + and a + ret z + ret +; 3d1f8 + +Function3d1f8: ; 3d1f8 + call EmptyBattleTextBox + call Function309d + ld a, [IsInBattle] + and a + dec a + ret nz + ld hl, BattleText_0x80a83 + call StdBattleTextBox +.asm_3d20a + lb bc, 1, 7 + call PlaceYesNoBox + ld a, [$cfa9] + jr c, .asm_3d217 + and a + ret + +.asm_3d217 + ld a, [$cfa9] + cp $1 + jr z, .asm_3d20a + ld hl, PartyMon1Spd + ld de, EnemyMonSpd + jp Function3d8b3 +; 3d227 + +Function3d227: ; 3d227 + call EmptyBattleTextBox + call Function1d6e + call Function3d2f7 + call Function3d362 + ld a, [InLinkBattle] + and a + jr z, .asm_3d241 + ld a, $1 + ld [$d0ec], a + call Function3e8e4 + +.asm_3d241 + xor a + ld [$d0ec], a + call Function3d2e0 + jr c, .asm_3d251 + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + jr nz, .asm_3d26c + +.asm_3d251 + call ClearSprites + call WhiteBGMap + call Function3eda6 + call Function1c07 + call Function309d + call WaitBGMap + call ClearSGB + call Function32f9 + xor a + ld c, a + ret + +.asm_3d26c + call ClearSprites + ld a, [CurBattleMon] + ld [$c71a], a + ld a, [CurPartyMon] + ld [CurBattleMon], a + call Function3d581 + call Function3da0d + call Function3dab1 + call ClearPalettes + call DelayFrame + call Function3eda6 + call Function1c17 + call ClearSGB + call Function32f9 + call Function3f26d + call Function3dbde + call Function3dc18 + call Function3db5f + call EmptyBattleTextBox + call Function309d + call SetPlayerTurn + call Function3dc23 + ld a, $1 + and a + ld c, a + ret +; 3d2b3 + +Function3d2b3: ; 3d2b3 + ld a, [CurBattleMon] + ld [$c71a], a + ld a, [CurPartyMon] + ld [CurBattleMon], a + call Function3d581 + call Function3da0d + call Function3dab1 + call Function3f26d + call Function3dbde + call Function3dc18 + call Function3db5f + call EmptyBattleTextBox + call Function309d + call SetPlayerTurn + jp Function3dc23 +; 3d2e0 + + + +Function3d2e0: ; 3d2e0 + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_3d2ef + ld a, [$cd2b] + and a + jr z, .asm_3d2ef + scf + ret + +.asm_3d2ef + xor a + ret +; 3d2f1 + +Function3d2f1: ; 3d2f1 + ld a, [InLinkBattle] + cp $4 + ret +; 3d2f7 + +Function3d2f7: ; 3d2f7 + call WhiteBGMap +Function3d2fa: ; 3d2fa + callba Function5004f + callba Function50405 + callba Function8e85 + callba Function503e0 + ret +; 3d313 + +Function3d313: ; 3d313 + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call Function32f9 + call DelayFrame + ret +; 3d329 + +Function3d329: ; 3d329 + call Function3d2f1 + jr z, .asm_3d335 + callba PartyMenuSelect + ret + +.asm_3d335 + callba Function100cb5 + ret +; 3d33c + +Function3d33c: ; 3d33c +.asm_3d33c + ld a, $2 + ld [PartyMenuActionText], a + call Function3d313 + call Function3d329 + ret c + call Function3d887 + jr z, .asm_3d33c + xor a + ret +; 3d34f + +Function3d34f: ; 3d34f + ld hl, CurBattleMon + ld a, [CurPartyMon] + cp [hl] + jr nz, .asm_3d360 + ld hl, BattleText_0x80c0d + call StdBattleTextBox + scf + ret + +.asm_3d360 + xor a + ret +; 3d362 + +Function3d362: ; 3d362 +.asm_3d362 + call Function3d33c + ret nc + call Function3d2e0 + ret c + ld de, SFX_WRONG + call PlaySFX + call WaitSFX + jr .asm_3d362 +; 3d375 + + + +Function3d375: ; 3d375 +.asm_3d375 + call Function3d33c + ret c + call Function3d34f + jr c, .asm_3d375 + xor a + ret +; 3d380 + +Function3d380: ; 3d380 +.asm_3d380 + call Function3d362 + call Function3d2e0 + ret c + call Function3d34f + jr c, .asm_3d380 + xor a + ret +; 3d38e + + +LostBattle: ; 3d38e + ld a, 1 + ld [BattleEnded], a + + ld a, [$cfc0] + bit 0, a + jr nz, .asm_3d3bd + + ld a, [BattleType] + cp BATTLETYPE_CANLOSE + jr nz, .asm_3d3e3 + +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call Function3ebd8 + + ld c, 40 + call DelayFrames + + ld a, [$c2cc] + bit 0, a + jr nz, .asm_3d3bc + call Function3718 +.asm_3d3bc + ret + +.asm_3d3bd +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call Function3ebd8 + + ld c, 40 + call DelayFrames + + call EmptyBattleTextBox + ld c, 2 + callba Function11c000 + call Functiona80 + call ClearTileMap + call WhiteBGMap + ret + +.asm_3d3e3 + ld a, [InLinkBattle] + and a + jr nz, .LostLinkBattle + +; Greyscale + ld b, 0 + call GetSGBLayout + call Function32f9 + jr .end + +.LostLinkBattle + call UpdateEnemyMonInParty + call Function3cf35 + jr nz, .asm_3d40a + ld hl, TiedAgainstText + ld a, [$d0ee] + and $c0 + add 2 + ld [$d0ee], a + jr .asm_3d412 + +.asm_3d40a + ld hl, LostAgainstText + call Function3d2f1 + jr z, .asm_3d417 + +.asm_3d412 + call StdBattleTextBox + +.end + scf + ret + +.asm_3d417 +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call Function3ebd8 + + ld c, 40 + call DelayFrames + + ld c, $3 + callba Function4ea0a + scf + ret +; 3d432 + + +Function3d432: ; 3d432 + ld hl, $c510 + ld de, $c524 + jp Function3d444 +; 3d43b + +Function3d43b: ; 3d43b + ld hl, $c569 + ld de, $c57d + jp Function3d444 +; 3d444 + +Function3d444: ; 3d444 + ld a, [$cfbe] + push af + set 6, a + ld [$cfbe], a + ld b, $7 +.asm_3d44f + push bc + push de + push hl + ld b, $6 +.asm_3d454 + push bc + push hl + push de + ld bc, $0007 + call CopyBytes + pop de + pop hl + ld bc, -20 + add hl, bc + push hl + ld h, d + ld l, e + add hl, bc + ld d, h + ld e, l + pop hl + pop bc + dec b + jr nz, .asm_3d454 + ld bc, 20 + add hl, bc + ld de, .Spaces + call PlaceString + ld c, 2 + call DelayFrames + pop hl + pop de + pop bc + dec b + jr nz, .asm_3d44f + pop af + ld [$cfbe], a + ret +; 3d488 + +.Spaces + db " @" +; 3d490 + + +Function3d490: ; 3d490 + ld [hConnectionStripLength], a + ld c, a +.asm_3d493 + push bc + push hl + ld b, $7 +.asm_3d497 + push hl + call Function3d4ae + pop hl + ld de, 20 + add hl, de + dec b + jr nz, .asm_3d497 + ld c, 2 + call DelayFrames + pop hl + pop bc + dec c + jr nz, .asm_3d493 + ret +; 3d4ae + +Function3d4ae: ; 3d4ae + ld a, [hConnectionStripLength] + ld c, a + cp $8 + jr nz, .asm_3d4bc +.asm_3d4b5 + ld a, [hli] + ld [hld], a + dec hl + dec c + jr nz, .asm_3d4b5 + ret + +.asm_3d4bc + ld a, [hld] + ld [hli], a + inc hl + dec c + jr nz, .asm_3d4bc + ret +; 3d4c3 + + +Function3d4c3: ; 3d4c3 + call Function3d557 + ld a, [$c718] + dec a + ld b, a + call Function3d6ca + call Function3d7a0 + call Function3d834 + call Function3d867 + call Function3d7c7 + call Function3dc18 + call Function3d57a + ret +; 3d4e1 + + +Function3d4e1: ; 3d4e1 + call Function3d714 + jr nc, asm_3d517 + call Function3d557 + call Function3d533 + jr c, .asm_3d4f1 + call Function3d599 + +.asm_3d4f1 + call Function3d6ca + call Function3d74b + push af + call Function3d7a0 + call Function3d7b8 + call Function3d7c7 + pop af + ret c + xor a + ld [$c664], a + ld [$c6fc], a + ld [$d0ec], a + inc a + ld [$c711], a + call Function309d + jp Function3e3ad + +asm_3d517 + call Function3d557 + call Function3d533 + jr c, .asm_3d522 + call Function3d599 + +.asm_3d522 + call Function3d6ca + ld a, $1 + ld [$c711], a + call Function3d7a0 + call Function3d7b8 + jp Function3d7c7 +; 3d533 + +Function3d533: ; 3d533 + ld a, [InLinkBattle] + and a + jr z, .asm_3d541 + ld a, [$d430] + sub $4 + ld b, a + jr .asm_3d555 + +.asm_3d541 + ld a, [$c718] + and a + jr z, .asm_3d54b + dec a + ld b, a + jr .asm_3d555 + +.asm_3d54b + ld a, [$d264] + and a + ld b, $0 + jr nz, .asm_3d555 + and a + ret + +.asm_3d555 + scf + ret +; 3d557 + +Function3d557: ; 3d557 + xor a + ld [LastEnemyCounterMove], a + ld [LastPlayerCounterMove], a + ld [LastEnemyMove], a + ld [CurEnemyMove], a + dec a + ld [$c6e6], a + xor a + ld [$c730], a + ld hl, $c4b2 + ld a, $8 + call Function3d490 + call EmptyBattleTextBox + jp Function1d6e +; 3d57a + +Function3d57a: ; 3d57a + xor a + ld [$c664], a + ld [$c6fc], a +Function3d581: ; 3d581 + ld a, [CurBattleMon] + ld c, a + ld hl, $c664 + ld b, $1 + push bc + ld a, $3 + call Predef + pop bc + ld hl, $c6fc + ld a, $3 + jp Predef +; 3d599 + +Function3d599: ; 3d599 + ld b, $ff + ld a, $1 + ld [Buffer1], a + ld [Buffer2], a +.asm_3d5a3 + ld hl, Buffer1 + sla [hl] + inc hl + sla [hl] + inc b + ld a, [OTPartyCount] + cp b + jp z, Function3d672 + ld a, [CurOTMon] + cp b + jr z, .asm_3d5d0 + ld hl, OTPartyMon1CurHP + push bc + ld a, b + call GetPartyLocation + ld a, [hli] + ld c, a + ld a, [hl] + or c + pop bc + jr z, .asm_3d5d0 + call Function3d5d7 + call Function3d618 + jr .asm_3d5a3 + +.asm_3d5d0 + ld hl, Buffer2 + set 0, [hl] + jr .asm_3d5a3 +; 3d5d7 + +Function3d5d7: ; 3d5d7 + push bc + ld hl, OTPartyMon1Move1 + ld a, b + call GetPartyLocation + pop bc + ld e, $5 +.asm_3d5e2 + dec e + jr z, .asm_3d617 + ld a, [hli] + and a + jr z, .asm_3d617 + push hl + push de + push bc + dec a + ld hl, $5afb + ld bc, $0007 + call AddNTimes + ld de, EnemyMoveAnimation + ld a, $10 + call FarCopyBytes + call SetEnemyTurn + callab Function0x347c8 + pop bc + pop de + pop hl + ld a, [$d265] + cp $b + jr c, .asm_3d5e2 + ld hl, Buffer1 + set 0, [hl] + ret + +.asm_3d617 + ret +; 3d618 + +Function3d618: ; 3d618 + push bc + ld hl, OTPartyCount + ld a, b + inc a + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + dec a + ld hl, $542b + ld bc, $0020 + call AddNTimes + ld de, EnemyMonType1 + ld bc, $0002 + ld a, $14 + call FarCopyBytes + ld a, [BattleMonType1] + ld [PlayerMoveType], a + call SetPlayerTurn + callab Function0x347c8 + ld a, [$d265] + cp $b + jr nc, .asm_3d663 + ld a, [BattleMonType2] + ld [PlayerMoveType], a + callab Function0x347c8 + ld a, [$d265] + cp $b + jr nc, .asm_3d663 + pop bc + ret + +.asm_3d663 + pop bc + ld hl, Buffer1 + bit 0, [hl] + jr nz, .asm_3d66f + inc hl + set 0, [hl] + ret + +.asm_3d66f + res 0, [hl] + ret +; 3d672 + +Function3d672: ; 3d672 +.asm_3d672 + ld hl, Buffer1 + sla [hl] + inc hl + sla [hl] + jr nc, .asm_3d672 + ld a, [OTPartyCount] + ld b, a + ld c, [hl] +.asm_3d681 + sla c + jr nc, .asm_3d68a + dec b + jr z, .asm_3d6a7 + jr .asm_3d681 + +.asm_3d68a + ld a, [Buffer1] + and a + jr z, .asm_3d69a + ld b, $ff + ld c, a +.asm_3d693 + inc b + sla c + jr nc, .asm_3d693 + jr .asm_3d6c9 + +.asm_3d69a + ld b, $ff + ld a, [Buffer2] + ld c, a +.asm_3d6a0 + inc b + sla c + jr c, .asm_3d6a0 + jr .asm_3d6c9 + +.asm_3d6a7 + ld a, [OTPartyCount] + ld b, a + call BattleRandom + and $7 + cp b + jr nc, .asm_3d6a7 + ld b, a + ld a, [CurOTMon] + cp b + jr z, .asm_3d6a7 + ld hl, OTPartyMon1CurHP + push bc + ld a, b + call GetPartyLocation + pop bc + ld a, [hli] + ld c, a + ld a, [hl] + or c + jr z, .asm_3d6a7 + +.asm_3d6c9 + ret +; 3d6ca + +Function3d6ca: ; 3d6ca + ld a, b + ld [CurPartyMon], a + ld hl, OTPartyMon1Level + call GetPartyLocation + ld a, [hl] + ld [CurPartyLevel], a + ld a, [CurPartyMon] + inc a + ld hl, OTPartyCount + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [TempEnemyMonSpecies], a + ld [CurPartySpecies], a + call LoadEnemyMon + ld a, [CurPartySpecies] + cp $c9 + jr nz, .asm_3d708 + ld a, [$def4] + and a + jr nz, .asm_3d708 + ld hl, EnemyMonAtkDefDV + ld a, $2d + call Predef + ld a, [UnownLetter] + ld [$def4], a + +.asm_3d708 + ld hl, EnemyMonHPHi + ld a, [hli] + ld [$c6ea], a + ld a, [hl] + ld [$c6eb], a + ret +; 3d714 + +Function3d714: ; 3d714 + ld a, [$d264] + dec a + jp z, .asm_3d749 + ld a, [PartyCount] + dec a + jp z, .asm_3d749 + ld a, [InLinkBattle] + and a + jp nz, .asm_3d749 + ld a, [Options] + bit 6, a + jr nz, .asm_3d749 + ld a, [CurPartyMon] + push af + ld a, [CurBattleMon] + ld [CurPartyMon], a + callba Functione538 + pop bc + ld a, b + ld [CurPartyMon], a + jr c, .asm_3d749 + scf + ret + +.asm_3d749 + and a + ret +; 3d74b + +Function3d74b: ; 3d74b + ld a, [CurPartyMon] + push af + callab Function39939 + ld hl, BattleText_0x80aca + call StdBattleTextBox + lb bc, 1, 7 + call PlaceYesNoBox + ld a, [$cfa9] + dec a + jr nz, .asm_3d79a + call Function3d2f7 + call Function3d375 + jr c, .asm_3d791 + ld a, [CurBattleMon] + ld [$c71a], a + ld a, [CurPartyMon] + ld [CurBattleMon], a + call ClearPalettes + call DelayFrame + call Function3eda6 + pop af + ld [CurPartyMon], a + xor a + ld [CurEnemyMove], a + ld [CurPlayerMove], a + and a + ret + +.asm_3d791 + call ClearPalettes + call DelayFrame + call Function3eda6 + +.asm_3d79a + pop af + ld [CurPartyMon], a + scf + ret +; 3d7a0 + +Function3d7a0: ; 3d7a0 + xor a + ld [hBGMapMode], a + call Function1c07 + call ClearSprites + ld hl, $c4a1 + ld bc, $040a + call ClearBox + call WaitBGMap + jp Function3ee27 +; 3d7b8 + +Function3d7b8: ; 3d7b8 + callab Function39939 + ld hl, BattleText_0x80af8 + call StdBattleTextBox + jp WaitBGMap +; 3d7c7 + +Function3d7c7: ; 3d7c7 + ld a, [TempEnemyMonSpecies] + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld a, $1 + ld [MonType], a + ld a, $1f + call Predef + call Function3f47c + xor a + ld [$cfca], a + ld [$c689], a + call SetEnemyTurn + ld de, $0101 + call Function3ee17 + call Function3da79 + jr nc, .asm_3d800 + ld a, $1 + ld [$c689], a + ld de, $0101 + call Function3ee17 + +.asm_3d800 + ld bc, TempMonSpecies + callba Function4e53f + jr c, .asm_3d82c + callba CheckBattleScene + jr c, .asm_3d821 + ld hl, $c4ac + ld d, $0 + ld e, $0 + ld a, $47 + call Predef + jr .asm_3d82c + +.asm_3d821 + ld a, $f + ld [CryTracks], a + ld a, [TempEnemyMonSpecies] + call Function37b6 + +.asm_3d82c + call Function3e036 + ld a, $1 + ld [hBGMapMode], a + ret +; 3d834 + +Function3d834: ; 3d834 + xor a + ld [LastEnemyCounterMove], a + ld [LastPlayerCounterMove], a + ld [LastEnemyMove], a + ld hl, EnemySubStatus1 + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld [EnemyDisableCount], a + ld [EnemyFuryCutterCount], a + ld [$c681], a + ld [$c72c], a + ld [EnemyDisabledMove], a + ld [$c6fa], a + ld [$c730], a + ld [$c731], a + ld [EnemyTurnsTaken], a + ld hl, PlayerSubStatus5 + res 7, [hl] + ret +; 3d867 + +Function3d867: ; 3d867 + ld a, $7 + ld b, $8 + ld hl, EnemyAtkLevel +.asm_3d86e + ld [hli], a + dec b + jr nz, .asm_3d86e + ret +; 3d873 + +Function3d873: ; 3d873 + ld a, [PartyCount] + ld e, a + xor a + ld hl, PartyMon1CurHP + ld bc, $002f +.asm_3d87e + or [hl] + inc hl + or [hl] + add hl, bc + dec e + jr nz, .asm_3d87e + ld d, a + ret +; 3d887 + + +Function3d887: ; 3d887 + ld a, [CurPartyMon] + ld hl, PartyMon1CurHP + call GetPartyLocation + ld a, [hli] + or [hl] + ret nz + ld a, [$d264] + and a + jr nz, .asm_3d8b1 + ld hl, PartySpecies + ld a, [CurPartyMon] + ld c, a + ld b, 0 + add hl, bc + ld a, [hl] + cp EGG + ld hl, BattleText_0x80b26 + jr z, .asm_3d8ae + ld hl, BattleText_0x80b0b + +.asm_3d8ae + call StdBattleTextBox + +.asm_3d8b1 + xor a + ret +; 3d8b3 + + +Function3d8b3: ; 3d8b3 + ld a, [BattleType] + cp $2 + jp z, .asm_3d9a2 + cp $6 + jp z, .asm_3d9a2 + cp $9 + jp z, .asm_3d98d + cp $b + jp z, .asm_3d98d + cp $7 + jp z, .asm_3d98d + cp $c + jp z, .asm_3d98d + + ld a, [InLinkBattle] + and a + jp nz, .asm_3d9a2 + + ld a, [IsInBattle] + dec a + jp nz, .asm_3d992 + + ld a, [EnemySubStatus5] + bit 7, a + jp nz, .asm_3d98d + + ld a, [$c730] + and a + jp nz, .asm_3d98d + + push hl + push de + ld a, [BattleMonItem] + ld [$d265], a + ld b, a + callab GetItem + ld a, b + cp $48 + pop de + pop hl + jr nz, .asm_3d916 + + call SetPlayerTurn + call GetItemName + ld hl, BattleText_0x80b89 + call StdBattleTextBox + jp .asm_3d9a2 + +.asm_3d916 + ld a, [$d267] + inc a + ld [$d267], a + ld a, [hli] + ld [$ffb5], a + ld a, [hl] + ld [$ffb6], a + ld a, [de] + inc de + ld [$ffb1], a + ld a, [de] + ld [$ffb2], a + call Function30b4 + ld de, $ffb5 + ld hl, $ffb1 + ld c, $2 + call StringCmp + jr nc, .asm_3d9a2 + xor a + ld [hMultiplicand], a + ld a, $20 + ld [hMultiplier], a + call Multiply + ld a, [$ffb5] + ld [hProduct], a + ld a, [$ffb6] + ld [hMultiplicand], a + ld a, [$ffb1] + ld b, a + ld a, [$ffb2] + srl b + rr a + srl b + rr a + and a + jr z, .asm_3d9a2 + ld [hMultiplier], a + ld b, $2 + call Divide + ld a, [$ffb5] + and a + jr nz, .asm_3d9a2 + ld a, [$d267] + ld c, a +.asm_3d96c + dec c + jr z, .asm_3d97a + ld b, $1e + ld a, [$ffb6] + add b + ld [$ffb6], a + jr c, .asm_3d9a2 + jr .asm_3d96c + +.asm_3d97a + call BattleRandom + ld b, a + ld a, [$ffb6] + cp b + jr nc, .asm_3d9a2 + ld a, $1 + ld [$d0ec], a + ld hl, BattleText_0x80b3b + jr .asm_3d995 + +.asm_3d98d + ld hl, BattleText_0x80ba0 + jr .asm_3d995 + +.asm_3d992 + ld hl, BattleText_0x80b49 + +.asm_3d995 + call StdBattleTextBox + ld a, $1 + ld [$d266], a + call Function309d + and a + ret + +.asm_3d9a2 + ld a, [InLinkBattle] + and a + ld a, $2 + jr z, .asm_3d9cf + call Function309d + xor a + ld [$d0ec], a + ld a, $f + ld [CurMoveNum], a + xor a + ld [CurPlayerMove], a + call Function3e8e4 + call Function30b4 + call Function3d2e0 + jr c, .asm_3d9f5 + +; Got away safely + ld a, [$d430] + cp $f + ld a, $2 + jr z, .asm_3d9cf + dec a +.asm_3d9cf + ld b, a + ld a, [$d0ee] + and $c0 + add b + ld [$d0ee], a + call Function3ceec + push de + ld de, SFX_RUN + call WaitPlaySFX + pop de + call WaitSFX + ld hl, BattleText_0x80b77 + call StdBattleTextBox + call WaitSFX + call Function309d + scf + ret + +.asm_3d9f5 + call Function3ceec + ld hl, $cd2a + bit 4, [hl] + jr nz, .asm_3da05 + ld hl, BattleText_0x81863 + call StdBattleTextBox + +.asm_3da05 + call WaitSFX + call Function309d + scf + ret +; 3da0d + + +Function3da0d: ; 3da0d + ld a, $0 + call GetPartyParamLocation + ld de, BattleMonSpecies + ld bc, $0006 + call CopyBytes + ld bc, $000f + add hl, bc + ld de, BattleMonAtkDefDV + ld bc, $0007 + call CopyBytes + inc hl + inc hl + inc hl + ld de, BattleMonLevel + ld bc, $0011 + call CopyBytes + ld a, [BattleMonSpecies] + ld [TempBattleMonSpecies], a + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld a, [BaseType1] + ld [BattleMonType1], a + ld a, [BaseType2] + ld [BattleMonType2], a + ld hl, PartyMon1Nickname + ld a, [CurBattleMon] + call SkipNames + ld de, BattleMonNick + ld bc, $000b + call CopyBytes + ld hl, BattleMonAtk + ld de, PlayerStats + ld bc, $000a + call CopyBytes + call Function3ec2c + call BadgeStatBoosts + ret +; 3da74 + +Function3da74: ; 3da74 + call Function3da85 + jr asm_3da7c + +Function3da79: ; 3da79 + call Function3da97 + +asm_3da7c + ld b, h + ld c, l + callab CheckShininess + ret +; 3da85 + +Function3da85: ; 3da85 + ld hl, BattleMonAtkDefDV + ld a, [PlayerSubStatus5] + bit 3, a + ret z + ld hl, PartyMon1DVs + ld a, [CurBattleMon] + jp GetPartyLocation +; 3da97 + +Function3da97: ; 3da97 + ld hl, EnemyMonAtkDefDV + ld a, [EnemySubStatus5] + bit 3, a + ret z + ld hl, $c6f2 + ld a, [IsInBattle] + dec a + ret z + ld hl, OTPartyMon1AtkDefDV + ld a, [CurOTMon] + jp GetPartyLocation +; 3dab1 + +Function3dab1: ; 3dab1 + ld a, $7 + ld b, $8 + ld hl, PlayerAtkLevel +.asm_3dab8 + ld [hli], a + dec b + jr nz, .asm_3dab8 + ret +; 3dabd + + +Function3dabd: ; 3dabd + ld a, [CurPartyMon] + ld hl, OTPartyMon1Species + call GetPartyLocation + ld de, EnemyMonSpecies + ld bc, $0006 + call CopyBytes + ld bc, $000f + add hl, bc + ld de, EnemyMonAtkDefDV + ld bc, $0007 + call CopyBytes + inc hl + inc hl + inc hl + ld de, EnemyMonLevel + ld bc, $0011 + call CopyBytes + ld a, [EnemyMonSpecies] + ld [CurSpecies], a + call GetBaseData + ld hl, OTPartyMon1Nickname + ld a, [CurPartyMon] + call SkipNames + ld de, EnemyMonNick + ld bc, $000b + call CopyBytes + ld hl, EnemyMonAtk + ld de, EnemyStats + ld bc, $000a + call CopyBytes + call Function3ec30 + ld hl, BaseType1 + ld de, EnemyMonType1 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ld hl, BaseHP + ld de, EnemyMonBaseStats + ld b, $5 +.asm_3db25 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_3db25 + ld a, [CurPartyMon] + ld [CurOTMon], a + ret +; 3db32 + + +Function3db32: ; 3db32 + call ClearSprites + ld a, [CurBattleMon] + ld [$c71a], a + ld a, [CurPartyMon] + ld [CurBattleMon], a + call Function3d581 + call Function3da0d + call Function3dab1 + call Function3dbde + call Function3dc18 + call Function3db5f + call EmptyBattleTextBox + call Function309d + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + ret +; 3db5f + + +Function3db5f: ; 3db5f + ld hl, BattleMonAtkDefDV + ld a, $2d + call Predef + ld hl, $c505 + ld b, $7 + ld c, $8 + call ClearBox + call WaitBGMap + xor a + ld [hBGMapMode], a + call Function3f43d + xor a + ld [$ffad], a + ld [$d0d2], a + ld [CurMoveNum], a + ld [TypeModifier], a + ld [PlayerMoveAnimation], a + ld [LastEnemyCounterMove], a + ld [LastPlayerCounterMove], a + ld [LastPlayerMove], a + call Function3e4a8 + call Function3ee27 + xor a + ld [$c731], a + call SetPlayerTurn + xor a + ld [$cfca], a + ld [$c689], a + ld de, $0101 + call Function3ee17 + call Function3da74 + jr nc, .asm_3dbbc + ld a, $1 + ld [$c689], a + ld de, $0101 + call Function3ee17 + +.asm_3dbbc + ld a, $0 + call GetPartyParamLocation + ld b, h + ld c, l + callba Function4e53f + jr c, .asm_3dbd6 + ld a, $f0 + ld [CryTracks], a + ld a, [CurPartySpecies] + call Function37b6 + +.asm_3dbd6 + call Function3df48 + ld a, $1 + ld [hBGMapMode], a + ret +; 3dbde + +Function3dbde: ; 3dbde + xor a + ld [LastEnemyCounterMove], a + ld [LastPlayerCounterMove], a + ld [LastPlayerMove], a + ld hl, PlayerSubStatus1 + ld [hli], a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, PlayerUsedMoves + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld [PlayerDisableCount], a + ld [PlayerFuryCutterCount], a + ld [$c679], a + ld [$c72b], a + ld [DisabledMove], a + ld [$c6fe], a + ld [$c731], a + ld [$c730], a + ld [PlayerTurnsTaken], a + ld hl, EnemySubStatus5 + res 7, [hl] + ret +; 3dc18 + +Function3dc18: ; 3dc18 + ld hl, PlayerSubStatus1 + res 7, [hl] + ld hl, EnemySubStatus1 + res 7, [hl] + ret +; 3dc23 + +Function3dc23: ; 3dc23 + ld hl, PlayerScreens + ld de, BattleMonType1 + ld bc, Function3df48 + ld a, [hBattleTurn] + and a + jr z, .asm_3dc3a + ld hl, EnemyScreens + ld de, EnemyMonType1 + ld bc, Function3e036 + +.asm_3dc3a + bit 0, [hl] + ret z + ld a, [de] + cp $2 + ret z + inc de + ld a, [de] + cp $2 + ret z + push bc + ld hl, BattleText_0x80bae + call StdBattleTextBox + call GetEighthMaxHP + call Function3cc39 + pop hl + call Function3dc5a + jp WaitBGMap +; 3dc5a + +Function3dc5a: ; 3dc5a + jp [hl] +; 3dc5b + +Function3dc5b: ; 3dc5b + ld a, $10 + call GetBattleVar + ld b, a + call Function3c5ec + ld a, b + cp $80 + jr nz, .asm_3dce4 + ld a, [CurBattleMon] + push af + ld hl, DoPlayerTurn + ld a, [hBattleTurn] + and a + jr z, .asm_3dc7e + ld hl, DoEnemyTurn + ld a, [$c71a] + ld [CurBattleMon], a + +.asm_3dc7e + ld a, BANK(DoPlayerTurn) + rst FarCall + ld a, $10 + call _GetBattleVar + ld a, $ff + ld [hl], a + pop af + ld [CurBattleMon], a + ld a, [hBattleTurn] + and a + jr z, .asm_3dcc0 + ld a, [$c71a] + call Function399f + ld hl, BattleMonHP + ld a, [hli] + or [hl] + jr nz, .asm_3dce4 + ld a, $f0 + ld [CryTracks], a + ld a, [BattleMonSpecies] + call Function37b6 + ld a, [$c71a] + ld c, a + ld hl, $c664 + ld b, $0 + ld a, $3 + call Predef + call Function3d43b + ld hl, BattleText_0x80a75 + jr .asm_3dcdf + +.asm_3dcc0 + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + jr nz, .asm_3dce4 + ld de, SFX_KINESIS + call PlaySFX + call WaitSFX + ld de, SFX_UNKNOWN_2A + call PlaySFX + call WaitSFX + call Function3d432 + ld hl, BattleText_0x809a8 + +.asm_3dcdf + call StdBattleTextBox + scf + ret + +.asm_3dce4 + and a + ret +; 3dce6 + +Function3dce6: ; 3dce6 + ld a, [hBattleTurn] + push af + xor a + ld [hBattleTurn], a + ld [$cfca], a + ld de, $0102 + call Function3ee17 + pop af + ld [hBattleTurn], a + ret +; 3dcf9 + +Function3dcf9: ; 3dcf9 + ld a, [$ffcb] + cp $1 + jr z, .asm_3dd17 + call SetPlayerTurn + call Function3dd2f + call Function3dde9 + call Function3de51 + call SetEnemyTurn + call Function3dd2f + call Function3dde9 + jp Function3de51 + +.asm_3dd17 + call SetEnemyTurn + call Function3dd2f + call Function3dde9 + call Function3de51 + call SetPlayerTurn + call Function3dd2f + call Function3dde9 + jp Function3de51 +; 3dd2f + +Function3dd2f: ; 3dd2f + callab GetOpponentItem + ld a, b + cp $1 + ret nz + ld de, EnemyMonHPLo + ld hl, EnemyMonMaxHPHi + ld a, [hBattleTurn] + and a + jr z, .asm_3dd4a + ld de, $c63d + ld hl, BattleMonMaxHP + +.asm_3dd4a + push bc + ld a, [de] + ld [$d1ec], a + add a + ld c, a + dec de + ld a, [de] + inc de + ld [$d1ed], a + adc a + ld b, a + ld a, b + cp [hl] + ld a, c + pop bc + jr z, .asm_3dd62 + jr c, .asm_3dd66 + ret + +.asm_3dd62 + inc hl + cp [hl] + dec hl + ret nc + +.asm_3dd66 + call Function3ddc8 + ld a, [hli] + ld [Buffer2], a + ld a, [hl] + ld [Buffer1], a + ld a, [de] + add c + ld [$d1ee], a + ld c, a + dec de + ld a, [de] + adc $0 + ld [$d1ef], a + ld b, a + ld a, [hld] + cp c + ld a, [hl] + sbc b + jr nc, .asm_3dd8d + ld a, [hli] + ld [$d1ef], a + ld a, [hl] + ld [$d1ee], a + +.asm_3dd8d + ld a, [$d1ef] + ld [de], a + inc de + ld a, [$d1ee] + ld [de], a + ld a, [hBattleTurn] + ld [$d10a], a + and a + ld hl, $c4ca + jr z, .asm_3dda4 + ld hl, $c55e + +.asm_3dda4 + ld [$d10a], a + ld a, $b + call Predef +Function3ddac: + call RefreshBattleHuds + callab GetOpponentItem + ld a, [hl] + ld [$d265], a + call GetItemName + callab Function27192 + ld hl, RecoveredUsingText + jp StdBattleTextBox +; 3ddc8 + + +Function3ddc8: ; 3ddc8 + push hl + push de + push bc + call EmptyBattleTextBox + ld a, $69 + ld [FXAnimIDLo], a + call Function3c8e4 + xor a + ld [$cfca], a + ld [FXAnimIDHi], a + ld a, $37 + call Predef + call Function3c8e4 + pop bc + pop de + pop hl + ret +; 3dde9 + +Function3dde9: ; 3dde9 + callab GetOpponentItem + ld hl, .Statuses +.asm_3ddf2 + ld a, [hli] + cp $ff + ret z + inc hl + cp b + jr nz, .asm_3ddf2 + dec hl + ld b, [hl] + ld a, $b + call _GetBattleVar + and b + ret z + xor a + ld [hl], a + push bc + call UpdateOpponentInParty + pop bc + ld a, $9 + call _GetBattleVar + and [hl] + res 0, [hl] + ld a, $5 + call _GetBattleVar + and [hl] + res 0, [hl] + ld a, b + cp $7f + jr nz, .asm_3de26 + ld a, $7 + call _GetBattleVar + res 7, [hl] + +.asm_3de26 + ld hl, Function0x365fd + ld a, [hBattleTurn] + and a + jr z, .asm_3de31 + ld hl, Function0x365d7 + +.asm_3de31 + call Function3c8e4 + ld a, BANK(Function0x365fd) + rst FarCall + call Function3c8e4 + call Function3ddc8 + call Function3ddac + ld a, $1 + and a + ret +; 3de44 + +.Statuses ; 3de44 + db HELD_HEAL_POISON, 1 << PSN + db HELD_HEAL_FREEZE, 1 << FRZ + db HELD_HEAL_BURN, 1 << BRN + db HELD_HEAL_SLEEP, SLP + db HELD_HEAL_PARALYZE, 1 << PAR + db HELD_HEAL_STATUS, 1 << PSN | 1 << FRZ | 1 << BRN | SLP | 1 << PAR + db $ff +; 3de51 + + +Function3de51: ; 3de51 + ld a, $7 + call GetBattleVar + bit 7, a + ret z + callab GetOpponentItem + ld a, b + cp $10 + jr z, .asm_3de67 + cp $f + ret nz + +.asm_3de67 + ld a, [hl] + ld [$d265], a + ld a, $7 + call _GetBattleVar + res 7, [hl] + call GetItemName + call Function3ddc8 + ld hl, BattleText_0x80dab + call StdBattleTextBox + ld a, [hBattleTurn] + and a + jr nz, .asm_3de90 + call Function3df1f + xor a + ld [bc], a + ld a, [IsInBattle] + dec a + ret z + ld [hl], $0 + ret + +.asm_3de90 + call Function3df12 + xor a + ld [bc], a + ld [hl], a + ret +; 3de97 + +Function3de97: ; 3de97 + ld a, [$ffcb] + cp $1 + jr z, .asm_3dea3 + call Function3dea9 + jp Function3deb1 + +.asm_3dea3 + call Function3deb1 + jp Function3dea9 +; 3dea9 + +Function3dea9: ; 3dea9 + call Function3df12 + ld a, $0 + jp Function3deb6 +; 3deb1 + +Function3deb1: ; 3deb1 + call Function3df1f + ld a, $1 +Function3deb6: ; 3deb6 + ld [hBattleTurn], a + ld d, h + ld e, l + push de + push bc + ld a, [bc] + ld b, a + callab GetItem + ld hl, .data_3defc +.asm_3dec7 + ld a, [hli] + cp $ff + jr z, .asm_3def9 + inc hl + inc hl + cp b + jr nz, .asm_3dec7 + pop bc + ld a, [bc] + ld [$d265], a + push bc + dec hl + dec hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, BANK(BattleCommand70) + rst FarCall + pop bc + pop de + ld a, [FailedMessage] + and a + ret nz + xor a + ld [bc], a + ld [de], a + call GetItemName + ld hl, BattleText_0x80bde + call StdBattleTextBox + callab BattleCommand8c + ret + +.asm_3def9 + pop bc + pop de + ret +; 3defc + +.data_3defc + dbw $1f, BattleCommand70 + dbw $20, BattleCommand71 + dbw $21, BattleCommand72 + dbw $22, BattleCommand73 + dbw $23, BattleCommand74 + dbw $24, BattleCommand75 + dbw $25, BattleCommand76 + db $ff +; 3df12 + + +Function3df12: ; 3df12 + ld hl, PartyMon1Item + ld a, [CurBattleMon] + call GetPartyLocation + ld bc, BattleMonItem + ret +; 3df1f + +Function3df1f: ; 3df1f + ld hl, OTPartyMon1Item + ld a, [CurOTMon] + call GetPartyLocation + ld bc, EnemyMonItem + ret +; 3df2c + +Function3df2c: ; 3df2c + push hl + push de + push bc + call DrawPlayerHUD + ld hl, PlayerHPPal + call SetHPPal + call CheckDanger + call Function3e043 + ld hl, EnemyHPPal + call SetHPPal + pop bc + pop de + pop hl + ret +; 3df48 + + + +Function3df48: ; 3df48 + push hl + push de + push bc + call DrawPlayerHUD + call UpdatePlayerHPPal + call CheckDanger + pop bc + pop de + pop hl + ret +; 3df58 + +DrawPlayerHUD: ; 3df58 + xor a + ld [hBGMapMode], a + +; Clear the area + hlcoord 9, 7 + ld bc, $050b + call ClearBox + + callba DrawPlayerExpBar + + hlcoord 18, 9 + ld [hl], $73 ; vertical bar + call PrintPlayerHUD + +; HP bar + hlcoord 10, 9 + ld b, OTPARTYMON + xor a + ld [MonType], a + ld a, PREDEF_DRAW_PLAYER_HP + call Predef + +; Exp bar + push de + ld a, [CurBattleMon] + ld hl, PartyMon1Exp + 2 + call GetPartyLocation + ld d, h + ld e, l + + hlcoord 10, 11 + ld a, [TempMonLevel] + ld b, a + call FillInExpBar + pop de + ret +; 3df98 + +UpdatePlayerHPPal: ; 3df98 + ld hl, PlayerHPPal + jp Function3e12e +; 3df9e + +CheckDanger: ; 3df9e + ld hl, BattleMonHP + ld a, [hli] + or [hl] + jr z, .asm_3dfb2 + ld a, [$c6fd] + and a + jr nz, .asm_3dfbe + ld a, [PlayerHPPal] + cp $2 + jr z, .asm_3dfb9 + +.asm_3dfb2 + ld hl, Danger + res 7, [hl] + jr .asm_3dfbe + +.asm_3dfb9 + ld hl, Danger + set 7, [hl] + +.asm_3dfbe + ret +; 3dfbf + +PrintPlayerHUD: ; 3dfbf + ld de, BattleMonNick + hlcoord 10, 7 + call Function3e138 + call PlaceString + + push bc + + ld a, [CurBattleMon] + ld hl, PartyMon1DVs + call GetPartyLocation + ld de, TempMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ld hl, BattleMonLevel + ld de, TempMonLevel + ld bc, $0011 + call CopyBytes + ld a, [CurBattleMon] + ld hl, PartyMon1Species + call GetPartyLocation + ld a, [hl] + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + + pop hl + dec hl + + ld a, $3 + ld [MonType], a + callab GetGender + ld a, $7f + jr c, .asm_3e013 + ld a, $ef + jr nz, .asm_3e013 + ld a, $f5 + +.asm_3e013 + ld hl, $c551 + ld [hl], a + ld hl, $c54e + push af + push hl + ld de, BattleMonStatus + ld a, $21 + call Predef + pop hl + pop bc + ret nz + ld a, b + cp $7f + jr nz, .asm_3e02d + dec hl + +.asm_3e02d + ld a, [BattleMonLevel] + ld [TempMonLevel], a + jp PrintLevel +; 3e036 + +Function3e036: ; 3e036 + push hl + push de + push bc + call Function3e043 + call Function3e127 + pop bc + pop de + pop hl + ret +; 3e043 + +Function3e043: ; 3e043 + xor a + ld [hBGMapMode], a + ld hl, $c4a1 + ld bc, $040b + call ClearBox + callba Function2c0c5 + ld a, [TempEnemyMonSpecies] + ld [CurSpecies], a + ld [CurPartySpecies], a + call GetBaseData + ld de, EnemyMonNick + ld hl, $c4a1 + call Function3e138 + call PlaceString + ld h, b + ld l, c + dec hl + ld hl, EnemyMonAtkDefDV + ld de, TempMonDVs + ld a, [EnemySubStatus5] + bit 3, a + jr z, .asm_3e080 + ld hl, $c6f2 + +.asm_3e080 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ld a, $3 + ld [MonType], a + callab GetGender + ld a, $7f + jr c, .asm_3e09a + ld a, $ef + jr nz, .asm_3e09a + ld a, $f5 + +.asm_3e09a + ld hl, $c4bd + ld [hl], a + ld hl, $c4ba + push af + push hl + ld de, EnemyMonStatus + ld a, $21 + call Predef + pop hl + pop bc + jr nz, .asm_3e0be + ld a, b + cp $7f + jr nz, .asm_3e0b5 + dec hl + +.asm_3e0b5 + ld a, [EnemyMonLevel] + ld [TempMonLevel], a + call PrintLevel + +.asm_3e0be + ld hl, EnemyMonHPHi + ld a, [hli] + ld [$ffb5], a + ld a, [hld] + ld [$ffb6], a + or [hl] + jr nz, .asm_3e0d1 + ld c, a + ld e, a + ld d, $6 + jp .asm_3e11a + +.asm_3e0d1 + xor a + ld [hMultiplicand], a + ld a, $30 + ld [hMultiplier], a + call Multiply + ld hl, EnemyMonMaxHPHi + ld a, [hli] + ld b, a + ld a, [hl] + ld [hMultiplier], a + ld a, b + and a + jr z, .asm_3e105 + ld a, [hMultiplier] + srl b + rr a + srl b + rr a + ld [hMultiplier], a + ld a, [$ffb5] + ld b, a + srl b + ld a, [$ffb6] + rr a + srl b + rr a + ld [$ffb6], a + ld a, b + ld [$ffb5], a + +.asm_3e105 + ld a, [$ffb5] + ld [hProduct], a + ld a, [$ffb6] + ld [hMultiplicand], a + ld a, $2 + ld b, a + call Divide + ld a, [$ffb6] + ld e, a + ld a, $6 + ld d, a + ld c, a +.asm_3e11a + xor a + ld [$d10a], a + ld hl, $c4ca + ld b, $0 + call DrawHPBar + ret +; 3e127 + +Function3e127: ; 3e127 + ld hl, EnemyHPPal + call Function3e12e + ret +; 3e12e + +Function3e12e: ; 3e12e + ld b, [hl] + call SetHPPal + ld a, [hl] + cp b + ret z + jp Function3ee27 +; 3e138 + +Function3e138: ; 3e138 + ret +; 3e139 + +Function3e139: ; 3e139 + xor a + ld [hBGMapMode], a + call Function30bf + ld a, [BattleType] + cp $2 + jr z, .asm_3e156 + cp $3 + jr z, .asm_3e156 + call EmptyBattleTextBox + call UpdateBattleHuds + call EmptyBattleTextBox + call Function309d + +.asm_3e156 + ld a, [BattleType] + cp $6 + jr nz, .asm_3e165 + callba Function24f13 + jr .asm_3e175 + +.asm_3e165 + ld a, [InputType] + or a + jr z, .asm_3e171 + callba Function1de294 +.asm_3e171 + call Function3e19b + ret c + +.asm_3e175 + ld a, $1 + ld [hBGMapMode], a + ld a, [$d0d2] + cp $1 + jp z, Function3e192 + cp $3 + jp z, Function3e1c7 + cp $2 + jp z, Function3e28d + cp $4 + jp z, Function3e489 + jr .asm_3e156 +; 3e192 + +Function3e192: ; 3e192 + xor a + ld [$d267], a + call Function30b4 + and a + ret +; 3e19b + +Function3e19b: ; 3e19b + call Function3d2f1 + jr z, .asm_3e1a8 + callba LoadBattleMenuDataHeader + and a + ret + +.asm_3e1a8 + callba Function100b12 + ld a, [$cd2b] + and a + ret z + ld hl, $cd2a + bit 4, [hl] + jr nz, .asm_3e1c5 + ld hl, $5863 + call StdBattleTextBox + ld c, $3c + call DelayFrames + +.asm_3e1c5 + scf + ret +; 3e1c7 + +Function3e1c7: ; 3e1c7 + ld a, [InLinkBattle] + and a + jp nz, Function3e22b + ld a, [$cfc0] + and a + jp nz, Function3e22b + call Function1d6e + ld a, [BattleType] + cp $3 + jr z, .asm_3e1f1 + cp $6 + jr z, .asm_3e201 + callba Function10493 + ld a, [$d0ec] + and a + jr z, .asm_3e20d + jr .asm_3e209 + +.asm_3e1f1 + callba Function107bb + ld a, $5 + ld [CurItem], a + call DoItemEffect + jr .asm_3e209 + +.asm_3e201 + ld a, $b1 + ld [CurItem], a + call DoItemEffect + +.asm_3e209 + call Function3e234 + ret + +.asm_3e20d + call ClearPalettes + call DelayFrame + call Function3ed9f + call Function3f43d + call Function3f47c + call Function1c07 + call WaitBGMap + call Function3ee27 + call Function309d + jp Function3e139 +; 3e22b + +Function3e22b: ; 3e22b + ld hl, BattleText_0x80bf3 + call StdBattleTextBox + jp Function3e139 +; 3e234 + +Function3e234: ; 3e234 + ld a, [$c64e] + and a + jr nz, .asm_3e279 + callab CheckItemPocket + ld a, [$d142] + cp $3 + jr z, .asm_3e24a + call WhiteBGMap + +.asm_3e24a + xor a + ld [hBGMapMode], a + call Function3ed9f + call ClearSprites + ld a, [BattleType] + cp $3 + jr z, .asm_3e25d + call Function3f43d + +.asm_3e25d + call Function3f47c + ld a, $1 + ld [$cfa9], a + call Function1c07 + call Function3df2c + call WaitBGMap + call Function309d + call Function1fbf + call Function3ee27 + and a + ret + +.asm_3e279 + xor a + ld [$c64e], a + ld a, [$d0ee] + and $c0 + ld [$d0ee], a + call Function1fbf + call Function32f9 + scf + ret +; 3e28d + +Function3e28d: ; 3e28d + call Function1d6e +Function3e290: + call Function1c07 + call Function1d6e + call WhiteBGMap +Function3e299: + call Function3d2fa + xor a + ld [PartyMenuActionText], a + call Function3d313 + call Function3d329 + jr c, .asm_3e2da +.asm_3e2a8 + callba Function8ea4a + call Function3e2f5 + jr c, .asm_3e2c8 + call Function1bee + ld a, [$cfa9] + cp $1 + jp z, Function3e358 + cp $2 + jr z, .asm_3e2cf + cp $3 + jr z, .asm_3e2da + jr .asm_3e2a8 + +.asm_3e2c8 + call Function3d2e0 + jr c, .asm_3e2da + jr Function3e299 + +.asm_3e2cf + call Function3e308 + call Function3d2e0 + jr c, .asm_3e2da + jp Function3e290 + +.asm_3e2da + call ClearSprites + call ClearPalettes + call DelayFrame + call Function3eda6 + call Function1c17 + call Function309d + call ClearSGB + call Function32f9 + jp Function3e139 +; 3e2f5 + +Function3e2f5: ; 3e2f5 + call Function3d2f1 + jr z, .asm_3e301 + callba Function24e99 + ret + +.asm_3e301 + callba Function100d22 + ret +; 3e308 + +Function3e308: ; 3e308 + call DisableLCD + ld hl, $9310 + ld de, VTiles0 + ld bc, $0110 + call CopyBytes + ld hl, VTiles2 + ld de, $8110 + ld bc, $0310 + call CopyBytes + call EnableLCD + call ClearSprites + call LowVolume + xor a + ld [MonType], a + callba Function4dc7b + call MaxVolume + call DisableLCD + ld hl, VTiles0 + ld de, $9310 + ld bc, $0110 + call CopyBytes + ld hl, $8110 + ld de, VTiles2 + ld bc, $0310 + call CopyBytes + call EnableLCD + ret +; 3e358 + + +Function3e358: ; 3e358 + ld a, [CurBattleMon] + ld d, a + ld a, [CurPartyMon] + cp d + jr nz, .asm_3e36b + ld hl, BattleText_0x80c0d + call StdBattleTextBox + jp Function3e299 + +.asm_3e36b + ld a, [$c730] + and a + jr nz, .asm_3e378 + ld a, [EnemySubStatus5] + bit 7, a + jr z, .asm_3e381 + +.asm_3e378 + ld hl, BattleText_0x80c22 + call StdBattleTextBox + jp Function3e299 + +.asm_3e381 + call Function3d887 + jp z, Function3e299 + ld a, [CurBattleMon] + ld [$c71a], a + ld a, $2 + ld [$d0ec], a + call ClearPalettes + call DelayFrame + call ClearSprites + call Function3eda6 + call Function1c17 + call ClearSGB + call Function32f9 + ld a, [CurPartyMon] + ld [CurBattleMon], a + ; fallthrough +; 3e3ad + +Function3e3ad: ; 3e3ad + ld a, $1 + ld [$c710], a + ld a, [InLinkBattle] + and a + jr z, .asm_3e3c1 + call Function1d6e + call Function3e8e4 + call Function1c17 + +.asm_3e3c1 + call Function3e7c1 + ld a, [InLinkBattle] + and a + jr nz, .asm_3e3cf + +.asm_3e3ca + call Function3e40b + and a + ret + +.asm_3e3cf + ld a, [$d430] + cp $e + jp z, .asm_3e3ca + cp $d + jp z, .asm_3e3ca + cp $4 + jp c, .asm_3e3ca + cp $f + jr nz, .asm_3e3e9 + call Function3c0e5 + ret + +.asm_3e3e9 + ld a, [$ffcb] + cp $1 + jr z, .asm_3e3f7 + call Function3e40b + call Function3e3ff + and a + ret + +.asm_3e3f7 + call Function3e3ff + call Function3e40b + and a + ret +; 3e3ff + +Function3e3ff: ; 3e3ff + callab Function3846c + call SetEnemyTurn + jp Function3dc23 +; 3e40b + +Function3e40b: ; 3e40b + call Function3f2f4 + ld c, $32 + call DelayFrames + ld hl, PlayerSubStatus4 + res 6, [hl] + call SetEnemyTurn + call Function3dc5b + jr c, .asm_3e423 + call Function3dce6 + +.asm_3e423 + ld hl, $c535 + ld bc, $050b + call ClearBox + ld a, [CurBattleMon] + ld [CurPartyMon], a + call Function3d581 + call Function3da0d + call Function3dab1 + call Function3f26d + call Function3dbde + call Function3dc18 + call Function3db5f + call EmptyBattleTextBox + call Function309d + call SetPlayerTurn + call Function3dc23 + ld a, $2 + ld [$cfa9], a + ret +; 3e459 + +Function3e459: ; 3e459 + ld c, $32 + call DelayFrames + ld hl, $c535 + ld bc, $050b + call ClearBox + ld a, [CurPartyMon] + ld [CurBattleMon], a + call Function3d581 + call Function3da0d + xor a + ld [$d265], a + call Function3ecab + call Function3db5f + call EmptyBattleTextBox + call Function309d + call SetPlayerTurn + jp Function3dc23 +; 3e489 + + + +Function3e489: ; 3e489 + call Function30b4 + ld a, $3 + ld [$cfa9], a + ld hl, BattleMonSpd + ld de, EnemyMonSpd + call Function3d8b3 + ld a, $0 + ld [$d266], a + ret c + ld a, [$d0ec] + and a + ret nz + jp Function3e139 +; 3e4a8 + + + +Function3e4a8: ; 3e4a8 + ld a, [BattleMonItem] + ld b, a + callab GetItem + ld a, b + cp $4c + ret nz + ld a, $1 + ld [$c73d], a + ret +; 3e4bc + +Function3e4bc: ; 3e4bc + call Function3d2f1 + jr nz, .asm_3e4c8 + callba Function100b9f + ret + +.asm_3e4c8 + ld hl, EnemyMonMove1 + ld a, [$d235] + dec a + jr z, .asm_3e4e2 + dec a + jr z, .asm_3e4dd + call Function3e786 + ret z + ld hl, BattleMonMove1 + jr .asm_3e4e2 + +.asm_3e4dd + ld a, $2 + call GetPartyParamLocation + +.asm_3e4e2 + ld de, $d25e + ld bc, $0004 + call CopyBytes + xor a + ld [hBGMapMode], a + ld hl, $c594 + ld b, $4 + ld c, $e + ld a, [$d235] + cp $2 + jr nz, .asm_3e503 + ld hl, $c544 + ld b, $4 + ld c, $e + +.asm_3e503 + call TextBox + ld hl, $c5aa + ld a, [$d235] + cp $2 + jr nz, .asm_3e513 + ld hl, $c55a + +.asm_3e513 + ld a, $14 + ld [Buffer1], a + ld a, $20 + call Predef + ld b, $5 + ld a, [$d235] + cp $2 + ld a, $d + jr nz, .asm_3e52c + ld b, $5 + ld a, $9 + +.asm_3e52c + ld [$cfa1], a + ld a, b + ld [$cfa2], a + ld a, [$d235] + cp $1 + jr z, .asm_3e53e + ld a, [CurMoveNum] + inc a + +.asm_3e53e + ld [$cfa9], a + ld a, $1 + ld [$cfaa], a + ld a, [$d0eb] + inc a + ld [$cfa3], a + ld a, $1 + ld [$cfa4], a + ld c, $2c + ld a, [$d235] + dec a + ld b, $c1 + jr z, .asm_3e569 + dec a + ld b, $c3 + jr z, .asm_3e569 + ld a, [InLinkBattle] + and a + jr nz, .asm_3e569 + ld b, $c7 + +.asm_3e569 + ld a, b + ld [$cfa8], a + ld a, c + ld [$cfa5], a + xor a + ld [$cfa6], a + ld a, $10 + ld [$cfa7], a +.asm_3e57a + ld a, [$d235] + and a + jr z, .asm_3e58e + dec a + jr nz, .asm_3e5a3 + ld hl, $c5c3 + ld de, .string_3e61c + call PlaceString + jr .asm_3e5a3 + +.asm_3e58e + call MoveInfoBox + ld a, [$d0e3] + and a + jr z, .asm_3e5a3 + ld hl, $c5a9 + ld bc, $0014 + dec a + call AddNTimes + ld [hl], $ec + +.asm_3e5a3 + ld a, $1 + ld [hBGMapMode], a + call Function1bd3 + bit 6, a + jp nz, .asm_3e61d + bit 7, a + jp nz, .asm_3e62e + bit 2, a + jp nz, Function3e643 + bit 1, a + push af + xor a + ld [$d0e3], a + ld a, [$cfa9] + dec a + ld [$cfa9], a + ld b, a + ld a, [$d235] + dec a + jr nz, .asm_3e5d0 + pop af + ret + +.asm_3e5d0 + dec a + ld a, b + ld [CurMoveNum], a + jr nz, .asm_3e5d9 + pop af + ret + +.asm_3e5d9 + pop af + ret nz + ld hl, BattleMonPPMove1 + ld a, [$cfa9] + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + and $3f + jr z, .asm_3e610 + ld a, [PlayerDisableCount] + swap a + and $f + dec a + cp c + jr z, .asm_3e60b + ld a, [$c6e1] + and a + jr nz, .asm_3e606 + ld a, [$cfa9] + ld hl, BattleMonMove1 + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + +.asm_3e606 + ld [CurPlayerMove], a + xor a + ret + +.asm_3e60b + ld hl, BattleText_0x80c5b + jr .asm_3e613 + +.asm_3e610 + ld hl, Function3cc39 + +.asm_3e613 + call StdBattleTextBox + call Function30b4 + jp Function3e4bc +; 3e61c + +.string_3e61c ; 3e61c + db "@" +; 3e61d + +.asm_3e61d + ld a, [$cfa9] + and a + jp nz, .asm_3e57a + ld a, [$d0eb] + inc a + ld [$cfa9], a + jp .asm_3e57a +; 3e62e + +.asm_3e62e: ; 3e62e + ld a, [$cfa9] + ld b, a + ld a, [$d0eb] + inc a + inc a + cp b + jp nz, .asm_3e57a + ld a, $1 + ld [$cfa9], a + jp .asm_3e57a +; 3e643 + +Function3e643: ; 3e643 + ld a, [$d0e3] + and a + jr z, .asm_3e6bf + ld hl, BattleMonMoves + call .asm_3e6a5 + ld hl, BattleMonPP + call .asm_3e6a5 + ld hl, PlayerDisableCount + ld a, [hl] + swap a + and $f + ld b, a + ld a, [$cfa9] + cp b + jr nz, .asm_3e671 + ld a, [hl] + and $f + ld b, a + ld a, [$d0e3] + swap a + add b + ld [hl], a + jr .asm_3e682 + +.asm_3e671 + ld a, [$d0e3] + cp b + jr nz, .asm_3e682 + ld a, [hl] + and $f + ld b, a + ld a, [$cfa9] + swap a + add b + ld [hl], a + +.asm_3e682 + ld a, [PlayerSubStatus5] + bit 3, a + jr nz, .asm_3e69e + ld hl, PartyMon1Moves + ld a, [CurBattleMon] + call GetPartyLocation + push hl + call .asm_3e6a5 + pop hl + ld bc, $0015 + add hl, bc + call .asm_3e6a5 + +.asm_3e69e + xor a + ld [$d0e3], a + jp Function3e4bc + +.asm_3e6a5 + push hl + ld a, [$d0e3] + dec a + ld c, a + ld b, 0 + add hl, bc + ld d, h + ld e, l + pop hl + ld a, [$cfa9] + dec a + ld c, a + ld b, 0 + add hl, bc + ld a, [de] + ld b, [hl] + ld [hl], a + ld a, b + ld [de], a + ret + +.asm_3e6bf + ld a, [$cfa9] + ld [$d0e3], a + jp Function3e4bc +; 3e6c8 + +MoveInfoBox: ; 3e6c8 + xor a + ld [hBGMapMode], a + + hlcoord 0, 8 + ld b, 3 + ld c, 9 + call TextBox + call MobileTextBorder + + ld a, [PlayerDisableCount] + and a + jr z, .asm_3e6f4 + + swap a + and $f + ld b, a + ld a, [$cfa9] + cp b + jr nz, .asm_3e6f4 + + hlcoord 1, 10 + ld de, .Disabled + call PlaceString + jr .done + +.asm_3e6f4 + ld hl, $cfa9 + dec [hl] + call SetPlayerTurn + ld hl, BattleMonMoves + ld a, [$cfa9] + ld c, a + ld b, 0 + add hl, bc + ld a, [hl] + ld [CurPlayerMove], a + + ld a, [CurBattleMon] + ld [CurPartyMon], a + ld a, WILDMON + ld [MonType], a + callab Functionf8ec + + ld hl, $cfa9 + ld c, [hl] + inc [hl] + ld b, 0 + ld hl, BattleMonPP + add hl, bc + ld a, [hl] + and $3f + ld [StringBuffer1], a + call Function3e75f + + hlcoord 1, 9 + ld de, .Type + call PlaceString + + hlcoord 7, 11 + ld [hl], "/" + + callab UpdateMoveData + ld a, [PlayerMoveAnimation] + ld b, a + hlcoord 2, 10 + ld a, PREDEF_PRINT_MOVE_TYPE + call Predef + +.done + ret +; 3e74f + +.Disabled + db "Disabled!@" +.Type + db "TYPE/@" +; 3e75f + + +Function3e75f: ; 3e75f + hlcoord 5, 11 + ld a, [InLinkBattle] + cp $4 + jr c, .asm_3e76c + hlcoord 5, 11 + +.asm_3e76c + push hl + ld de, StringBuffer1 + ld bc, $0102 + call PrintNum + pop hl + inc hl + inc hl + ld [hl], "/" + inc hl + ld de, $d265 + ld bc, $0102 + call PrintNum + ret +; 3e786 + +Function3e786: ; 3e786 + ld a, STRUGGLE + ld [CurPlayerMove], a + ld a, [PlayerDisableCount] + and a + ld hl, BattleMonPP + jr nz, .asm_3e79f + + ld a, [hli] + or [hl] + inc hl + or [hl] + inc hl + or [hl] + and $3f + ret nz + jr .asm_3e7b4 + +.asm_3e79f + swap a + and $f + ld b, a + ld d, $5 + xor a +.asm_3e7a7 + dec d + jr z, .asm_3e7b2 + ld c, [hl] + inc hl + dec b + jr z, .asm_3e7a7 + or c + jr .asm_3e7a7 + +.asm_3e7b2 + and a + ret nz + +.asm_3e7b4 + ld hl, BattleText_0x80c72 + call StdBattleTextBox + ld c, 60 + call DelayFrames + xor a + ret +; 3e7c1 + + + +Function3e7c1: ; 3e7c1 + ld a, [$c711] + and a + ret nz + ld a, [InLinkBattle] + and a + jr z, .asm_3e817 + call EmptyBattleTextBox + call Function309d + ld a, [$d0ec] + and a + call z, Function3e8e4 + call Function30b4 + ld a, [$d430] + cp $e + jp z, .asm_3e8bd + cp $d + jp z, .asm_3e82c + cp $4 + jp nc, Function3e8c1 + ld [CurEnemyMoveNum], a + ld c, a + ld a, [EnemySubStatus1] + bit 6, a + jp nz, .asm_3e882 + ld a, [EnemySubStatus3] + and $13 + jp nz, .asm_3e882 + ld hl, EnemySubStatus5 + bit 4, [hl] + ld a, [LastEnemyMove] + jp nz, .asm_3e87f + ld hl, EnemyMonMove1 + ld b, $0 + add hl, bc + ld a, [hl] + jp .asm_3e87f + +.asm_3e817 + ld hl, EnemySubStatus5 + bit 4, [hl] + jr z, .asm_3e824 + ld a, [LastEnemyMove] + jp .asm_3e87f + +.asm_3e824 + call Function3e8d1 + jp nz, Function3e8c1 + jr .asm_3e830 + +.asm_3e82c + ld a, $ff + jr .asm_3e87f + +.asm_3e830 + ld hl, EnemyMonMove1 + ld de, EnemyMonPPMove1 + ld b, $4 +.asm_3e838 + ld a, [hl] + and a + jp z, .asm_3e8bd + ld a, [EnemyDisabledMove] + cp [hl] + jr z, .asm_3e848 + ld a, [de] + and $3f + jr nz, .asm_3e84f + +.asm_3e848 + inc hl + inc de + dec b + jr nz, .asm_3e838 + jr .asm_3e8bd + +.asm_3e84f + ld a, [IsInBattle] + dec a + jr nz, .asm_3e882 +.asm_3e855 + ld hl, EnemyMonMove1 + call BattleRandom + and $3 + ld c, a + ld b, $0 + add hl, bc + ld a, [EnemyDisableCount] + swap a + and $f + dec a + cp c + jr z, .asm_3e855 + ld a, [hl] + and a + jr z, .asm_3e855 + ld hl, EnemyMonPPMove1 + add hl, bc + ld b, a + ld a, [hl] + and $3f + jr z, .asm_3e855 + ld a, c + ld [CurEnemyMoveNum], a + ld a, b + +.asm_3e87f + ld [CurEnemyMove], a + +.asm_3e882 + call SetEnemyTurn + callab UpdateMoveData + call Function3e8d1 + jr nz, .asm_3e894 + xor a + ld [$c733], a + +.asm_3e894 + ld a, [EnemyMoveEffect] + cp $77 + jr z, .asm_3e89f + xor a + ld [EnemyFuryCutterCount], a + +.asm_3e89f + ld a, [EnemyMoveEffect] + cp $51 + jr z, .asm_3e8af + ld hl, EnemySubStatus4 + res 6, [hl] + xor a + ld [$c72c], a + +.asm_3e8af + ld a, [EnemyMoveEffect] + cp $6f + ret z + cp $74 + ret z + xor a + ld [$c681], a + ret + +.asm_3e8bd + ld a, $a5 + jr .asm_3e87f +; 3e8c1 + +Function3e8c1: ; 3e8c1 + xor a + ld [EnemyFuryCutterCount], a + ld [$c681], a + ld [$c72c], a + ld hl, EnemySubStatus4 + res 6, [hl] + ret +; 3e8d1 + +Function3e8d1: ; 3e8d1 + ld a, [EnemySubStatus4] + and $20 + ret nz + ld hl, EnemySubStatus3 + ld a, [hl] + and $13 + ret nz + ld hl, EnemySubStatus1 + bit 6, [hl] + ret +; 3e8e4 + +Function3e8e4: ; 3e8e4 + callba Function100a09 + ret +; 3e8eb + + +LoadEnemyMon: ; 3e8eb +; Initialize enemy monster parameters +; To do this we pull the species from TempEnemyMonSpecies + +; Notes: +; BattleRandom is used to ensure sync between Game Boys + +; Clear the whole EnemyMon struct + xor a + ld hl, EnemyMonSpecies + ld bc, EnemyMonEnd - EnemyMon + call ByteFill + +; We don't need to be here if we're in a link battle + ld a, [InLinkBattle] + and a + jp nz, Function3dabd + + ld a, [$cfc0] ; ???? + bit 0, a + jp nz, Function3dabd + +; Make sure everything knows what species we're working with + ld a, [TempEnemyMonSpecies] + ld [EnemyMonSpecies], a + ld [CurSpecies], a + ld [CurPartySpecies], a + +; Grab the BaseData for this species + call GetBaseData + + +; Let's get the item: + +; Is the item predetermined? + ld a, [IsInBattle] + dec a + jr z, .WildItem + +; If we're in a trainer battle, the item is in the party struct + ld a, [CurPartyMon] + ld hl, OTPartyMon1Item + call GetPartyLocation ; bc = PartyMon[CurPartyMon] - PartyMons + ld a, [hl] + jr .UpdateItem + + +.WildItem +; In a wild battle, we pull from the item slots in BaseData + +; Force Item1 +; Used for Ho-Oh, Lugia and Snorlax encounters + ld a, [BattleType] + cp BATTLETYPE_FORCEITEM + ld a, [BaseItems] + jr z, .UpdateItem + +; Failing that, it's all up to chance +; Effective chances: +; 75% None +; 23% Item1 +; 2% Item2 + +; 25% chance of getting an item + call BattleRandom + cp a, $c0 + ld a, NO_ITEM + jr c, .UpdateItem + +; From there, an 8% chance for Item2 + call BattleRandom + cp a, $14 ; 8% of 25% = 2% Item2 + ld a, [BaseItems] + jr nc, .UpdateItem + ld a, [BaseItems+1] + + +.UpdateItem + ld [EnemyMonItem], a + + +; Initialize DVs + +; If we're in a trainer battle, DVs are predetermined + ld a, [IsInBattle] + and a + jr z, .InitDVs + +; ???? + ld a, [EnemySubStatus5] + bit 3, a + jr z, .InitDVs + +; Unknown + ld hl, $c6f2 + ld de, EnemyMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp .Happiness + + +.InitDVs + +; Trainer DVs + +; All trainers have preset DVs, determined by class +; See GetTrainerDVs for more on that + callba GetTrainerDVs +; These are the DVs we'll use if we're actually in a trainer battle + ld a, [IsInBattle] + dec a + jr nz, .UpdateDVs + + +; Wild DVs +; Here's where the fun starts + +; Roaming monsters (Entei, Raikou) work differently +; They have their own structs, which are shorter than normal + ld a, [BattleType] + cp a, BATTLETYPE_ROAMING + jr nz, .NotRoaming + +; Grab HP + call GetRoamMonHP + ld a, [hl] +; Check if the HP has been initialized + and a +; We'll do something with the result in a minute + push af + +; Grab DVs + call GetRoamMonDVs + inc hl + ld a, [hld] + ld c, a + ld b, [hl] + +; Get back the result of our check + pop af +; If the RoamMon struct has already been initialized, we're done + jr nz, .UpdateDVs + +; If it hasn't, we need to initialize the DVs +; (HP is initialized at the end of the battle) + call GetRoamMonDVs + inc hl + call BattleRandom + ld [hld], a + ld c, a + call BattleRandom + ld [hl], a + ld b, a +; We're done with DVs + jr .UpdateDVs + + +.NotRoaming +; Register a contains BattleType + +; Forced shiny battle type +; Used by Red Gyarados at Lake of Rage + cp a, BATTLETYPE_SHINY + jr nz, .GenerateDVs + + ld b, ATKDEFDV_SHINY ; $ea + ld c, SPDSPCDV_SHINY ; $aa + jr .UpdateDVs + +.GenerateDVs +; Generate new random DVs + call BattleRandom + ld b, a + call BattleRandom + ld c, a + +.UpdateDVs +; Input DVs in register bc + ld hl, EnemyMonDVs + ld a, b + ld [hli], a + ld [hl], c + + +; We've still got more to do if we're dealing with a wild monster + ld a, [IsInBattle] + dec a + jr nz, .Happiness + + +; Species-specfic: + + +; Unown + ld a, [TempEnemyMonSpecies] + cp a, UNOWN + jr nz, .Magikarp + +; Get letter based on DVs + ld hl, EnemyMonDVs + ld a, PREDEF_GET_UNOWN_LETTER + call Predef +; Can't use any letters that haven't been unlocked +; If combined with forced shiny battletype, causes an infinite loop + call CheckUnownLetter + jr c, .GenerateDVs ; try again + + +.Magikarp +; Skimming this part recommended + + ld a, [TempEnemyMonSpecies] + cp a, MAGIKARP + jr nz, .Happiness + +; Get Magikarp's length + ld de, EnemyMonDVs + ld bc, PlayerID + callab CalcMagikarpLength + +; We're clear if the length is < 1536 + ld a, [MagikarpLength] + cp a, $06 ; $600 = 1536 + jr nz, .CheckMagikarpArea + +; 5% chance of skipping size checks + call Random + cp a, $0c ; / $100 + jr c, .CheckMagikarpArea +; Try again if > 1614 + ld a, [MagikarpLength + 1] + cp a, $50 + jr nc, .GenerateDVs + +; 20% chance of skipping this check + call Random + cp a, $32 ; / $100 + jr c, .CheckMagikarpArea +; Try again if > 1598 + ld a, [MagikarpLength + 1] + cp a, $40 + jr nc, .GenerateDVs + +.CheckMagikarpArea +; The z checks are supposed to be nz +; Instead, all maps in GROUP_LAKE_OF_RAGE (mahogany area) +; and routes 20 and 44 are treated as Lake of Rage + +; This also means Lake of Rage Magikarp can be smaller than ones +; caught elsewhere rather than the other way around + +; Intended behavior enforces a minimum size at Lake of Rage +; The real behavior prevents size flooring in the Lake of Rage area + ld a, [MapGroup] + cp a, GROUP_LAKE_OF_RAGE + jr z, .Happiness + ld a, [MapNumber] + cp a, MAP_LAKE_OF_RAGE + jr z, .Happiness +; 40% chance of not flooring + call Random + cp a, $64 ; / $100 + jr c, .Happiness +; Floor at length 1024 + ld a, [MagikarpLength] + cp a, 1024 >> 8 + jr c, .GenerateDVs ; try again + + +; Finally done with DVs + +.Happiness +; Set happiness + ld a, BASE_HAPPINESS + ld [EnemyMonHappiness], a +; Set level + ld a, [CurPartyLevel] + ld [EnemyMonLevel], a +; Fill stats + ld de, EnemyMonMaxHP + ld b, $00 + ld hl, $d201 ; ? + ld a, PREDEF_FILLSTATS + call Predef + +; If we're in a trainer battle, +; get the rest of the parameters from the party struct + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr z, .OpponentParty + +; If we're in a wild battle, check wild-specific stuff + and a + jr z, .TreeMon + +; ???? + ld a, [EnemySubStatus5] + bit 3, a + jp nz, .Moves + +.TreeMon +; If we're headbutting trees, some monsters enter battle asleep + call CheckSleepingTreeMon + ld a, 7 ; Asleep for 7 turns + jr c, .UpdateStatus +; Otherwise, no status + xor a + +.UpdateStatus + ld hl, EnemyMonStatus + ld [hli], a + +; Unused byte + xor a + ld [hli], a + +; Full HP... + ld a, [EnemyMonMaxHPHi] + ld [hli], a + ld a, [EnemyMonMaxHPLo] + ld [hl], a + +; ...unless it's a RoamMon + ld a, [BattleType] + cp a, BATTLETYPE_ROAMING + jr nz, .Moves + +; Grab HP + call GetRoamMonHP + ld a, [hl] +; Check if it's been initialized again + and a + jr z, .InitRoamHP +; Update from the struct if it has + ld a, [hl] + ld [EnemyMonHPLo], a + jr .Moves + +.InitRoamHP +; HP only uses the lo byte in the RoamMon struct since +; Raikou/Entei/Suicune will have < 256 hp at level 40 + ld a, [EnemyMonHPLo] + ld [hl], a + jr .Moves + + +.OpponentParty +; Get HP from the party struct + ld hl, (PartyMon1CurHP + 1) - PartyMon1 + OTPartyMon1 + ld a, [CurPartyMon] + call GetPartyLocation + ld a, [hld] + ld [EnemyMonHPLo], a + ld a, [hld] + ld [EnemyMonHPHi], a + +; Make sure everything knows which monster the opponent is using + ld a, [CurPartyMon] + ld [CurOTMon], a + +; Get status from the party struct + dec hl + ld a, [hl] ; OTPartyMonStatus + ld [EnemyMonStatus], a + + +.Moves +; ???? + ld hl, BaseType1 + ld de, EnemyMonType1 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + +; Get moves + ld de, EnemyMonMoves +; Are we in a trainer battle? + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr nz, .WildMoves +; Then copy moves from the party struct + ld hl, OTPartyMon1Moves + ld a, [CurPartyMon] + call GetPartyLocation + ld bc, NUM_MOVES + call CopyBytes + jr .PP + +.WildMoves +; Clear EnemyMonMoves + xor a + ld h, d + ld l, e + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a +; Make sure the predef knows this isn't a partymon + ld [MagikarpLength], a +; Fill moves based on level + ld a, PREDEF_FILLMOVES + call Predef + +.PP +; Trainer battle? + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr z, .TrainerPP + +; Fill wild PP + ld hl, EnemyMonMoves + ld de, EnemyMonPP + ld a, PREDEF_FILLPP + call Predef + jr .Finish + +.TrainerPP +; Copy PP from the party struct + ld hl, OTPartyMon1PP + ld a, [CurPartyMon] + call GetPartyLocation + ld de, EnemyMonPP + ld bc, NUM_MOVES + call CopyBytes + +.Finish +; Only the first five base stats are copied... + ld hl, BaseStats + ld de, EnemyMonBaseStats + ld b, BaseSpecialDefense - BaseStats +.loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop + + ld a, [BaseCatchRate] + ld [de], a + inc de + + ld a, [BaseExp] + ld [de], a + + ld a, [TempEnemyMonSpecies] + ld [$d265], a + + call GetPokemonName + +; Did we catch it? + ld a, [IsInBattle] + and a + ret z + +; Update enemy nick + ld hl, StringBuffer1 + ld de, EnemyMonNick + ld bc, PKMN_NAME_LENGTH + call CopyBytes + +; Caught this mon + ld a, [TempEnemyMonSpecies] + dec a + ld c, a + ld b, 1 ; set + ld hl, PokedexSeen + ld a, PREDEF_FLAG + call Predef + + ld hl, EnemyMonStats + ld de, EnemyStats + ld bc, EnemyMonStatsEnd - EnemyMonStats + call CopyBytes + + ret +; 3eb38 + + +CheckSleepingTreeMon: ; 3eb38 +; Return carry if species is in the list +; for the current time of day + +; Don't do anything if this isn't a tree encounter + ld a, [BattleType] + cp a, BATTLETYPE_TREE + jr nz, .NotSleeping + +; Get list for the time of day + ld hl, .Morn + ld a, [TimeOfDay] + cp a, DAY + jr c, .Check + ld hl, .Day + jr z, .Check + ld hl, .Nite + +.Check + ld a, [TempEnemyMonSpecies] + ld de, 1 ; length of species id + call IsInArray +; If it's a match, the opponent is asleep + ret c + +.NotSleeping + and a + ret + +.Nite + db CATERPIE + db METAPOD + db BUTTERFREE + db WEEDLE + db KAKUNA + db BEEDRILL + db SPEAROW + db EKANS + db EXEGGCUTE + db LEDYBA + db AIPOM + db $ff ; end + +.Day + db VENONAT + db HOOTHOOT + db NOCTOWL + db SPINARAK + db HERACROSS + db $ff ; end + +.Morn + db VENONAT + db HOOTHOOT + db NOCTOWL + db SPINARAK + db HERACROSS + db $ff ; end +; 3eb75 + + +CheckUnownLetter: ; 3eb75 +; Return carry if the Unown letter hasn't been unlocked yet + + ld a, [UnlockedUnowns] + ld c, a + ld de, 0 + +.loop + +; Don't check this set unless it's been unlocked + srl c + jr nc, .next + +; Is our letter in the set? + ld hl, .LetterSets + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + + push de + ld a, [UnownLetter] + ld de, 1 + push bc + call IsInArray + pop bc + pop de + + jr c, .match + +.next +; Make sure we haven't gone past the end of the table + inc e + inc e + ld a, e + cp a, .Set1 - .LetterSets + jr c, .loop + +; Hasn't been unlocked, or the letter is invalid + scf + ret + +.match +; Valid letter + and a + ret + +.LetterSets + dw .Set1 + dw .Set2 + dw .Set3 + dw .Set4 + +.Set1 + ; A B C D E F G H I J K + db 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, $ff +.Set2 + ; L M N O P Q R + db 12, 13, 14, 15, 16, 17, 18, $ff +.Set3 + ; S T U V W + db 19, 20, 21, 22, 23, $ff +.Set4 + ; X Y Z + db 24, 25, 26, $ff + +; 3ebc7 + + +Function3ebc7: ; 3ebc7 + push bc + ld a, [BattleMonLevel] + ld b, a + ld a, [EnemyMonLevel] + ld [BattleMonLevel], a + ld a, b + ld [EnemyMonLevel], a + pop bc + ret +; 3ebd8 + +Function3ebd8: ; 3ebd8 + xor a + ld [TempEnemyMonSpecies], a + call Function3ee27 + ld a, [OtherTrainerClass] + ld [TrainerClass], a + ld de, VTiles2 + callab Function5120d + ld hl, $c4b3 + ld c, $0 +.asm_3ebf3 + inc c + ld a, c + cp $7 + ret z + xor a + ld [hBGMapMode], a + ld [hBGMapThird], a + ld d, $0 + push bc + push hl +.asm_3ec01 + call Function3ec1a + inc hl + ld a, $7 + add d + ld d, a + dec c + jr nz, .asm_3ec01 + ld a, $1 + ld [hBGMapMode], a + ld c, $4 + call DelayFrames + pop hl + pop bc + dec hl + jr .asm_3ebf3 +; 3ec1a + +Function3ec1a: ; 3ec1a + push hl + push de + push bc + ld e, $7 +.asm_3ec1f + ld [hl], d + ld bc, $0014 + add hl, bc + inc d + dec e + jr nz, .asm_3ec1f + pop bc + pop de + pop hl + ret +; 3ec2c + + +Function3ec2c: ; 3ec2c + ld a, 1 + jr Function3ec31 +; 3ec30 + +Function3ec30: ; 3ec30 + xor a +; 3ec31 + +Function3ec31: ; 3ec31 + ld [hBattleTurn], a + call Function3ec39 + jp Function3ec76 +; 3ec39 + +Function3ec39: ; 3ec39 + ld a, [hBattleTurn] + and a + jr z, .asm_3ec5a + ld a, [BattleMonStatus] + and $40 + ret z + ld hl, $c645 + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec58 + ld b, $1 + +.asm_3ec58 + ld [hl], b + ret + +.asm_3ec5a + ld a, [EnemyMonStatus] + and $40 + ret z + ld hl, $d21f + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec74 + ld b, $1 + +.asm_3ec74 + ld [hl], b + ret +; 3ec76 + +Function3ec76: ; 3ec76 + ld a, [hBattleTurn] + and a + jr z, .asm_3ec93 + ld a, [BattleMonStatus] + and $10 + ret z + ld hl, $c641 + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec91 + ld b, $1 + +.asm_3ec91 + ld [hl], b + ret + +.asm_3ec93 + ld a, [EnemyMonStatus] + and $10 + ret z + ld hl, $d21b + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3eca9 + ld b, $1 + +.asm_3eca9 + ld [hl], b + ret +; 3ecab + +Function3ecab: ; 3ecab + ld c, 0 +.asm_3ecad + call Function3ecb7 + inc c + ld a, c + cp 5 + jr nz, .asm_3ecad + ret +; 3ecb7 + +Function3ecb7: ; 3ecb7 + push bc + push bc + ld a, [$d265] + and a + ld a, c + ld hl, BattleMonAtk + ld de, PlayerStats + ld bc, PlayerAtkLevel + jr z, .asm_3ecd2 + ld hl, EnemyMonAtk + ld de, EnemyStats + ld bc, EnemyAtkLevel + +.asm_3ecd2 + add c + ld c, a + jr nc, .asm_3ecd7 + inc b +.asm_3ecd7 + ld a, [bc] + pop bc + ld b, a + push bc + sla c + ld b, 0 + add hl, bc + ld a, c + add e + ld e, a + jr nc, .asm_3ece6 + inc d +.asm_3ece6 + pop bc + push hl + ld hl, .StatLevelMultipliers + dec b + sla b + ld c, b + ld b, 0 + add hl, bc + xor a + ld [hMultiplicand], a + ld a, [de] + ld [$ffb5], a + inc de + ld a, [de] + ld [$ffb6], a + ld a, [hli] + ld [hMultiplier], a + call Multiply + ld a, [hl] + ld [hMultiplier], a + ld b, $4 + call Divide + pop hl + +; Cap at 999. + ld a, [$ffb6] + sub 999 % $100 + ld a, [$ffb5] + sbc 999 / $100 + jp c, .asm_3ed1e + + ld a, 999 / $100 + ld [$ffb5], a + ld a, 999 % $100 + ld [$ffb6], a + +.asm_3ed1e + ld a, [$ffb5] + ld [hli], a + ld b, a + ld a, [$ffb6] + ld [hl], a + or b + jr nz, .asm_3ed29 + inc [hl] + +.asm_3ed29 + pop bc + ret +; 3ed2b + +.StatLevelMultipliers +; / + db 25, 100 ; 25% + db 28, 100 ; 28% + db 33, 100 ; 33% + db 40, 100 ; 40% + db 50, 100 ; 50% + db 66, 100 ; 66% + + db 1, 1 ; 100% + + db 15, 10 ; 150% + db 2, 1 ; 200% + db 25, 10 ; 250% + db 3, 1 ; 300% + db 35, 10 ; 350% + db 4, 1 ; 400% +; 3ed45 + + +BadgeStatBoosts: ; 3ed45 +; Raise BattleMon stats depending on which badges have been obtained. + +; Every other badge boosts a stat, starting from the first. + +; ZephyrBadge: Attack +; PlainBadge: Speed +; MineralBadge: Defense +; GlacierBadge: Special Attack +; RisingBadge: Special Defense + +; The boosted stats are in order, except PlainBadge and MineralBadge's boosts are swapped. + + ld a, [InLinkBattle] + and a + ret nz + + ld a, [$cfc0] + and a + ret nz + + ld a, [JohtoBadges] + +; Swap badges 3 (PlainBadge) and 5 (MineralBadge). + ld d, a + and %00000100 + add a + add a + ld b, a + ld a, d + and %00010000 + rrca + rrca + ld c, a + ld a, d + and %11101011 + or b + or c + ld b, a + + ld hl, BattleMonAtk + ld c, 4 +.CheckBadge + ld a, b + srl b + call c, BoostStat + inc hl + inc hl +; Check every other badge. + srl b + dec c + jr nz, .CheckBadge +; And the last one (RisingBadge) too. + srl a + call c, BoostStat + ret +; 3ed7c + + +BoostStat: ; 3ed7c +; Raise stat at hl by 1/8. + + ld a, [hli] + ld d, a + ld e, [hl] + srl d + rr e + srl d + rr e + srl d + rr e + ld a, [hl] + add e + ld [hld], a + ld a, [hl] + adc d + ld [hli], a + +; Cap at 999. + ld a, [hld] + sub 999 % $100 + ld a, [hl] + sbc 999 / $100 + ret c + ld a, 999 / $100 + ld [hli], a + ld a, 999 % $100 + ld [hld], a + ret +; 3ed9f + + +Function3ed9f: ; 3ed9f + callab Functionfb4f2 + ret +; 3eda6 + +Function3eda6: ; 3eda6 + callab Functionfb50d + ret +; 3edad + + +Function3edad: ; 3edad + ld de, $4ac0 + ld hl, $96c0 + ld bc, $3e04 + call Get1bpp + ld de, $4ae0 + ld hl, $9730 + ld bc, $3e06 + call Get1bpp + ld de, $4b10 + ld hl, $9550 + ld bc, $3e08 + jp Get2bpp +; 3edd1 + + +EmptyBattleTextBox: ; 3edd1 + ld hl, .empty + jp BattleTextBox +.empty + db "@" +; 3edd8 + + +_BattleRandom: ; 3edd8 +; If the normal RNG is used in a link battle it'll desync. +; To circumvent this a shared PRNG is used instead. + +; But if we're in a non-link battle we're safe to use it + ld a, [InLinkBattle] + and a + jp z, Random + +; The PRNG operates in streams of 10 values. + +; Which value are we trying to pull? + push hl + push bc + ld a, [LinkBattleRNCount] + ld c, a + ld b, 0 + ld hl, LinkBattleRNs + add hl, bc + inc a + ld [LinkBattleRNCount], a + +; If we haven't hit the end yet, we're good + cp 10 - 1 ; Exclude last value. See the closing comment + ld a, [hl] + pop bc + pop hl + ret c + +; If we have, we have to generate new pseudorandom data +; Instead of having multiple PRNGs, ten seeds are used + push hl + push bc + push af + +; Reset count to 0 + xor a + ld [LinkBattleRNCount], a + ld hl, LinkBattleRNs + ld b, 10 ; number of seeds + +; Generate next number in the sequence for each seed +; The algorithm takes the form *5 + 1 % 256 +.loop + ; get last # + ld a, [hl] + + ; a * 5 + 1 + ld c, a + add a + add a + add c + inc a + + ; update # + ld [hli], a + dec b + jr nz, .loop + +; This has the side effect of pulling the last value first, +; then wrapping around. As a result, when we check to see if +; we've reached the end, we check the one before it. + + pop af + pop bc + pop hl + ret +; 3ee0f + + +Function3ee0f: ; 3ee0f + ld a, BATTLE_VARS_SUBSTATUS3 + call GetBattleVar + and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND + ret nz +; 3ee17 + +Function3ee17: ; 3ee17 + ld a, e + ld [FXAnimIDLo], a + ld a, d + ld [FXAnimIDHi], a + call WaitBGMap + ld a, $37 + jp Predef +; 3ee27 + +Function3ee27: ; 3ee27 + push af + push bc + push de + push hl + ld b, $1 + call GetSGBLayout + call Function32f9 + call DelayFrame + pop hl + pop de + pop bc + pop af + ret +; 3ee3b + + +Function3ee3b: ; 3ee3b + ld a, [InLinkBattle] + and a + ret nz + ld a, [$cfc0] + bit 0, a + ret nz + call Function3f0d4 + xor a + ld [CurPartyMon], a + ld bc, PartyMon1Species + +.asm_3ee50 + ld hl, $0022 + add hl, bc + ld a, [hli] + or [hl] + jp z, .asm_3f0b9 + push bc + ld hl, $c664 + ld a, [CurPartyMon] + ld c, a + ld b, $2 + ld d, $0 + ld a, $3 + call Predef + ld a, c + and a + pop bc + jp z, .asm_3f0b9 + ld hl, $000c + add hl, bc + ld d, h + ld e, l + ld hl, EnemyMonType2 + push bc + ld c, $5 +.asm_3ee7c + inc hl + ld a, [de] + add [hl] + ld [de], a + jr nc, .asm_3ee89 + dec de + ld a, [de] + inc a + jr z, .asm_3eea4 + ld [de], a + inc de + +.asm_3ee89 + push hl + push bc + ld a, $1c + call GetPartyParamLocation + ld a, [hl] + and a + pop bc + pop hl + jr z, .asm_3eea9 + ld a, [de] + add [hl] + ld [de], a + jr nc, .asm_3eea9 + dec de + ld a, [de] + inc a + jr z, .asm_3eea4 + ld [de], a + inc de + jr .asm_3eea9 + +.asm_3eea4 + ld a, $ff + ld [de], a + inc de + ld [de], a + +.asm_3eea9 + inc de + inc de + dec c + jr nz, .asm_3ee7c + xor a + ld [hMultiplicand], a + ld [$ffb5], a + ld a, [EnemyMonBaseExp] + ld [$ffb6], a + ld a, [EnemyMonLevel] + ld [hMultiplier], a + call Multiply + ld a, $7 + ld [hMultiplier], a + ld b, $4 + call Divide + pop bc + ld hl, $0006 + add hl, bc + ld a, [PlayerID] + cp [hl] + jr nz, .asm_3eedd + inc hl + ld a, [$d47c] + cp [hl] + ld a, $0 + jr z, .asm_3eee2 + +.asm_3eedd + call Function3f106 + ld a, $1 + +.asm_3eee2 + ld [$d088], a + ld a, [IsInBattle] + dec a + call nz, Function3f106 + push bc + ld a, $1 + call GetPartyParamLocation + ld a, [hl] + cp $7e + call z, Function3f106 + ld a, [$ffb6] + ld [$d087], a + ld a, [$ffb5] + ld [StringBuffer2], a + ld a, [CurPartyMon] + ld hl, PartyMon1Nickname + call GetNick + ld hl, UnknownText_0x3f11b + call BattleTextBox + ld a, [$d087] + ld [$ffb6], a + ld a, [StringBuffer2] + ld [$ffb5], a + pop bc + call Function3f136 + push bc + call Function309d + pop bc + ld hl, $000a + add hl, bc + ld d, [hl] + ld a, [$ffb6] + add d + ld [hld], a + ld d, [hl] + ld a, [$ffb5] + adc d + ld [hl], a + jr nc, .asm_3ef3d + dec hl + inc [hl] + jr nz, .asm_3ef3d + ld a, $ff + ld [hli], a + ld [hli], a + ld [hl], a + +.asm_3ef3d + ld a, [CurPartyMon] + ld e, a + ld d, $0 + ld hl, PartySpecies + add hl, de + ld a, [hl] + ld [CurSpecies], a + call GetBaseData + push bc + ld d, $64 + callab Function50e47 + pop bc + ld hl, $000a + add hl, bc + push bc + ld a, [hMultiplicand] + ld b, a + ld a, [$ffb5] + ld c, a + ld a, [$ffb6] + ld d, a + ld a, [hld] + sub d + ld a, [hld] + sbc c + ld a, [hl] + sbc b + jr c, .asm_3ef74 + ld a, b + ld [hli], a + ld a, c + ld [hli], a + ld a, d + ld [hld], a + +.asm_3ef74 + xor a + ld [MonType], a + ld a, $1f + call Predef + callab Function50e1b + pop bc + ld hl, $001f + add hl, bc + ld a, [hl] + cp $64 + jp nc, .asm_3f0b9 + cp d + jp z, .asm_3f0b9 + ld [$c719], a + ld a, [CurPartyLevel] + push af + ld a, d + ld [CurPartyLevel], a + ld [hl], a + ld hl, $0000 + add hl, bc + ld a, [hl] + ld [CurSpecies], a + ld [$d265], a + call GetBaseData + ld hl, $0025 + add hl, bc + ld a, [hld] + ld e, a + ld d, [hl] + push de + ld hl, $0024 + add hl, bc + ld d, h + ld e, l + ld hl, $000a + add hl, bc + push bc + ld b, $1 + ld a, $c + call Predef + pop bc + pop de + ld hl, $0025 + add hl, bc + ld a, [hld] + sub e + ld e, a + ld a, [hl] + sbc d + ld d, a + dec hl + ld a, [hl] + add e + ld [hld], a + ld a, [hl] + adc d + ld [hl], a + ld a, [CurBattleMon] + ld d, a + ld a, [CurPartyMon] + cp d + jr nz, .asm_3f035 + ld de, BattleMonHP + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld de, BattleMonMaxHP + push bc + ld bc, $000c + call CopyBytes + pop bc + ld hl, $001f + add hl, bc + ld a, [hl] + ld [BattleMonLevel], a + ld a, [PlayerSubStatus5] + bit 3, a + jr nz, .asm_3f012 + ld hl, $0026 + add hl, bc + ld de, PlayerStats + ld bc, $000a + call CopyBytes + +.asm_3f012 + xor a + ld [$d265], a + call Function3ecab + callab Function3ec2c + callab BadgeStatBoosts + callab Function3df48 + call EmptyBattleTextBox + call Function309d + ld a, $1 + ld [hBGMapMode], a + +.asm_3f035 + callba Function2709e + ld a, [CurBattleMon] + ld b, a + ld a, [CurPartyMon] + cp b + jr z, .asm_3f057 + ld de, SFX_HIT_END_OF_EXP_BAR + call PlaySFX + call WaitSFX + ld hl, BattleText_0x80c9c + call StdBattleTextBox + call Function309d + +.asm_3f057 + xor a + ld [MonType], a + ld a, $1f + call Predef + ld hl, $c4a9 + ld b, $a + ld c, $9 + call TextBox + ld hl, $c4bf + ld bc, $0004 + ld a, $28 + call Predef + ld c, $1e + call DelayFrames + call Functiona80 + call Function30b4 + xor a + ld [MonType], a + ld a, [CurSpecies] + ld [$d265], a + ld a, [CurPartyLevel] + push af + ld c, a + ld a, [$c719] + ld b, a + +.asm_3f093 + inc b + ld a, b + ld [CurPartyLevel], a + push bc + ld a, $1a + call Predef + pop bc + ld a, b + cp c + jr nz, .asm_3f093 + pop af + ld [CurPartyLevel], a + ld hl, EvolvableFlags + ld a, [CurPartyMon] + ld c, a + ld b, $1 + ld a, $3 + call Predef + pop af + ld [CurPartyLevel], a + +.asm_3f0b9 + ld a, [PartyCount] + ld b, a + ld a, [CurPartyMon] + inc a + cp b + jr z, .asm_3f0d1 + ld [CurPartyMon], a + ld a, $0 + call GetPartyParamLocation + ld b, h + ld c, l + jp .asm_3ee50 + +.asm_3f0d1 + jp Function3d57a +; 3f0d4 + +Function3f0d4: ; 3f0d4 + ld a, [$c664] + ld b, a + ld c, $6 + ld d, $0 +.asm_3f0dc + xor a + srl b + adc d + ld d, a + dec c + jr nz, .asm_3f0dc + cp $2 + ret c + ld [$d265], a + ld hl, EnemyMonBaseStats + ld c, $7 +.asm_3f0ef + xor a + ld [hProduct], a + ld a, [hl] + ld [hMultiplicand], a + ld a, [$d265] + ld [hMultiplier], a + ld b, $2 + call Divide + ld a, [$ffb6] + ld [hli], a + dec c + jr nz, .asm_3f0ef + ret +; 3f106 + +Function3f106: ; 3f106 + push bc + ld a, [$ffb5] + ld b, a + ld a, [$ffb6] + ld c, a + srl b + rr c + add c + ld [$ffb6], a + ld a, [$ffb5] + adc b + ld [$ffb5], a + pop bc + ret +; 3f11b + +UnknownText_0x3f11b: ; 3f11b + text_jump UnknownText_0x1c029c + start_asm + ld hl, UnknownText_0x3f131 + ld a, [$d088] ; IsTradedMon + and a + ret z + ld hl, UnknownText_0x3f12c + ret +; 3f12c + +UnknownText_0x3f12c: ; 3f12c + text_jump UnknownText_0x1c02a9 + db "@" +; 3f131 + +UnknownText_0x3f131: ; 3f131 + text_jump UnknownText_0x1c02c9 + db "@" +; 3f136 + + +Function3f136: ; 3f136 + + push bc + + ld hl, CurPartyMon + ld a, [CurBattleMon] + cp [hl] + jp nz, .asm_3f219 + + ld a, [BattleMonLevel] + cp MAX_LEVEL + jp nc, .asm_3f219 + + ld a, [$ffb6] + ld [$d004], a + push af + ld a, [$ffb5] + ld [$d003], a + push af + xor a + ld [DefaultFlypoint], a + xor a + ld [MonType], a + ld a, $1f + call Predef + ld a, [TempMonLevel] + ld b, a + ld e, a + push de + ld de, $d118 + call Function3f39c + push bc + ld hl, $d118 + ld a, [$d004] + add [hl] + ld [hld], a + ld a, [$d003] + adc [hl] + ld [hld], a + jr nc, .asm_3f186 + inc [hl] + jr nz, .asm_3f186 + ld a, $ff + ld [hli], a + ld [hli], a + ld [hl], a + +.asm_3f186 + ld d, $64 + callab Function50e47 + ld a, [hMultiplicand] + ld b, a + ld a, [$ffb5] + ld c, a + ld a, [$ffb6] + ld d, a + ld hl, $d118 + ld a, [hld] + sub d + ld a, [hld] + sbc c + ld a, [hl] + sbc b + jr c, .asm_3f1a8 + ld a, b + ld [hli], a + ld a, c + ld [hli], a + ld a, d + ld [hld], a + +.asm_3f1a8 + callab Function50e1b + ld a, d + pop bc + pop de + ld d, a + cp e + jr nc, .asm_3f1b7 + ld a, e + ld d, a + +.asm_3f1b7 + ld a, e + cp $64 + jr nc, .asm_3f1ff + cp d + jr z, .asm_3f1ff + inc a + ld [TempMonLevel], a + ld [CurPartyLevel], a + ld [BattleMonLevel], a + push de + call Function3f21b + ld c, $40 + call Function3f22c + call PrintPlayerHUD + ld hl, BattleMonNick + ld de, StringBuffer1 + ld bc, $000b + call CopyBytes + call Function3dfe + ld de, SFX_HIT_END_OF_EXP_BAR + call PlaySFX + callba Function8e79d + call WaitSFX + ld hl, BattleText_0x80c9c + call StdBattleTextBox + pop de + inc e + ld b, $0 + jr .asm_3f1b7 + +.asm_3f1ff + push bc + ld b, d + ld de, $d118 + call Function3f39c + ld a, b + pop bc + ld c, a + call Function3f21b + call Function3f22c + call Function3dfe + pop af + ld [$ffb5], a + pop af + ld [$ffb6], a + +.asm_3f219 + pop bc + ret +; 3f21b + +Function3f21b: ; 3f21b + push bc + call WaitSFX + ld de, SFX_EXP_BAR + call PlaySFX + ld c, 10 + call DelayFrames + pop bc + ret +; 3f22c + +Function3f22c: ; 3f22c + ld d, $3 + dec b +.asm_3f22f + inc b + push bc + push de + ld hl, $c58d + call Function3f41c + pop de + ld a, $1 + ld [hBGMapMode], a + ld c, d + call DelayFrames + xor a + ld [hBGMapMode], a + pop bc + ld a, c + cp b + jr z, .asm_3f268 + inc b + push bc + push de + ld hl, $c58d + call Function3f41c + pop de + ld a, $1 + ld [hBGMapMode], a + ld c, d + call DelayFrames + xor a + ld [hBGMapMode], a + dec d + jr nz, .asm_3f263 + ld d, $1 + +.asm_3f263 + pop bc + ld a, c + cp b + jr nz, .asm_3f22f + +.asm_3f268 + ld a, $1 + ld [hBGMapMode], a + ret +; 3f26d + + + +Function3f26d: ; 3f26d +; SendOutMonText? + + ld a, [InLinkBattle] + and a + jr z, .asm_3f27c + ld hl, UnknownText_0x3f2d1 + ld a, [$d264] + and a + jr nz, .asm_3f2ce + +.asm_3f27c + ld hl, EnemyMonHPHi + ld a, [hli] + or [hl] + ld hl, UnknownText_0x3f2d1 + jr z, .asm_3f2ce + xor a + ld [hMultiplicand], a + ld hl, EnemyMonHPHi + ld a, [hli] + ld [$c6ea], a + ld [$ffb5], a + ld a, [hl] + ld [$c6eb], a + ld [$ffb6], a + ld a, $19 + ld [hMultiplier], a + call Multiply + ld hl, EnemyMonMaxHPHi + ld a, [hli] + ld b, [hl] + srl a + rr b + srl a + rr b + ld a, b + ld b, $4 + ld [hMultiplier], a + call Divide + ld a, [$ffb6] + ld hl, UnknownText_0x3f2d1 + cp $46 + jr nc, .asm_3f2ce + ld hl, UnknownText_0x3f2d8 + cp $28 + jr nc, .asm_3f2ce + ld hl, UnknownText_0x3f2df + cp $a + jr nc, .asm_3f2ce + ld hl, UnknownText_0x3f2e6 + +.asm_3f2ce + jp BattleTextBox +; 3f2d1 + + +UnknownText_0x3f2d1: ; 3f2d1 + text_jump UnknownText_0x1c02df + start_asm + jr Function3f2eb +; 3f2d6 + +UnknownText_0x3f2d8: ; 3f2d8 + text_jump UnknownText_0x1c02e6 + start_asm + jr Function3f2eb +; 3f2dd + +UnknownText_0x3f2df: ; 3f2df + text_jump UnknownText_0x1c02f0 + start_asm + jr Function3f2eb +; 3f2e4 + +UnknownText_0x3f2e6: ; 3f2e6 + text_jump UnknownText_0x1c02fe + start_asm +; 3f2eb + +Function3f2eb: ; 3f2eb + ld hl, UnknownText_0x3f2ef + ret +; 3f2ef + +UnknownText_0x3f2ef: ; 3f2ef + text_jump UnknownText_0x1c0317 + db "@" +; 3f2f4 + + +Function3f2f4: ; 3f2f4 + ld hl, UnknownText_0x3f2fa + jp BattleTextBox +; 3f2fa + +UnknownText_0x3f2fa: ; 3f2fa + text_jump UnknownText_0x1c031d + start_asm +; 3f2ff + +Function3f2ff: ; 3f2ff + push de + push bc + ld hl, EnemyMonHPLo + ld de, $c6eb + ld b, [hl] + dec hl + ld a, [de] + sub b + ld [$ffb6], a + dec de + ld b, [hl] + ld a, [de] + sbc b + ld [$ffb5], a + ld a, $19 + ld [hMultiplier], a + call Multiply + ld hl, EnemyMonMaxHPHi + ld a, [hli] + ld b, [hl] + srl a + rr b + srl a + rr b + ld a, b + ld b, $4 + ld [hMultiplier], a + call Divide + pop bc + pop de + ld a, [$ffb6] + ld hl, UnknownText_0x3f348 + and a + ret z + ld hl, UnknownText_0x3f35b + cp $1e + ret c + ld hl, UnknownText_0x3f34d + cp $46 + ret c + ld hl, UnknownText_0x3f352 + ret +; 3f348 + +UnknownText_0x3f348: ; 3f348 + text_jump UnknownText_0x1c0324 + db "@" +; 3f34d + +UnknownText_0x3f34d: ; 3f34d + text_jump UnknownText_0x1c0340 + db "@" +; 3f352 + +UnknownText_0x3f352: ; 3f352 + text_jump UnknownText_0x1c0352 + db "@" +; 3f357 + +Function3f357: ; 3f357 + ld hl, UnknownText_0x3f35b + ret +; 3f35b + +UnknownText_0x3f35b: ; 3f35b + text_jump UnknownText_0x1c0366 + db "@" +; 3f360 + + +Function3f360: ; 3f360 + ld hl, $c6f0 + ld a, [hl] + and a + jr z, .asm_3f36d + dec [hl] + ld hl, BattleText_0x80cba + jr .asm_3f388 + +.asm_3f36d + dec hl + ld a, [hl] + and a + ret z + dec [hl] + ld hl, BattleText_0x80cd1 + jr nz, .asm_3f388 + push hl + ld a, [EnemyMonSpecies] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseCatchRate] + ld [EnemyMonCatchRate], a + pop hl + +.asm_3f388 + push hl + call Function30b4 + pop hl + jp StdBattleTextBox +; 3f390 + + +FillInExpBar: ; 3f390 + push hl + call Function3f39c + pop hl + ld de, $0007 + add hl, de + jp Function3f41c +; 3f39c + +Function3f39c: ; 3f39c + push de + ld d, b + push de + callab Function50e47 + pop de + ld hl, hMultiplicand + ld a, [hli] + push af + ld a, [hli] + push af + ld a, [hl] + push af + inc d + callab Function50e47 + ld hl, $ffb6 + ld a, [hl] + ld [$ffba], a + pop bc + sub b + ld [hld], a + ld a, [hl] + ld [$ffb9], a + pop bc + sbc b + ld [hld], a + ld a, [hl] + ld [hMathBuffer], a + pop bc + sbc b + ld [hl], a + pop de + ld hl, $ffb5 + ld a, [hli] + push af + ld a, [hl] + push af + ld a, [de] + dec de + ld c, a + ld a, [$ffba] + sub c + ld [hld], a + ld a, [de] + dec de + ld b, a + ld a, [$ffb9] + sbc b + ld [hld], a + ld a, [de] + ld c, a + ld a, [hMathBuffer] + sbc c + ld [hld], a + xor a + ld [hl], a + ld a, $40 + ld [hMultiplier], a + call Multiply + pop af + ld c, a + pop af + ld b, a +.asm_3f3f4 + ld a, b + and a + jr z, .asm_3f40c + srl b + rr c + ld hl, hProduct + srl [hl] + inc hl + rr [hl] + inc hl + rr [hl] + inc hl + rr [hl] + jr .asm_3f3f4 + +.asm_3f40c + ld a, c + ld [hMultiplier], a + ld b, $4 + call Divide + ld a, [$ffb6] + ld b, a + ld a, $40 + sub b + ld b, a + ret +; 3f41c + +Function3f41c: ; 3f41c + ld c, $8 +.asm_3f41e + ld a, b + sub $8 + jr c, .asm_3f42c + ld b, a + ld a, $6a + ld [hld], a + dec c + jr z, .asm_3f43c + jr .asm_3f41e + +.asm_3f42c + add $8 + jr z, .asm_3f434 + add $54 + jr .asm_3f436 + +.asm_3f434 + ld a, $62 + +.asm_3f436 + ld [hld], a + ld a, $62 + dec c + jr nz, .asm_3f434 + +.asm_3f43c + ret +; 3f43d + +Function3f43d: ; 3f43d + ld a, [PlayerSubStatus4] + bit 4, a + ld hl, BattleAnimCmd_DD + jr nz, asm_3f46f +Function3f447: ; 3f447 + ld a, [$c6fe] + and a + ld hl, BattleAnimCmd_E2 + jr nz, asm_3f46f + ld a, [CurPartySpecies] + push af + ld a, [BattleMonSpecies] + ld [CurPartySpecies], a + ld hl, BattleMonAtkDefDV + ld a, $2d + call Predef + ld de, $9310 + ld a, $3d + call Predef + pop af + ld [CurPartySpecies], a + ret + +asm_3f46f + ld a, [hBattleTurn] + push af + xor a + ld [hBattleTurn], a + ld a, BANK(BattleAnimCommands) + rst FarCall + pop af + ld [hBattleTurn], a + ret +; 3f47c + +Function3f47c: ; 3f47c + ld a, [EnemySubStatus4] + bit 4, a + ld hl, BattleAnimCmd_DD + jr nz, asm_3f4b4 +Function3f486: ; 3f486 + ld a, [$c6fa] + and a + ld hl, BattleAnimCmd_E2 + jr nz, asm_3f4b4 + ld a, [CurPartySpecies] + push af + ld a, [EnemyMonSpecies] + ld [CurSpecies], a + ld [CurPartySpecies], a + call GetBaseData + ld hl, EnemyMonAtkDefDV + ld a, $2d + call Predef + ld de, VTiles2 + ld a, $3e + call Predef + pop af + ld [CurPartySpecies], a + ret + +asm_3f4b4 + ld a, [hBattleTurn] + push af + call SetEnemyTurn + ld a, BANK(BattleAnimCommands) + rst FarCall + pop af + ld [hBattleTurn], a + ret +; 3f4c1 + + +StartBattle: ; 3f4c1 + ld a, [PartyCount] + and a + ret z + ld a, [TimeOfDayPal] + push af + call Function3f4dd + call Function3c000 + call Function3f69e + pop af + ld [TimeOfDayPal], a + scf + ret +; 3f4d9 + + +Function3f4d9: ; 3f4d9 + call Function3c000 + ret +; 3f4dd + + +Function3f4dd: ; 3f4dd + callba Function106050 + call Function3f54e + xor a + ld [TempBattleMonSpecies], a + ld [$d0d2], a + xor a + ld [$ffde], a + callba PlayBattleMusic + callba Function2ee18 + callba Function2ee2f + call Function2ed3 + callba ClearBattleRAM + call Function3f55e + call Function3f568 + ld b, $0 + call GetSGBLayout + ld hl, rLCDC + res 6, [hl] + call Function3fb6c + call BattleStartMessage + ld hl, rLCDC + set 6, [hl] + xor a + ld [hBGMapMode], a + call EmptyBattleTextBox + hlcoord 9, 7 + ld bc, 5 << 8 + 11 + call ClearBox + hlcoord 1, 0 + ld bc, 4 << 8 + 10 + call ClearBox + call ClearSprites + ld a, [IsInBattle] + cp $1 + call z, Function3e036 + ld a, $1 + ld [hBGMapMode], a + ret +; 3f54e + +Function3f54e: ; 3f54e + ld a, [OtherTrainerClass] + and a + jr nz, .asm_3f55a + ld a, [$d22e] + ld [CurPartySpecies], a + +.asm_3f55a + ld [TempEnemyMonSpecies], a + ret +; 3f55e + +Function3f55e: ; 3f55e + ld a, [OtherTrainerClass] + and a + jp nz, Function3f594 + jp Function3f607 +; 3f568 + +Function3f568: ; 3f568 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, $d000 + ld bc, VBlank5 + ld a, $2 + call ByteFill + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld de, $d000 + ld hl, VBGMap0 + ld bc, $0f40 + call Request2bpp + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + ret +; 3f594 + +Function3f594: ; 3f594 + ld [TrainerClass], a + callba Function10606a + xor a + ld [TempEnemyMonSpecies], a + callab Function3957b + callab Function39771 + ld a, [TrainerClass] + cp $9 + jr nz, .asm_3f5b8 + xor a + ld [OTPartyMon1Item], a + +.asm_3f5b8 + ld de, VTiles2 + callab Function5120d + xor a + ld [$ffad], a + dec a + ld [$c6e6], a + ld hl, $c4ac + ld bc, $0707 + ld a, $13 + call Predef + ld a, $ff + ld [CurOTMon], a + ld a, $2 + ld [IsInBattle], a + call IsJohtoGymLeader + jr nc, .asm_3f606 + xor a + ld [CurPartyMon], a + ld a, [PartyCount] + ld b, a +.asm_3f5ea + push bc + ld a, $22 + call GetPartyParamLocation + ld a, [hli] + or [hl] + jr z, .asm_3f5fc + ld c, $4 + callab ChangeHappiness + +.asm_3f5fc + pop bc + dec b + jr z, .asm_3f606 + ld hl, CurPartyMon + inc [hl] + jr .asm_3f5ea + +.asm_3f606 + ret +; 3f607 + +Function3f607: ; 3f607 + ld a, $1 + ld [IsInBattle], a + callba Function10605d + call LoadEnemyMon + ld hl, EnemyMonMove1 + ld de, $c735 + ld bc, $0004 + call CopyBytes + ld hl, EnemyMonPPMove1 + ld de, $c739 + ld bc, $0004 + call CopyBytes + ld hl, EnemyMonAtkDefDV + ld a, $2d + call Predef + ld a, [CurPartySpecies] + cp $c9 + jr nz, .asm_3f648 + ld a, [$def4] + and a + jr nz, .asm_3f648 + ld a, [UnownLetter] + ld [$def4], a + +.asm_3f648 + ld de, VTiles2 + ld a, $3e + call Predef + xor a + ld [TrainerClass], a + ld [$ffad], a + ld hl, $c4ac + ld bc, $0707 + ld a, $13 + call Predef + ret +; 3f662 + +Function3f662: ; 3f662 + ld hl, EnemyMonMove1 + ld de, $d25e + ld b, $4 +.asm_3f66a + ld a, [de] + inc de + ld [hli], a + and a + jr z, .asm_3f690 + push bc + push hl + push hl + dec a + ld hl, $5b00 + ld bc, $0007 + call AddNTimes + ld a, $10 + call GetFarByte + pop hl + ld bc, $0005 + add hl, bc + ld [hl], a + pop hl + pop bc + dec b + jr nz, .asm_3f66a + ret + +.asm_3f68e + xor a + ld [hli], a + +.asm_3f690 + push bc + push hl + ld bc, $0005 + add hl, bc + xor a + ld [hl], a + pop hl + pop bc + dec b + jr nz, .asm_3f68e + ret +; 3f69e + + +Function3f69e: ; 3f69e + call Function3f6a5 + call Function3f6d0 + ret +; 3f6a5 + +Function3f6a5: ; 3f6a5 + ld a, [InLinkBattle] + and a + jr z, .asm_3f6b7 + call Function3f759 + ld c, $96 + call DelayFrames + call Function3f77c + ret + +.asm_3f6b7 + ld a, [$d0ee] + and $f + ret nz + call Function3f71d + xor a + ld [$d1e9], a + ld a, $1c + call Predef + callba Function2ed44 + ret +; 3f6d0 + +Function3f6d0: ; 3f6d0 + call Function3f998 + xor a + ld [Danger], a + ld [IsInBattle], a + ld [BattleType], a + ld [AttackMissed], a + ld [$d22e], a + ld [OtherTrainerClass], a + ld [$d266], a + ld [$d267], a + ld [$d232], a + ld [$d0d8], a + ld [$d0da], a + ld [$d0d9], a + ld [$d0d2], a + ld [CurMoveNum], a + ld [$d0db], a + ld [$d0d6], a + ld [$d0e4], a + ld [$d0e0], a + ld [$d0df], a + ld [$d0e1], a + ld hl, PlayerSubStatus1 + ld b, $18 +.asm_3f715 + ld [hli], a + dec b + jr nz, .asm_3f715 + call WaitSFX + ret +; 3f71d + +Function3f71d: ; 3f71d + ld hl, $c6ec + ld a, [hli] + or [hl] + inc hl + or [hl] + ret z + ld a, [$c73d] + and a + jr z, .asm_3f73d + ld hl, $c6ee + sla [hl] + dec hl + rl [hl] + dec hl + rl [hl] + jr nc, .asm_3f73d + ld a, $ff + ld [hli], a + ld [hli], a + ld [hl], a + +.asm_3f73d + ld hl, $c6ee + ld de, $d850 + call Function3d0be + ld hl, BattleText_0x80730 + call StdBattleTextBox + ld a, [$cfc0] + bit 0, a + ret z + call ClearTileMap + call WhiteBGMap + ret +; 3f759 + +Function3f759: ; 3f759 + callba Function1060df + callba Function106187 + ld a, [CurOTMon] + ld hl, OTPartyMon1Status + call GetPartyLocation + ld a, [EnemyMonStatus] + ld [hl], a + call ClearTileMap + callba Function2c1b2 + ret +; 3f77c + +Function3f77c: ; 3f77c + callba Function3d2e0 + jp c, Function3f80f + call Function3f830 + jr nz, .asm_3f797 + ld hl, $cd2a + bit 4, [hl] + jr z, .asm_3f797 + callba Function2b930 + +.asm_3f797 + ld a, [$d0ee] + and $f + cp $1 + jr c, .asm_3f7ad + jr z, .asm_3f7b8 + callba Function106107 + ld de, .Draw + jr .asm_3f7c3 + +.asm_3f7ad + callba Function1060fb + ld de, .Win + jr .asm_3f7c3 + +.asm_3f7b8 + callba Function106101 + ld de, .Lose + jr .asm_3f7c3 + +.asm_3f7c3 + ld hl, $c546 + call PlaceString + callba Function106187 + ld c, $c8 + call DelayFrames + ld a, $1 + call GetSRAMBank + call Function3fa42 + call Function3f85f + call CloseSRAM + call Function3f830 + jr z, .asm_3f7ee + call Functiona80 + call ClearTileMap + ret + +.asm_3f7ee + ld c, $c8 + call DelayFrames + call ClearTileMap + ret +; 3f7f7 + +.Win + db "YOU WIN@" +.Lose + db "YOU LOSE@" +.Draw + db " DRAW@" +; 3f80f + + +Function3f80f: ; 3f80f + ld hl, $c546 + ld de, .Invalid + call PlaceString + ld c, $c8 + call DelayFrames + call ClearTileMap + ret +; 3f821 + +.Invalid + db "INVALID BATTLE@" +; 3f830 + + +Function3f830: ; 3f830 + ld a, [InLinkBattle] + cp $4 + ret +; 3f836 + + +Function3f836: ; 3f836 + ld a, $1 + call GetSRAMBank + call Function3f85f + call CloseSRAM + ld hl, AttrMap + xor a + ld bc, $0168 + call ByteFill + call Function3200 + ld b, $8 + call GetSGBLayout + call Function32f9 + ld c, $8 + call DelayFrames + call Functiona80 + ret +; 3f85f + + +Function3f85f: ; 3f85f + call ClearTileMap + call ClearSprites + call .asm_3f8e0 + ld hl, $c540 + ld b, $5 + ld de, $b268 +.asm_3f870 + push bc + push hl + push de + ld a, [de] + and a + jr z, .asm_3f8c9 + ld a, [$d4b4] + and a + jr z, .asm_3f8c9 + push hl + push hl + ld h, d + ld l, e + ld de, DefaultFlypoint + ld bc, $000a + call CopyBytes + ld a, $50 + ld [de], a + inc de + ld bc, $0006 + call CopyBytes + ld de, DefaultFlypoint + pop hl + call PlaceString + pop hl + ld de, $001a + add hl, de + push hl + ld de, $d00d + ld bc, $0204 + call PrintNum + pop hl + ld de, $0005 + add hl, de + push hl + ld de, $d00f + ld bc, $0204 + call PrintNum + pop hl + ld de, $0005 + add hl, de + ld de, $d011 + ld bc, $0204 + call PrintNum + jr .asm_3f8cf + +.asm_3f8c9 + ld de, .Format + call PlaceString + +.asm_3f8cf + pop hl + ld bc, $0012 + add hl, bc + ld d, h + ld e, l + pop hl + ld bc, $0028 + add hl, bc + pop bc + dec b + jr nz, .asm_3f870 + ret + +.asm_3f8e0 + ld hl, $c4a1 + ld de, .Record + call PlaceString + + ld hl, $c518 + ld de, .Result + call PlaceString + + ld hl, $c4c8 + ld de, .Total + call PlaceString + + ld hl, $c4f6 + ld de, $b260 + call .asm_3f92b + jr c, .asm_3f92a + + ld bc, $0204 + call PrintNum + + ld hl, $c4fb + ld de, $b262 + call .asm_3f92b + + ld bc, $0204 + call PrintNum + + ld hl, $c500 + ld de, $b264 + call .asm_3f92b + + ld bc, $0204 + call PrintNum + +.asm_3f92a + ret + +.asm_3f92b + ld a, [$d4b4] + and a + ret nz + ld de, .Scores + call PlaceString + scf + ret +; 3f938 + +.Scores + db " 0 0 0@" +; 3f947 + +.Format ; 3f947 + db " --- ", $22, " - - -@" +.Record ; 3f964 + db $52, "'s RECORD@" +.Result ; 3f96e + db "RESULT WIN LOSE DRAW@" +.Total ; 3f983 + db "TOTAL WIN LOSE DRAW@" +; 3f998 + + +Function3f998: ; 3f998 + ld a, [BattleType] + cp BATTLETYPE_ROAMING + jr nz, .asm_3f9c4 + ld a, [$d0ee] + and $f + jr z, .asm_3f9af + call GetRoamMonHP + ld a, [EnemyMonHPLo] + ld [hl], a + jr .asm_3f9ca + +.asm_3f9af + call GetRoamMonHP + ld [hl], $0 + call GetRoamMonMapGroup + ld [hl], $ff + call GetRoamMonMapNumber + ld [hl], $ff + call GetRoamMonSpecies + ld [hl], $0 + ret + +.asm_3f9c4 + call BattleRandom + and $f + ret nz + +.asm_3f9ca + callab Function2a30d + ret +; 3f9d1 + +GetRoamMonMapGroup: ; 3f9d1 + ld a, [TempEnemyMonSpecies] + ld b, a + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1MapGroup + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2MapGroup + ret z + ld hl, RoamMon3MapGroup + ret +; 3f9e9 + +GetRoamMonMapNumber: ; 3f9e9 + ld a, [TempEnemyMonSpecies] + ld b, a + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1MapNumber + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2MapNumber + ret z + ld hl, RoamMon3MapNumber + ret +; 3fa01 + +GetRoamMonHP: ; 3fa01 +; output: hl = RoamMonCurHP + ld a, [TempEnemyMonSpecies] + ld b, a + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1CurHP + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2CurHP + ret z + ld hl, RoamMon3CurHP + ret +; 3fa19 + +GetRoamMonDVs: ; 3fa19 +; output: hl = RoamMonDVs + ld a, [TempEnemyMonSpecies] + ld b, a + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1DVs + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2DVs + ret z + ld hl, RoamMon3DVs + ret +; 3fa31 + +GetRoamMonSpecies: ; 3fa31 + ld a, [TempEnemyMonSpecies] + ld hl, RoamMon1Species + cp [hl] + ret z + ld hl, RoamMon2Species + cp [hl] + ret z + ld hl, RoamMon3Species + ret +; 3fa42 + + +Function3fa42: ; 3fa42 + ld hl, $d276 + ld de, StringBuffer1 + ld bc, $0002 + call CopyBytes + ld hl, $d26b + ld bc, $000a + call CopyBytes + ld hl, $b254 + call Function3faa0 + ld hl, $b266 + ld d, $5 +.asm_3fa62 + push hl + inc hl + inc hl + ld a, [hl] + dec hl + dec hl + and a + jr z, .asm_3fa85 + push de + ld bc, $000c + ld de, StringBuffer1 + call CompareLong + pop de + pop hl + jr c, .asm_3fa99 + ld bc, $0012 + add hl, bc + dec d + jr nz, .asm_3fa62 + ld bc, $ffee + add hl, bc + push hl + +.asm_3fa85 + ld d, h + ld e, l + ld hl, StringBuffer1 + ld bc, $000c + call CopyBytes + ld b, $6 + xor a +.asm_3fa93 + ld [de], a + inc de + dec b + jr nz, .asm_3fa93 + pop hl + +.asm_3fa99 + call Function3faa0 + call Function3fac8 + ret +; 3faa0 + +Function3faa0: ; 3faa0 + ld a, [$d0ee] + and $f + cp $1 + ld bc, $000d + jr c, .asm_3fab4 + ld bc, $000f + jr z, .asm_3fab4 + ld bc, $0011 + +.asm_3fab4 + add hl, bc + call Function3fabe + ret nc + inc [hl] + ret nz + dec hl + inc [hl] + ret +; 3fabe + +Function3fabe: ; 3fabe + dec hl + ld a, [hl] + inc hl + cp $27 + ret c + ld a, [hl] + cp $f + ret +; 3fac8 + +Function3fac8: ; 3fac8 + ld b, $5 + ld hl, $b277 + ld de, DefaultFlypoint +.asm_3fad0 + push bc + push de + push hl + call Function3fb54 + pop hl + ld a, e + pop de + ld [de], a + inc de + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + ld bc, $0012 + add hl, bc + pop bc + dec b + jr nz, .asm_3fad0 + ld b, $0 + ld c, $1 +.asm_3faed + ld a, b + add b + add b + ld e, a + ld d, $0 + ld hl, DefaultFlypoint + add hl, de + push hl + ld a, c + add c + add c + ld e, a + ld d, $0 + ld hl, DefaultFlypoint + add hl, de + ld d, h + ld e, l + pop hl + push bc + ld c, $3 + call StringCmp + pop bc + jr z, .asm_3fb10 + jr nc, .asm_3fb1f + +.asm_3fb10 + inc c + ld a, c + cp $5 + jr nz, .asm_3faed + inc b + ld c, b + inc c + ld a, b + cp $4 + jr nz, .asm_3faed + ret + +.asm_3fb1f + push bc + ld a, b + ld bc, $0012 + ld hl, $b266 + call AddNTimes + push hl + ld de, DefaultFlypoint + ld bc, $0012 + call CopyBytes + pop hl + pop bc + push hl + ld a, c + ld bc, $0012 + ld hl, $b266 + call AddNTimes + pop de + push hl + ld bc, $0012 + call CopyBytes + ld hl, DefaultFlypoint + ld bc, $0012 + pop de + call CopyBytes + ret +; 3fb54 + +Function3fb54: ; 3fb54 + ld e, $0 + ld a, [hld] + ld c, a + ld a, [hld] + ld b, a + ld a, [hld] + add c + ld c, a + ld a, [hld] + adc b + ld b, a + jr nc, .asm_3fb63 + inc e + +.asm_3fb63 + ld a, [hld] + add c + ld c, a + ld a, [hl] + adc b + ld b, a + ret nc + inc e + ret +; 3fb6c + +Function3fb6c: ; 3fb6c + call Function3fbf8 + ld hl, $c590 + ld b, $4 + ld c, $12 + call TextBox + callba MobileTextBorder + ld hl, $c505 + ld bc, $0307 + call ClearBox + call Functione51 + call Function3ed9f + call Function3fbd6 + xor a + ld [$ffde], a + ld [hSCY], a + ld a, $90 + ld [hWY], a + ld [rWY], a + call WaitBGMap + xor a + ld [hBGMapMode], a + callba Function4e980 + ld a, $1 + ld [hBGMapMode], a + ld a, $31 + ld [$ffad], a + ld hl, $c51a + ld bc, $0606 + ld a, $13 + call Predef + xor a + ld [hWY], a + ld [rWY], a + call WaitBGMap + call HideSprites + ld b, $1 + call GetSGBLayout + call Function32f9 + ld a, $90 + ld [hWY], a + xor a + ld [hSCX], a + ret +; 3fbd6 + +Function3fbd6: ; 3fbd6 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, $d000 + ld bc, VBlank5 + ld a, $7f + call ByteFill + ld de, $d000 + ld hl, VBGMap0 + ld bc, $0f40 + call Request2bpp + pop af + ld [rSVBK], a + ret +; 3fbf8 + +Function3fbf8: ; 3fbf8 + call GetBattleBackpic + call Function3fc30 + ret +; 3fbff + + +GetBattleBackpic: ; 3fbff +; Load the player character's backpic (6x6) into VRAM starting from $9310. + +; Special exception for Dude. + ld b, BANK(DudeBackpic) + ld hl, DudeBackpic + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jr z, .Decompress + +; What gender are we? + ld a, [$d45b] + bit 2, a + jr nz, .Chris + ld a, [PlayerGender] + bit 0, a + jr z, .Chris + +; It's a girl. + callba GetKrisBackpic + ret + +.Chris +; It's a boy. + ld b, BANK(ChrisBackpic) + ld hl, ChrisBackpic + +.Decompress + ld de, $9310 + ld c, $31 + ld a, PREDEF_DECOMPRESS + call Predef + ret +; 3fc30 + + +Function3fc30: ; 3fc30 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, VTiles0 + ld de, $9310 + ld a, [hROMBank] + ld b, a + ld c, $31 + call Get2bpp + pop af + ld [rSVBK], a + call Function3fc5b + ld a, $31 + ld [$ffad], a + ld hl, $c51a + ld bc, $0606 + ld a, $13 + call Predef + ret +; 3fc5b + +Function3fc5b: ; 3fc5b + ld hl, Sprites + xor a + ld [hConnectionStripLength], a + ld b, $6 + ld e, $a8 +.asm_3fc65 + ld c, $3 + ld d, $40 +.asm_3fc69 + ld [hl], d + inc hl + ld [hl], e + inc hl + ld a, [hConnectionStripLength] + ld [hli], a + inc a + ld [hConnectionStripLength], a + ld a, $1 + ld [hli], a + ld a, d + add $8 + ld d, a + dec c + jr nz, .asm_3fc69 + ld a, [hConnectionStripLength] + add $3 + ld [hConnectionStripLength], a + ld a, e + add $8 + ld e, a + dec b + jr nz, .asm_3fc65 + ret +; 3fc8b + + +BattleStartMessage: ; 3fc8b + ld a, [IsInBattle] + dec a + jr z, .asm_3fcaa + + ld de, SFX_SHINE + call PlaySFX + call WaitSFX + + ld c, 20 + call DelayFrames + + callba Function39939 + + ld hl, WantsToBattleText + jr .asm_3fd0e + +.asm_3fcaa + call Function3da79 + jr nc, .asm_3fcc2 + + xor a + ld [$cfca], a + ld a, 1 + ld [hBattleTurn], a + ld a, 1 + ld [$c689], a + ld de, $0101 + call Function3ee17 + +.asm_3fcc2 + callba CheckSleepingTreeMon + jr c, .asm_3fceb + + callba CheckBattleScene + jr c, .asm_3fce0 + + hlcoord 12, 0 + ld d, $0 + ld e, $1 + ld a, $47 + call Predef + jr .asm_3fceb + +.asm_3fce0 + ld a, $0f + ld [CryTracks], a + ld a, [TempEnemyMonSpecies] + call Function37b6 + +.asm_3fceb + ld a, [BattleType] + cp BATTLETYPE_FISH + jr nz, .asm_3fcfd + + callba Function106086 + + ld hl, HookedPokemonAttackedText + jr .asm_3fd0e + +.asm_3fcfd + ld hl, PokemonFellFromTreeText + cp BATTLETYPE_TREE + jr z, .asm_3fd0e + ld hl, WildPokemonAppearedText2 + cp $b + jr z, .asm_3fd0e + ld hl, WildPokemonAppearedText + +.asm_3fd0e + push hl + callba Function2c000 + pop hl + call StdBattleTextBox + + call Function3f830 + ret nz + + ld c, $2 + callba Function4ea0a + + ret +; 3fd26 + diff --git a/battle/effect_command_pointers.asm b/battle/effect_command_pointers.asm index a8f382693..073fe406e 100644 --- a/battle/effect_command_pointers.asm +++ b/battle/effect_command_pointers.asm @@ -1,4 +1,7 @@ -; 3fd28 + + dw $0000 ; padding + +BattleCommandPointers: ; 3fd28 dw BattleCommand01 ; 34084 dw BattleCommand02 ; 343db dw BattleCommand03 ; 34541 diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index 52b23fddb..24eaf4288 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -171,7 +171,7 @@ CheckPlayerTurn: jr z, .WokeUp xor a ld [$cfca], a - ld de, ANIM_SLEEP + ld de, ANIM_SLP call FarPlayBattleAnimation jr .FastAsleep @@ -315,7 +315,7 @@ CheckPlayerTurn: xor a ld [$cfca], a - ld de, ANIM_INLOVE + ld de, ANIM_IN_LOVE call FarPlayBattleAnimation ; 50% chance of infatuation @@ -432,7 +432,7 @@ CheckEnemyTurn: ; 3421f call StdBattleTextBox xor a ld [$cfca], a - ld de, ANIM_SLEEP + ld de, ANIM_SLP call FarPlayBattleAnimation jr .FastAsleep @@ -594,7 +594,7 @@ CheckEnemyTurn: ; 3421f xor a ld [$cfca], a - ld de, ANIM_INLOVE + ld de, ANIM_IN_LOVE call FarPlayBattleAnimation ; 50% chance of infatuation @@ -5318,7 +5318,7 @@ PlayFXAnimID: ; 35d08 ld c, 3 call DelayFrames - callab Functioncc0d6 + callab PlayBattleAnim ret ; 35d1c @@ -6634,12 +6634,12 @@ GetStatName: ; 3648f Table0x364e6: ; 364e6 - dw $6419 - dw $641c - dw $6421 - dw $6428 - dw $6432 - dw $6442 + db 25, 100 + db 28, 100 + db 33, 100 + db 40, 100 + db 50, 100 + db 66, 100 ; 364f2 @@ -6806,7 +6806,7 @@ BattleCommanda6: ; 365af xor a ld [$ffd4], a call CallBankF - jp $31f6 + jp WaitBGMap ; 365c3 @@ -6820,7 +6820,7 @@ BattleCommanda7: ; 365c3 xor a ld [$ffd4], a call CallBankF - jp $31f6 + jp WaitBGMap ; 365d7 @@ -6873,50 +6873,54 @@ Function0x3661d: ; 3661d ld a, [hli] push hl push bc + ld c, a dec c ld b, 0 ld hl, Table0x364e6 add hl, bc add hl, bc + xor a - ld [$ffb4], a + ld [hMultiplicand], a ld a, [de] - ld [$ffb5], a + ld [hMultiplicand + 1], a inc de ld a, [de] - ld [$ffb6], a + ld [hMultiplicand + 2], a inc de + ld a, [hli] - ld [$ffb7], a + ld [hMultiplier], a call Multiply ld a, [hl] - ld [$ffb7], a - ld b, $4 + ld [hDivisor], a + ld b, 4 call Divide - ld a, [$ffb5] + ld a, [hQuotient + 1] ld b, a - ld a, [$ffb6] + ld a, [hQuotient + 2] or b jr nz, .asm_36651 - ld a, $1 - ld [$ffb6], a + ld a, 1 + ld [hQuotient + 2], a jr .asm_36662 .asm_36651 - ld a, [$ffb6] - cp $e7 + ld a, [hQuotient + 2] + cp 999 % $100 ld a, b - sbc $3 + sbc 999 / $100 jr c, .asm_36662 - ld a, $e7 + ld a, 999 % $100 ld [$ffb6], a - ld a, $3 + ld a, 999 / $100 ld [$ffb5], a + .asm_36662 pop bc ld a, [$ffb5] @@ -9139,116 +9143,14 @@ BattleCommand1a: ; 37380 ret nc callba DrawPlayerHUD callba Function3e043 - call $31f6 + call WaitBGMap jp RefreshBattleHuds ; 373c9 -BattleCommand1b: ; 373c9 -; mirrormove - - call Function0x372d8 - ld a, BATTLE_VARS_MOVE - call _GetBattleVar - ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP - call GetBattleVar - and a - jr z, .asm_373de ; 373d7 $5 - call CheckUserMove - jr nz, .asm_373ea ; 373dc $c -.asm_373de - call Function0x37e77 - ld hl, MirrorMoveFailedText - call StdBattleTextBox - jp EndMoveEffect -.asm_373ea - ld a, b - ld [hl], a - ld [$d265], a - push af - ld a, BATTLE_VARS_MOVE_ANIM - call _GetBattleVar - ld d, h - ld e, l - pop af - dec a - call GetMoveData - call GetMoveName - call $30d6 - call Function0x34548 - jr nz, .asm_37412 ; 37405 $b - ld a, [$c689] - push af - call BattleCommand0a - pop af - ld [$c689], a -.asm_37412 - call BattleCommandaa - jp ResetTurn -; 37418 - - -BattleCommand34: ; 37418 -; metronome - - call Function0x372d8 - call Function0x34548 - jr nz, .asm_3742b - - ld a, [$c689] - push af - call BattleCommand0a - pop af - ld [$c689], a - -.asm_3742b - call Function0x37e36 - -.GetMove - call BattleRandom - -; No invalid moves. - cp BEAT_UP + 1 - jr nc, .GetMove - -; None of the moves in MetronomeExcepts. - push af - ld de, 1 - ld hl, MetronomeExcepts - call IsInArray - pop bc - jr c, .GetMove - -; No moves the user already has. - ld a, b - call CheckUserMove - jr z, .GetMove - +INCLUDE "battle/effects/mirror_move.asm" - ld a, BATTLE_VARS_MOVE - call _GetBattleVar - ld [hl], b - call UpdateMoveData - jp ResetTurn -; 37454 - - -MetronomeExcepts: ; 37454 - db $00 - db METRONOME - db STRUGGLE - db SKETCH - db MIMIC - db COUNTER - db MIRROR_COAT - db PROTECT - db DETECT - db ENDURE - db DESTINY_BOND - db SLEEP_TALK - db THIEF - db $ff -; 37462 +INCLUDE "battle/effects/metronome.asm" CheckUserMove: ; 37462 @@ -9293,122 +9195,7 @@ ResetTurn: ; 3747b ; 37492 -BattleCommand50: ; 37492 -; thief - - ld a, [hBattleTurn] - and a - jr nz, .enemy - -; The player needs to be able to steal an item. - - call .playeritem - ld a, [hl] - and a - ret nz - -; The enemy needs to have an item to steal. - - call .enemyitem - ld a, [hl] - and a - ret z - -; Can't steal mail. - - ld [$d265], a - ld d, a - callba ItemIsMail - ret c - - ld a, [EffectFailed] - and a - ret nz - - ld a, [InLinkBattle] - and a - jr z, .stealenemyitem - - ld a, [IsInBattle] - dec a - ret z - -.stealenemyitem - call .enemyitem - xor a - ld [hl], a - ld [de], a - - call .playeritem - ld a, [$d265] - ld [hl], a - ld [de], a - jr .stole - - -.enemy - -; The enemy can't already have an item. - - call .enemyitem - ld a, [hl] - and a - ret nz - -; The player must have an item to steal. - - call .playeritem - ld a, [hl] - and a - ret z - -; Can't steal mail! - - ld [$d265], a - ld d, a - callba ItemIsMail - ret c - - ld a, [EffectFailed] - and a - ret nz - -; If the enemy steals your item, -; it's gone for good if you don't get it back. - - call .playeritem - xor a - ld [hl], a - ld [de], a - - call .enemyitem - ld a, [$d265] - ld [hl], a - ld [de], a - - -.stole - call GetItemName - ld hl, StoleText - jp StdBattleTextBox - - -.playeritem - ld a, 1 - call BattlePartyAttr - ld d, h - ld e, l - ld hl, BattleMonItem - ret - -.enemyitem - ld a, 1 - call OTPartyAttr - ld d, h - ld e, l - ld hl, EnemyMonItem - ret -; 37517 +INCLUDE "battle/effects/thief.asm" BattleCommand51: ; 37517 @@ -9439,44 +9226,7 @@ BattleCommand51: ; 37517 ; 37536 -BattleCommand52: ; 37536 -; nightmare - -; Can't hit an absent opponent. - - call CheckHiddenOpponent - jr nz, .failed - -; Can't hit a substitute. - - call CheckSubstituteOpp - jr nz, .failed - -; Only works on a sleeping opponent. - - ld a, BATTLE_VARS_STATUS_OPP - call _GetBattleVar - and SLP - jr z, .failed - -; Bail if the opponent is already having a nightmare. - - ld a, BATTLE_VARS_SUBSTATUS1_OPP - call _GetBattleVar - bit SUBSTATUS_NIGHTMARE, [hl] - jr nz, .failed - -; Otherwise give the opponent a nightmare. - - set SUBSTATUS_NIGHTMARE, [hl] - call Function0x37e01 - ld hl, StartedNightmareText - jp StdBattleTextBox - -.failed - call Function0x37e77 - jp PrintButItFailed -; 37563 +INCLUDE "battle/effects/nightmare.asm" BattleCommand53: ; 37563 @@ -9520,172 +9270,13 @@ INCLUDE "battle/effects/endure.asm" INCLUDE "battle/effects/spikes.asm" +INCLUDE "battle/effects/foresight.asm" -BattleCommand57: ; 376a0 -; foresight +INCLUDE "battle/effects/perish_song.asm" - ld a, [AttackMissed] - and a - jr nz, .asm_376bf - call CheckHiddenOpponent - jr nz, .asm_376bf - ld a, BATTLE_VARS_SUBSTATUS1_OPP - call _GetBattleVar - bit SUBSTATUS_IDENTIFIED, [hl] - jr nz, .asm_376bf - set SUBSTATUS_IDENTIFIED, [hl] - call Function0x37e01 - ld hl, IdentifiedText - jp StdBattleTextBox -.asm_376bf - jp Function0x37354 -; 376c2 +INCLUDE "battle/effects/sandstorm.asm" - -BattleCommand58: ; 376c2 -; perishsong - - ld hl, PlayerSubStatus1 - ld de, EnemySubStatus1 - bit SUBSTATUS_PERISH, [hl] - jr z, .asm_376d1 - ld a, [de] - bit SUBSTATUS_PERISH, a - jr nz, .asm_376f2 -.asm_376d1 - bit SUBSTATUS_PERISH, [hl] - jr nz, .asm_376dc - set SUBSTATUS_PERISH, [hl] - ld a, 4 - ld [PlayerPerishCount], a -.asm_376dc - ld a, [de] - bit SUBSTATUS_PERISH, a - jr nz, .asm_376e9 - set SUBSTATUS_PERISH, a - ld [de], a - ld a, 4 - ld [EnemyPerishCount], a -.asm_376e9 - call Function0x37e01 - ld hl, StartPerishText - jp StdBattleTextBox -.asm_376f2 - call Function0x37e77 - jp PrintButItFailed -; 376f8 - - -BattleCommand59: ; 376f8 -; startsandstorm - - ld a, [Weather] - cp WEATHER_SANDSTORM - jr z, .asm_37712 - ld a, WEATHER_SANDSTORM - ld [Weather], a - ld a, 5 - ld [WeatherCount], a - call Function0x37e01 - ld hl, SandstormBrewedText - jp StdBattleTextBox -.asm_37712 - call Function0x37e77 - jp PrintButItFailed -; 37718 - - -BattleCommand5b: ; 37718 -; checkcurl - - ld de, PlayerRolloutCount - ld a, [hBattleTurn] - and a - jr z, .asm_37723 - ld de, EnemyRolloutCount -.asm_37723 - ld a, BATTLE_VARS_SUBSTATUS1 - call GetBattleVar - bit SUBSTATUS_ENCORED, a - jr z, .asm_37731 - - ld b, $4 ; doturn - jp SkipToBattleCommand - -.asm_37731 - xor a - ld [de], a - ret -; 37734 - - -BattleCommand5c: ; 37734 -; rolloutpower - - ld a, BATTLE_VARS_STATUS - call GetBattleVar - and 7 - ret nz - - ld hl, PlayerRolloutCount - ld a, [hBattleTurn] - and a - jr z, .asm_37747 - ld hl, EnemyRolloutCount - -.asm_37747 - ld a, [hl] - and a - jr nz, .asm_37750 - ld a, 1 - ld [$c73e], a - -.asm_37750 - ld a, [AttackMissed] - and a - jr z, .hit - - ld a, BATTLE_VARS_SUBSTATUS1 - call _GetBattleVar - res 6, [hl] - ret - -.hit - inc [hl] - ld a, [hl] - ld b, a - cp $5 - jr c, .asm_3776e ; 37763 $9 - ld a, BATTLE_VARS_SUBSTATUS1 - call _GetBattleVar - res 6, [hl] - jr .asm_37775 ; 3776c $7 - -.asm_3776e - ld a, BATTLE_VARS_SUBSTATUS1 - call _GetBattleVar - set 6, [hl] - -.asm_37775 - ld a, BATTLE_VARS_SUBSTATUS2 - call GetBattleVar - bit 0, a - jr z, .asm_3777f ; 3777c $1 - inc b -.asm_3777f - dec b - jr z, .asm_37790 ; 37780 $e - ld hl, CurDamage + 1 - sla [hl] - dec hl - rl [hl] - jr nc, .asm_3777f ; 3778a $f3 - ld a, $ff - ld [hli], a - ld [hl], a -.asm_37790 - ret -; 37791 +INCLUDE "battle/effects/rollout.asm" BattleCommand5d: ; 37791 @@ -10096,33 +9687,33 @@ BattleCommand67: ; 379c9 ld c, 50 call DelayFrames - call $1d6e + call Function1d6e callba Function3d2f7 callba Function3d380 - call $3317 + call ClearPalettes callba Function3ed9f - call $1c17 - call $300b + call Function1c17 + call ClearSprites ld hl, $c4a1 ld bc, $040a call ClearBox ld b, 1 - call $3340 - call $32f9 + call GetSGBLayout + call Function32f9 call Function0x37a67 callba Function3d2e0 jp c, EndMoveEffect - ld hl, $6459 + ld hl, Function3e459 call CallBankF call Function0x37ab1 @@ -10911,7 +10502,7 @@ Function0x37e47: ; 37e47 push hl push de push bc - callab Functioncc0d6 + callab PlayBattleAnim pop bc pop de pop hl @@ -10932,7 +10523,7 @@ Function0x37e54: ; 37e54 push bc call SwitchTurn - callab Functioncc0d6 + callab PlayBattleAnim call SwitchTurn pop bc @@ -11044,7 +10635,7 @@ Function0x37ed5: ; 37ed5 push hl push de push bc - callba Function4ea44 + callba CheckBattleScene pop bc pop de pop hl diff --git a/battle/effects/foresight.asm b/battle/effects/foresight.asm new file mode 100644 index 000000000..ed2e629a0 --- /dev/null +++ b/battle/effects/foresight.asm @@ -0,0 +1,24 @@ +BattleCommand57: ; 376a0 +; foresight + + ld a, [AttackMissed] + and a + jr nz, .failed + + call CheckHiddenOpponent + jr nz, .failed + + ld a, BATTLE_VARS_SUBSTATUS1_OPP + call _GetBattleVar + bit SUBSTATUS_IDENTIFIED, [hl] + jr nz, .failed + + set SUBSTATUS_IDENTIFIED, [hl] + call Function0x37e01 + ld hl, IdentifiedText + jp StdBattleTextBox + +.failed + jp Function0x37354 +; 376c2 + diff --git a/battle/effects/metronome.asm b/battle/effects/metronome.asm new file mode 100644 index 000000000..fd3d151f0 --- /dev/null +++ b/battle/effects/metronome.asm @@ -0,0 +1,62 @@ +BattleCommand34: ; 37418 +; metronome + + call Function0x372d8 + call Function0x34548 + jr nz, .asm_3742b + + ld a, [$c689] + push af + call BattleCommand0a + pop af + ld [$c689], a + +.asm_3742b + call Function0x37e36 + +.GetMove + call BattleRandom + +; No invalid moves. + cp NUM_ATTACKS + 1 + jr nc, .GetMove + +; None of the moves in MetronomeExcepts. + push af + ld de, 1 + ld hl, MetronomeExcepts + call IsInArray + pop bc + jr c, .GetMove + +; No moves the user already has. + ld a, b + call CheckUserMove + jr z, .GetMove + + + ld a, BATTLE_VARS_MOVE + call _GetBattleVar + ld [hl], b + call UpdateMoveData + jp ResetTurn +; 37454 + + +MetronomeExcepts: ; 37454 + db NO_MOVE + db METRONOME + db STRUGGLE + db SKETCH + db MIMIC + db COUNTER + db MIRROR_COAT + db PROTECT + db DETECT + db ENDURE + db DESTINY_BOND + db SLEEP_TALK + db THIEF + db -1 +; 37462 + diff --git a/battle/effects/mirror_move.asm b/battle/effects/mirror_move.asm new file mode 100644 index 000000000..c54977a91 --- /dev/null +++ b/battle/effects/mirror_move.asm @@ -0,0 +1,53 @@ +BattleCommand1b: ; 373c9 +; mirrormove + + call Function0x372d8 + + ld a, BATTLE_VARS_MOVE + call _GetBattleVar + + ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP + call GetBattleVar + and a + jr z, .failed + + call CheckUserMove + jr nz, .use + +.failed + call Function0x37e77 + + ld hl, MirrorMoveFailedText + call StdBattleTextBox + jp EndMoveEffect + +.use + ld a, b + ld [hl], a + ld [$d265], a + + push af + ld a, BATTLE_VARS_MOVE_ANIM + call _GetBattleVar + ld d, h + ld e, l + pop af + + dec a + call GetMoveData + call GetMoveName + call CopyName1 + call Function0x34548 + jr nz, .done + + ld a, [$c689] + push af + call BattleCommand0a + pop af + ld [$c689], a + +.done + call BattleCommandaa + jp ResetTurn +; 37418 + diff --git a/battle/effects/nightmare.asm b/battle/effects/nightmare.asm new file mode 100644 index 000000000..6cd1f0a64 --- /dev/null +++ b/battle/effects/nightmare.asm @@ -0,0 +1,39 @@ +BattleCommand52: ; 37536 +; nightmare + +; Can't hit an absent opponent. + + call CheckHiddenOpponent + jr nz, .failed + +; Can't hit a substitute. + + call CheckSubstituteOpp + jr nz, .failed + +; Only works on a sleeping opponent. + + ld a, BATTLE_VARS_STATUS_OPP + call _GetBattleVar + and SLP + jr z, .failed + +; Bail if the opponent is already having a nightmare. + + ld a, BATTLE_VARS_SUBSTATUS1_OPP + call _GetBattleVar + bit SUBSTATUS_NIGHTMARE, [hl] + jr nz, .failed + +; Otherwise give the opponent a nightmare. + + set SUBSTATUS_NIGHTMARE, [hl] + call Function0x37e01 + ld hl, StartedNightmareText + jp StdBattleTextBox + +.failed + call Function0x37e77 + jp PrintButItFailed +; 37563 + diff --git a/battle/effects/perish_song.asm b/battle/effects/perish_song.asm new file mode 100644 index 000000000..4f206d5d2 --- /dev/null +++ b/battle/effects/perish_song.asm @@ -0,0 +1,41 @@ +BattleCommand58: ; 376c2 +; perishsong + + + ld hl, PlayerSubStatus1 + ld de, EnemySubStatus1 + bit SUBSTATUS_PERISH, [hl] + jr z, .ok + + ld a, [de] + bit SUBSTATUS_PERISH, a + jr nz, .failed + +.ok + bit SUBSTATUS_PERISH, [hl] + jr nz, .enemy + + set SUBSTATUS_PERISH, [hl] + ld a, 4 + ld [PlayerPerishCount], a + +.enemy + ld a, [de] + bit SUBSTATUS_PERISH, a + jr nz, .done + + set SUBSTATUS_PERISH, a + ld [de], a + ld a, 4 + ld [EnemyPerishCount], a + +.done + call Function0x37e01 + ld hl, StartPerishText + jp StdBattleTextBox + +.failed + call Function0x37e77 + jp PrintButItFailed +; 376f8 + diff --git a/battle/effects/rollout.asm b/battle/effects/rollout.asm new file mode 100644 index 000000000..13c91a8d9 --- /dev/null +++ b/battle/effects/rollout.asm @@ -0,0 +1,97 @@ +BattleCommand5b: ; 37718 +; checkcurl + + ld de, PlayerRolloutCount + ld a, [hBattleTurn] + and a + jr z, .asm_37723 + ld de, EnemyRolloutCount + +.asm_37723 + ld a, BATTLE_VARS_SUBSTATUS1 + call GetBattleVar + bit SUBSTATUS_ENCORED, a + jr z, .asm_37731 + + ld b, $4 ; doturn + jp SkipToBattleCommand + +.asm_37731 + xor a + ld [de], a + ret +; 37734 + + +BattleCommand5c: ; 37734 +; rolloutpower + + ld a, BATTLE_VARS_STATUS + call GetBattleVar + and 7 + ret nz + + ld hl, PlayerRolloutCount + ld a, [hBattleTurn] + and a + jr z, .asm_37747 + ld hl, EnemyRolloutCount + +.asm_37747 + ld a, [hl] + and a + jr nz, .asm_37750 + ld a, 1 + ld [$c73e], a + +.asm_37750 + ld a, [AttackMissed] + and a + jr z, .hit + + ld a, BATTLE_VARS_SUBSTATUS1 + call _GetBattleVar + res 6, [hl] + ret + +.hit + inc [hl] + ld a, [hl] + ld b, a + cp $5 + jr c, .asm_3776e + + ld a, BATTLE_VARS_SUBSTATUS1 + call _GetBattleVar + res 6, [hl] + jr .asm_37775 + +.asm_3776e + ld a, BATTLE_VARS_SUBSTATUS1 + call _GetBattleVar + set 6, [hl] + +.asm_37775 + ld a, BATTLE_VARS_SUBSTATUS2 + call GetBattleVar + bit 0, a + jr z, .asm_3777f + inc b +.asm_3777f + dec b + jr z, .asm_37790 + + ld hl, CurDamage + 1 + sla [hl] + dec hl + rl [hl] + jr nc, .asm_3777f + + ld a, $ff + ld [hli], a + ld [hl], a + +.asm_37790 + ret +; 37791 + diff --git a/battle/effects/sandstorm.asm b/battle/effects/sandstorm.asm new file mode 100644 index 000000000..ad3bac9d1 --- /dev/null +++ b/battle/effects/sandstorm.asm @@ -0,0 +1,20 @@ +BattleCommand59: ; 376f8 +; startsandstorm + + ld a, [Weather] + cp WEATHER_SANDSTORM + jr z, .failed + + ld a, WEATHER_SANDSTORM + ld [Weather], a + ld a, 5 + ld [WeatherCount], a + call Function0x37e01 + ld hl, SandstormBrewedText + jp StdBattleTextBox + +.failed + call Function0x37e77 + jp PrintButItFailed +; 37718 + diff --git a/battle/effects/thief.asm b/battle/effects/thief.asm new file mode 100644 index 000000000..617e73e37 --- /dev/null +++ b/battle/effects/thief.asm @@ -0,0 +1,117 @@ +BattleCommand50: ; 37492 +; thief + + ld a, [hBattleTurn] + and a + jr nz, .enemy + +; The player needs to be able to steal an item. + + call .playeritem + ld a, [hl] + and a + ret nz + +; The enemy needs to have an item to steal. + + call .enemyitem + ld a, [hl] + and a + ret z + +; Can't steal mail. + + ld [$d265], a + ld d, a + callba ItemIsMail + ret c + + ld a, [EffectFailed] + and a + ret nz + + ld a, [InLinkBattle] + and a + jr z, .stealenemyitem + + ld a, [IsInBattle] + dec a + ret z + +.stealenemyitem + call .enemyitem + xor a + ld [hl], a + ld [de], a + + call .playeritem + ld a, [$d265] + ld [hl], a + ld [de], a + jr .stole + + +.enemy + +; The enemy can't already have an item. + + call .enemyitem + ld a, [hl] + and a + ret nz + +; The player must have an item to steal. + + call .playeritem + ld a, [hl] + and a + ret z + +; Can't steal mail! + + ld [$d265], a + ld d, a + callba ItemIsMail + ret c + + ld a, [EffectFailed] + and a + ret nz + +; If the enemy steals your item, +; it's gone for good if you don't get it back. + + call .playeritem + xor a + ld [hl], a + ld [de], a + + call .enemyitem + ld a, [$d265] + ld [hl], a + ld [de], a + + +.stole + call GetItemName + ld hl, StoleText + jp StdBattleTextBox + + +.playeritem + ld a, 1 + call BattlePartyAttr + ld d, h + ld e, l + ld hl, BattleMonItem + ret + +.enemyitem + ld a, 1 + call OTPartyAttr + ld d, h + ld e, l + ld hl, EnemyMonItem + ret +; 37517 + |