summaryrefslogtreecommitdiff
path: root/battle
diff options
context:
space:
mode:
Diffstat (limited to 'battle')
-rw-r--r--battle/anim_commands.asm1549
-rw-r--r--battle/anim_gfx.asm42
-rw-r--r--battle/anim_objects.asm5092
-rw-r--r--battle/anims.asm5310
-rw-r--r--battle/bg_effects.asm2938
-rw-r--r--battle/core.asm9481
-rw-r--r--battle/effect_command_pointers.asm5
-rw-r--r--battle/effect_commands.asm511
-rw-r--r--battle/effects/foresight.asm24
-rw-r--r--battle/effects/metronome.asm62
-rw-r--r--battle/effects/mirror_move.asm53
-rw-r--r--battle/effects/nightmare.asm39
-rw-r--r--battle/effects/perish_song.asm41
-rw-r--r--battle/effects/rollout.asm97
-rw-r--r--battle/effects/sandstorm.asm20
-rw-r--r--battle/effects/thief.asm117
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
+