summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/battle_anim_constants.asm2
-rwxr-xr-xdata/battle_anims/ball_colors.asm15
-rwxr-xr-xdata/battle_anims/framesets.asm1268
-rwxr-xr-xdata/battle_anims/oam.asm1085
-rwxr-xr-xdata/battle_anims/object_gfx.asm50
-rwxr-xr-xdata/battle_anims/objects.asm208
-rwxr-xr-xengine/battle_anims/anim_commands.asm1358
-rwxr-xr-xengine/battle_anims/core.asm317
-rwxr-xr-xengine/battle_anims/functions.asm4154
-rwxr-xr-xengine/battle_anims/helpers.asm123
-rwxr-xr-xengine/events/bug_contest/display_stats.asm104
-rwxr-xr-xgfx/battle/minimize.2bppbin0 -> 16 bytes
-rwxr-xr-xgfx/battle/minimize.pngbin0 -> 85 bytes
-rw-r--r--main.asm33
14 files changed, 8693 insertions, 24 deletions
diff --git a/constants/battle_anim_constants.asm b/constants/battle_anim_constants.asm
index 1b57b240..57bbfcc8 100644
--- a/constants/battle_anim_constants.asm
+++ b/constants/battle_anim_constants.asm
@@ -807,6 +807,8 @@ BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture
const ANIM_GFX_ANGELS
const ANIM_GFX_WAVE
const ANIM_GFX_AEROBLAST
+ const ANIM_GFX_PLAYERHEAD
+ const ANIM_GFX_ENEMYFEET
; battle_bg_effect struct members (see macros/wram.asm)
const_def
diff --git a/data/battle_anims/ball_colors.asm b/data/battle_anims/ball_colors.asm
new file mode 100755
index 00000000..0453c14b
--- /dev/null
+++ b/data/battle_anims/ball_colors.asm
@@ -0,0 +1,15 @@
+; colors of balls thrown in battle
+
+BallColors:
+ db MASTER_BALL, PAL_BATTLE_OB_GREEN
+ db ULTRA_BALL, PAL_BATTLE_OB_YELLOW
+ db GREAT_BALL, PAL_BATTLE_OB_BLUE
+ db POKE_BALL, PAL_BATTLE_OB_RED
+ db HEAVY_BALL, PAL_BATTLE_OB_GRAY
+ db LEVEL_BALL, PAL_BATTLE_OB_BROWN
+ db LURE_BALL, PAL_BATTLE_OB_BLUE
+ db FAST_BALL, PAL_BATTLE_OB_BLUE
+ db FRIEND_BALL, PAL_BATTLE_OB_YELLOW
+ db MOON_BALL, PAL_BATTLE_OB_GRAY
+ db LOVE_BALL, PAL_BATTLE_OB_RED
+ db -1, PAL_BATTLE_OB_GRAY
diff --git a/data/battle_anims/framesets.asm b/data/battle_anims/framesets.asm
new file mode 100755
index 00000000..a5641570
--- /dev/null
+++ b/data/battle_anims/framesets.asm
@@ -0,0 +1,1268 @@
+BattleAnimFrameData:
+; entries correspond to BATTLEANIMFRAMESET_* constants
+ dw .Frameset_00 ; BATTLEANIMFRAMESET_00
+ dw .Frameset_01 ; BATTLEANIMFRAMESET_01
+ dw .Frameset_02 ; BATTLEANIMFRAMESET_02
+ dw .Frameset_03 ; BATTLEANIMFRAMESET_03
+ dw .Frameset_04 ; BATTLEANIMFRAMESET_04
+ dw .Frameset_05 ; BATTLEANIMFRAMESET_05
+ dw .Frameset_06 ; BATTLEANIMFRAMESET_06
+ dw .Frameset_07 ; BATTLEANIMFRAMESET_07
+ dw .Frameset_08 ; BATTLEANIMFRAMESET_08
+ dw .Frameset_09 ; BATTLEANIMFRAMESET_09
+ dw .Frameset_0a ; BATTLEANIMFRAMESET_0A
+ dw .Frameset_0b ; BATTLEANIMFRAMESET_0B
+ dw .Frameset_0c ; BATTLEANIMFRAMESET_0C
+ dw .Frameset_0d ; BATTLEANIMFRAMESET_0D
+ dw .Frameset_0e ; BATTLEANIMFRAMESET_0E
+ dw .Frameset_0f ; BATTLEANIMFRAMESET_0F
+ dw .Frameset_10 ; BATTLEANIMFRAMESET_10
+ dw .Frameset_11 ; BATTLEANIMFRAMESET_11
+ dw .Frameset_12 ; BATTLEANIMFRAMESET_12
+ dw .Frameset_13 ; BATTLEANIMFRAMESET_13
+ dw .Frameset_14 ; BATTLEANIMFRAMESET_14
+ dw .Frameset_15 ; BATTLEANIMFRAMESET_15
+ dw .Frameset_16 ; BATTLEANIMFRAMESET_16
+ dw .Frameset_17 ; BATTLEANIMFRAMESET_17
+ dw .Frameset_18 ; BATTLEANIMFRAMESET_18
+ dw .Frameset_19 ; BATTLEANIMFRAMESET_19
+ dw .Frameset_1a ; BATTLEANIMFRAMESET_1A
+ dw .Frameset_1b ; BATTLEANIMFRAMESET_1B
+ dw .Frameset_1c ; BATTLEANIMFRAMESET_1C
+ dw .Frameset_1d ; BATTLEANIMFRAMESET_1D
+ dw .Frameset_1e ; BATTLEANIMFRAMESET_1E
+ dw .Frameset_1f ; BATTLEANIMFRAMESET_1F
+ dw .Frameset_20 ; BATTLEANIMFRAMESET_20
+ dw .Frameset_21 ; BATTLEANIMFRAMESET_21
+ dw .Frameset_22 ; BATTLEANIMFRAMESET_22
+ dw .Frameset_23 ; BATTLEANIMFRAMESET_23
+ dw .Frameset_24 ; BATTLEANIMFRAMESET_24
+ dw .Frameset_25 ; BATTLEANIMFRAMESET_25
+ dw .Frameset_26 ; BATTLEANIMFRAMESET_26
+ dw .Frameset_27 ; BATTLEANIMFRAMESET_27
+ dw .Frameset_28 ; BATTLEANIMFRAMESET_28
+ dw .Frameset_29 ; BATTLEANIMFRAMESET_29
+ dw .Frameset_2a ; BATTLEANIMFRAMESET_2A
+ dw .Frameset_2b ; BATTLEANIMFRAMESET_2B
+ dw .Frameset_2c ; BATTLEANIMFRAMESET_2C
+ dw .Frameset_2d ; BATTLEANIMFRAMESET_2D
+ dw .Frameset_2e ; BATTLEANIMFRAMESET_2E
+ dw .Frameset_2f ; BATTLEANIMFRAMESET_2F
+ dw .Frameset_30 ; BATTLEANIMFRAMESET_30
+ dw .Frameset_31 ; BATTLEANIMFRAMESET_31
+ dw .Frameset_32 ; BATTLEANIMFRAMESET_32
+ dw .Frameset_33 ; BATTLEANIMFRAMESET_33
+ dw .Frameset_34 ; BATTLEANIMFRAMESET_34
+ dw .Frameset_35 ; BATTLEANIMFRAMESET_35
+ dw .Frameset_36 ; BATTLEANIMFRAMESET_36
+ dw .Frameset_37 ; BATTLEANIMFRAMESET_37
+ dw .Frameset_38 ; BATTLEANIMFRAMESET_38
+ dw .Frameset_39 ; BATTLEANIMFRAMESET_39
+ dw .Frameset_3a ; BATTLEANIMFRAMESET_3A
+ dw .Frameset_3b ; BATTLEANIMFRAMESET_3B
+ dw .Frameset_3c ; BATTLEANIMFRAMESET_3C
+ dw .Frameset_3d ; BATTLEANIMFRAMESET_3D
+ dw .Frameset_3e ; BATTLEANIMFRAMESET_3E
+ dw .Frameset_3f ; BATTLEANIMFRAMESET_3F
+ dw .Frameset_40 ; BATTLEANIMFRAMESET_40
+ dw .Frameset_41 ; BATTLEANIMFRAMESET_41
+ dw .Frameset_42 ; BATTLEANIMFRAMESET_42
+ dw .Frameset_43 ; BATTLEANIMFRAMESET_43
+ dw .Frameset_44 ; BATTLEANIMFRAMESET_44
+ dw .Frameset_45 ; BATTLEANIMFRAMESET_45
+ dw .Frameset_46 ; BATTLEANIMFRAMESET_46
+ dw .Frameset_47 ; BATTLEANIMFRAMESET_47
+ dw .Frameset_48 ; BATTLEANIMFRAMESET_48
+ dw .Frameset_49 ; BATTLEANIMFRAMESET_49
+ dw .Frameset_4a ; BATTLEANIMFRAMESET_4A
+ dw .Frameset_4b ; BATTLEANIMFRAMESET_4B
+ dw .Frameset_4c ; BATTLEANIMFRAMESET_4C
+ dw .Frameset_4d ; BATTLEANIMFRAMESET_4D
+ dw .Frameset_4e ; BATTLEANIMFRAMESET_4E
+ dw .Frameset_4f ; BATTLEANIMFRAMESET_4F
+ dw .Frameset_50 ; BATTLEANIMFRAMESET_50
+ dw .Frameset_51 ; BATTLEANIMFRAMESET_51
+ dw .Frameset_52 ; BATTLEANIMFRAMESET_52
+ dw .Frameset_53 ; BATTLEANIMFRAMESET_53
+ dw .Frameset_54 ; BATTLEANIMFRAMESET_54
+ dw .Frameset_55 ; BATTLEANIMFRAMESET_55
+ dw .Frameset_56 ; BATTLEANIMFRAMESET_56
+ dw .Frameset_57 ; BATTLEANIMFRAMESET_57
+ dw .Frameset_58 ; BATTLEANIMFRAMESET_58
+ dw .Frameset_59 ; BATTLEANIMFRAMESET_59
+ dw .Frameset_5a ; BATTLEANIMFRAMESET_5A
+ dw .Frameset_5b ; BATTLEANIMFRAMESET_5B
+ dw .Frameset_5c ; BATTLEANIMFRAMESET_5C
+ dw .Frameset_5d ; BATTLEANIMFRAMESET_5D
+ dw .Frameset_5e ; BATTLEANIMFRAMESET_5E
+ dw .Frameset_5f ; BATTLEANIMFRAMESET_5F
+ dw .Frameset_60 ; BATTLEANIMFRAMESET_60
+ dw .Frameset_61 ; BATTLEANIMFRAMESET_61
+ dw .Frameset_62 ; BATTLEANIMFRAMESET_62
+ dw .Frameset_63 ; BATTLEANIMFRAMESET_63
+ dw .Frameset_64 ; BATTLEANIMFRAMESET_64
+ dw .Frameset_65 ; BATTLEANIMFRAMESET_65
+ dw .Frameset_66 ; BATTLEANIMFRAMESET_66
+ dw .Frameset_67 ; BATTLEANIMFRAMESET_67
+ dw .Frameset_68 ; BATTLEANIMFRAMESET_68
+ dw .Frameset_69 ; BATTLEANIMFRAMESET_69
+ dw .Frameset_6a ; BATTLEANIMFRAMESET_6A
+ dw .Frameset_6b ; BATTLEANIMFRAMESET_6B
+ dw .Frameset_6c ; BATTLEANIMFRAMESET_6C
+ dw .Frameset_6d ; BATTLEANIMFRAMESET_6D
+ dw .Frameset_6e ; BATTLEANIMFRAMESET_6E
+ dw .Frameset_6f ; BATTLEANIMFRAMESET_6F
+ dw .Frameset_70 ; BATTLEANIMFRAMESET_70
+ dw .Frameset_71 ; BATTLEANIMFRAMESET_71
+ dw .Frameset_72 ; BATTLEANIMFRAMESET_72
+ dw .Frameset_73 ; BATTLEANIMFRAMESET_73
+ dw .Frameset_74 ; BATTLEANIMFRAMESET_74
+ dw .Frameset_75 ; BATTLEANIMFRAMESET_75
+ dw .Frameset_76 ; BATTLEANIMFRAMESET_76
+ dw .Frameset_77 ; BATTLEANIMFRAMESET_77
+ dw .Frameset_78 ; BATTLEANIMFRAMESET_78
+ dw .Frameset_79 ; BATTLEANIMFRAMESET_79
+ dw .Frameset_7a ; BATTLEANIMFRAMESET_7A
+ dw .Frameset_7b ; BATTLEANIMFRAMESET_7B
+ dw .Frameset_7c ; BATTLEANIMFRAMESET_7C
+ dw .Frameset_7d ; BATTLEANIMFRAMESET_7D
+ dw .Frameset_7e ; BATTLEANIMFRAMESET_7E
+ dw .Frameset_7f ; BATTLEANIMFRAMESET_7F
+ dw .Frameset_80 ; BATTLEANIMFRAMESET_80
+ dw .Frameset_81 ; BATTLEANIMFRAMESET_81
+ dw .Frameset_82 ; BATTLEANIMFRAMESET_82
+ dw .Frameset_83 ; BATTLEANIMFRAMESET_83
+ dw .Frameset_84 ; BATTLEANIMFRAMESET_84
+ dw .Frameset_85 ; BATTLEANIMFRAMESET_85
+ dw .Frameset_86 ; BATTLEANIMFRAMESET_86
+ dw .Frameset_87 ; BATTLEANIMFRAMESET_87
+ dw .Frameset_88 ; BATTLEANIMFRAMESET_88
+ dw .Frameset_89 ; BATTLEANIMFRAMESET_89
+ dw .Frameset_8a ; BATTLEANIMFRAMESET_8A
+ dw .Frameset_8b ; BATTLEANIMFRAMESET_8B
+ dw .Frameset_8c ; BATTLEANIMFRAMESET_8C
+ dw .Frameset_8d ; BATTLEANIMFRAMESET_8D
+ dw .Frameset_8e ; BATTLEANIMFRAMESET_8E
+ dw .Frameset_8f ; BATTLEANIMFRAMESET_8F
+ dw .Frameset_90 ; BATTLEANIMFRAMESET_90
+ dw .Frameset_91 ; BATTLEANIMFRAMESET_91
+ dw .Frameset_92 ; BATTLEANIMFRAMESET_92
+ dw .Frameset_93 ; BATTLEANIMFRAMESET_93
+ dw .Frameset_94 ; BATTLEANIMFRAMESET_94
+ dw .Frameset_95 ; BATTLEANIMFRAMESET_95
+ dw .Frameset_96 ; BATTLEANIMFRAMESET_96
+ dw .Frameset_97 ; BATTLEANIMFRAMESET_97
+ dw .Frameset_98 ; BATTLEANIMFRAMESET_98
+ dw .Frameset_99 ; BATTLEANIMFRAMESET_99
+ dw .Frameset_9a ; BATTLEANIMFRAMESET_9A
+ dw .Frameset_9b ; BATTLEANIMFRAMESET_9B
+ dw .Frameset_9c ; BATTLEANIMFRAMESET_9C
+ dw .Frameset_9d ; BATTLEANIMFRAMESET_9D
+ dw .Frameset_9e ; BATTLEANIMFRAMESET_9E
+ dw .Frameset_9f ; BATTLEANIMFRAMESET_9F
+ dw .Frameset_a0 ; BATTLEANIMFRAMESET_A0
+ dw .Frameset_a1 ; BATTLEANIMFRAMESET_A1
+ dw .Frameset_a2 ; BATTLEANIMFRAMESET_A2
+ dw .Frameset_a3 ; BATTLEANIMFRAMESET_A3
+ dw .Frameset_a4 ; BATTLEANIMFRAMESET_A4
+ dw .Frameset_a5 ; BATTLEANIMFRAMESET_A5
+ dw .Frameset_a6 ; BATTLEANIMFRAMESET_A6
+ dw .Frameset_a7 ; BATTLEANIMFRAMESET_A7
+ dw .Frameset_a8 ; BATTLEANIMFRAMESET_A8
+ dw .Frameset_a9 ; BATTLEANIMFRAMESET_A9
+ dw .Frameset_aa ; BATTLEANIMFRAMESET_AA
+ dw .Frameset_ab ; BATTLEANIMFRAMESET_AB
+ dw .Frameset_ac ; BATTLEANIMFRAMESET_AC
+ dw .Frameset_ad ; BATTLEANIMFRAMESET_AD
+ dw .Frameset_ae ; BATTLEANIMFRAMESET_AE
+ dw .Frameset_af ; BATTLEANIMFRAMESET_AF
+ dw .Frameset_b0 ; BATTLEANIMFRAMESET_B0
+ dw .Frameset_b1 ; BATTLEANIMFRAMESET_B1
+ dw .Frameset_b2 ; BATTLEANIMFRAMESET_B2
+ dw .Frameset_b3 ; BATTLEANIMFRAMESET_B3
+ dw .Frameset_b4 ; BATTLEANIMFRAMESET_B4
+ dw .Frameset_b5 ; BATTLEANIMFRAMESET_B5
+ dw .Frameset_b6 ; BATTLEANIMFRAMESET_B6
+ dw .Frameset_b7 ; BATTLEANIMFRAMESET_B7
+ dw .Frameset_b8 ; BATTLEANIMFRAMESET_B8
+
+.Frameset_00:
+ frame BATTLEANIMOAMSET_00, 6
+ delanim
+
+.Frameset_01:
+ frame BATTLEANIMOAMSET_01, 6
+ delanim
+
+.Frameset_02:
+ frame BATTLEANIMOAMSET_02, 6
+ delanim
+
+.Frameset_03:
+ frame BATTLEANIMOAMSET_03, 6
+ delanim
+
+.Frameset_04:
+ frame BATTLEANIMOAMSET_04, 6
+ delanim
+
+.Frameset_05:
+ frame BATTLEANIMOAMSET_05, 6
+ delanim
+
+.Frameset_06:
+ frame BATTLEANIMOAMSET_06, 6
+ delanim
+
+.Frameset_07:
+ frame BATTLEANIMOAMSET_03, 4
+ frame BATTLEANIMOAMSET_01, 1
+ frame BATTLEANIMOAMSET_03, 4
+ frame BATTLEANIMOAMSET_01, 1
+ frame BATTLEANIMOAMSET_03, 4
+ frame BATTLEANIMOAMSET_01, 1
+ frame BATTLEANIMOAMSET_03, 4
+ frame BATTLEANIMOAMSET_01, 1
+ delanim
+
+.Frameset_3e:
+ frame BATTLEANIMOAMSET_4B, 2
+ frame BATTLEANIMOAMSET_4C, 2
+ frame BATTLEANIMOAMSET_4D, 4
+ frame BATTLEANIMOAMSET_4E, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2
+ delanim
+
+.Frameset_3f:
+ frame BATTLEANIMOAMSET_4B, 2, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
+ delanim
+
+.Frameset_40:
+ frame BATTLEANIMOAMSET_4B, 2, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_41:
+ frame BATTLEANIMOAMSET_4B, 1
+ frame BATTLEANIMOAMSET_4C, 1
+ frame BATTLEANIMOAMSET_4D, 1
+ frame BATTLEANIMOAMSET_4F, 1
+ frame BATTLEANIMOAMSET_50, 1
+ frame BATTLEANIMOAMSET_51, 1
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ delanim
+
+.Frameset_42:
+ frame BATTLEANIMOAMSET_4B, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4C, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4D, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_4F, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
+ delanim
+
+.Frameset_08:
+ frame BATTLEANIMOAMSET_00, 3
+ frame BATTLEANIMOAMSET_07, 3
+ frame BATTLEANIMOAMSET_08, 3
+ frame BATTLEANIMOAMSET_09, 3
+ delanim
+
+.Frameset_09:
+ frame BATTLEANIMOAMSET_0A, 7
+ frame BATTLEANIMOAMSET_0B, 7
+ frame BATTLEANIMOAMSET_0A, 7
+ frame BATTLEANIMOAMSET_0B, 7, OAM_X_FLIP
+ dorestart
+
+.Frameset_0a:
+ frame BATTLEANIMOAMSET_0C, 8
+ endanim
+
+.Frameset_0b:
+ frame BATTLEANIMOAMSET_0D, 8
+ endanim
+
+.Frameset_0c:
+ frame BATTLEANIMOAMSET_0A, 8
+ endanim
+
+.Frameset_0d:
+ frame BATTLEANIMOAMSET_0A, 7
+ frame BATTLEANIMOAMSET_0B, 7
+ frame BATTLEANIMOAMSET_0A, 7
+ frame BATTLEANIMOAMSET_0B, 7, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_0A, 7
+ endanim
+
+.Frameset_0e:
+ frame BATTLEANIMOAMSET_0A, 8
+ endanim
+
+.Frameset_0f:
+ frame BATTLEANIMOAMSET_0A, 4
+ frame BATTLEANIMOAMSET_0E, 4
+ dorestart
+
+.Frameset_10:
+ frame BATTLEANIMOAMSET_0F, 4
+ frame BATTLEANIMOAMSET_10, 4
+ dorestart
+
+.Frameset_11:
+ frame BATTLEANIMOAMSET_10, 4
+ frame BATTLEANIMOAMSET_0F, 4
+ frame BATTLEANIMOAMSET_0E, 4
+ frame BATTLEANIMOAMSET_0A, 4
+ frame BATTLEANIMOAMSET_0E, 4
+ frame BATTLEANIMOAMSET_0A, 4
+ frame BATTLEANIMOAMSET_0E, 4
+ frame BATTLEANIMOAMSET_0A, 4
+ delanim
+
+.Frameset_12:
+ frame BATTLEANIMOAMSET_10, 1
+ frame BATTLEANIMOAMSET_0F, 1
+ frame BATTLEANIMOAMSET_12, 1
+ frame BATTLEANIMOAMSET_11, 1
+ frame BATTLEANIMOAMSET_12, 1
+ frame BATTLEANIMOAMSET_0F, 1
+ dorestart
+
+.Frameset_13:
+ frame BATTLEANIMOAMSET_10, 3
+ frame BATTLEANIMOAMSET_0F, 3
+ frame BATTLEANIMOAMSET_12, 1
+ dowait 1
+ frame BATTLEANIMOAMSET_12, 1
+ dowait 1
+ frame BATTLEANIMOAMSET_12, 1
+ dowait 1
+ frame BATTLEANIMOAMSET_12, 1
+ dowait 1
+ frame BATTLEANIMOAMSET_12, 3
+ delanim
+
+.Frameset_14:
+ frame BATTLEANIMOAMSET_13, 20
+ delanim
+
+.Frameset_15:
+ frame BATTLEANIMOAMSET_10, 1
+ frame BATTLEANIMOAMSET_0F, 1
+ dorestart
+
+.Frameset_16:
+ frame BATTLEANIMOAMSET_14, 8
+ endanim
+
+.Frameset_17:
+ frame BATTLEANIMOAMSET_17, 4
+ frame BATTLEANIMOAMSET_16, 8
+ frame BATTLEANIMOAMSET_15, 8
+ frame BATTLEANIMOAMSET_16, 8
+ frame BATTLEANIMOAMSET_17, 4
+ frame BATTLEANIMOAMSET_17, 4
+ frame BATTLEANIMOAMSET_16, 8, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_15, 8, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_16, 8, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_17, 4
+ dorestart
+
+.Frameset_56:
+ frame BATTLEANIMOAMSET_69, 8
+ endanim
+
+.Frameset_57:
+ frame BATTLEANIMOAMSET_69, 32
+ frame BATTLEANIMOAMSET_6A, 4
+ frame BATTLEANIMOAMSET_6B, 4
+ frame BATTLEANIMOAMSET_6D, 4
+ frame BATTLEANIMOAMSET_6C, 4
+ endanim
+
+.Frameset_58:
+ frame BATTLEANIMOAMSET_6C, 8
+ frame BATTLEANIMOAMSET_6D, 8
+ dorestart
+
+.Frameset_18:
+ frame BATTLEANIMOAMSET_18, 4
+ frame BATTLEANIMOAMSET_19, 4
+ frame BATTLEANIMOAMSET_1A, 4
+ delanim
+
+.Frameset_19:
+ frame BATTLEANIMOAMSET_1B, 8
+ endanim
+
+.Frameset_1a:
+ frame BATTLEANIMOAMSET_0F, 8
+ endanim
+
+.Frameset_1b:
+ frame BATTLEANIMOAMSET_1C, 8
+ endanim
+
+.Frameset_1c:
+ frame BATTLEANIMOAMSET_0A, 8
+ delanim
+
+.Frameset_1d:
+ frame BATTLEANIMOAMSET_1D, 8
+ endanim
+
+.Frameset_1e:
+ frame BATTLEANIMOAMSET_17, 8
+ endanim
+
+.Frameset_1f:
+ frame BATTLEANIMOAMSET_0F, 3
+ frame BATTLEANIMOAMSET_10, 3
+ frame BATTLEANIMOAMSET_1E, 3
+ endanim
+
+.Frameset_20:
+ frame BATTLEANIMOAMSET_1F, 16
+ frame BATTLEANIMOAMSET_20, 3
+ delanim
+
+.Frameset_21:
+ frame BATTLEANIMOAMSET_20, 8
+ endanim
+
+.Frameset_22:
+ frame BATTLEANIMOAMSET_20, 8
+ frame BATTLEANIMOAMSET_21, 8
+ frame BATTLEANIMOAMSET_1B, 8
+ frame BATTLEANIMOAMSET_21, 8
+ dorestart
+
+.Frameset_23:
+ frame BATTLEANIMOAMSET_22, 8
+ endanim
+
+.Frameset_24:
+ frame BATTLEANIMOAMSET_1B, 8
+ endanim
+
+.Frameset_25:
+ frame BATTLEANIMOAMSET_23, 8
+ endanim
+
+.Frameset_26:
+ frame BATTLEANIMOAMSET_24, 8
+ endanim
+
+.Frameset_27:
+ frame BATTLEANIMOAMSET_25, 8
+ endanim
+
+.Frameset_28:
+ frame BATTLEANIMOAMSET_26, 8
+ frame BATTLEANIMOAMSET_27, 8
+ endanim
+
+.Frameset_29:
+ frame BATTLEANIMOAMSET_28, 8
+ frame BATTLEANIMOAMSET_29, 8
+ delanim
+
+.Frameset_2a:
+ frame BATTLEANIMOAMSET_2A, 1
+ frame BATTLEANIMOAMSET_2B, 1
+ frame BATTLEANIMOAMSET_2C, 1
+ frame BATTLEANIMOAMSET_2D, 1
+ frame BATTLEANIMOAMSET_2E, 1
+ frame BATTLEANIMOAMSET_2D, 1
+ frame BATTLEANIMOAMSET_2C, 1
+ frame BATTLEANIMOAMSET_2B, 1
+ frame BATTLEANIMOAMSET_2A, 1
+ delanim
+
+.Frameset_2b:
+ frame BATTLEANIMOAMSET_14, 1
+ frame BATTLEANIMOAMSET_15, 1
+ dorestart
+
+.Frameset_2c:
+ frame BATTLEANIMOAMSET_2F, 4
+ frame BATTLEANIMOAMSET_30, 40
+ delanim
+
+.Frameset_2d:
+ frame BATTLEANIMOAMSET_31, 8
+ endanim
+
+.Frameset_2e:
+ frame BATTLEANIMOAMSET_32, 32
+ frame BATTLEANIMOAMSET_33, 32
+ frame BATTLEANIMOAMSET_34, 32
+ frame BATTLEANIMOAMSET_35, 32 ; fallthrough
+.Frameset_2f:
+ dowait 2
+ frame BATTLEANIMOAMSET_35, 4
+ dowait 2
+ frame BATTLEANIMOAMSET_35, 4
+ dowait 2
+ frame BATTLEANIMOAMSET_35, 4
+ dowait 2
+ frame BATTLEANIMOAMSET_35, 4
+ delanim
+
+.Frameset_30:
+ frame BATTLEANIMOAMSET_14, 4
+ frame BATTLEANIMOAMSET_15, 4
+ dorestart
+
+.Frameset_31:
+ frame BATTLEANIMOAMSET_36, 2
+ frame BATTLEANIMOAMSET_37, 2
+ frame BATTLEANIMOAMSET_38, 2
+ frame BATTLEANIMOAMSET_39, 32
+ delanim
+
+.Frameset_32:
+ frame BATTLEANIMOAMSET_3A, 2
+ frame BATTLEANIMOAMSET_3B, 2
+ frame BATTLEANIMOAMSET_3C, 2
+ frame BATTLEANIMOAMSET_3D, 32
+ delanim
+
+.Frameset_33:
+ frame BATTLEANIMOAMSET_3A, 2, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_3B, 2, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_3C, 2, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_3D, 32, OAM_X_FLIP
+ delanim
+
+.Frameset_34:
+ frame BATTLEANIMOAMSET_3E, 8
+ frame BATTLEANIMOAMSET_3F, 8
+ frame BATTLEANIMOAMSET_40, 8
+ endanim
+
+.Frameset_35:
+ frame BATTLEANIMOAMSET_40, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_40, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_41, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_41, 2
+ dowait 2
+ dorestart
+
+.Frameset_36:
+ frame BATTLEANIMOAMSET_42, 2
+ frame BATTLEANIMOAMSET_43, 2
+ frame BATTLEANIMOAMSET_44, 2
+ frame BATTLEANIMOAMSET_45, 2
+ dorestart
+
+.Frameset_37:
+ frame BATTLEANIMOAMSET_19, 2
+ dowait 2
+ dorestart
+
+.Frameset_38:
+ frame BATTLEANIMOAMSET_46, 4
+ frame BATTLEANIMOAMSET_47, 4
+ dorestart
+
+.Frameset_39:
+ frame BATTLEANIMOAMSET_18, 2
+ dowait 2
+ dorestart
+
+.Frameset_3a:
+ frame BATTLEANIMOAMSET_48, 8
+ endanim
+
+.Frameset_3b:
+ frame BATTLEANIMOAMSET_48, 8, OAM_X_FLIP
+ endanim
+
+.Frameset_3c:
+ frame BATTLEANIMOAMSET_49, 8
+ endanim
+
+.Frameset_3d:
+ frame BATTLEANIMOAMSET_4A, 8
+ endanim
+
+.Frameset_43:
+ frame BATTLEANIMOAMSET_20, 16
+ frame BATTLEANIMOAMSET_1F, 16
+ frame BATTLEANIMOAMSET_1E, 16
+ endanim
+
+.Frameset_4c:
+ frame BATTLEANIMOAMSET_20, 8
+ frame BATTLEANIMOAMSET_1F, 8
+ frame BATTLEANIMOAMSET_1E, 8
+ endanim
+
+.Frameset_44:
+ dowait 20
+ frame BATTLEANIMOAMSET_55, 40
+ frame BATTLEANIMOAMSET_54, 40
+ frame BATTLEANIMOAMSET_53, 20
+ dowait 4
+ frame BATTLEANIMOAMSET_53, 4
+ dowait 4
+ frame BATTLEANIMOAMSET_53, 4
+ dowait 4
+ frame BATTLEANIMOAMSET_53, 4
+ delanim
+
+.Frameset_7e:
+ frame BATTLEANIMOAMSET_1E, 8
+ frame BATTLEANIMOAMSET_1F, 8
+ frame BATTLEANIMOAMSET_20, 8
+ delanim
+
+.Frameset_45:
+ dowait 0
+ frame BATTLEANIMOAMSET_14, 0
+ frame BATTLEANIMOAMSET_15, 0
+ frame BATTLEANIMOAMSET_14, 0, OAM_X_FLIP
+ dowait 0
+ frame BATTLEANIMOAMSET_16, 0, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_15, 0
+ frame BATTLEANIMOAMSET_16, 0
+ dorestart
+
+.Frameset_46:
+ frame BATTLEANIMOAMSET_56, 2
+ frame BATTLEANIMOAMSET_57, 4
+ delanim
+
+.Frameset_47:
+ frame BATTLEANIMOAMSET_56, 2, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_57, 4, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_48:
+ frame BATTLEANIMOAMSET_56, 1
+ frame BATTLEANIMOAMSET_57, 1
+ frame BATTLEANIMOAMSET_58, 1
+ frame BATTLEANIMOAMSET_57, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_58, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_57, 2
+ delanim
+
+.Frameset_49:
+ frame BATTLEANIMOAMSET_56, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_57, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_58, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_57, 1
+ frame BATTLEANIMOAMSET_58, 1
+ frame BATTLEANIMOAMSET_57, 2, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_4a:
+ frame BATTLEANIMOAMSET_57, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_58, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_57, 1
+ frame BATTLEANIMOAMSET_58, 1
+ dorestart
+
+.Frameset_4b:
+ frame BATTLEANIMOAMSET_59, 1
+ frame BATTLEANIMOAMSET_5A, 1
+ frame BATTLEANIMOAMSET_5B, 1
+ frame BATTLEANIMOAMSET_5C, 2
+ delanim
+
+.Frameset_4d:
+ frame BATTLEANIMOAMSET_0A, 10
+ frame BATTLEANIMOAMSET_0B, 3, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_5D, 3, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_0B, 3, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_0A, 2, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_0B, 1, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_5D, 1
+ frame BATTLEANIMOAMSET_0B, 1
+ dorestart
+
+.Frameset_4e:
+ frame BATTLEANIMOAMSET_0A, 3
+ frame BATTLEANIMOAMSET_0B, 7, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_0A, 7
+ frame BATTLEANIMOAMSET_0B, 7
+ frame BATTLEANIMOAMSET_0A, 3
+ dorestart
+
+.Frameset_4f:
+ frame BATTLEANIMOAMSET_5E, 32
+ frame BATTLEANIMOAMSET_5E, 32
+ delanim
+
+.Frameset_50:
+ frame BATTLEANIMOAMSET_5F, 32
+ frame BATTLEANIMOAMSET_5F, 32
+ delanim
+
+.Frameset_51:
+ frame BATTLEANIMOAMSET_60, 8
+ endanim
+
+.Frameset_52:
+ frame BATTLEANIMOAMSET_61, 1
+ frame BATTLEANIMOAMSET_62, 1
+ frame BATTLEANIMOAMSET_63, 1
+ endanim
+
+.Frameset_53:
+ frame BATTLEANIMOAMSET_63, 7
+ frame BATTLEANIMOAMSET_64, 7
+ dorestart
+
+.Frameset_54:
+ frame BATTLEANIMOAMSET_65, 1
+ frame BATTLEANIMOAMSET_66, 1
+ frame BATTLEANIMOAMSET_67, 1
+ endanim
+
+.Frameset_55:
+ frame BATTLEANIMOAMSET_67, 7
+ frame BATTLEANIMOAMSET_68, 7
+ dorestart
+
+.Frameset_59:
+ frame BATTLEANIMOAMSET_6E, 8
+ endanim
+
+.Frameset_5a:
+ frame BATTLEANIMOAMSET_6F, 8
+ endanim
+
+.Frameset_5b:
+ frame BATTLEANIMOAMSET_6E, 8, OAM_Y_FLIP
+ endanim
+
+.Frameset_5c:
+ frame BATTLEANIMOAMSET_18, 4
+ frame BATTLEANIMOAMSET_70, 4
+ frame BATTLEANIMOAMSET_71, 4
+ frame BATTLEANIMOAMSET_72, 4
+ frame BATTLEANIMOAMSET_73, 4
+ delanim
+
+.Frameset_5d:
+ frame BATTLEANIMOAMSET_74, 4
+ frame BATTLEANIMOAMSET_75, 4
+ dorestart
+
+.Frameset_5e:
+ frame BATTLEANIMOAMSET_14, 8
+ endanim
+
+.Frameset_7a:
+ frame BATTLEANIMOAMSET_74, 3
+ frame BATTLEANIMOAMSET_14, 3
+ frame BATTLEANIMOAMSET_15, 3
+ frame BATTLEANIMOAMSET_14, 3
+ frame BATTLEANIMOAMSET_15, 3
+ delanim
+
+.Frameset_af:
+ frame BATTLEANIMOAMSET_14, 0
+ frame BATTLEANIMOAMSET_15, 0
+ frame BATTLEANIMOAMSET_14, 0
+ frame BATTLEANIMOAMSET_15, 0
+ frame BATTLEANIMOAMSET_74, 12
+ delanim
+
+.Frameset_5f:
+ frame BATTLEANIMOAMSET_76, 8
+ endanim
+
+.Frameset_60:
+ frame BATTLEANIMOAMSET_77, 1
+ frame BATTLEANIMOAMSET_78, 1
+ frame BATTLEANIMOAMSET_79, 1
+ frame BATTLEANIMOAMSET_7A, 1
+ frame BATTLEANIMOAMSET_7B, 1
+ frame BATTLEANIMOAMSET_7C, 1
+ frame BATTLEANIMOAMSET_7D, 1
+ frame BATTLEANIMOAMSET_7C, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_7B, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_7A, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_79, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_78, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_77, 1, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_61:
+ frame BATTLEANIMOAMSET_1B, 4
+ frame BATTLEANIMOAMSET_7E, 4
+ dorestart
+
+.Frameset_62:
+ frame BATTLEANIMOAMSET_1B, 4, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_7E, 4, OAM_X_FLIP
+ dorestart
+
+.Frameset_63:
+ frame BATTLEANIMOAMSET_7F, 8
+ endanim
+
+.Frameset_64:
+ frame BATTLEANIMOAMSET_25, 8
+ endanim
+
+.Frameset_65:
+ frame BATTLEANIMOAMSET_80, 8
+ endanim
+
+.Frameset_66:
+ frame BATTLEANIMOAMSET_83, 7
+ frame BATTLEANIMOAMSET_82, 7
+ frame BATTLEANIMOAMSET_81, 7
+ frame BATTLEANIMOAMSET_82, 7
+ frame BATTLEANIMOAMSET_83, 7
+ frame BATTLEANIMOAMSET_82, 7
+ frame BATTLEANIMOAMSET_81, 7
+ delanim
+
+.Frameset_67:
+ frame BATTLEANIMOAMSET_1B, 16
+ delanim
+
+.Frameset_68:
+ dowait 15
+ frame BATTLEANIMOAMSET_84, 15
+ frame BATTLEANIMOAMSET_85, 15
+ frame BATTLEANIMOAMSET_29, 15
+ frame BATTLEANIMOAMSET_28, 15
+ frame BATTLEANIMOAMSET_86, 32
+ delanim
+
+.Frameset_69:
+ frame BATTLEANIMOAMSET_1B, 3
+ frame BATTLEANIMOAMSET_87, 3
+ frame BATTLEANIMOAMSET_88, 3
+ frame BATTLEANIMOAMSET_89, 3
+ delanim
+
+.Frameset_6a:
+ frame BATTLEANIMOAMSET_8A, 2
+ frame BATTLEANIMOAMSET_8B, 2
+ frame BATTLEANIMOAMSET_8C, 2
+ frame BATTLEANIMOAMSET_8D, 2
+ delanim
+
+.Frameset_6b:
+ frame BATTLEANIMOAMSET_61, 2
+ frame BATTLEANIMOAMSET_62, 2
+ frame BATTLEANIMOAMSET_63, 2
+ endanim
+
+.Frameset_6c:
+ frame BATTLEANIMOAMSET_65, 2
+ frame BATTLEANIMOAMSET_66, 2
+ frame BATTLEANIMOAMSET_67, 2
+ endanim
+
+.Frameset_6d:
+ frame BATTLEANIMOAMSET_8E, 8
+ endanim
+
+.Frameset_6e:
+ frame BATTLEANIMOAMSET_8E, 8, OAM_X_FLIP
+ endanim
+
+.Frameset_6f:
+ frame BATTLEANIMOAMSET_8F, 16
+ frame BATTLEANIMOAMSET_90, 16
+ dorestart
+
+.Frameset_70:
+ frame BATTLEANIMOAMSET_91, 16
+ frame BATTLEANIMOAMSET_92, 16
+ dorestart
+
+.Frameset_71:
+ frame BATTLEANIMOAMSET_93, 8
+ endanim
+
+.Frameset_72:
+ frame BATTLEANIMOAMSET_1E, 8
+ endanim
+
+.Frameset_73:
+ frame BATTLEANIMOAMSET_1B, 7
+ frame BATTLEANIMOAMSET_94, 7
+ dorestart
+
+.Frameset_74:
+ frame BATTLEANIMOAMSET_95, 8
+ endanim
+
+.Frameset_75:
+ frame BATTLEANIMOAMSET_96, 8
+ endanim
+
+.Frameset_76:
+ frame BATTLEANIMOAMSET_95, 8
+ endanim
+
+.Frameset_77:
+ frame BATTLEANIMOAMSET_97, 1
+ frame BATTLEANIMOAMSET_97, 1, OAM_X_FLIP
+ dorestart
+
+.Frameset_78:
+ frame BATTLEANIMOAMSET_98, 8
+ endanim
+
+.Frameset_79:
+ frame BATTLEANIMOAMSET_99, 32
+ frame BATTLEANIMOAMSET_99, 32
+ frame BATTLEANIMOAMSET_99, 32
+ frame BATTLEANIMOAMSET_99, 32
+ frame BATTLEANIMOAMSET_99, 32
+ frame BATTLEANIMOAMSET_9A, 8
+ endanim
+
+.Frameset_7b:
+ frame BATTLEANIMOAMSET_9B, 8
+ endanim
+
+.Frameset_7c:
+ frame BATTLEANIMOAMSET_9C, 2
+ frame BATTLEANIMOAMSET_9D, 2
+ frame BATTLEANIMOAMSET_9E, 8
+ dowait 2
+ frame BATTLEANIMOAMSET_9E, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_9E, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_9E, 2
+ delanim
+
+.Frameset_7d:
+ frame BATTLEANIMOAMSET_9F, 8
+ endanim
+
+.Frameset_7f:
+ frame BATTLEANIMOAMSET_0F, 8
+ endanim
+
+.Frameset_80:
+ frame BATTLEANIMOAMSET_6B, 24
+ delanim
+
+.Frameset_81:
+ frame BATTLEANIMOAMSET_A0, 1 ; fallthrough
+.Frameset_82:
+ frame BATTLEANIMOAMSET_A1, 1 ; fallthrough
+.Frameset_83:
+ frame BATTLEANIMOAMSET_A2, 1
+ delanim
+
+.Frameset_84:
+ frame BATTLEANIMOAMSET_A3, 8
+ endanim
+
+.Frameset_85:
+ frame BATTLEANIMOAMSET_A4, 4
+ frame BATTLEANIMOAMSET_A5, 4
+ frame BATTLEANIMOAMSET_A6, 4
+ frame BATTLEANIMOAMSET_A7, 4
+ frame BATTLEANIMOAMSET_A6, 4, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_A5, 4, OAM_X_FLIP
+ dorestart
+
+.Frameset_86:
+ frame BATTLEANIMOAMSET_A8, 4
+ frame BATTLEANIMOAMSET_A9, 4
+ frame BATTLEANIMOAMSET_AA, 4
+ frame BATTLEANIMOAMSET_AB, 4
+ frame BATTLEANIMOAMSET_AA, 4, OAM_X_FLIP
+ frame BATTLEANIMOAMSET_A9, 4, OAM_X_FLIP
+ dorestart
+
+.Frameset_87:
+ frame BATTLEANIMOAMSET_1B, 8
+ endanim
+
+.Frameset_88:
+ frame BATTLEANIMOAMSET_AC, 8
+ endanim
+
+.Frameset_89:
+ frame BATTLEANIMOAMSET_AD, 8
+ endanim
+
+.Frameset_8a:
+ frame BATTLEANIMOAMSET_AE, 8
+ endanim
+
+.Frameset_8b:
+ frame BATTLEANIMOAMSET_AF, 8
+ endanim
+
+.Frameset_8c:
+ frame BATTLEANIMOAMSET_B0, 32
+ delanim
+
+.Frameset_8d:
+ frame BATTLEANIMOAMSET_B1, 7
+ frame BATTLEANIMOAMSET_B1, 7, OAM_X_FLIP
+ dorestart
+
+.Frameset_8e:
+ frame BATTLEANIMOAMSET_B2, 8
+ endanim
+
+.Frameset_8f:
+ frame BATTLEANIMOAMSET_B3, 8
+ endanim
+
+.Frameset_90:
+ frame BATTLEANIMOAMSET_B3, 8, OAM_X_FLIP
+ endanim
+
+.Frameset_91:
+ frame BATTLEANIMOAMSET_B3, 8, OAM_Y_FLIP
+ endanim
+
+.Frameset_92:
+ frame BATTLEANIMOAMSET_B3, 8, OAM_X_FLIP, OAM_Y_FLIP
+ endanim
+
+.Frameset_93:
+ frame BATTLEANIMOAMSET_B5, 8
+ endanim
+
+.Frameset_94:
+ frame BATTLEANIMOAMSET_B5, 8, OAM_X_FLIP
+ endanim
+
+.Frameset_95:
+ frame BATTLEANIMOAMSET_B5, 8, OAM_Y_FLIP
+ endanim
+
+.Frameset_96:
+ frame BATTLEANIMOAMSET_B5, 8, OAM_X_FLIP, OAM_Y_FLIP
+ endanim
+
+.Frameset_97:
+ frame BATTLEANIMOAMSET_B4, 8
+ endanim
+
+.Frameset_98:
+ frame BATTLEANIMOAMSET_6B, 8
+ endanim
+
+.Frameset_99:
+ frame BATTLEANIMOAMSET_B6, 8
+ endanim
+
+.Frameset_9a:
+ frame BATTLEANIMOAMSET_B7, 32
+ endanim
+
+.Frameset_9b:
+ frame BATTLEANIMOAMSET_1B, 32
+ endanim
+
+.Frameset_9c:
+ frame BATTLEANIMOAMSET_B8, 32
+ endanim
+
+.Frameset_9d:
+ frame BATTLEANIMOAMSET_B8, 32, OAM_X_FLIP
+ endanim
+
+.Frameset_9e:
+ frame BATTLEANIMOAMSET_B9, 32
+ endanim
+
+.Frameset_9f:
+ frame BATTLEANIMOAMSET_BA, 32
+ endanim
+
+.Frameset_a0:
+ frame BATTLEANIMOAMSET_BB, 32, OAM_X_FLIP
+ endanim
+
+.Frameset_a1:
+ frame BATTLEANIMOAMSET_BB, 32
+ endanim
+
+.Frameset_a2:
+ frame BATTLEANIMOAMSET_BC, 32
+ endanim
+
+.Frameset_a3:
+ frame BATTLEANIMOAMSET_BD, 11
+ frame BATTLEANIMOAMSET_BE, 11
+ frame BATTLEANIMOAMSET_1B, 11
+ delanim
+
+.Frameset_a4:
+ frame BATTLEANIMOAMSET_BF, 4
+ frame BATTLEANIMOAMSET_C0, 4
+ frame BATTLEANIMOAMSET_C1, 4
+ delanim
+
+.Frameset_a5:
+ frame BATTLEANIMOAMSET_C2, 32
+ frame BATTLEANIMOAMSET_C2, 32
+ delanim
+
+.Frameset_a6:
+ frame BATTLEANIMOAMSET_4B, 2
+ frame BATTLEANIMOAMSET_4C, 2
+ frame BATTLEANIMOAMSET_4D, 32
+ frame BATTLEANIMOAMSET_4D, 32
+ frame BATTLEANIMOAMSET_4D, 32
+ frame BATTLEANIMOAMSET_4F, 1
+ frame BATTLEANIMOAMSET_50, 1
+ frame BATTLEANIMOAMSET_51, 1
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2
+ delanim
+
+.Frameset_a7:
+ frame BATTLEANIMOAMSET_4B, 2, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4D, 32, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4D, 32, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4D, 32, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_4F, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
+ dowait 2
+ frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_a8:
+ frame BATTLEANIMOAMSET_C3, 1
+ frame BATTLEANIMOAMSET_C3, 1, OAM_X_FLIP, OAM_Y_FLIP
+ dorestart
+
+.Frameset_a9:
+ frame BATTLEANIMOAMSET_C4, 32
+ endanim
+
+.Frameset_aa:
+ frame BATTLEANIMOAMSET_C5, 4
+ frame BATTLEANIMOAMSET_C6, 4
+ frame BATTLEANIMOAMSET_C7, 4
+ delanim
+
+.Frameset_ab:
+ frame BATTLEANIMOAMSET_C8, 1
+ frame BATTLEANIMOAMSET_C8, 1, OAM_X_FLIP
+ dorestart
+
+.Frameset_ac:
+ frame BATTLEANIMOAMSET_C9, 3
+ frame BATTLEANIMOAMSET_05, 3
+ delanim
+
+.Frameset_ad:
+ frame BATTLEANIMOAMSET_CA, 32
+ frame BATTLEANIMOAMSET_CB, 3
+ frame BATTLEANIMOAMSET_CA, 3
+ frame BATTLEANIMOAMSET_CB, 3
+ dorestart
+
+.Frameset_ae:
+ frame BATTLEANIMOAMSET_03, 32, OAM_Y_FLIP
+ endanim
+
+.Frameset_b0:
+ frame BATTLEANIMOAMSET_CC, 32
+ endanim
+
+.Frameset_b1:
+ frame BATTLEANIMOAMSET_7F, 2
+ frame BATTLEANIMOAMSET_25, 2
+ frame BATTLEANIMOAMSET_80, 2
+ frame BATTLEANIMOAMSET_25, 2
+ dorestart
+
+.Frameset_b2:
+ frame BATTLEANIMOAMSET_CD, 4
+ frame BATTLEANIMOAMSET_CE, 4
+ frame BATTLEANIMOAMSET_CD, 4, OAM_X_FLIP, OAM_Y_FLIP
+ frame BATTLEANIMOAMSET_CE, 4, OAM_X_FLIP, OAM_Y_FLIP
+ dorestart
+
+.Frameset_b3:
+ frame BATTLEANIMOAMSET_CF, 4
+ frame BATTLEANIMOAMSET_D0, 4
+ frame BATTLEANIMOAMSET_D1, 4
+ frame BATTLEANIMOAMSET_D2, 4
+ delanim
+
+.Frameset_b4:
+ frame BATTLEANIMOAMSET_D3, 32
+ endanim
+
+.Frameset_b5:
+ frame BATTLEANIMOAMSET_D4, 8
+ endanim
+
+.Frameset_b6:
+ frame BATTLEANIMOAMSET_D5, 8
+ endanim
+
+.Frameset_b7:
+ frame BATTLEANIMOAMSET_D6, 8
+ endanim
+
+.Frameset_b8:
+ frame BATTLEANIMOAMSET_D7, 8
+ endanim
diff --git a/data/battle_anims/oam.asm b/data/battle_anims/oam.asm
new file mode 100755
index 00000000..4bf4a331
--- /dev/null
+++ b/data/battle_anims/oam.asm
@@ -0,0 +1,1085 @@
+BattleAnimOAMData:
+; entries correspond to BATTLEANIMOAMSET_* constants
+ ; vtile offset, data length, data pointer
+ dbbw $00, 16, .OAMData_00 ; BATTLEANIMOAMSET_00
+ dbbw $04, 9, .OAMData_01 ; BATTLEANIMOAMSET_01
+ dbbw $08, 4, .OAMData_02 ; BATTLEANIMOAMSET_02
+ dbbw $09, 4, .OAMData_03 ; BATTLEANIMOAMSET_03
+ dbbw $0d, 4, .OAMData_04 ; BATTLEANIMOAMSET_04
+ dbbw $0f, 4, .OAMData_03 ; BATTLEANIMOAMSET_05
+ dbbw $13, 4, .OAMData_04 ; BATTLEANIMOAMSET_06
+ dbbw $04, 16, .OAMData_00 ; BATTLEANIMOAMSET_07
+ dbbw $08, 16, .OAMData_00 ; BATTLEANIMOAMSET_08
+ dbbw $08, 16, .OAMData_09 ; BATTLEANIMOAMSET_09
+ dbbw $00, 4, .OAMData_04 ; BATTLEANIMOAMSET_0A
+ dbbw $02, 4, .OAMData_03 ; BATTLEANIMOAMSET_0B
+ dbbw $06, 2, .OAMData_0c ; BATTLEANIMOAMSET_0C
+ dbbw $07, 2, .OAMData_0c ; BATTLEANIMOAMSET_0D
+ dbbw $02, 4, .OAMData_04 ; BATTLEANIMOAMSET_0E
+ dbbw $04, 1, .OAMData_0f ; BATTLEANIMOAMSET_0F
+ dbbw $05, 1, .OAMData_0f ; BATTLEANIMOAMSET_10
+ dbbw $00, 2, .OAMData_11 ; BATTLEANIMOAMSET_11
+ dbbw $02, 2, .OAMData_11 ; BATTLEANIMOAMSET_12
+ dbbw $00, 4, .OAMData_13 ; BATTLEANIMOAMSET_13
+ dbbw $00, 1, .OAMData_0f ; BATTLEANIMOAMSET_14
+ dbbw $01, 1, .OAMData_0f ; BATTLEANIMOAMSET_15
+ dbbw $02, 1, .OAMData_0f ; BATTLEANIMOAMSET_16
+ dbbw $03, 1, .OAMData_0f ; BATTLEANIMOAMSET_17
+ dbbw $00, 4, .OAMData_02 ; BATTLEANIMOAMSET_18
+ dbbw $01, 16, .OAMData_00 ; BATTLEANIMOAMSET_19
+ dbbw $05, 16, .OAMData_00 ; BATTLEANIMOAMSET_1A
+ dbbw $00, 4, .OAMData_03 ; BATTLEANIMOAMSET_1B
+ dbbw $05, 12, .OAMData_1c ; BATTLEANIMOAMSET_1C
+ dbbw $02, 4, .OAMData_02 ; BATTLEANIMOAMSET_1D
+ dbbw $06, 1, .OAMData_0f ; BATTLEANIMOAMSET_1E
+ dbbw $07, 1, .OAMData_0f ; BATTLEANIMOAMSET_1F
+ dbbw $08, 1, .OAMData_0f ; BATTLEANIMOAMSET_20
+ dbbw $04, 4, .OAMData_03 ; BATTLEANIMOAMSET_21
+ dbbw $09, 22, .OAMData_22 ; BATTLEANIMOAMSET_22
+ dbbw $04, 2, .OAMData_11 ; BATTLEANIMOAMSET_23
+ dbbw $06, 2, .OAMData_11 ; BATTLEANIMOAMSET_24
+ dbbw $0c, 1, .OAMData_0f ; BATTLEANIMOAMSET_25
+ dbbw $0a, 1, .OAMData_0f ; BATTLEANIMOAMSET_26
+ dbbw $0b, 4, .OAMData_02 ; BATTLEANIMOAMSET_27
+ dbbw $08, 4, .OAMData_04 ; BATTLEANIMOAMSET_28
+ dbbw $06, 4, .OAMData_04 ; BATTLEANIMOAMSET_29
+ dbbw $00, 5, .OAMData_2a ; BATTLEANIMOAMSET_2A
+ dbbw $03, 6, .OAMData_2b ; BATTLEANIMOAMSET_2B
+ dbbw $00, 7, .OAMData_2c ; BATTLEANIMOAMSET_2C
+ dbbw $03, 8, .OAMData_2d ; BATTLEANIMOAMSET_2D
+ dbbw $00, 9, .OAMData_2e ; BATTLEANIMOAMSET_2E
+ dbbw $00, 4, .OAMData_2f ; BATTLEANIMOAMSET_2F
+ dbbw $02, 4, .OAMData_30 ; BATTLEANIMOAMSET_30
+ dbbw $04, 6, .OAMData_31 ; BATTLEANIMOAMSET_31
+ dbbw $00, 2, .OAMData_32 ; BATTLEANIMOAMSET_32
+ dbbw $00, 7, .OAMData_33 ; BATTLEANIMOAMSET_33
+ dbbw $00, 14, .OAMData_32 ; BATTLEANIMOAMSET_34
+ dbbw $00, 21, .OAMData_33 ; BATTLEANIMOAMSET_35
+ dbbw $00, 2, .OAMData_36 ; BATTLEANIMOAMSET_36
+ dbbw $00, 6, .OAMData_36 ; BATTLEANIMOAMSET_37
+ dbbw $00, 10, .OAMData_36 ; BATTLEANIMOAMSET_38
+ dbbw $00, 14, .OAMData_36 ; BATTLEANIMOAMSET_39
+ dbbw $00, 2, .OAMData_3a ; BATTLEANIMOAMSET_3A
+ dbbw $00, 6, .OAMData_3a ; BATTLEANIMOAMSET_3B
+ dbbw $00, 10, .OAMData_3a ; BATTLEANIMOAMSET_3C
+ dbbw $00, 14, .OAMData_3a ; BATTLEANIMOAMSET_3D
+ dbbw $00, 4, .OAMData_3e ; BATTLEANIMOAMSET_3E
+ dbbw $00, 16, .OAMData_3e ; BATTLEANIMOAMSET_3F
+ dbbw $00, 26, .OAMData_3e ; BATTLEANIMOAMSET_40
+ dbbw $00, 26, .OAMData_41 ; BATTLEANIMOAMSET_41
+ dbbw $0e, 4, .OAMData_42 ; BATTLEANIMOAMSET_42
+ dbbw $0e, 8, .OAMData_42 ; BATTLEANIMOAMSET_43
+ dbbw $0e, 4, .OAMData_44 ; BATTLEANIMOAMSET_44
+ dbbw $0e, 8, .OAMData_44 ; BATTLEANIMOAMSET_45
+ dbbw $0e, 4, .OAMData_46 ; BATTLEANIMOAMSET_46
+ dbbw $0e, 4, .OAMData_47 ; BATTLEANIMOAMSET_47
+ dbbw $00, 6, .OAMData_48 ; BATTLEANIMOAMSET_48
+ dbbw $03, 4, .OAMData_49 ; BATTLEANIMOAMSET_49
+ dbbw $03, 2, .OAMData_4a ; BATTLEANIMOAMSET_4A
+ dbbw $01, 5, .OAMData_0f ; BATTLEANIMOAMSET_4B
+ dbbw $01, 6, .OAMData_4c ; BATTLEANIMOAMSET_4C
+ dbbw $01, 7, .OAMData_4d ; BATTLEANIMOAMSET_4D
+ dbbw $01, 3, .OAMData_4d ; BATTLEANIMOAMSET_4E
+ dbbw $01, 8, .OAMData_4f ; BATTLEANIMOAMSET_4F
+ dbbw $01, 9, .OAMData_50 ; BATTLEANIMOAMSET_50
+ dbbw $01, 10, .OAMData_51 ; BATTLEANIMOAMSET_51
+ dbbw $01, 6, .OAMData_51 ; BATTLEANIMOAMSET_52
+ dbbw $00, 9, .OAMData_01 ; BATTLEANIMOAMSET_53
+ dbbw $04, 4, .OAMData_02 ; BATTLEANIMOAMSET_54
+ dbbw $05, 4, .OAMData_02 ; BATTLEANIMOAMSET_55
+ dbbw $00, 2, .OAMData_56 ; BATTLEANIMOAMSET_56
+ dbbw $02, 2, .OAMData_56 ; BATTLEANIMOAMSET_57
+ dbbw $04, 2, .OAMData_56 ; BATTLEANIMOAMSET_58
+ dbbw $02, 4, .OAMData_59 ; BATTLEANIMOAMSET_59
+ dbbw $02, 4, .OAMData_5a ; BATTLEANIMOAMSET_5A
+ dbbw $02, 2, .OAMData_0c ; BATTLEANIMOAMSET_5B
+ dbbw $04, 2, .OAMData_0c ; BATTLEANIMOAMSET_5C
+ dbbw $06, 4, .OAMData_5d ; BATTLEANIMOAMSET_5D
+ dbbw $08, 2, .OAMData_0c ; BATTLEANIMOAMSET_5E
+ dbbw $09, 2, .OAMData_0c ; BATTLEANIMOAMSET_5F
+ dbbw $05, 2, .OAMData_60 ; BATTLEANIMOAMSET_60
+ dbbw $00, 2, .OAMData_61 ; BATTLEANIMOAMSET_61
+ dbbw $00, 5, .OAMData_61 ; BATTLEANIMOAMSET_62
+ dbbw $00, 9, .OAMData_61 ; BATTLEANIMOAMSET_63
+ dbbw $09, 9, .OAMData_61 ; BATTLEANIMOAMSET_64
+ dbbw $00, 4, .OAMData_65 ; BATTLEANIMOAMSET_65
+ dbbw $00, 7, .OAMData_65 ; BATTLEANIMOAMSET_66
+ dbbw $00, 9, .OAMData_65 ; BATTLEANIMOAMSET_67
+ dbbw $09, 9, .OAMData_65 ; BATTLEANIMOAMSET_68
+ dbbw $04, 1, .OAMData_69 ; BATTLEANIMOAMSET_69
+ dbbw $05, 2, .OAMData_6a ; BATTLEANIMOAMSET_6A
+ dbbw $06, 4, .OAMData_03 ; BATTLEANIMOAMSET_6B
+ dbbw $0a, 4, .OAMData_03 ; BATTLEANIMOAMSET_6C
+ dbbw $0e, 4, .OAMData_03 ; BATTLEANIMOAMSET_6D
+ dbbw $08, 5, .OAMData_6e ; BATTLEANIMOAMSET_6E
+ dbbw $0d, 3, .OAMData_6f ; BATTLEANIMOAMSET_6F
+ dbbw $01, 8, .OAMData_70 ; BATTLEANIMOAMSET_70
+ dbbw $03, 8, .OAMData_70 ; BATTLEANIMOAMSET_71
+ dbbw $05, 8, .OAMData_70 ; BATTLEANIMOAMSET_72
+ dbbw $07, 8, .OAMData_70 ; BATTLEANIMOAMSET_73
+ dbbw $06, 4, .OAMData_02 ; BATTLEANIMOAMSET_74
+ dbbw $07, 4, .OAMData_02 ; BATTLEANIMOAMSET_75
+ dbbw $0a, 2, .OAMData_76 ; BATTLEANIMOAMSET_76
+ dbbw $00, 1, .OAMData_77 ; BATTLEANIMOAMSET_77
+ dbbw $00, 3, .OAMData_78 ; BATTLEANIMOAMSET_78
+ dbbw $00, 6, .OAMData_79 ; BATTLEANIMOAMSET_79
+ dbbw $00, 9, .OAMData_7a ; BATTLEANIMOAMSET_7A
+ dbbw $00, 12, .OAMData_7b ; BATTLEANIMOAMSET_7B
+ dbbw $00, 14, .OAMData_7c ; BATTLEANIMOAMSET_7C
+ dbbw $00, 15, .OAMData_7d ; BATTLEANIMOAMSET_7D
+ dbbw $04, 4, .OAMData_03 ; BATTLEANIMOAMSET_7E
+ dbbw $08, 4, .OAMData_03 ; BATTLEANIMOAMSET_7F
+ dbbw $0d, 1, .OAMData_0f ; BATTLEANIMOAMSET_80
+ dbbw $0e, 4, .OAMData_81 ; BATTLEANIMOAMSET_81
+ dbbw $10, 1, .OAMData_0f ; BATTLEANIMOAMSET_82
+ dbbw $11, 1, .OAMData_0f ; BATTLEANIMOAMSET_83
+ dbbw $04, 2, .OAMData_6a ; BATTLEANIMOAMSET_84
+ dbbw $05, 2, .OAMData_6a ; BATTLEANIMOAMSET_85
+ dbbw $0a, 4, .OAMData_04 ; BATTLEANIMOAMSET_86
+ dbbw $00, 8, .OAMData_87 ; BATTLEANIMOAMSET_87
+ dbbw $00, 12, .OAMData_88 ; BATTLEANIMOAMSET_88
+ dbbw $00, 16, .OAMData_87 ; BATTLEANIMOAMSET_89
+ dbbw $09, 2, .OAMData_8a ; BATTLEANIMOAMSET_8A
+ dbbw $09, 4, .OAMData_8a ; BATTLEANIMOAMSET_8B
+ dbbw $09, 6, .OAMData_8a ; BATTLEANIMOAMSET_8C
+ dbbw $09, 8, .OAMData_8a ; BATTLEANIMOAMSET_8D
+ dbbw $12, 5, .OAMData_8e ; BATTLEANIMOAMSET_8E
+ dbbw $00, 4, .OAMData_8f ; BATTLEANIMOAMSET_8F
+ dbbw $04, 4, .OAMData_8f ; BATTLEANIMOAMSET_90
+ dbbw $08, 4, .OAMData_8f ; BATTLEANIMOAMSET_91
+ dbbw $0c, 4, .OAMData_8f ; BATTLEANIMOAMSET_92
+ dbbw $00, 6, .OAMData_93 ; BATTLEANIMOAMSET_93
+ dbbw $04, 4, .OAMData_03 ; BATTLEANIMOAMSET_94
+ dbbw $0a, 4, .OAMData_04 ; BATTLEANIMOAMSET_95
+ dbbw $15, 4, .OAMData_30 ; BATTLEANIMOAMSET_96
+ dbbw $04, 4, .OAMData_30 ; BATTLEANIMOAMSET_97
+ dbbw $0c, 4, .OAMData_04 ; BATTLEANIMOAMSET_98
+ dbbw $0a, 4, .OAMData_99 ; BATTLEANIMOAMSET_99
+ dbbw $0c, 4, .OAMData_03 ; BATTLEANIMOAMSET_9A
+ dbbw $00, 36, .OAMData_9b ; BATTLEANIMOAMSET_9B
+ dbbw $0d, 2, .OAMData_9c ; BATTLEANIMOAMSET_9C
+ dbbw $0d, 4, .OAMData_9c ; BATTLEANIMOAMSET_9D
+ dbbw $0d, 6, .OAMData_9c ; BATTLEANIMOAMSET_9E
+ dbbw $02, 8, .OAMData_9f ; BATTLEANIMOAMSET_9F
+ dbbw $08, 7, .OAMData_a0 ; BATTLEANIMOAMSET_A0
+ dbbw $08, 5, .OAMData_a0 ; BATTLEANIMOAMSET_A1
+ dbbw $08, 3, .OAMData_a0 ; BATTLEANIMOAMSET_A2
+ dbbw $00, 16, .OAMData_1c ; BATTLEANIMOAMSET_A3
+ dbbw $00, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A4
+ dbbw $06, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A5
+ dbbw $0c, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A6
+ dbbw $12, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A7
+ dbbw $18, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A8
+ dbbw $1e, 9, .OAMData_a4 ; BATTLEANIMOAMSET_A9
+ dbbw $24, 9, .OAMData_a4 ; BATTLEANIMOAMSET_AA
+ dbbw $2a, 9, .OAMData_a4 ; BATTLEANIMOAMSET_AB
+ dbbw $03, 4, .OAMData_ac ; BATTLEANIMOAMSET_AC
+ dbbw $12, 4, .OAMData_03 ; BATTLEANIMOAMSET_AD
+ dbbw $10, 4, .OAMData_04 ; BATTLEANIMOAMSET_AE
+ dbbw $16, 1, .OAMData_0f ; BATTLEANIMOAMSET_AF
+ dbbw $17, 4, .OAMData_02 ; BATTLEANIMOAMSET_B0
+ dbbw $18, 4, .OAMData_03 ; BATTLEANIMOAMSET_B1
+ dbbw $1c, 4, .OAMData_03 ; BATTLEANIMOAMSET_B2
+ dbbw $20, 3, .OAMData_03 ; BATTLEANIMOAMSET_B3
+ dbbw $23, 4, .OAMData_04 ; BATTLEANIMOAMSET_B4
+ dbbw $25, 3, .OAMData_03 ; BATTLEANIMOAMSET_B5
+ dbbw $17, 4, .OAMData_03 ; BATTLEANIMOAMSET_B6
+ dbbw $0a, 16, .OAMData_00 ; BATTLEANIMOAMSET_B7
+ dbbw $10, 16, .OAMData_1c ; BATTLEANIMOAMSET_B8
+ dbbw $00, 16, .OAMData_1c ; BATTLEANIMOAMSET_B9
+ dbbw $04, 4, .OAMData_03 ; BATTLEANIMOAMSET_BA
+ dbbw $08, 2, .OAMData_11 ; BATTLEANIMOAMSET_BB
+ dbbw $20, 6, .OAMData_bc ; BATTLEANIMOAMSET_BC
+ dbbw $08, 1, .OAMData_0f ; BATTLEANIMOAMSET_BD
+ dbbw $04, 4, .OAMData_03 ; BATTLEANIMOAMSET_BE
+ dbbw $1a, 4, .OAMData_30 ; BATTLEANIMOAMSET_BF
+ dbbw $16, 9, .OAMData_01 ; BATTLEANIMOAMSET_C0
+ dbbw $10, 16, .OAMData_c1 ; BATTLEANIMOAMSET_C1
+ dbbw $09, 6, .OAMData_c2 ; BATTLEANIMOAMSET_C2
+ dbbw $11, 9, .OAMData_c3 ; BATTLEANIMOAMSET_C3
+ dbbw $0e, 4, .OAMData_03 ; BATTLEANIMOAMSET_C4
+ dbbw $0b, 4, .OAMData_30 ; BATTLEANIMOAMSET_C5
+ dbbw $1c, 6, .OAMData_02 ; BATTLEANIMOAMSET_C6
+ dbbw $20, 16, .OAMData_c1 ; BATTLEANIMOAMSET_C7
+ dbbw $05, 6, .OAMData_c8 ; BATTLEANIMOAMSET_C8
+ dbbw $0b, 4, .OAMData_03 ; BATTLEANIMOAMSET_C9
+ dbbw $09, 4, .OAMData_ca ; BATTLEANIMOAMSET_CA
+ dbbw $0b, 4, .OAMData_04 ; BATTLEANIMOAMSET_CB
+ dbbw $11, 13, .OAMData_cc ; BATTLEANIMOAMSET_CC
+ dbbw $00, 9, .OAMData_c3 ; BATTLEANIMOAMSET_CD
+ dbbw $09, 9, .OAMData_c3 ; BATTLEANIMOAMSET_CE
+ dbbw $00, 12, .OAMData_cf ; BATTLEANIMOAMSET_CF
+ dbbw $06, 12, .OAMData_cf ; BATTLEANIMOAMSET_D0
+ dbbw $0c, 12, .OAMData_cf ; BATTLEANIMOAMSET_D1
+ dbbw $12, 12, .OAMData_cf ; BATTLEANIMOAMSET_D2
+ dbbw $00, 13, .OAMData_cc ; BATTLEANIMOAMSET_D3
+ dbbw $00, 7, .OAMData_d4 ; BATTLEANIMOAMSET_D4
+ dbbw $00, 6, .OAMData_d5 ; BATTLEANIMOAMSET_D5
+ dbbw $00, 14, .OAMData_d6 ; BATTLEANIMOAMSET_D6
+ dbbw $00, 12, .OAMData_d7 ; BATTLEANIMOAMSET_D7
+
+.OAMData_11:
+ dbsprite -1, -1, 4, 0, $00, $0
+ dbsprite -1, 0, 4, 0, $01, $0
+
+.OAMData_56:
+ dbsprite -1, -1, 0, 4, $00, $0
+ dbsprite 0, -1, 0, 4, $01, $0
+
+.OAMData_03:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, $0
+ dbsprite -1, 0, 0, 0, $02, $0
+ dbsprite 0, 0, 0, 0, $03, $0
+
+.OAMData_02:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $00, X_FLIP
+ dbsprite -1, 0, 0, 0, $00, Y_FLIP
+ dbsprite 0, 0, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_c3:
+ dbsprite -2, -2, 4, 4, $00, $0
+ dbsprite -1, -2, 4, 4, $01, $0
+ dbsprite 0, -2, 4, 4, $02, $0
+ dbsprite -2, -1, 4, 4, $03, $0
+ dbsprite -1, -1, 4, 4, $04, $0
+ dbsprite 0, -1, 4, 4, $05, $0
+ dbsprite -2, 0, 4, 4, $06, $0
+ dbsprite -1, 0, 4, 4, $07, $0
+ dbsprite 0, 0, 4, 4, $08, $0
+
+.OAMData_01:
+ dbsprite -2, -2, 4, 4, $00, $0
+ dbsprite -1, -2, 4, 4, $01, $0
+ dbsprite 0, -2, 4, 4, $00, X_FLIP
+ dbsprite -2, -1, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $03, $0
+ dbsprite 0, -1, 4, 4, $02, X_FLIP | Y_FLIP
+ dbsprite -2, 0, 4, 4, $00, Y_FLIP
+ dbsprite -1, 0, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 0, 4, 4, $00, X_FLIP | Y_FLIP
+
+.OAMData_cf:
+ dbsprite -2, -2, 4, 0, $00, $0
+ dbsprite -1, -2, 4, 0, $01, $0
+ dbsprite 0, -2, 4, 0, $02, $0
+ dbsprite -2, -1, 4, 0, $03, $0
+ dbsprite -1, -1, 4, 0, $04, $0
+ dbsprite 0, -1, 4, 0, $05, $0
+ dbsprite -2, 0, 4, 0, $05, X_FLIP | Y_FLIP
+ dbsprite -1, 0, 4, 0, $04, X_FLIP | Y_FLIP
+ dbsprite 0, 0, 4, 0, $03, X_FLIP | Y_FLIP
+ dbsprite -2, 1, 4, 0, $02, X_FLIP | Y_FLIP
+ dbsprite -1, 1, 4, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 1, 4, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_1c:
+ dbsprite -2, -2, 0, 0, $00, $0
+ dbsprite -1, -2, 0, 0, $01, $0
+ dbsprite 0, -2, 0, 0, $02, $0
+ dbsprite 1, -2, 0, 0, $03, $0
+ dbsprite -2, -1, 0, 0, $04, $0
+ dbsprite -1, -1, 0, 0, $05, $0
+ dbsprite 0, -1, 0, 0, $06, $0
+ dbsprite 1, -1, 0, 0, $07, $0
+ dbsprite -2, 0, 0, 0, $08, $0
+ dbsprite -1, 0, 0, 0, $09, $0
+ dbsprite 0, 0, 0, 0, $0a, $0
+ dbsprite 1, 0, 0, 0, $0b, $0
+ dbsprite -2, 1, 0, 0, $0c, $0
+ dbsprite -1, 1, 0, 0, $0d, $0
+ dbsprite 0, 1, 0, 0, $0e, $0
+ dbsprite 1, 1, 0, 0, $0f, $0
+
+.OAMData_00:
+ dbsprite -2, -2, 0, 0, $00, $0
+ dbsprite -1, -2, 0, 0, $01, $0
+ dbsprite -2, -1, 0, 0, $02, $0
+ dbsprite -1, -1, 0, 0, $03, $0
+ dbsprite 0, -2, 0, 0, $01, X_FLIP
+ dbsprite 1, -2, 0, 0, $00, X_FLIP
+ dbsprite 0, -1, 0, 0, $03, X_FLIP
+ dbsprite 1, -1, 0, 0, $02, X_FLIP
+ dbsprite -2, 0, 0, 0, $02, Y_FLIP
+ dbsprite -1, 0, 0, 0, $03, Y_FLIP
+ dbsprite -2, 1, 0, 0, $00, Y_FLIP
+ dbsprite -1, 1, 0, 0, $01, Y_FLIP
+ dbsprite 0, 0, 0, 0, $03, X_FLIP | Y_FLIP
+ dbsprite 1, 0, 0, 0, $02, X_FLIP | Y_FLIP
+ dbsprite 0, 1, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_09:
+ dbsprite -3, -3, 4, 4, $00, $0
+ dbsprite -2, -3, 4, 4, $01, $0
+ dbsprite -3, -2, 4, 4, $02, $0
+ dbsprite -2, -2, 4, 4, $03, $0
+ dbsprite 0, -3, 4, 4, $01, X_FLIP
+ dbsprite 1, -3, 4, 4, $00, X_FLIP
+ dbsprite 0, -2, 4, 4, $03, X_FLIP
+ dbsprite 1, -2, 4, 4, $02, X_FLIP
+ dbsprite -3, 0, 4, 4, $02, Y_FLIP
+ dbsprite -2, 0, 4, 4, $03, Y_FLIP
+ dbsprite -3, 1, 4, 4, $00, Y_FLIP
+ dbsprite -2, 1, 4, 4, $01, Y_FLIP
+ dbsprite 0, 0, 4, 4, $03, X_FLIP | Y_FLIP
+ dbsprite 1, 0, 4, 4, $02, X_FLIP | Y_FLIP
+ dbsprite 0, 1, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 4, 4, $00, X_FLIP | Y_FLIP
+
+.OAMData_0c:
+ dbsprite -1, -1, 0, 4, $00, $0
+ dbsprite 0, -1, 0, 4, $00, X_FLIP
+
+.OAMData_6a:
+ dbsprite -1, 0, 0, 0, $00, $0
+ dbsprite 0, 0, 0, 0, $00, X_FLIP
+
+.OAMData_04:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $00, X_FLIP
+ dbsprite -1, 0, 0, 0, $01, $0
+ dbsprite 0, 0, 0, 0, $01, X_FLIP
+
+.OAMData_5d:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, $0
+ dbsprite -1, 0, 0, 0, $00, Y_FLIP
+ dbsprite 0, 0, 0, 0, $01, Y_FLIP
+
+.OAMData_13:
+ dbsprite -1, -1, 0, 2, $02, $0
+ dbsprite -1, 0, 0, 2, $03, $0
+ dbsprite 0, -2, 0, 6, $02, $0
+ dbsprite 0, -1, 0, 6, $03, $0
+
+.OAMData_22:
+ dbsprite -11, 1, 0, 0, $01, $0
+ dbsprite -10, 0, 0, 0, $02, $0
+ dbsprite -9, 0, 0, 0, $03, $0
+ dbsprite -8, 0, 0, 0, $00, $0
+ dbsprite -7, 0, 0, 0, $03, $0
+ dbsprite -6, 0, 0, 0, $00, $0
+ dbsprite -5, 0, 0, 0, $03, $0
+ dbsprite -4, 0, 0, 0, $00, $0
+ dbsprite -3, 0, 0, 0, $03, $0
+ dbsprite -2, 0, 0, 0, $00, $0
+ dbsprite -1, 0, 0, 0, $01, $0
+ dbsprite 0, -1, 0, 0, $02, $0
+ dbsprite 1, -1, 0, 0, $03, $0
+ dbsprite 2, -1, 0, 0, $00, $0
+ dbsprite 3, -1, 0, 0, $03, $0
+ dbsprite 4, -1, 0, 0, $00, $0
+ dbsprite 5, -1, 0, 0, $03, $0
+ dbsprite 6, -1, 0, 0, $00, $0
+ dbsprite 7, -1, 0, 0, $03, $0
+ dbsprite 8, -1, 0, 0, $00, $0
+ dbsprite 9, -1, 0, 0, $01, $0
+ dbsprite 10, -2, 0, 0, $02, $0
+
+.OAMData_2a:
+ dbsprite -1, -3, 0, 4, $00, $0
+ dbsprite 0, -3, 0, 4, $00, X_FLIP
+ dbsprite -1, -2, 0, 4, $01, $0
+ dbsprite 0, -2, 0, 4, $01, X_FLIP
+ dbsprite -1, -1, 4, 4, $02, $0
+
+.OAMData_2b:
+ dbsprite -1, -4, 0, 4, $00, $0
+ dbsprite 0, -4, 0, 4, $00, X_FLIP
+ dbsprite -1, -3, 0, 4, $01, $0
+ dbsprite 0, -3, 0, 4, $01, X_FLIP
+ dbsprite -1, -2, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+
+.OAMData_2c:
+ dbsprite -1, -5, 0, 4, $00, $0
+ dbsprite 0, -5, 0, 4, $00, X_FLIP
+ dbsprite -1, -4, 0, 4, $01, $0
+ dbsprite 0, -4, 0, 4, $01, X_FLIP
+ dbsprite -1, -3, 4, 4, $02, $0
+ dbsprite -1, -2, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+
+.OAMData_2d:
+ dbsprite -1, -6, 0, 4, $00, $0
+ dbsprite 0, -6, 0, 4, $00, X_FLIP
+ dbsprite -1, -5, 0, 4, $01, $0
+ dbsprite 0, -5, 0, 4, $01, X_FLIP
+ dbsprite -1, -4, 4, 4, $02, $0
+ dbsprite -1, -3, 4, 4, $02, $0
+ dbsprite -1, -2, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+
+.OAMData_2e:
+ dbsprite -1, -7, 0, 4, $00, $0
+ dbsprite 0, -7, 0, 4, $00, X_FLIP
+ dbsprite -1, -6, 0, 4, $01, $0
+ dbsprite 0, -6, 0, 4, $01, X_FLIP
+ dbsprite -1, -5, 4, 4, $02, $0
+ dbsprite -1, -4, 4, 4, $02, $0
+ dbsprite -1, -3, 4, 4, $02, $0
+ dbsprite -1, -2, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+
+.OAMData_2f:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $00, X_FLIP
+ dbsprite -1, 0, 0, 0, $01, $0
+ dbsprite 0, 0, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_30:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, $0
+ dbsprite -1, 0, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 0, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_31:
+ dbsprite -1, -2, 0, 4, $00, $0
+ dbsprite 0, -2, 0, 4, $01, $0
+ dbsprite -1, -1, 0, 4, $02, $0
+ dbsprite 0, -1, 0, 4, $03, $0
+ dbsprite -1, 0, 0, 4, $04, $0
+ dbsprite 0, 0, 0, 4, $05, $0
+
+.OAMData_76:
+ dbsprite -1, -1, 0, 5, $00, $0
+ dbsprite 0, -1, 0, 1, $00, $0
+
+.OAMData_32:
+ dbsprite -2, -1, 4, 0, $00, $0
+ dbsprite 0, -1, 4, 0, $00, $0
+ dbsprite -2, -3, 4, 0, $00, $0
+ dbsprite 0, -3, 4, 0, $00, $0
+ dbsprite -3, -2, 4, 0, $00, $0
+ dbsprite -2, -2, 4, 0, $01, $0
+ dbsprite -1, -2, 4, 0, $00, $0
+ dbsprite 0, -2, 4, 0, $01, $0
+ dbsprite 1, -2, 4, 0, $00, $0
+ dbsprite -4, -1, 4, 0, $00, $0
+ dbsprite -3, -1, 4, 0, $01, $0
+ dbsprite -1, -1, 4, 0, $01, $0
+ dbsprite 1, -1, 4, 0, $01, $0
+ dbsprite 2, -1, 4, 0, $00, $0
+
+.OAMData_33:
+ dbsprite -2, -2, 4, 0, $00, $0
+ dbsprite 0, -2, 4, 0, $00, $0
+ dbsprite -3, -1, 4, 0, $00, $0
+ dbsprite -2, -1, 4, 0, $01, $0
+ dbsprite -1, -1, 4, 0, $00, $0
+ dbsprite 0, -1, 4, 0, $01, $0
+ dbsprite 1, -1, 4, 0, $00, $0
+ dbsprite -2, -4, 4, 0, $00, $0
+ dbsprite 0, -4, 4, 0, $00, $0
+ dbsprite -3, -3, 4, 0, $00, $0
+ dbsprite -2, -3, 4, 0, $01, $0
+ dbsprite -1, -3, 4, 0, $00, $0
+ dbsprite 0, -3, 4, 0, $01, $0
+ dbsprite 1, -3, 4, 0, $00, $0
+ dbsprite -4, -2, 4, 0, $00, $0
+ dbsprite -3, -2, 4, 0, $01, $0
+ dbsprite -1, -2, 4, 0, $01, $0
+ dbsprite 1, -2, 4, 0, $01, $0
+ dbsprite 2, -2, 4, 0, $00, $0
+ dbsprite -4, -1, 4, 0, $01, $0
+ dbsprite 2, -1, 4, 0, $01, $0
+
+.OAMData_36:
+ dbsprite -1, -7, 0, 4, $00, $0
+ dbsprite 0, -7, 0, 4, $01, $0
+ dbsprite -1, -6, 0, 4, $02, $0
+ dbsprite 0, -6, 0, 4, $03, $0
+ dbsprite -1, -5, 0, 4, $04, $0
+ dbsprite 0, -5, 0, 4, $05, $0
+ dbsprite -1, -4, 0, 4, $06, $0
+ dbsprite 0, -4, 0, 4, $07, $0
+ dbsprite -1, -3, 0, 4, $08, $0
+ dbsprite 0, -3, 0, 4, $09, $0
+ dbsprite -1, -2, 0, 4, $0a, $0
+ dbsprite 0, -2, 0, 4, $0b, $0
+ dbsprite -1, -1, 0, 4, $0c, $0
+ dbsprite 0, -1, 0, 4, $0d, $0
+
+.OAMData_3a:
+ dbsprite -1, -7, 0, 4, $0c, $0
+ dbsprite 0, -7, 0, 4, $0d, $0
+ dbsprite -1, -6, 0, 4, $08, $0
+ dbsprite 0, -6, 0, 4, $09, $0
+ dbsprite -1, -5, 0, 4, $04, $0
+ dbsprite 0, -5, 0, 4, $05, $0
+ dbsprite -1, -4, 0, 4, $00, $0
+ dbsprite 0, -4, 0, 4, $01, $0
+ dbsprite -1, -3, 0, 4, $02, $0
+ dbsprite 0, -3, 0, 4, $03, $0
+ dbsprite 0, -2, 0, 4, $02, $0
+ dbsprite 1, -2, 0, 4, $03, $0
+ dbsprite 0, -1, 0, 4, $0a, $0
+ dbsprite 1, -1, 0, 4, $0b, $0
+
+.OAMData_3e:
+ dbsprite -2, 1, 0, 4, $00, Y_FLIP
+ dbsprite -1, 1, 0, 4, $02, Y_FLIP
+ dbsprite 0, 1, 0, 4, $02, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 0, 4, $00, X_FLIP | Y_FLIP
+ dbsprite -3, -1, 0, 4, $09, X_FLIP
+ dbsprite -2, -1, 0, 4, $08, X_FLIP
+ dbsprite -1, -1, 0, 4, $06, $0
+ dbsprite 0, -1, 0, 4, $07, $0
+ dbsprite 1, -1, 0, 4, $08, $0
+ dbsprite 2, -1, 0, 4, $09, $0
+ dbsprite -3, 0, 0, 4, $01, X_FLIP
+ dbsprite -2, 0, 0, 4, $00, X_FLIP
+ dbsprite -1, 0, 0, 4, $0c, $0
+ dbsprite 0, 0, 0, 4, $0d, $0
+ dbsprite 1, 0, 0, 4, $00, $0
+ dbsprite 2, 0, 0, 4, $01, $0
+ dbsprite -2, -3, 0, 4, $00, $0
+ dbsprite -1, -3, 0, 4, $02, $0
+ dbsprite 0, -3, 0, 4, $02, X_FLIP
+ dbsprite 1, -3, 0, 4, $00, X_FLIP
+ dbsprite -3, -2, 0, 4, $03, X_FLIP
+ dbsprite -2, -2, 0, 4, $02, X_FLIP
+ dbsprite -1, -2, 0, 4, $04, $0
+ dbsprite 0, -2, 0, 4, $05, $0
+ dbsprite 1, -2, 0, 4, $02, $0
+ dbsprite 2, -2, 0, 4, $03, $0
+
+.OAMData_41:
+ dbsprite -2, -3, 0, 4, $00, $0
+ dbsprite -1, -3, 0, 4, $02, $0
+ dbsprite 0, -3, 0, 4, $02, X_FLIP
+ dbsprite 1, -3, 0, 4, $00, X_FLIP
+ dbsprite -3, -2, 4, 4, $00, $0
+ dbsprite -2, -2, 4, 4, $01, $0
+ dbsprite -1, -2, 0, 4, $05, X_FLIP
+ dbsprite 0, -2, 0, 4, $04, X_FLIP
+ dbsprite 0, -2, 4, 4, $01, X_FLIP
+ dbsprite 1, -2, 4, 4, $00, X_FLIP
+ dbsprite -3, -1, 4, 4, $02, $0
+ dbsprite -2, -1, 4, 4, $03, $0
+ dbsprite -1, -1, 0, 4, $07, X_FLIP
+ dbsprite 0, -1, 0, 4, $06, X_FLIP
+ dbsprite 0, -1, 4, 4, $03, X_FLIP
+ dbsprite 1, -1, 4, 4, $02, X_FLIP
+ dbsprite -3, 0, 4, 4, $04, $0
+ dbsprite -2, 0, 4, 4, $05, $0
+ dbsprite -1, 0, 0, 4, $0d, X_FLIP
+ dbsprite 0, 0, 0, 4, $0c, X_FLIP
+ dbsprite 0, 0, 4, 4, $05, X_FLIP
+ dbsprite 1, 0, 4, 4, $04, X_FLIP
+ dbsprite -2, 1, 0, 4, $00, Y_FLIP
+ dbsprite -1, 1, 0, 4, $02, Y_FLIP
+ dbsprite 0, 1, 0, 4, $02, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 0, 4, $00, X_FLIP | Y_FLIP
+
+.OAMData_42:
+ dbsprite -1, -3, 4, 0, $02, $0
+ dbsprite -1, 2, 4, 0, $02, X_FLIP | Y_FLIP
+ dbsprite -3, -1, 0, 4, $01, $0
+ dbsprite 2, -1, 0, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -1, -4, 4, 0, $02, $0
+ dbsprite -1, 3, 4, 0, $02, X_FLIP | Y_FLIP
+ dbsprite -4, -1, 0, 4, $01, $0
+ dbsprite 3, -1, 0, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_44:
+ dbsprite -3, -3, 5, 5, $00, X_FLIP
+ dbsprite 1, -3, 3, 5, $00, $0
+ dbsprite -3, 1, 5, 3, $00, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 3, 3, $00, Y_FLIP
+ dbsprite -4, -4, 5, 5, $00, X_FLIP
+ dbsprite 2, -4, 3, 5, $00, $0
+ dbsprite -4, 2, 5, 3, $00, X_FLIP | Y_FLIP
+ dbsprite 2, 2, 3, 3, $00, Y_FLIP
+
+.OAMData_46:
+ dbsprite -1, -3, 4, 4, $02, $0
+ dbsprite -1, 1, 4, 4, $02, X_FLIP | Y_FLIP
+ dbsprite -3, -1, 4, 4, $01, $0
+ dbsprite 1, -1, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_47:
+ dbsprite -2, -2, 0, 0, $00, X_FLIP
+ dbsprite 1, -2, 0, 0, $00, $0
+ dbsprite -2, 1, 0, 0, $00, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 0, 0, $00, Y_FLIP
+
+.OAMData_48:
+ dbsprite -1, -3, 4, 0, $00, $0
+ dbsprite -1, -2, 2, 0, $00, $0
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite -1, 0, 0, 0, $00, $0
+ dbsprite -1, 1, 2, 0, $00, $0
+ dbsprite -1, 2, 4, 0, $00, $0
+
+.OAMData_49:
+ dbsprite -2, -1, 0, 4, $00, X_FLIP
+ dbsprite -1, -1, 0, 2, $00, X_FLIP
+ dbsprite 0, -1, 0, 2, $00, $0
+ dbsprite 1, -1, 0, 4, $00, $0
+
+.OAMData_4a:
+ dbsprite -1, -1, 0, 4, $00, X_FLIP | Y_FLIP
+ dbsprite 0, -1, 0, 4, $00, Y_FLIP
+
+.OAMData_0f:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, -1, 4, 4, $01, $0
+ dbsprite -1, -1, 4, 4, $01, X_FLIP
+ dbsprite -2, 0, 4, 4, $01, Y_FLIP
+ dbsprite -1, 0, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_4c:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, 0, 6, 2, $00, $0
+ dbsprite -3, 0, 6, 2, $01, $0
+ dbsprite -2, 0, 6, 2, $01, X_FLIP
+ dbsprite -3, 1, 6, 2, $01, Y_FLIP
+ dbsprite -2, 1, 6, 2, $01, X_FLIP | Y_FLIP
+
+.OAMData_4d:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, 0, 6, 2, $00, $0
+ dbsprite -2, 1, 0, 0, $00, $0
+ dbsprite -3, 1, 0, 0, $01, $0
+ dbsprite -2, 1, 0, 0, $01, X_FLIP
+ dbsprite -3, 2, 0, 0, $01, Y_FLIP
+ dbsprite -2, 2, 0, 0, $01, X_FLIP | Y_FLIP
+
+.OAMData_4f:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, 0, 6, 2, $00, $0
+ dbsprite -2, 1, 0, 0, $00, $0
+ dbsprite -3, 1, 2, 6, $00, $0
+ dbsprite -4, 1, 2, 6, $01, $0
+ dbsprite -3, 1, 2, 6, $01, X_FLIP
+ dbsprite -4, 2, 2, 6, $01, Y_FLIP
+ dbsprite -3, 2, 2, 6, $01, X_FLIP | Y_FLIP
+
+.OAMData_50:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, 0, 6, 2, $00, $0
+ dbsprite -2, 1, 0, 0, $00, $0
+ dbsprite -3, 1, 2, 6, $00, $0
+ dbsprite -4, 2, 4, 4, $00, $0
+ dbsprite -5, 2, 4, 4, $01, $0
+ dbsprite -4, 2, 4, 4, $01, X_FLIP
+ dbsprite -5, 3, 4, 4, $01, Y_FLIP
+ dbsprite -4, 3, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_51:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -2, 0, 6, 2, $00, $0
+ dbsprite -2, 1, 0, 0, $00, $0
+ dbsprite -3, 1, 2, 6, $00, $0
+ dbsprite -4, 2, 4, 4, $00, $0
+ dbsprite -5, 3, 6, 2, $00, $0
+ dbsprite -6, 3, 6, 2, $01, $0
+ dbsprite -5, 3, 6, 2, $01, X_FLIP
+ dbsprite -6, 4, 6, 2, $01, Y_FLIP
+ dbsprite -5, 4, 6, 2, $01, X_FLIP | Y_FLIP
+
+.OAMData_59:
+ dbsprite -2, -1, 0, 4, $00, $0
+ dbsprite -1, -1, 0, 4, $01, $0
+ dbsprite 0, -1, 0, 4, $01, X_FLIP
+ dbsprite 1, -1, 0, 4, $00, X_FLIP
+
+.OAMData_5a:
+ dbsprite -2, -1, 0, 4, $02, $0
+ dbsprite -1, -1, 0, 4, $01, $0
+ dbsprite 0, -1, 0, 4, $01, X_FLIP
+ dbsprite 1, -1, 0, 4, $02, X_FLIP
+
+.OAMData_60:
+ dbsprite -1, -1, 4, 0, $00, $0
+
+.OAMData_69:
+ dbsprite -1, 0, 4, 0, $00, $0
+
+.OAMData_61:
+ dbsprite -4, -1, 4, 4, $00, $0
+ dbsprite -3, -1, 4, 4, $01, $0
+ dbsprite -2, -1, 4, 4, $02, $0
+ dbsprite -1, -1, 4, 4, $03, $0
+ dbsprite 0, -1, 4, 4, $04, $0
+ dbsprite 1, -1, 4, 4, $05, $0
+ dbsprite 2, -1, 4, 4, $06, $0
+ dbsprite 1, -2, 4, 4, $07, $0
+ dbsprite 2, -2, 4, 4, $08, $0
+
+.OAMData_65:
+ dbsprite -4, -2, 4, 4, $08, X_FLIP
+ dbsprite -3, -2, 4, 4, $07, X_FLIP
+ dbsprite -4, -1, 4, 4, $06, X_FLIP
+ dbsprite -3, -1, 4, 4, $05, X_FLIP
+ dbsprite -2, -1, 4, 4, $04, X_FLIP
+ dbsprite -1, -1, 4, 4, $03, X_FLIP
+ dbsprite 0, -1, 4, 4, $02, X_FLIP
+ dbsprite 1, -1, 4, 4, $01, X_FLIP
+ dbsprite 2, -1, 4, 4, $00, X_FLIP
+
+.OAMData_d4:
+ dbsprite -4, 0, 4, 0, $00, OBP_NUM
+ dbsprite -3, 0, 4, 0, $01, OBP_NUM
+ dbsprite -2, 0, 4, 0, $02, OBP_NUM
+ dbsprite -1, 0, 4, 0, $03, OBP_NUM
+ dbsprite 0, 0, 4, 0, $04, OBP_NUM
+ dbsprite 1, 0, 4, 0, $05, OBP_NUM
+ dbsprite 2, 0, 4, 0, $06, OBP_NUM
+
+.OAMData_d6:
+ dbsprite -4, -1, 4, 0, $00, OBP_NUM
+ dbsprite -4, 0, 4, 0, $01, OBP_NUM
+ dbsprite -3, -1, 4, 0, $02, OBP_NUM
+ dbsprite -3, 0, 4, 0, $03, OBP_NUM
+ dbsprite -2, -1, 4, 0, $04, OBP_NUM
+ dbsprite -2, 0, 4, 0, $05, OBP_NUM
+ dbsprite -1, -1, 4, 0, $06, OBP_NUM
+ dbsprite -1, 0, 4, 0, $07, OBP_NUM
+ dbsprite 0, -1, 4, 0, $08, OBP_NUM
+ dbsprite 0, 0, 4, 0, $09, OBP_NUM
+ dbsprite 1, -1, 4, 0, $0a, OBP_NUM
+ dbsprite 1, 0, 4, 0, $0b, OBP_NUM
+ dbsprite 2, -1, 4, 0, $0c, OBP_NUM
+ dbsprite 2, 0, 4, 0, $0d, OBP_NUM
+
+.OAMData_d5:
+ dbsprite -3, 0, 0, 0, $00, $1 | OBP_NUM
+ dbsprite -2, 0, 0, 0, $01, $1 | OBP_NUM
+ dbsprite -1, 0, 0, 0, $02, $1 | OBP_NUM
+ dbsprite 0, 0, 0, 0, $03, $1 | OBP_NUM
+ dbsprite 1, 0, 0, 0, $04, $1 | OBP_NUM
+ dbsprite 2, 0, 0, 0, $05, $1 | OBP_NUM
+
+.OAMData_d7:
+ dbsprite -3, 0, 0, 0, $00, $1 | OBP_NUM
+ dbsprite -3, 1, 0, 0, $01, $1 | OBP_NUM
+ dbsprite -2, 0, 0, 0, $02, $1 | OBP_NUM
+ dbsprite -2, 1, 0, 0, $03, $1 | OBP_NUM
+ dbsprite -1, 0, 0, 0, $04, $1 | OBP_NUM
+ dbsprite -1, 1, 0, 0, $05, $1 | OBP_NUM
+ dbsprite 0, 0, 0, 0, $06, $1 | OBP_NUM
+ dbsprite 0, 1, 0, 0, $07, $1 | OBP_NUM
+ dbsprite 1, 0, 0, 0, $08, $1 | OBP_NUM
+ dbsprite 1, 1, 0, 0, $09, $1 | OBP_NUM
+ dbsprite 2, 0, 0, 0, $0a, $1 | OBP_NUM
+ dbsprite 2, 1, 0, 0, $0b, $1 | OBP_NUM
+
+.OAMData_6e:
+ dbsprite 0, -2, 4, 4, $00, $0
+ dbsprite -2, -1, 4, 4, $01, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+ dbsprite 0, -1, 4, 4, $03, $0
+ dbsprite -2, 0, 4, 4, $04, $0
+
+.OAMData_6f:
+ dbsprite -2, -1, 4, 4, $00, $0
+ dbsprite -1, -1, 4, 4, $01, $0
+ dbsprite 0, -1, 4, 4, $02, $0
+
+.OAMData_77:
+ dbsprite 1, -4, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_78:
+ dbsprite 1, -4, 4, 4, $00, $0
+ dbsprite 0, -4, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, -3, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_79:
+ dbsprite 1, -4, 4, 4, $01, $0
+ dbsprite 0, -4, 4, 4, $00, $0
+ dbsprite -1, -4, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, -3, 4, 4, $00, $0
+ dbsprite 0, -3, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, -2, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_7a:
+ dbsprite -2, -4, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -1, -4, 4, 4, $00, $0
+ dbsprite 0, -4, 4, 4, $01, $0
+ dbsprite -1, -3, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 0, -3, 4, 4, $00, $0
+ dbsprite 1, -3, 4, 4, $01, $0
+ dbsprite 0, -2, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, -2, 4, 4, $00, $0
+ dbsprite 1, -1, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_7b:
+ dbsprite -3, -4, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -2, -4, 4, 4, $00, $0
+ dbsprite -1, -4, 4, 4, $01, $0
+ dbsprite -2, -3, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -1, -3, 4, 4, $00, $0
+ dbsprite 0, -3, 4, 4, $01, $0
+ dbsprite -1, -2, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 0, -2, 4, 4, $00, $0
+ dbsprite 1, -2, 4, 4, $01, $0
+ dbsprite 0, -1, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, -1, 4, 4, $00, $0
+ dbsprite 1, 0, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_7c:
+ dbsprite -3, -4, 4, 4, $00, $0
+ dbsprite -2, -4, 4, 4, $01, $0
+ dbsprite -3, -3, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -2, -3, 4, 4, $00, $0
+ dbsprite -1, -3, 4, 4, $01, $0
+ dbsprite -2, -2, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -1, -2, 4, 4, $00, $0
+ dbsprite 0, -2, 4, 4, $01, $0
+ dbsprite -1, -1, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 0, -1, 4, 4, $00, $0
+ dbsprite 1, -1, 4, 4, $01, $0
+ dbsprite 0, 0, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, 0, 4, 4, $00, $0
+ dbsprite 1, 1, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_7d:
+ dbsprite -3, -4, 4, 4, $01, $0
+ dbsprite -3, -3, 4, 4, $00, $0
+ dbsprite -2, -3, 4, 4, $01, $0
+ dbsprite -3, -2, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -2, -2, 4, 4, $00, $0
+ dbsprite -1, -2, 4, 4, $01, $0
+ dbsprite -2, -1, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite 0, -1, 4, 4, $01, $0
+ dbsprite -1, 0, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 0, 4, 4, $00, $0
+ dbsprite 1, 0, 4, 4, $01, $0
+ dbsprite 0, 1, 4, 4, $01, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 4, 4, $00, $0
+ dbsprite 1, 2, 4, 4, $01, X_FLIP | Y_FLIP
+
+.OAMData_70:
+ dbsprite -1, -2, 0, 0, $00, $0
+ dbsprite -1, -1, 0, 0, $01, $0
+ dbsprite 0, -2, 0, 0, $00, X_FLIP
+ dbsprite 0, -1, 0, 0, $01, X_FLIP
+ dbsprite -1, 0, 0, 0, $01, Y_FLIP
+ dbsprite -1, 1, 0, 0, $00, Y_FLIP
+ dbsprite 0, 0, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 1, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_81:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, $0
+ dbsprite -1, 0, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 0, 0, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_87:
+ dbsprite -1, -2, 0, 4, $00, $0
+ dbsprite 0, -2, 0, 4, $01, $0
+ dbsprite -1, -1, 0, 4, $02, $0
+ dbsprite 0, -1, 0, 4, $03, $0
+ dbsprite -1, -1, 0, 4, $00, $0
+ dbsprite 0, -1, 0, 4, $01, $0
+ dbsprite -1, 0, 0, 4, $02, $0
+ dbsprite 0, 0, 0, 4, $03, $0
+ dbsprite -1, -3, 0, 4, $00, $0
+ dbsprite 0, -3, 0, 4, $01, $0
+ dbsprite -1, -2, 0, 4, $02, $0
+ dbsprite 0, -2, 0, 4, $03, $0
+ dbsprite -1, 0, 0, 4, $00, $0
+ dbsprite 0, 0, 0, 4, $01, $0
+ dbsprite -1, 1, 0, 4, $02, $0
+ dbsprite 0, 1, 0, 4, $03, $0
+
+.OAMData_88:
+ dbsprite -1, -2, 0, 0, $00, $0
+ dbsprite 0, -2, 0, 0, $01, $0
+ dbsprite -1, -1, 0, 0, $02, $0
+ dbsprite 0, -1, 0, 0, $03, $0
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, $0
+ dbsprite -1, 0, 0, 0, $02, $0
+ dbsprite 0, 0, 0, 0, $03, $0
+ dbsprite -1, 0, 0, 0, $00, $0
+ dbsprite 0, 0, 0, 0, $01, $0
+ dbsprite -1, 1, 0, 0, $02, $0
+ dbsprite 0, 1, 0, 0, $03, $0
+
+.OAMData_8a:
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite 0, -1, 4, 0, $00, $0
+ dbsprite 1, -2, 4, 4, $00, $0
+ dbsprite 2, -2, 4, 0, $00, $0
+ dbsprite 3, -3, 4, 4, $00, $0
+ dbsprite 4, -3, 4, 0, $00, $0
+ dbsprite 5, -4, 4, 0, $00, $0
+ dbsprite 6, -5, 4, 4, $00, $0
+
+.OAMData_8e:
+ dbsprite -1, -3, 4, 4, $00, $0
+ dbsprite -1, -2, 4, 4, $01, $0
+ dbsprite -1, -1, 4, 4, $02, $0
+ dbsprite -1, 0, 4, 4, $01, Y_FLIP
+ dbsprite -1, 1, 4, 4, $00, Y_FLIP
+
+.OAMData_8f:
+ dbsprite -2, -1, 0, 4, $00, $0
+ dbsprite -1, -1, 0, 4, $01, $0
+ dbsprite 0, -1, 0, 4, $02, $0
+ dbsprite 1, -1, 0, 4, $03, $0
+
+.OAMData_93:
+ dbsprite -2, -1, 4, 0, $00, $0
+ dbsprite -1, -1, 4, 0, $01, $0
+ dbsprite 0, -1, 4, 0, $02, $0
+ dbsprite -2, 0, 4, 0, $03, $0
+ dbsprite -1, 0, 4, 0, $04, $0
+ dbsprite 0, 0, 4, 0, $05, $0
+
+.OAMData_99:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $05, $0
+ dbsprite -1, 0, 0, 0, $01, $0
+ dbsprite 0, 0, 0, 0, $05, $0
+
+.OAMData_9b:
+ dbsprite 1, -4, 0, 4, $00, $0
+ dbsprite 2, -4, 0, 4, $01, $0
+ dbsprite -1, -3, 0, 4, $02, $0
+ dbsprite 0, -3, 0, 4, $03, $0
+ dbsprite 1, -3, 0, 4, $04, $0
+ dbsprite 2, -3, 0, 4, $05, $0
+ dbsprite 3, -3, 0, 4, $06, $0
+ dbsprite -2, -2, 0, 4, $07, $0
+ dbsprite -1, -2, 0, 4, $08, $0
+ dbsprite 0, -2, 0, 4, $09, $0
+ dbsprite 1, -2, 0, 4, $0a, $0
+ dbsprite 2, -2, 0, 4, $0b, $0
+ dbsprite 3, -2, 0, 4, $0c, $0
+ dbsprite 4, -2, 0, 4, $0d, $0
+ dbsprite -3, -1, 0, 4, $0e, $0
+ dbsprite -2, -1, 0, 4, $0f, $0
+ dbsprite -1, -1, 0, 4, $10, $0
+ dbsprite 0, -1, 0, 4, $11, $0
+ dbsprite 1, -1, 0, 4, $12, $0
+ dbsprite 2, -1, 0, 4, $13, $0
+ dbsprite -5, 0, 0, 4, $14, $0
+ dbsprite -4, 0, 0, 4, $15, $0
+ dbsprite -3, 0, 0, 4, $16, $0
+ dbsprite -2, 0, 0, 4, $17, $0
+ dbsprite -1, 0, 0, 4, $18, $0
+ dbsprite 0, 0, 0, 4, $19, $0
+ dbsprite 1, 0, 0, 4, $1a, $0
+ dbsprite 2, 0, 0, 4, $1b, $0
+ dbsprite 3, 0, 0, 4, $1c, $0
+ dbsprite -5, 1, 0, 4, $1d, $0
+ dbsprite -4, 1, 0, 4, $1e, $0
+ dbsprite -2, 1, 0, 4, $1f, $0
+ dbsprite -1, 1, 0, 4, $20, $0
+ dbsprite 0, 1, 0, 4, $21, $0
+ dbsprite 1, 1, 0, 4, $22, $0
+ dbsprite 0, 2, 0, 4, $23, $0
+
+.OAMData_9c:
+ dbsprite -1, 0, 0, 4, $02, $0
+ dbsprite 0, 0, 0, 4, $03, $0
+ dbsprite -1, -1, 0, 4, $01, $0
+ dbsprite 0, -1, 0, 4, $01, X_FLIP
+ dbsprite -1, -2, 0, 4, $00, $0
+ dbsprite 0, -2, 0, 4, $00, X_FLIP
+
+.OAMData_9f:
+ dbsprite -2, -1, 0, 0, $00, $0
+ dbsprite -1, -1, 0, 0, $01, $0
+ dbsprite 0, -1, 0, 0, $02, $0
+ dbsprite 1, -1, 0, 0, $03, $0
+ dbsprite -2, 0, 0, 0, $04, $0
+ dbsprite -1, 0, 0, 0, $05, $0
+ dbsprite 0, 0, 0, 0, $06, $0
+ dbsprite 1, 0, 0, 0, $07, $0
+
+.OAMData_a0:
+ dbsprite -1, -2, 4, 4, $00, $0
+ dbsprite -1, -1, 4, 4, $00, $0
+ dbsprite -1, 0, 4, 4, $00, $0
+ dbsprite -1, -3, 4, 4, $00, $0
+ dbsprite -1, 1, 4, 4, $00, $0
+ dbsprite -1, -4, 4, 4, $00, $0
+ dbsprite -1, 2, 4, 4, $00, $0
+
+.OAMData_a4:
+ dbsprite -2, -2, 4, 4, $00, $0
+ dbsprite -1, -2, 4, 4, $01, $0
+ dbsprite 0, -2, 4, 4, $02, $0
+ dbsprite -2, -1, 4, 4, $03, $0
+ dbsprite -1, -1, 4, 4, $04, $0
+ dbsprite 0, -1, 4, 4, $05, $0
+ dbsprite -2, 0, 4, 4, $00, Y_FLIP
+ dbsprite -1, 0, 4, 4, $01, Y_FLIP
+ dbsprite 0, 0, 4, 4, $02, Y_FLIP
+
+.OAMData_ac:
+ dbsprite -2, -1, 0, 4, $00, $0
+ dbsprite -1, -1, 0, 4, $01, $0
+ dbsprite 0, -1, 0, 4, $01, X_FLIP
+ dbsprite 1, -1, 0, 4, $00, X_FLIP
+
+.OAMData_bc:
+ dbsprite -3, -1, 0, 4, $00, $0
+ dbsprite -2, -1, 0, 4, $01, $0
+ dbsprite -1, -1, 0, 4, $02, $0
+ dbsprite 0, -1, 0, 4, $02, X_FLIP
+ dbsprite 1, -1, 0, 4, $01, X_FLIP
+ dbsprite 2, -1, 0, 4, $00, X_FLIP
+
+.OAMData_c1:
+ dbsprite -2, -2, 0, 0, $00, $0
+ dbsprite -1, -2, 0, 0, $01, $0
+ dbsprite 0, -2, 0, 0, $02, $0
+ dbsprite 1, -2, 0, 0, $00, X_FLIP
+ dbsprite -2, -1, 0, 0, $03, $0
+ dbsprite -1, -1, 0, 0, $04, $0
+ dbsprite 0, -1, 0, 0, $04, X_FLIP
+ dbsprite 1, -1, 0, 0, $05, $0
+ dbsprite -2, 0, 0, 0, $05, X_FLIP | Y_FLIP
+ dbsprite -1, 0, 0, 0, $04, Y_FLIP
+ dbsprite 0, 0, 0, 0, $04, X_FLIP | Y_FLIP
+ dbsprite 1, 0, 0, 0, $03, X_FLIP | Y_FLIP
+ dbsprite -2, 1, 0, 0, $00, Y_FLIP
+ dbsprite -1, 1, 0, 0, $02, X_FLIP | Y_FLIP
+ dbsprite 0, 1, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite 1, 1, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_c2:
+ dbsprite -2, -1, 0, 0, $00, $0
+ dbsprite -1, -1, 0, 0, $01, $0
+ dbsprite 0, -1, 0, 0, $00, X_FLIP | Y_FLIP
+ dbsprite -1, 0, 0, 0, $00, $0
+ dbsprite 0, 0, 0, 0, $01, $0
+ dbsprite 1, 0, 0, 0, $00, X_FLIP | Y_FLIP
+
+.OAMData_c8:
+ dbsprite 1, -1, 4, 0, $00, $0
+ dbsprite 2, -1, 4, 0, $01, $0
+ dbsprite -1, 0, 4, 0, $02, $0
+ dbsprite 0, 0, 4, 0, $03, $0
+ dbsprite 1, 0, 4, 0, $04, $0
+ dbsprite 2, 0, 4, 0, $05, $0
+
+.OAMData_ca:
+ dbsprite -1, -1, 0, 0, $00, $0
+ dbsprite 0, -1, 0, 0, $01, X_FLIP | Y_FLIP
+ dbsprite -1, 0, 0, 0, $01, $0
+ dbsprite 0, 0, 0, 0, $01, X_FLIP
+
+.OAMData_cc:
+ dbsprite -13, -2, 4, 0, $00, $0
+ dbsprite -11, -4, 4, 0, $00, $0
+ dbsprite -9, -1, 4, 0, $00, $0
+ dbsprite -7, -5, 4, 0, $00, $0
+ dbsprite -5, -3, 4, 0, $00, $0
+ dbsprite -3, -5, 4, 0, $00, $0
+ dbsprite -1, -3, 4, 0, $00, $0
+ dbsprite 0, -3, 4, 0, $00, $0
+ dbsprite 2, -5, 4, 0, $00, $0
+ dbsprite 4, 0, 4, 0, $00, $0
+ dbsprite 6, -2, 4, 0, $00, $0
+ dbsprite 8, -4, 4, 0, $00, $0
+ dbsprite 10, -2, 4, 0, $00, $0
diff --git a/data/battle_anims/object_gfx.asm b/data/battle_anims/object_gfx.asm
new file mode 100755
index 00000000..432e513d
--- /dev/null
+++ b/data/battle_anims/object_gfx.asm
@@ -0,0 +1,50 @@
+anim_obj_gfx: MACRO
+; # tiles, label
+ db \1
+ dba \2
+ENDM
+
+AnimObjGFX:
+; entries correspond to ANIM_GFX_* constants
+ anim_obj_gfx 0, AnimObj00GFX
+ anim_obj_gfx 21, AnimObjHitGFX
+ anim_obj_gfx 6, AnimObjCutGFX
+ anim_obj_gfx 6, AnimObjFireGFX
+ anim_obj_gfx 20, AnimObjWaterGFX
+ anim_obj_gfx 26, AnimObjLightningGFX
+ anim_obj_gfx 18, AnimObjPlantGFX
+ anim_obj_gfx 12, AnimObjSmokeGFX
+ anim_obj_gfx 9, AnimObjExplosionGFX
+ anim_obj_gfx 17, AnimObjRocksGFX
+ anim_obj_gfx 6, AnimObjIceGFX
+ anim_obj_gfx 10, AnimObjPokeBallGFX
+ anim_obj_gfx 9, AnimObjPoisonGFX
+ anim_obj_gfx 13, AnimObjBubbleGFX
+ anim_obj_gfx 16, AnimObjNoiseGFX
+ anim_obj_gfx 2, AnimObjPowderGFX
+ anim_obj_gfx 11, AnimObjBeamGFX
+ anim_obj_gfx 9, AnimObjSpeedGFX
+ anim_obj_gfx 9, AnimObjChargeGFX
+ anim_obj_gfx 19, AnimObjWindGFX
+ anim_obj_gfx 10, AnimObjWhipGFX
+ anim_obj_gfx 12, AnimObjEggGFX
+ anim_obj_gfx 18, AnimObjRopeGFX
+ anim_obj_gfx 13, AnimObjPsychicGFX
+ anim_obj_gfx 10, AnimObjReflectGFX
+ anim_obj_gfx 27, AnimObjStatusGFX
+ anim_obj_gfx 12, AnimObjSandGFX
+ anim_obj_gfx 14, AnimObjWebGFX
+ anim_obj_gfx 16, AnimObjHazeGFX
+ anim_obj_gfx 7, AnimObjHornGFX
+ anim_obj_gfx 8, AnimObjFlowerGFX
+ anim_obj_gfx 40, AnimObjMiscGFX
+ anim_obj_gfx 36, AnimObjSkyAttackGFX
+ anim_obj_gfx 16, AnimObjGlobeGFX
+ anim_obj_gfx 48, AnimObjShapesGFX
+ anim_obj_gfx 18, AnimObjObjectsGFX
+ anim_obj_gfx 38, AnimObjShineGFX
+ anim_obj_gfx 35, AnimObjAngelsGFX
+ anim_obj_gfx 18, AnimObjWaveGFX
+ anim_obj_gfx 24, AnimObjAeroblastGFX
+ anim_obj_gfx 1, NULL
+ anim_obj_gfx 1, NULL
diff --git a/data/battle_anims/objects.asm b/data/battle_anims/objects.asm
new file mode 100755
index 00000000..7c6e0759
--- /dev/null
+++ b/data/battle_anims/objects.asm
@@ -0,0 +1,208 @@
+ABSOLUTE_X EQU $00
+RELATIVE_X EQU $01
+
+battleanimobj: MACRO
+ db \1 ; flags
+ ; bit 7: priority
+ ; bit 6: y flip (for enemy)
+ ; bit 5: x flip (for enemy)
+ ; bit 0: enable enemy animation coord fixing (x = $b4 - x; see below for y)
+ db \2 ; enemy animation y fix param
+ ; if $FF: y = y + 5 tiles
+ ; else: y = -y - (1 tile) * (is_softboiled_animation)
+ db \3 ; video sequence
+ db \4 ; callback
+ db \5 ; palette
+ db \6 ; tile offset
+ENDM
+
+BattleAnimObjects:
+; entries correspond to ANIM_OBJ_* constants
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_00
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_01
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_02
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_03
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_04
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_05
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_03, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_06
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_04, BATTLEANIMFUNC_1B, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_07
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_08
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_06, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_FANG
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_07, BATTLEANIMFUNC_09, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_0A
+ battleanimobj RELATIVE_X, $aa, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_10, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_EMBER
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0E, BATTLEANIMFUNC_04, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_DRAGON_RAGE
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_03, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_FLAMETHROWER
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_08, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_FIRE_SPIN
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_0A, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_FIRE_BLAST
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_03, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_BURNED
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_12, BATTLEANIMFUNC_08, PAL_BATTLE_OB_BLUE, ANIM_GFX_ICE ; ANIM_OBJ_BLIZZARD
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_13, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_ICE ; ANIM_OBJ_12
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_14, BATTLEANIMFUNC_01, PAL_BATTLE_OB_BLUE, ANIM_GFX_ICE ; ANIM_OBJ_ICE_BEAM
+ battleanimobj RELATIVE_X | X_FLIP, $78, BATTLEANIMFRAMESET_16, BATTLEANIMFUNC_RAZOR_LEAF, PAL_BATTLE_OB_GREEN, ANIM_GFX_PLANT ; ANIM_OBJ_RAZOR_LEAF
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_12, PAL_BATTLE_OB_RED, ANIM_GFX_POKE_BALL ; ANIM_OBJ_POKE_BALL
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_13, PAL_BATTLE_OB_RED, ANIM_GFX_POKE_BALL ; ANIM_OBJ_POKE_BALL_BLOCKED
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, PAL_BATTLE_OB_RED, ANIM_GFX_EXPLOSION ; ANIM_OBJ_17
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, PAL_BATTLE_OB_RED, ANIM_GFX_EXPLOSION ; ANIM_OBJ_18
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_1D, BATTLEANIMFUNC_06, PAL_BATTLE_OB_GRAY, ANIM_GFX_POISON ; ANIM_OBJ_19
+ battleanimobj RELATIVE_X, $b4, BATTLEANIMFRAMESET_1F, BATTLEANIMFUNC_38, PAL_BATTLE_OB_GRAY, ANIM_GFX_POISON ; ANIM_OBJ_1A
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SMOKE ; ANIM_OBJ_1B
+ battleanimobj RELATIVE_X, $a0, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SMOKE ; ANIM_OBJ_BALL_POOF
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_07, PAL_BATTLE_OB_BROWN, ANIM_GFX_ROCKS ; ANIM_OBJ_BIG_ROCK
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_1A, BATTLEANIMFUNC_07, PAL_BATTLE_OB_BROWN, ANIM_GFX_ROCKS ; ANIM_OBJ_SMALL_ROCK
+ battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_1B, BATTLEANIMFUNC_36, PAL_BATTLE_OB_BROWN, ANIM_GFX_ROCKS ; ANIM_OBJ_STRENGTH
+ battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_84, BATTLEANIMFUNC_36, PAL_BATTLE_OB_BLUE, ANIM_GFX_GLOBE ; ANIM_OBJ_SEISMIC_TOSS
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_0C, PAL_BATTLE_OB_BLUE, ANIM_GFX_BUBBLE ; ANIM_OBJ_BUBBLE
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_23, BATTLEANIMFUNC_0D, PAL_BATTLE_OB_BLUE, ANIM_GFX_BUBBLE ; ANIM_OBJ_SURF
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_0E, PAL_BATTLE_OB_GRAY, ANIM_GFX_NOISE ; ANIM_OBJ_SING
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $80, BATTLEANIMFRAMESET_27, BATTLEANIMFUNC_0F, PAL_BATTLE_OB_BLUE, ANIM_GFX_WATER ; ANIM_OBJ_WATER_GUN
+ battleanimobj RELATIVE_X, $b4, BATTLEANIMFRAMESET_2A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_WATER ; ANIM_OBJ_HYDRO_PUMP
+ battleanimobj RELATIVE_X, $40, BATTLEANIMFRAMESET_2B, BATTLEANIMFUNC_11, PAL_BATTLE_OB_GREEN, ANIM_GFX_POWDER ; ANIM_OBJ_POWDER
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_2C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_BEAM ; ANIM_OBJ_27
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, PAL_BATTLE_OB_YELLOW, ANIM_GFX_BEAM ; ANIM_OBJ_28
+ battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_2E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_ICE ; ANIM_OBJ_ICE_BUILDUP
+ battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_2F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_ICE ; ANIM_OBJ_FROZEN
+ battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_14, PAL_BATTLE_OB_BROWN, ANIM_GFX_SPEED ; ANIM_OBJ_MASTER_BALL_SPARKLE
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_14, PAL_BATTLE_OB_YELLOW, ANIM_GFX_BUBBLE ; ANIM_OBJ_RECOVER
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_31, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_2D
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_32, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_2E
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_33, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_2F
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_15, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_THUNDER_WAVE
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_36, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_31
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_37, BATTLEANIMFUNC_03, PAL_BATTLE_OB_GRAY, ANIM_GFX_EXPLOSION ; ANIM_OBJ_LIGHTNING_BOLT
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_38, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_33
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_39, BATTLEANIMFUNC_03, PAL_BATTLE_OB_GRAY, ANIM_GFX_EXPLOSION ; ANIM_OBJ_34
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_3A, BATTLEANIMFUNC_16, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_CLAMP
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_3C, BATTLEANIMFUNC_17, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_BITE
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_3E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_37
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_3F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_38
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_40, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_39
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_41, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_3A
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_42, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_3B
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_18, PAL_BATTLE_OB_GREEN, ANIM_GFX_CHARGE ; ANIM_OBJ_3C
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_44, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GREEN, ANIM_GFX_CHARGE ; ANIM_OBJ_3D
+ battleanimobj RELATIVE_X | X_FLIP, $b8, BATTLEANIMFRAMESET_45, BATTLEANIMFUNC_19, PAL_BATTLE_OB_GRAY, ANIM_GFX_WIND ; ANIM_OBJ_GUST
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_46, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_3F
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_47, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_40
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_48, BATTLEANIMFUNC_1A, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_41
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_49, BATTLEANIMFUNC_1A, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_42
+ battleanimobj RELATIVE_X | X_FLIP, $98, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_SONICBOOM_JP
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_4B, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_44
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_4C, BATTLEANIMFUNC_1C, PAL_BATTLE_OB_GREEN, ANIM_GFX_CHARGE ; ANIM_OBJ_ABSORB
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_4D, BATTLEANIMFUNC_1D, PAL_BATTLE_OB_GRAY, ANIM_GFX_EGG ; ANIM_OBJ_EGG
+ battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_51, BATTLEANIMFUNC_1E, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_47
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_52, BATTLEANIMFUNC_1F, PAL_BATTLE_OB_GREEN, ANIM_GFX_ROPE ; ANIM_OBJ_48
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_54, BATTLEANIMFUNC_1F, PAL_BATTLE_OB_GREEN, ANIM_GFX_ROPE ; ANIM_OBJ_49
+ battleanimobj RELATIVE_X | X_FLIP, $68, BATTLEANIMFRAMESET_56, BATTLEANIMFUNC_LEECH_SEED, PAL_BATTLE_OB_GREEN, ANIM_GFX_PLANT ; ANIM_OBJ_LEECH_SEED
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_59, BATTLEANIMFUNC_21, PAL_BATTLE_OB_GRAY, ANIM_GFX_NOISE ; ANIM_OBJ_4B
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_5C, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, ANIM_GFX_PSYCHIC ; ANIM_OBJ_WAVE
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_5D, BATTLEANIMFUNC_22, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_CONFUSE_RAY
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $88, BATTLEANIMFRAMESET_5F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_BEAM ; ANIM_OBJ_4E
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $88, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, PAL_BATTLE_OB_YELLOW, ANIM_GFX_BEAM ; ANIM_OBJ_4F
+ battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_REFLECT ; ANIM_OBJ_SCREEN
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_REFLECT ; ANIM_OBJ_HARDEN
+ battleanimobj RELATIVE_X | X_FLIP, $50, BATTLEANIMFRAMESET_61, BATTLEANIMFUNC_23, PAL_BATTLE_OB_YELLOW, ANIM_GFX_STATUS ; ANIM_OBJ_CHICK
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_63, BATTLEANIMFUNC_24, PAL_BATTLE_OB_GRAY, ANIM_GFX_STATUS ; ANIM_OBJ_AMNESIA
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_66, BATTLEANIMFUNC_25, PAL_BATTLE_OB_GRAY, ANIM_GFX_STATUS ; ANIM_OBJ_ASLEEP
+ battleanimobj RELATIVE_X, $50, BATTLEANIMFRAMESET_1C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_POISON ; ANIM_OBJ_SKULL
+ battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_67, BATTLEANIMFUNC_26, PAL_BATTLE_OB_BROWN, ANIM_GFX_SAND ; ANIM_OBJ_56
+ battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_68, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BROWN, ANIM_GFX_SAND ; ANIM_OBJ_57
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_69, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, ANIM_GFX_SAND ; ANIM_OBJ_58
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_6D, BATTLEANIMFUNC_28, PAL_BATTLE_OB_YELLOW, ANIM_GFX_STATUS ; ANIM_OBJ_PARALYZED
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_6A, BATTLEANIMFUNC_27, PAL_BATTLE_OB_GRAY, ANIM_GFX_WEB ; ANIM_OBJ_STRING_SHOT
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE ; ANIM_OBJ_HAZE
+ battleanimobj RELATIVE_X | X_FLIP, $48, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE ; ANIM_OBJ_MIST
+ battleanimobj RELATIVE_X | X_FLIP, $48, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE ; ANIM_OBJ_SMOG
+ battleanimobj RELATIVE_X | X_FLIP, $78, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_POISON_GAS, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE ; ANIM_OBJ_POISON_GAS
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_71, BATTLEANIMFUNC_HORN, PAL_BATTLE_OB_GRAY, ANIM_GFX_HORN ; ANIM_OBJ_HORN
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_72, BATTLEANIMFUNC_2C, PAL_BATTLE_OB_GRAY, ANIM_GFX_HORN ; ANIM_OBJ_60
+ battleanimobj RELATIVE_X, $48, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_2D, PAL_BATTLE_OB_RED, ANIM_GFX_FLOWER ; ANIM_OBJ_PETAL_DANCE
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_06, PAL_BATTLE_OB_GRAY, ANIM_GFX_EGG ; ANIM_OBJ_SLUDGE_BOMB
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_2E, PAL_BATTLE_OB_BROWN, ANIM_GFX_STATUS ; ANIM_OBJ_PAY_DAY
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_64
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_GRAY, ANIM_GFX_SPEED ; ANIM_OBJ_MIMIC
+ battleanimobj RELATIVE_X, $78, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_POISON_GAS, PAL_BATTLE_OB_RED, ANIM_GFX_OBJECTS ; ANIM_OBJ_ATTRACT
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_30, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_BONEMERANG
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_BONE_CLUB
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_BONE_RUSH
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_08, PAL_BATTLE_OB_YELLOW, ANIM_GFX_OBJECTS ; ANIM_OBJ_SWIFT
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_79, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_KINESIS
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_FLASH
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_SHINY
+ battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_7B, BATTLEANIMFUNC_32, PAL_BATTLE_OB_GRAY, ANIM_GFX_SKY_ATTACK ; ANIM_OBJ_SKY_ATTACK
+ battleanimobj RELATIVE_X | X_FLIP, $98, BATTLEANIMFRAMESET_7C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_WATER ; ANIM_OBJ_LICK
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_7D, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_REFLECT ; ANIM_OBJ_WITHDRAW
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_BLUE, ANIM_GFX_BUBBLE ; ANIM_OBJ_71
+ battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_7E, BATTLEANIMFUNC_33, PAL_BATTLE_OB_YELLOW, ANIM_GFX_CHARGE ; ANIM_OBJ_GROWTH
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_GRAY, ANIM_GFX_EXPLOSION ; ANIM_OBJ_CONVERSION2
+ battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_34, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE ; ANIM_OBJ_SMOKE
+ battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_35, PAL_BATTLE_OB_GRAY, ANIM_GFX_EGG ; ANIM_OBJ_SMOKESCREEN
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_80, BATTLEANIMFUNC_33, PAL_BATTLE_OB_GRAY, ANIM_GFX_WHIP ; ANIM_OBJ_SWORDS_DANCE
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_81, BATTLEANIMFUNC_37, PAL_BATTLE_OB_GRAY, ANIM_GFX_SPEED ; ANIM_OBJ_SPEED_LINE
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_85, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SHAPES ; ANIM_OBJ_SHARPEN
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_86, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SHAPES ; ANIM_OBJ_DEFENSE_CURL
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_87, BATTLEANIMFUNC_39, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_7A
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_3A, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_7B
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_DISABLE
+ battleanimobj RELATIVE_X | X_FLIP | PRIORITY, $88, BATTLEANIMFRAMESET_88, BATTLEANIMFUNC_3B, PAL_BATTLE_OB_BLUE, ANIM_GFX_WIND ; ANIM_OBJ_AGILITY
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_25, PAL_BATTLE_OB_RED, ANIM_GFX_OBJECTS ; ANIM_OBJ_HEART
+ battleanimobj RELATIVE_X, $98, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_34, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_FLAME_WHEEL
+ battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_3C, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_SACRED_FIRE
+ battleanimobj RELATIVE_X | X_FLIP, $68, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_COTTON_SPORE
+ battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_8A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_MILK_DRINK
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_8C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_ANGER
+ battleanimobj RELATIVE_X | X_FLIP, $50, BATTLEANIMFRAMESET_8D, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_MISC ; ANIM_OBJ_84
+ battleanimobj RELATIVE_X, $40, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_40, PAL_BATTLE_OB_GRAY, ANIM_GFX_NOISE ; ANIM_OBJ_85
+ battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_8E, BATTLEANIMFUNC_41, PAL_BATTLE_OB_RED, ANIM_GFX_MISC ; ANIM_OBJ_BATON_PASS
+ battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_8F, BATTLEANIMFUNC_3E, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_LOCK_ON
+ battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_93, BATTLEANIMFUNC_3E, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_MIND_READER
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_97, BATTLEANIMFUNC_3D, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_SAFEGUARD
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_3D, PAL_BATTLE_OB_YELLOW, ANIM_GFX_OBJECTS ; ANIM_OBJ_PROTECT
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_2E, PAL_BATTLE_OB_GRAY, ANIM_GFX_STATUS ; ANIM_OBJ_THIEF
+ battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, ANIM_GFX_EGG ; ANIM_OBJ_OCTAZOOKA
+ battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_35, PAL_BATTLE_OB_RED, ANIM_GFX_STATUS ; ANIM_OBJ_PRESENT
+ battleanimobj RELATIVE_X | X_FLIP, $70, BATTLEANIMFRAMESET_8B, BATTLEANIMFUNC_3F, PAL_BATTLE_OB_GRAY, ANIM_GFX_MISC ; ANIM_OBJ_SPIKES
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_15, BATTLEANIMFUNC_08, PAL_BATTLE_OB_GRAY, ANIM_GFX_ICE ; ANIM_OBJ_POWDER_SNOW
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_02, PAL_BATTLE_OB_RED, ANIM_GFX_FIRE ; ANIM_OBJ_DRAGONBREATH
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_42, PAL_BATTLE_OB_GRAY, ANIM_GFX_EXPLOSION ; ANIM_OBJ_CONVERSION
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_9A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_WEB ; ANIM_OBJ_SPIDER_WEB
+ battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_9B, BATTLEANIMFUNC_35, PAL_BATTLE_OB_RED, ANIM_GFX_OBJECTS ; ANIM_OBJ_93
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_23, PAL_BATTLE_OB_GRAY, ANIM_GFX_ANGELS ; ANIM_OBJ_NIGHTMARE
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9D, BATTLEANIMFUNC_25, PAL_BATTLE_OB_GRAY, ANIM_GFX_ANGELS ; ANIM_OBJ_IN_NIGHTMARE
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_ANGELS ; ANIM_OBJ_LOVELY_KISS
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_ANGELS ; ANIM_OBJ_SWEET_KISS
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $80, BATTLEANIMFRAMESET_9F, BATTLEANIMFUNC_3A, PAL_BATTLE_OB_GREEN, ANIM_GFX_OBJECTS ; ANIM_OBJ_SKETCH
+ battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_A0, BATTLEANIMFUNC_16, PAL_BATTLE_OB_GRAY, ANIM_GFX_OBJECTS ; ANIM_OBJ_99
+ battleanimobj RELATIVE_X | X_FLIP, $70, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_43, PAL_BATTLE_OB_YELLOW, ANIM_GFX_OBJECTS ; ANIM_OBJ_9A
+ battleanimobj RELATIVE_X | X_FLIP, $c0, BATTLEANIMFRAMESET_A2, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, ANIM_GFX_ANGELS ; ANIM_OBJ_DESTINY_BOND
+ battleanimobj RELATIVE_X | X_FLIP, $40, BATTLEANIMFRAMESET_A3, BATTLEANIMFUNC_44, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SHINE ; ANIM_OBJ_MORNING_SUN
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_A4, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SHINE ; ANIM_OBJ_GLIMMER
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_A5, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SHINE ; ANIM_OBJ_MOONLIGHT
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_45, PAL_BATTLE_OB_RED, ANIM_GFX_CHARGE ; ANIM_OBJ_HIDDEN_POWER
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_A6, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_A0
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_A7, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_CUT ; ANIM_OBJ_A1
+ battleanimobj RELATIVE_X | X_FLIP, $00, BATTLEANIMFRAMESET_B4, BATTLEANIMFUNC_4A, PAL_BATTLE_OB_BROWN, ANIM_GFX_POWDER ; ANIM_OBJ_SANDSTORM
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_A8, BATTLEANIMFUNC_02, PAL_BATTLE_OB_YELLOW, ANIM_GFX_LIGHTNING ; ANIM_OBJ_ZAP_CANNON
+ battleanimobj RELATIVE_X | X_FLIP, $40, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_11, PAL_BATTLE_OB_GRAY, ANIM_GFX_ANGELS ; ANIM_OBJ_SPITE
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_A9, BATTLEANIMFUNC_46, PAL_BATTLE_OB_GRAY, ANIM_GFX_OBJECTS ; ANIM_OBJ_CURSE
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_47, PAL_BATTLE_OB_GRAY, ANIM_GFX_NOISE ; ANIM_OBJ_PERISH_SONG
+ battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_AA, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_SHINE ; ANIM_OBJ_FORESIGHT
+ battleanimobj RELATIVE_X | X_FLIP, $b8, BATTLEANIMFRAMESET_AB, BATTLEANIMFUNC_48, PAL_BATTLE_OB_GRAY, ANIM_GFX_WIND ; ANIM_OBJ_RAPID_SPIN
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_AC, BATTLEANIMFUNC_44, PAL_BATTLE_OB_GRAY, ANIM_GFX_WIND ; ANIM_OBJ_SWAGGER
+ battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_AA
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_43, PAL_BATTLE_OB_GRAY, ANIM_GFX_NOISE ; ANIM_OBJ_AB
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_AD, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, ANIM_GFX_PSYCHIC ; ANIM_OBJ_MEAN_LOOK
+ battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_AE, BATTLEANIMFUNC_49, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT ; ANIM_OBJ_AD
+ battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_AF, BATTLEANIMFUNC_01, PAL_BATTLE_OB_YELLOW, ANIM_GFX_SPEED ; ANIM_OBJ_AE
+ battleanimobj RELATIVE_X | X_FLIP, $00, BATTLEANIMFRAMESET_B0, BATTLEANIMFUNC_4A, PAL_BATTLE_OB_GRAY, ANIM_GFX_WATER ; ANIM_OBJ_RAIN
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_4B, PAL_BATTLE_OB_RED, ANIM_GFX_HAZE ; ANIM_OBJ_B0
+ battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_B1, BATTLEANIMFUNC_4C, PAL_BATTLE_OB_GRAY, ANIM_GFX_STATUS ; ANIM_OBJ_PSYCH_UP
+ battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4D, PAL_BATTLE_OB_BROWN, ANIM_GFX_ROCKS ; ANIM_OBJ_ANCIENTPOWER
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_B3, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, ANIM_GFX_AEROBLAST ; ANIM_OBJ_AEROBLAST
+ battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_04, PAL_BATTLE_OB_BLUE, ANIM_GFX_EGG ; ANIM_OBJ_SHADOW_BALL
+ battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4E, PAL_BATTLE_OB_BROWN, ANIM_GFX_ROCKS ; ANIM_OBJ_ROCK_SMASH
+ battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_08, PAL_BATTLE_OB_RED, ANIM_GFX_FLOWER ; ANIM_OBJ_FLOWER
+ battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_4F, PAL_BATTLE_OB_RED, ANIM_GFX_MISC ; ANIM_OBJ_COTTON
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B5, BATTLEANIMFUNC_00, PAL_BATTLE_OB_ENEMY, ANIM_GFX_PLAYERHEAD ; ANIM_OBJ_ENEMYFEET_1ROW
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B6, BATTLEANIMFUNC_00, PAL_BATTLE_OB_PLAYER, ANIM_GFX_ENEMYFEET ; ANIM_OBJ_PLAYERHEAD_1ROW
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_00, PAL_BATTLE_OB_ENEMY, ANIM_GFX_PLAYERHEAD ; ANIM_OBJ_ENEMYFEET_2ROW
+ battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_00, PAL_BATTLE_OB_PLAYER, ANIM_GFX_ENEMYFEET ; ANIM_OBJ_PLAYERHEAD_2ROW
diff --git a/engine/battle_anims/anim_commands.asm b/engine/battle_anims/anim_commands.asm
new file mode 100755
index 00000000..a60a2645
--- /dev/null
+++ b/engine/battle_anims/anim_commands.asm
@@ -0,0 +1,1358 @@
+; Battle animation command interpreter.
+
+PlayBattleAnim:
+ ld c, 6
+.wait
+ call BattleAnimDelayFrame
+ dec c
+ jr nz, .wait
+
+ call BattleAnimAssignPals
+ call BattleAnimRequestPals
+ call BattleAnimDelayFrame
+
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+
+ ld [hl], 1
+ call BattleAnimRunScript
+
+ pop af
+ ldh [hVBlank], a
+
+ ld a, 1
+ ldh [hBGMapMode], a
+
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call WaitSFX
+ ret
+
+BattleAnimRunScript:
+ ld a, [wFXAnimID + 1]
+ and a
+ jr nz, .hi_byte
+
+ ld a, [wOptions]
+ bit 7, a
+ jr nz, .disabled
+
+ call BattleAnimClearHud
+ call RunBattleAnimScript
+
+ call BattleAnimAssignPals
+ call BattleAnimRequestPals
+
+ xor a
+ ldh [hSCX], a
+ ldh [hSCY], a
+ call BattleAnimDelayFrame
+ call BattleAnimRestoreHuds
+
+.disabled
+ ld a, [wNumHits]
+ and a
+ jr z, .done
+
+ ld l, a
+ ld h, 0
+ ld de, ANIM_MISS
+ add hl, de
+ ld a, l
+ ld [wFXAnimID], a
+ ld a, h
+ ld [wFXAnimID + 1], a
+
+.hi_byte
+ call WaitSFX
+ call PlayHitSound
+ call RunBattleAnimScript
+
+.done
+ call BattleAnim_RevertPals
+ ret
+
+RunBattleAnimScript:
+ call ClearBattleAnims
+
+.playframe
+ call RunBattleAnimCommand
+ call _ExecuteBGEffects
+ call BattleAnim_UpdateOAM_All
+ call PushLYOverrides
+ call BattleAnimRequestPals
+
+; Speed up Rollout's animation.
+ ld a, [wFXAnimID + 1]
+ or a
+ jr nz, .not_rollout
+
+ ld a, [wFXAnimID]
+ cp ROLLOUT
+ jr nz, .not_rollout
+
+ ld a, ANIM_BG_2D
+ ld b, NUM_BG_EFFECTS
+ ld de, BG_EFFECT_STRUCT_LENGTH
+ ld hl, wBGEffect1Function
+.find
+ cp [hl]
+ jr z, .done
+ add hl, de
+ dec b
+ jr nz, .find
+
+.not_rollout
+ call BattleAnimDelayFrame
+
+.done
+ ld a, [wBattleAnimFlags]
+ bit BATTLEANIM_STOP_F, a
+ jr z, .playframe
+
+ call BattleAnim_ClearOAM
+ ret
+
+BattleAnimClearHud:
+ call BattleAnimDelayFrame
+ call WaitTop
+ call ClearActorHud
+ ld a, $1
+ ldh [hBGMapMode], a
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call WaitTop
+ ret
+
+BattleAnimRestoreHuds:
+ call BattleAnimDelayFrame
+ call WaitTop
+
+; this block should just be "call UpdateBattleHuds"
+ ld hl, UpdateBattleHuds
+ ld a, BANK(UpdatePlayerHUD)
+ rst FarCall
+
+ ld a, $1
+ ldh [hBGMapMode], a
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call BattleAnimDelayFrame
+ call WaitTop
+ ret
+
+BattleAnimRequestPals:
+ ldh a, [hCGB]
+ and a
+ ret z
+
+ ldh a, [rBGP]
+ ld b, a
+ ld a, [wBGP]
+ cp b
+ call nz, BattleAnim_SetBGPals
+
+ ldh a, [rOBP0]
+ ld b, a
+ ld a, [wOBP0]
+ cp b
+ call nz, BattleAnim_SetOBPals
+ ret
+
+BattleAnimDelayFrame:
+; Like DelayFrame but wastes battery life.
+
+ ld a, 1
+ ld [wVBlankOccurred], a
+.wait
+ ld a, [wVBlankOccurred]
+ and a
+ jr nz, .wait
+ ret
+
+ClearActorHud:
+ ldh 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
+
+Unreferenced_Functioncc1ff:
+ xor a
+ ldh [hBGMapMode], a
+ ld a, LOW(vBGMap0 tile $28)
+ ldh [hBGMapAddress], a
+ ld a, HIGH(vBGMap0 tile $28)
+ ldh [hBGMapAddress + 1], a
+ call WaitBGMap2
+ ld a, $60
+ ldh [hWY], a
+ xor a ; LOW(vBGMap0)
+ ldh [hBGMapAddress], a
+ ld a, HIGH(vBGMap0)
+ ldh [hBGMapAddress + 1], a
+ call BattleAnimDelayFrame
+ ret
+
+BattleAnim_ClearOAM:
+ ld a, [wBattleAnimFlags]
+ bit BATTLEANIM_KEEPSPRITES_F, a
+ jr z, .delete
+
+ ; Instead of deleting the sprites, make them all use PAL_BATTLE_OB_ENEMY
+ ld hl, wVirtualOAMSprite00Attributes
+ ld c, NUM_SPRITE_OAM_STRUCTS
+.loop
+ ld a, [hl]
+ and $ff ^ (PALETTE_MASK | VRAM_BANK_1) ; PAL_BATTLE_OB_ENEMY (0)
+ ld [hli], a
+rept SPRITEOAMSTRUCT_LENGTH - 1
+ inc hl
+endr
+ dec c
+ jr nz, .loop
+ ret
+
+.delete
+ ld hl, wVirtualOAM
+ ld c, wVirtualOAMEnd - wVirtualOAM
+ xor a
+.loop2
+ ld [hli], a
+ dec c
+ jr nz, .loop2
+ ret
+
+RunBattleAnimCommand:
+ call .CheckTimer
+ ret nc
+ call .RunScript
+ ret
+
+.CheckTimer:
+ ld a, [wBattleAnimDelay]
+ and a
+ jr z, .done
+
+ dec a
+ ld [wBattleAnimDelay], a
+ and a
+ ret
+
+.done
+ scf
+ ret
+
+.RunScript:
+.loop
+ call GetBattleAnimByte
+
+ cp anim_ret_command
+ jr nz, .not_done_with_anim
+
+; Return from a subroutine.
+ ld hl, wBattleAnimFlags
+ bit BATTLEANIM_IN_SUBROUTINE_F, [hl]
+ jr nz, .do_anim
+
+ set BATTLEANIM_STOP_F, [hl]
+ ret
+
+.not_done_with_anim
+ cp anim_obj_command
+ jr nc, .do_anim
+
+ ld [wBattleAnimDelay], a
+ ret
+
+.do_anim
+ call .DoCommand
+
+ jr .loop
+
+.DoCommand:
+; Execute battle animation command in [wBattleAnimByte].
+ ld a, [wBattleAnimByte]
+ sub anim_obj_command
+
+ 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
+
+BattleAnimCommands::
+; entries correspond to macros/scripts/battle_anims.asm enumeration
+ dw BattleAnimCmd_Obj
+ dw BattleAnimCmd_1GFX
+ dw BattleAnimCmd_2GFX
+ dw BattleAnimCmd_3GFX
+ dw BattleAnimCmd_4GFX
+ dw BattleAnimCmd_5GFX
+ dw BattleAnimCmd_IncObj
+ dw BattleAnimCmd_SetObj
+ dw BattleAnimCmd_IncBGEffect
+ dw BattleAnimCmd_BattlerGFX_1Row
+ dw BattleAnimCmd_BattlerGFX_2Row
+ dw BattleAnimCmd_CheckPokeball
+ dw BattleAnimCmd_Transform
+ dw BattleAnimCmd_RaiseSub
+ dw BattleAnimCmd_DropSub
+ dw BattleAnimCmd_ResetObp0
+ dw BattleAnimCmd_Sound
+ dw BattleAnimCmd_Cry
+ dw BattleAnimCmd_MinimizeOpp
+ dw BattleAnimCmd_OAMOn
+ dw BattleAnimCmd_OAMOff
+ dw BattleAnimCmd_ClearObjs
+ dw BattleAnimCmd_BeatUp
+ dw BattleAnimCmd_E7
+ dw BattleAnimCmd_E8
+ dw BattleAnimCmd_E9
+ dw BattleAnimCmd_EA ; dummy
+ dw BattleAnimCmd_EB ; dummy
+ dw BattleAnimCmd_EC ; dummy
+ dw BattleAnimCmd_ED ; dummy
+ dw BattleAnimCmd_IfParamAnd
+ dw BattleAnimCmd_JumpUntil
+ dw BattleAnimCmd_BGEffect
+ dw BattleAnimCmd_BGP
+ dw BattleAnimCmd_OBP0
+ dw BattleAnimCmd_OBP1
+ dw BattleAnimCmd_KeepSprites
+ dw BattleAnimCmd_F5
+ dw BattleAnimCmd_F6
+ dw BattleAnimCmd_F7
+ dw BattleAnimCmd_IfParamEqual
+ dw BattleAnimCmd_SetVar
+ dw BattleAnimCmd_IncVar
+ dw BattleAnimCmd_IfVarEqual
+ dw BattleAnimCmd_Jump
+ dw BattleAnimCmd_Loop
+ dw BattleAnimCmd_Call
+ dw BattleAnimCmd_Ret
+
+BattleAnimCmd_E8:
+BattleAnimCmd_E9:
+BattleAnimCmd_EA:
+BattleAnimCmd_EB:
+BattleAnimCmd_EC:
+BattleAnimCmd_ED:
+ ret
+
+BattleAnimCmd_Ret:
+ ld hl, wBattleAnimFlags
+ res BATTLEANIM_IN_SUBROUTINE_F, [hl]
+ ld hl, wBattleAnimParent
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+BattleAnimCmd_Call:
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ push de
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, wBattleAnimParent
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ pop de
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, wBattleAnimFlags
+ set BATTLEANIM_IN_SUBROUTINE_F, [hl]
+ ret
+
+BattleAnimCmd_Jump:
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+BattleAnimCmd_Loop:
+ call GetBattleAnimByte
+ ld hl, wBattleAnimFlags
+ bit BATTLEANIM_IN_LOOP_F, [hl]
+ jr nz, .continue_loop
+ and a
+ jr z, .perpetual
+ dec a
+ set BATTLEANIM_IN_LOOP_F, [hl]
+ ld [wBattleAnimLoops], a
+.continue_loop
+ ld hl, wBattleAnimLoops
+ ld a, [hl]
+ and a
+ jr z, .return_from_loop
+ dec [hl]
+.perpetual
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+.return_from_loop
+ ld hl, wBattleAnimFlags
+ res BATTLEANIM_IN_LOOP_F, [hl]
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc de
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+
+BattleAnimCmd_JumpUntil:
+ ld hl, wBattleAnimParam
+ ld a, [hl]
+ and a
+ jr z, .dont_jump
+
+ dec [hl]
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+.dont_jump
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc de
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+
+BattleAnimCmd_SetVar:
+ call GetBattleAnimByte
+ ld [wBattleAnimVar], a
+ ret
+
+BattleAnimCmd_IncVar:
+ ld hl, wBattleAnimVar
+ inc [hl]
+ ret
+
+BattleAnimCmd_IfVarEqual:
+ call GetBattleAnimByte
+ ld hl, wBattleAnimVar
+ cp [hl]
+ jr z, .jump
+
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc de
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+
+.jump
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+BattleAnimCmd_IfParamEqual:
+ call GetBattleAnimByte
+ ld hl, wBattleAnimParam
+ cp [hl]
+ jr z, .jump
+
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc de
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+
+.jump
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+BattleAnimCmd_IfParamAnd:
+ call GetBattleAnimByte
+ ld e, a
+ ld a, [wBattleAnimParam]
+ and e
+ jr nz, .jump
+
+ ld hl, wBattleAnimAddress
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc de
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+
+.jump
+ call GetBattleAnimByte
+ ld e, a
+ call GetBattleAnimByte
+ ld d, a
+ ld hl, wBattleAnimAddress
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+BattleAnimCmd_Obj:
+; index, x, y, param
+ call GetBattleAnimByte
+ ld [wBattleObjectTempID], a
+ call GetBattleAnimByte
+ ld [wBattleObjectTempXCoord], a
+ call GetBattleAnimByte
+ ld [wBattleObjectTempYCoord], a
+ call GetBattleAnimByte
+ ld [wBattleObjectTempParam], a
+ call QueueBattleAnimation
+ ret
+
+BattleAnimCmd_BGEffect:
+ call GetBattleAnimByte
+ ld [wBattleAnimTemp0], a
+ call GetBattleAnimByte
+ ld [wBattleAnimTemp1], a
+ call GetBattleAnimByte
+ ld [wBattleAnimTemp2], a
+ call GetBattleAnimByte
+ ld [wBattleAnimTemp3], a
+ call _QueueBGEffect
+ ret
+
+BattleAnimCmd_BGP:
+ call GetBattleAnimByte
+ ld [wBGP], a
+ ret
+
+BattleAnimCmd_OBP0:
+ call GetBattleAnimByte
+ ld [wOBP0], a
+ ret
+
+BattleAnimCmd_OBP1:
+ call GetBattleAnimByte
+ ld [wOBP1], a
+ ret
+
+BattleAnimCmd_ResetObp0:
+ ldh a, [hSGB]
+ and a
+ ld a, $e0
+ jr z, .not_sgb
+ ld a, $f0
+.not_sgb
+ ld [wOBP0], a
+ ret
+
+BattleAnimCmd_ClearObjs:
+; BUG: This function only clears the first 6⅔ objects
+ ld hl, wActiveAnimObjects
+ ld a, $a0 ; should be NUM_ANIM_OBJECTS * BATTLEANIMSTRUCT_LENGTH
+.loop
+ ld [hl], 0
+ inc hl
+ dec a
+ jr nz, .loop
+ ret
+
+BattleAnimCmd_1GFX:
+BattleAnimCmd_2GFX:
+BattleAnimCmd_3GFX:
+BattleAnimCmd_4GFX:
+BattleAnimCmd_5GFX:
+ ld a, [wBattleAnimByte]
+ and $f
+ ld c, a
+ ld hl, wBattleAnimTileDict
+ xor a
+ ld [wBattleAnimTemp0], a
+.loop
+ ld a, [wBattleAnimTemp0]
+ cp (vTiles1 - vTiles0) / LEN_2BPP_TILE - BATTLEANIM_BASE_TILE
+ ret nc
+ call GetBattleAnimByte
+ ld [hli], a
+ ld a, [wBattleAnimTemp0]
+ ld [hli], a
+ push bc
+ push hl
+ ld l, a
+ ld h, $0
+rept 4
+ add hl, hl
+endr
+ ld de, vTiles0 tile BATTLEANIM_BASE_TILE
+ add hl, de
+ ld a, [wBattleAnimByte]
+ call LoadBattleAnimGFX
+ ld a, [wBattleAnimTemp0]
+ add c
+ ld [wBattleAnimTemp0], a
+ pop hl
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+
+BattleAnimCmd_IncObj:
+ call GetBattleAnimByte
+ ld e, NUM_ANIM_OBJECTS
+ ld bc, wActiveAnimObjects
+.loop
+ ld hl, BATTLEANIMSTRUCT_INDEX
+ add hl, bc
+ ld d, [hl]
+ ld a, [wBattleAnimByte]
+ cp d
+ jr z, .found
+ ld hl, BATTLEANIMSTRUCT_LENGTH
+ add hl, bc
+ ld c, l
+ ld b, h
+ dec e
+ jr nz, .loop
+ ret
+
+.found
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimCmd_IncBGEffect:
+ call GetBattleAnimByte
+ ld e, NUM_BG_EFFECTS
+ ld bc, wBGEffect1Function
+.loop
+ ld hl, $0
+ add hl, bc
+ ld d, [hl]
+ ld a, [wBattleAnimByte]
+ cp d
+ jr z, .found
+ ld hl, 4
+ add hl, bc
+ ld c, l
+ ld b, h
+ dec e
+ jr nz, .loop
+ ret
+
+.found
+ ld hl, BG_EFFECT_STRUCT_JT_INDEX
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimCmd_SetObj:
+ call GetBattleAnimByte
+ ld e, NUM_ANIM_OBJECTS
+ ld bc, wActiveAnimObjects
+.loop
+ ld hl, BATTLEANIMSTRUCT_INDEX
+ add hl, bc
+ ld d, [hl]
+ ld a, [wBattleAnimByte]
+ cp d
+ jr z, .found
+ ld hl, BATTLEANIMSTRUCT_LENGTH
+ add hl, bc
+ ld c, l
+ ld b, h
+ dec e
+ jr nz, .loop
+ ret
+
+.found
+ call GetBattleAnimByte
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimCmd_BattlerGFX_1Row:
+ ld hl, wBattleAnimTileDict
+.loop
+ ld a, [hl]
+ and a
+ jr z, .okay
+ inc hl
+ inc hl
+ jr .loop
+
+.okay
+ ld a, ANIM_GFX_PLAYERHEAD
+ ld [hli], a
+ ld a, ($80 - 6 - 7) - BATTLEANIM_BASE_TILE
+ ld [hli], a
+ ld a, ANIM_GFX_ENEMYFEET
+ ld [hli], a
+ ld a, ($80 - 6) - BATTLEANIM_BASE_TILE
+ ld [hl], a
+
+ ld hl, vTiles0 tile ($80 - 6 - 7)
+ ld de, vTiles2 tile $06 ; Enemy feet start tile
+ ld a, 7 tiles ; Enemy pic height
+ ld [wBattleAnimTemp0], a
+ ld a, 7 ; Copy 7x1 tiles
+ call .LoadFeet
+ ld de, vTiles2 tile $31 ; Player head start tile
+ ld a, 6 tiles ; Player pic height
+ ld [wBattleAnimTemp0], a
+ ld a, 6 ; Copy 6x1 tiles
+ call .LoadFeet
+ ret
+
+.LoadFeet:
+ push af
+ push hl
+ push de
+ lb bc, BANK(@), 1
+ call Request2bpp
+ pop de
+ ld a, [wBattleAnimTemp0]
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld bc, 1 tiles
+ add hl, bc
+ pop af
+ dec a
+ jr nz, .LoadFeet
+ ret
+
+BattleAnimCmd_BattlerGFX_2Row:
+ ld hl, wBattleAnimTileDict
+.loop
+ ld a, [hl]
+ and a
+ jr z, .okay
+ inc hl
+ inc hl
+ jr .loop
+
+.okay
+ ld a, ANIM_GFX_PLAYERHEAD
+ ld [hli], a
+ ld a, ($80 - 6 * 2 - 7 * 2) - BATTLEANIM_BASE_TILE
+ ld [hli], a
+ ld a, ANIM_GFX_ENEMYFEET
+ ld [hli], a
+ ld a, ($80 - 6 * 2) - BATTLEANIM_BASE_TILE
+ ld [hl], a
+
+ ld hl, vTiles0 tile ($80 - 6 * 2 - 7 * 2)
+ ld de, vTiles2 tile $05 ; Enemy feet start tile
+ ld a, 7 tiles ; Enemy pic height
+ ld [wBattleAnimTemp0], a
+ ld a, 7 ; Copy 7x2 tiles
+ call .LoadHead
+ ld de, vTiles2 tile $31 ; Player head start tile
+ ld a, 6 tiles ; Player pic height
+ ld [wBattleAnimTemp0], a
+ ld a, 6 ; Copy 6x2 tiles
+ call .LoadHead
+ ret
+
+.LoadHead:
+ push af
+ push hl
+ push de
+ lb bc, BANK(@), 2
+ call Request2bpp
+ pop de
+ ld a, [wBattleAnimTemp0]
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld bc, 2 tiles
+ add hl, bc
+ pop af
+ dec a
+ jr nz, .LoadHead
+ ret
+
+BattleAnimCmd_CheckPokeball:
+ callfar GetPokeBallWobble
+ ld a, c
+ ld [wBattleAnimVar], a
+ ret
+
+BattleAnimCmd_E7:
+ ret
+
+BattleAnimCmd_Transform:
+ ld a, [wCurPartySpecies]
+ push af
+
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ ld a, [wTempBattleMonSpecies] ; TempBattleMonSpecies
+ ld [wCurPartySpecies], a ; CurPartySpecies
+ ld hl, wBattleMonDVs ; BattleMonDVs
+ predef GetUnownLetter
+ ld de, vTiles2 tile $00
+ predef GetMonFrontpic
+ jr .done
+
+.player
+ ld a, [wTempEnemyMonSpecies] ; TempEnemyMonSpecies
+ ld [wCurPartySpecies], a ; CurPartySpecies
+ ld hl, wEnemyMonDVs ; EnemyMonDVs
+ predef GetUnownLetter
+ ld de, vTiles2 tile $31
+ predef GetMonBackpic
+
+.done
+ pop af
+ ld [wCurPartySpecies], a
+ ret
+
+BattleAnimCmd_RaiseSub:
+ xor a ; sScratch
+ call OpenSRAM
+
+GetSubstitutePic: ; used only for BANK(GetSubstitutePic)
+ ld hl, sScratch
+ ld bc, (7 * 7) tiles
+.loop
+ xor a
+ ld [hli], a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ ld hl, MonsterSpriteGFX + 0 tiles
+ ld de, sScratch + (2 * 7 + 5) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 1 tiles
+ ld de, sScratch + (3 * 7 + 5) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 2 tiles
+ ld de, sScratch + (2 * 7 + 6) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 3 tiles
+ ld de, sScratch + (3 * 7 + 6) tiles
+ call .CopyTile
+
+ ld hl, vTiles2 tile $00
+ ld de, sScratch
+ lb bc, BANK(GetSubstitutePic), 7 * 7
+ call Request2bpp
+ jr .done
+
+.player
+ ld hl, MonsterSpriteGFX + 4 tiles
+ ld de, sScratch + (2 * 6 + 4) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 5 tiles
+ ld de, sScratch + (3 * 6 + 4) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 6 tiles
+ ld de, sScratch + (2 * 6 + 5) tiles
+ call .CopyTile
+ ld hl, MonsterSpriteGFX + 7 tiles
+ ld de, sScratch + (3 * 6 + 5) tiles
+ call .CopyTile
+
+ ld hl, vTiles2 tile $31
+ ld de, sScratch
+ lb bc, BANK(GetSubstitutePic), 6 * 6
+ call Request2bpp
+
+.done
+ call CloseSRAM
+ ret
+
+.CopyTile:
+ ld bc, 1 tiles
+ ld a, BANK(MonsterSpriteGFX)
+ call FarCopyBytes
+ ret
+
+BattleAnimCmd_MinimizeOpp:
+ xor a
+ call OpenSRAM
+
+GetMinimizePic:
+ ld hl, sScratch
+ ld bc, (7 * 7) tiles
+.loop
+ xor a
+ ld [hli], a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ ld de, sScratch + $1a tiles
+ call CopyMinimizePic
+ ld hl, vTiles2 tile $00
+ ld de, sScratch
+ lb bc, BANK(GetMinimizePic), 7 * 7
+ call Request2bpp
+ jr .done
+
+.player
+ ld de, sScratch + $160
+ call CopyMinimizePic
+ ld hl, vTiles2 tile $31
+ ld de, sScratch
+ lb bc, BANK(GetMinimizePic), 6 * 6
+ call Request2bpp
+
+.done
+ call CloseSRAM
+ ret
+
+CopyMinimizePic:
+ ld hl, MinimizePic
+ ld bc, $10
+ ld a, BANK(MinimizePic)
+ call FarCopyBytes
+ ret
+
+MinimizePic:
+INCBIN "gfx/battle/minimize.2bpp"
+
+BattleAnimCmd_DropSub:
+ ld a, [wCurPartySpecies]
+ push af
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ callfar DropEnemySub
+ jr .done
+
+.player
+ callfar DropPlayerSub
+
+.done
+ pop af
+ ld [wCurPartySpecies], a
+ ret
+
+BattleAnimCmd_BeatUp:
+ ld a, [wCurPartySpecies]
+ push af
+
+ ld a, [wBattleAnimParam]
+ ld [wCurPartySpecies], a
+
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .player
+
+ ld hl, wBattleMonDVs
+ predef GetUnownLetter
+ ld de, vTiles2 tile $00
+ predef GetMonFrontpic
+ jr .done
+
+.player
+ ld hl, wEnemyMonDVs
+ predef GetUnownLetter
+ ld de, vTiles2 tile $31
+ predef GetMonBackpic
+
+.done
+ pop af
+ ld [wCurPartySpecies], a ; CurPartySpecies
+ ld b, SCGB_BATTLE_COLORS
+ call GetSGBLayout
+ ret
+
+BattleAnimCmd_OAMOn:
+ ret
+
+BattleAnimCmd_OAMOff:
+ ret
+
+BattleAnimCmd_KeepSprites:
+ ld hl, wBattleAnimFlags
+ set BATTLEANIM_KEEPSPRITES_F, [hl]
+ ret
+
+BattleAnimCmd_F5:
+ ret
+
+BattleAnimCmd_F6:
+ ret
+
+BattleAnimCmd_F7:
+ ret
+
+BattleAnimCmd_Sound:
+ call GetBattleAnimByte
+ ld e, a
+ srl a
+ srl a
+ ld [wSFXDuration], a
+ call .GetCryTrack
+ maskbits NUM_NOISE_CHANS
+ ld [wCryTracks], a
+
+ ld e, a
+ ld d, 0
+ ld hl, .GetPanning
+ add hl, de
+ ld a, [hl]
+ ld [wStereoPanningMask], a
+
+ call GetBattleAnimByte
+ ld e, a
+ ld d, 0
+ callfar PlayStereoSFX
+
+ ret
+
+.GetPanning:
+ db $f0, $0f, $f0, $0f
+
+.GetCryTrack:
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .enemy
+
+ ld a, e
+ ret
+
+.enemy
+ ld a, e
+ xor 1
+ ret
+
+BattleAnimCmd_Cry:
+ call GetBattleAnimByte
+ maskbits NUM_NOISE_CHANS
+ ld e, a
+ ld d, 0
+ ld hl, .CryData
+rept 4
+ add hl, de
+endr
+
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .enemy
+
+ ld a, $f0
+ ld [wCryTracks], a
+ ld a, [wBattleMonSpecies]
+ jr .done_cry_tracks
+
+.enemy
+ ld a, $0f
+ ld [wCryTracks], a
+ ld a, [wEnemyMonSpecies]
+
+.done_cry_tracks
+ push hl
+ call LoadCry
+ pop hl
+ jr c, .done
+
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+
+ push hl
+ ld hl, wCryPitch
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, bc
+ ld a, l
+ ld [wCryPitch], a
+ ld a, h
+ ld [wCryPitch + 1], a
+ pop hl
+
+ ld a, [hli]
+ ld c, a
+ ld b, [hl]
+ ld hl, wCryLength
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, bc
+
+ ld a, l
+ ld [wCryLength], a
+ ld a, h
+ ld [wCryLength + 1], a
+ ld a, 1
+ ld [wStereoPanningMask], a
+
+ callfar _PlayCry
+
+.done
+ ret
+
+.CryData:
+; +pitch, +length
+ dw $0000, $00c0
+ dw $0000, $0040
+ dw $0000, $0000
+ dw $0000, $0000
+
+PlayHitSound:
+ ld a, [wNumHits]
+ cp $1
+ jr z, .okay
+ cp $4
+ ret nz
+
+.okay
+ ld a, [wTypeModifier]
+ and $7f
+ ret z
+
+ cp EFFECTIVE
+ 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
+
+BattleAnimAssignPals:
+ ldh a, [hCGB]
+ and a
+ jr nz, .cgb
+ ldh a, [hSGB]
+ and a
+ ld a, %11100000
+ jr z, .sgb
+ ld a, %11110000
+
+.sgb
+ ld [wOBP0], a
+ ld a, %11100100
+ ld [wBGP], a
+ ld [wOBP1], a
+ ret
+
+.cgb
+ ld a, %11100100
+ ld [wBGP], a
+ ld [wOBP0], a
+ ld [wOBP1], a
+ call DmgToCgbBGPals
+ lb de, %11100100, %11100100
+ call DmgToCgbObjPals
+ ret
+
+ClearBattleAnims::
+; Clear animation block
+ ld hl, wLYOverrides
+ ld bc, wBattleAnimEnd - wLYOverrides
+.loop
+ ld [hl], 0
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+
+ ld hl, wFXAnimID
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, BattleAnimations
+ add hl, de
+ add hl, de
+ call GetBattleAnimPointer
+ call BattleAnimAssignPals
+ call BattleAnimDelayFrame
+ ret
+
+BattleAnim_RevertPals:
+ call WaitTop
+ ld a, %11100100
+ ld [wBGP], a
+ ld [wOBP0], a
+ ld [wOBP1], a
+ call DmgToCgbBGPals
+ lb de, %11100100, %11100100
+ call DmgToCgbObjPals
+ xor a
+ ldh [hSCX], a
+ ldh [hSCY], a
+ call BattleAnimDelayFrame
+ ld a, $1
+ ldh [hBGMapMode], a
+ ret
+
+BattleAnim_SetBGPals:
+ ldh [rBGP], a
+ ldh a, [hCGB]
+ and a
+ ret z
+ ld hl, wBGPals2
+ ld de, wBGPals1
+ ldh a, [rBGP]
+ ld b, a
+ ld c, 7
+ call CopyPals
+ ld hl, wOBPals2
+ ld de, wOBPals1
+ ldh a, [rBGP]
+ ld b, a
+ ld c, 2
+ call CopyPals
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ ret
+
+BattleAnim_SetOBPals:
+ ldh [rOBP0], a
+ ldh a, [hCGB]
+ and a
+ ret z
+ ld hl, wOBPals2 palette PAL_BATTLE_OB_GRAY
+ ld de, wOBPals1 palette PAL_BATTLE_OB_GRAY
+ ldh a, [rOBP0]
+ ld b, a
+ ld c, 2
+ call CopyPals
+ ld a, $1
+ ldh [hCGBPalUpdate], a
+ ret
+
+BattleAnim_UpdateOAM_All:
+ ld a, 0
+ ld [wBattleAnimOAMPointerLo], a
+ ld hl, wActiveAnimObjects
+ ld e, NUM_ANIM_OBJECTS
+.loop
+ ld a, [hl]
+ and a
+ jr z, .next
+ ld c, l
+ ld b, h
+ push hl
+ push de
+ call DoBattleAnimFrame
+ call BattleAnimOAMUpdate
+ pop de
+ pop hl
+ jr c, .done
+
+.next
+ ld bc, BATTLEANIMSTRUCT_LENGTH
+ add hl, bc
+ dec e
+ jr nz, .loop
+ ld a, [wBattleAnimOAMPointerLo]
+ ld l, a
+ ld h, HIGH(wVirtualOAM)
+.loop2
+ ld a, l
+ cp LOW(wVirtualOAMEnd)
+ jr nc, .done
+ xor a
+ ld [hli], a
+ jr .loop2
+
+.done
+ ret
diff --git a/engine/battle_anims/core.asm b/engine/battle_anims/core.asm
new file mode 100755
index 00000000..fcde1be6
--- /dev/null
+++ b/engine/battle_anims/core.asm
@@ -0,0 +1,317 @@
+QueueBattleAnimation:
+ ld hl, wActiveAnimObjects
+ ld e, NUM_ANIM_OBJECTS
+.loop
+ ld a, [hl]
+ and a
+ jr z, .done
+ ld bc, BATTLEANIMSTRUCT_LENGTH
+ add hl, bc
+ dec e
+ jr nz, .loop
+ scf
+ ret
+
+.done
+ ld c, l
+ ld b, h
+ ld hl, wLastAnimObjectIndex
+ inc [hl]
+ call InitBattleAnimation
+ ret
+
+DeinitBattleAnimation:
+ ld hl, BATTLEANIMSTRUCT_INDEX
+ add hl, bc
+ ld [hl], $0
+ ret
+
+InitBattleAnimation:
+ ld a, [wBattleObjectTempID]
+ ld e, a
+ ld d, 0
+ ld hl, BattleAnimObjects
+rept 6
+ add hl, de
+endr
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_INDEX
+ add hl, bc
+ ld a, [wLastAnimObjectIndex]
+ ld [hli], a ; Index
+ ld a, [de]
+ inc de
+ ld [hli], a ; 01
+ ld a, [de]
+ inc de
+ ld [hli], a ; 02
+ ld a, [de]
+ inc de
+ ld [hli], a ; Frameset ID
+ ld a, [de]
+ inc de
+ ld [hli], a ; Function
+ ld a, [de]
+ inc de
+ ld [hli], a ; 05
+ ld a, [de]
+ call GetBattleAnimTileOffset
+ ld [hli], a ; Tile ID
+ ld a, [wBattleObjectTempXCoord]
+ ld [hli], a ; X Coord
+ ld a, [wBattleObjectTempYCoord]
+ ld [hli], a ; Y Coord
+ xor a
+ ld [hli], a ; X Offset
+ ld [hli], a ; Y Offset
+ ld a, [wBattleObjectTempParam]
+ ld [hli], a ; Param
+ xor a
+ ld [hli], a ; 0c
+ dec a
+ ld [hli], a ; 0d
+ xor a
+ ld [hli], a ; 0e
+ ld [hli], a ; 0f
+ ld [hl], a ; 10
+ ret
+
+BattleAnimOAMUpdate:
+ call InitBattleAnimBuffer
+ call GetBattleAnimFrame
+ cp dowait_command
+ jp z, .done
+ cp delanim_command
+ jp z, .delete
+
+ push af
+ ld hl, wBattleAnimTempOAMFlags
+ ld a, [wBattleAnimTempFrameOAMFlags]
+ xor [hl]
+ and PRIORITY | Y_FLIP | X_FLIP
+ ld [hl], a
+ pop af
+
+ push bc
+ call GetBattleAnimOAMPointer
+ ld a, [wBattleAnimTempTileID]
+ add [hl] ; tile offset
+ ld [wBattleAnimTempTileID], a
+ inc hl
+ ld a, [hli] ; oam data length
+ ld c, a
+ ld a, [hli] ; oam data pointer
+ ld h, [hl]
+ ld l, a
+ ld a, [wBattleAnimOAMPointerLo]
+ ld e, a
+ ld d, HIGH(wVirtualOAM)
+
+.loop
+ ; Y Coord
+ ld a, [wBattleAnimTempYCoord]
+ ld b, a
+ ld a, [wBattleAnimTempYOffset]
+ add b
+ ld b, a
+ push hl
+ ld a, [hl]
+ ld hl, wBattleAnimTempOAMFlags
+ bit OAM_Y_FLIP, [hl]
+ jr z, .no_yflip
+ add $8
+ xor $ff
+ inc a
+.no_yflip
+ pop hl
+ add b
+ ld [de], a
+
+ ; X Coord
+ inc hl
+ inc de
+ ld a, [wBattleAnimTempXCoord]
+ ld b, a
+ ld a, [wBattleAnimTempXOffset]
+ add b
+ ld b, a
+ push hl
+ ld a, [hl]
+ ld hl, wBattleAnimTempOAMFlags
+ bit OAM_X_FLIP, [hl]
+ jr z, .no_xflip
+ add $8
+ xor $ff
+ inc a
+.no_xflip
+ pop hl
+ add b
+ ld [de], a
+
+ ; Tile ID
+ inc hl
+ inc de
+ ld a, [wBattleAnimTempTileID]
+ add BATTLEANIM_BASE_TILE
+ add [hl]
+ ld [de], a
+
+ ; Attributes
+ inc hl
+ inc de
+ ld a, [wBattleAnimTempOAMFlags]
+ ld b, a
+ ld a, [hl]
+ xor b
+ and PRIORITY | Y_FLIP | X_FLIP
+ ld b, a
+ ld a, [hl]
+ and OBP_NUM
+ or b
+ ld b, a
+ ld a, [wBattleAnimTempPalette]
+ and PALETTE_MASK | VRAM_BANK_1
+ or b
+ ld [de], a
+
+ inc hl
+ inc de
+ ld a, e
+ ld [wBattleAnimOAMPointerLo], a
+ cp LOW(wVirtualOAMEnd)
+ jr nc, .exit_set_carry
+ dec c
+ jr nz, .loop
+ pop bc
+ jr .done
+
+.delete
+ call DeinitBattleAnimation
+
+.done
+ and a
+ ret
+
+.exit_set_carry
+ pop bc
+ scf
+ ret
+
+InitBattleAnimBuffer:
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ ld a, [hl]
+
+ and PRIORITY
+ ld [wBattleAnimTempOAMFlags], a
+ xor a
+ ld [wBattleAnimTempFrameOAMFlags], a
+ ld hl, BATTLEANIMSTRUCT_PALETTE
+ add hl, bc
+ ld a, [hl]
+ ld [wBattleAnimTempPalette], a
+ ld hl, BATTLEANIMSTRUCT_02
+ add hl, bc
+ ld a, [hl]
+ ld [wBattleAnimTempField02], a
+ ld hl, BATTLEANIMSTRUCT_TILEID
+ add hl, bc
+ ld a, [hli]
+ ld [wBattleAnimTempTileID], a
+ ld a, [hli]
+ ld [wBattleAnimTempXCoord], a
+ ld a, [hli]
+ ld [wBattleAnimTempYCoord], a
+ ld a, [hli]
+ ld [wBattleAnimTempXOffset], a
+ ld a, [hli]
+ ld [wBattleAnimTempYOffset], a
+
+ ldh a, [hBattleTurn]
+ and a
+ ret z
+
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ ld a, [hl]
+ ld [wBattleAnimTempOAMFlags], a
+ bit 0, [hl]
+ ret z
+
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hli]
+ ld d, a
+ ld a, (-10 * 8) + 4
+ sub d
+ ld [wBattleAnimTempXCoord], a
+ ld a, [hli]
+ ld d, a
+ ld a, [wBattleAnimTempField02]
+ cp $ff
+ jr nz, .check_kinesis_softboiled_milkdrink
+ ld a, 5 * 8
+ add d
+ jr .done
+
+.check_kinesis_softboiled_milkdrink
+ sub d
+ push af
+ ld a, [wFXAnimID + 1]
+ or a
+ jr nz, .no_sub
+ ld a, [wFXAnimID]
+ cp KINESIS
+ jr z, .kinesis
+ cp SOFTBOILED
+ jr z, .softboiled
+ cp MILK_DRINK
+ jr nz, .no_sub
+.kinesis
+.softboiled
+.milk_drink
+ pop af
+ sub 1 * 8
+ jr .done
+
+.no_sub
+ pop af
+.done
+ ld [wBattleAnimTempYCoord], a
+ ld a, [hli]
+ xor $ff
+ inc a
+ ld [wBattleAnimTempXOffset], a
+ ret
+
+GetBattleAnimTileOffset:
+ push hl
+ push bc
+ ld hl, wBattleAnimTileDict
+ ld b, a
+ ld c, 10 / 2
+.loop
+ ld a, [hli]
+ cp b
+ jr z, .load
+ inc hl
+ dec c
+ jr nz, .loop
+ xor a
+ jr .done
+
+.load
+ ld a, [hl]
+.done
+ pop bc
+ pop hl
+ ret
+
+_ExecuteBGEffects:
+ callfar ExecuteBGEffects
+ ret
+
+_QueueBGEffect:
+ callfar QueueBGEffect
+ ret
diff --git a/engine/battle_anims/functions.asm b/engine/battle_anims/functions.asm
new file mode 100755
index 00000000..e7bd9beb
--- /dev/null
+++ b/engine/battle_anims/functions.asm
@@ -0,0 +1,4154 @@
+DoBattleAnimFrame:
+ ld hl, BATTLEANIMSTRUCT_FUNCTION
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, .Jumptable
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.Jumptable:
+; entries correspond to BATTLEANIMFUNC_* constants
+ dw BattleAnimFunction_Null ; 00
+ dw BattleAnimFunction_01 ; 01
+ dw BattleAnimFunction_02 ; 02
+ dw BattleAnimFunction_03 ; 03
+ dw BattleAnimFunction_04 ; 04
+ dw BattleAnimFunction_ThrowFromPlayerToEnemy ; 05
+ dw BattleAnimFunction_ThrowFromPlayerToEnemyAndDisappear ; 06
+ dw BattleAnimFunction_07 ; 07
+ dw BattleAnimFunction_08 ; 08
+ dw BattleAnimFunction_09 ; 09
+ dw BattleAnimFunction_0A ; 0a
+ dw BattleAnimFunction_RazorLeaf ; 0b
+ dw BattleAnimFunction_0C ; 0c
+ dw BattleAnimFunction_0D ; 0d
+ dw BattleAnimFunction_0E ; 0e
+ dw BattleAnimFunction_0F ; 0f
+ dw BattleAnimFunction_10 ; 10
+ dw BattleAnimFunction_11 ; 11
+ dw BattleAnimFunction_PokeBall ; 12
+ dw BattleAnimFunction_PokeBallBlocked ; 13
+ dw BattleAnimFunction_14 ; 14
+ dw BattleAnimFunction_15 ; 15
+ dw BattleAnimFunction_16 ; 16
+ dw BattleAnimFunction_17 ; 17
+ dw BattleAnimFunction_18 ; 18
+ dw BattleAnimFunction_19 ; 19
+ dw BattleAnimFunction_1A ; 1a
+ dw BattleAnimFunction_1B ; 1b
+ dw BattleAnimFunction_1C ; 1c
+ dw BattleAnimFunction_1D ; 1d
+ dw BattleAnimFunction_1E ; 1e
+ dw BattleAnimFunction_1F ; 1f
+ dw BattleAnimFunction_LeechSeed ; 20
+ dw BattleAnimFunction_21 ; 21
+ dw BattleAnimFunction_22 ; 22
+ dw BattleAnimFunction_23 ; 23
+ dw BattleAnimFunction_24 ; 24
+ dw BattleAnimFunction_25 ; 25
+ dw BattleAnimFunction_26 ; 26
+ dw BattleAnimFunction_27 ; 27
+ dw BattleAnimFunction_28 ; 28
+ dw BattleAnimFunction_SpiralDescent ; 29
+ dw BattleAnimFunction_PoisonGas ; 2a
+ dw BattleAnimFunction_Horn ; 2b
+ dw BattleAnimFunction_2C ; 2c
+ dw BattleAnimFunction_2D ; 2d
+ dw BattleAnimFunction_2E ; 2e
+ dw BattleAnimFunction_2F ; 2f
+ dw BattleAnimFunction_30 ; 30
+ dw BattleAnimFunction_31 ; 31
+ dw BattleAnimFunction_32 ; 32
+ dw BattleAnimFunction_33 ; 33
+ dw BattleAnimFunction_34 ; 34
+ dw BattleAnimFunction_35 ; 35
+ dw BattleAnimFunction_36 ; 36
+ dw BattleAnimFunction_37 ; 37
+ dw BattleAnimFunction_38 ; 38
+ dw BattleAnimFunction_39 ; 39
+ dw BattleAnimFunction_3A ; 3a
+ dw BattleAnimFunction_3B ; 3b
+ dw BattleAnimFunction_3C ; 3c
+ dw BattleAnimFunction_3D ; 3d
+ dw BattleAnimFunction_3E ; 3e
+ dw BattleAnimFunction_3F ; 3f
+ dw BattleAnimFunction_40 ; 40
+ dw BattleAnimFunction_41 ; 41
+ dw BattleAnimFunction_42 ; 42
+ dw BattleAnimFunction_43 ; 43
+ dw BattleAnimFunction_44 ; 44
+ dw BattleAnimFunction_45 ; 45
+ dw BattleAnimFunction_46 ; 46
+ dw BattleAnimFunction_47 ; 47
+ dw BattleAnimFunction_48 ; 48
+ dw BattleAnimFunction_49 ; 49
+ dw BattleAnimFunction_4A ; 4a
+ dw BattleAnimFunction_4B ; 4b
+ dw BattleAnimFunction_4C ; 4c
+ dw BattleAnimFunction_4D ; 4d
+ dw BattleAnimFunction_4E ; 4e
+ dw BattleAnimFunction_4F ; 4f
+
+BattleAnimFunction_Null:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+.one
+ call DeinitBattleAnimation
+.zero
+ ret
+
+BattleAnimFunction_ThrowFromPlayerToEnemyAndDisappear:
+ call BattleAnimFunction_ThrowFromPlayerToEnemy
+ ret c
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_ThrowFromPlayerToEnemy:
+ ; If x coord at $88 or beyond, abort.
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ ret nc
+ ; Move right 2 pixels
+ add $2
+ ld [hl], a
+ ; Move down 1 pixel
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ; Decrease ??? and hold onto its previous value (argument of the sine function)
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ ; Get ???, which is the amplitude of the sine function
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ call BattleAnim_Sine
+ ; Store the result in the Y offset
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ; Carry flag denotes success
+ scf
+ ret
+
+BattleAnimFunction_04:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ jr c, .asm_cd0b3
+ call DeinitBattleAnimation
+ ret
+
+.asm_cd0b3
+ add $2
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ ld d, $10
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ sra a
+ sra a
+ sra a
+ sra a
+ ld [hl], a
+ ret
+
+BattleAnimFunction_03:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 7, [hl]
+ ld a, $0
+ jr z, .asm_cd0f9
+ ld a, $20
+.asm_cd0f9
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ ld [hl], a
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimFunction_01:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+.one
+ call DeinitBattleAnimation
+ ret
+
+.zero
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ ret nc
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ call Functionce64f
+ ret
+
+BattleAnimFunction_02:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ jr nc, .asm_cd158
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ call Functionce64f
+ ret
+
+.asm_cd158
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_PokeBall:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+ dw .four
+ dw .five
+ dw .six
+ dw .seven
+ dw .eight
+ dw .nine
+ dw .ten
+ dw .eleven
+.zero ; init
+ call GetBallAnimPal
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.one
+ call BattleAnimFunction_ThrowFromPlayerToEnemy
+ ret c
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ld a, BATTLEANIMFRAMESET_0B
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.three
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_09
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $0
+ inc hl
+ ld [hl], $10
+.four
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec a
+ ld [hl], a
+ and $1f
+ ret nz
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ sub $4
+ ld [hl], a
+ ret nz
+ ld a, BATTLEANIMFRAMESET_0C
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.six
+ ld a, BATTLEANIMFRAMESET_0D
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ dec [hl]
+.two
+.five
+.nine
+ ret
+
+.seven
+ call GetBallAnimPal
+ ld a, BATTLEANIMFRAMESET_0A
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $20
+.eight
+.ten
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec a
+ ld [hl], a
+ and $1f
+ jr z, .eleven
+ and $f
+ ret nz
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.eleven
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_PokeBallBlocked:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+.zero
+ call GetBallAnimPal
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.one
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $70
+ jr nc, .next
+ call BattleAnimFunction_ThrowFromPlayerToEnemy
+ ret
+
+.next
+ call BattleAnim_IncAnonJumptableIndex
+.two
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr nc, .done
+ add $4
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ dec [hl]
+ dec [hl]
+ ret
+
+.done
+ call DeinitBattleAnimation
+ ret
+
+GetBallAnimPal:
+ ld hl, BallColors
+ ld a, [wCurItem]
+ ld e, a
+.IsInArray:
+ ld a, [hli]
+ cp -1
+ jr z, .load
+ cp e
+ jr z, .load
+ inc hl
+ jr .IsInArray
+
+.load
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PALETTE
+ add hl, bc
+ ld [hl], a
+ ret
+
+INCLUDE "data/battle_anims/ball_colors.asm"
+
+BattleAnimFunction_10:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+ dw .four
+.zero
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ swap a
+ and $f
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ ret
+
+.one
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ ret nc
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ call Functionce64f
+ ret
+
+.two
+ call DeinitBattleAnimation
+ ret
+
+.three
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_0F
+ call ReinitBattleAnimFrameset
+.four
+ ret
+
+BattleAnimFunction_07:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $30
+ inc hl
+ ld [hl], $48
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $3f
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $20
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ sub [hl]
+ jr z, .done
+ jr c, .done
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+ ret
+
+.done
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_08:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+.zero
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr nc, .next
+ call .SetCoords
+ ret
+
+.next
+ call BattleAnim_IncAnonJumptableIndex
+.one
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $0
+.two
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $40
+ jr nc, .loop_back
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ call BattleAnim_Cosine
+ sub $18
+ sra a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ret
+
+.loop_back
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ jr z, .finish
+ sub $10
+ ld d, a
+ ld a, [hl]
+ and $f
+ or d
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ dec [hl]
+ ret
+
+.finish
+ call BattleAnim_IncAnonJumptableIndex
+.three
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $b0
+ jr c, .retain
+ call DeinitBattleAnimation
+ ret
+
+.retain
+ call .SetCoords
+ ret
+
+.SetCoords:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld e, a
+ srl e
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+.loop
+ dec [hl]
+ dec e
+ jr nz, .loop
+ ret
+
+BattleAnimFunction_09:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $0
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .done_one
+ dec [hl]
+ ret
+
+.done_one
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ swap a
+ and $f
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ xor $ff
+ inc a
+ ld [hl], a
+ ret
+
+.two
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_0A:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+ dw .four
+ dw .five
+ dw .six
+ dw .seven
+ dw .eight
+ dw .nine
+.zero
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ cp $7
+ jr z, .seven
+ ld a, BATTLEANIMFRAMESET_11
+ call ReinitBattleAnimFrameset
+ ret
+
+.seven
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ jr nc, .set_up_eight
+ add $2
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+.set_up_eight
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_10
+ call ReinitBattleAnimFrameset
+.eight
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ret
+
+.nine
+ call DeinitBattleAnimation
+ ret
+
+.one
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ dec [hl]
+ ret
+
+.four
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ inc [hl]
+.two
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ dec [hl]
+ ret
+
+.five
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ inc [hl]
+.three
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ inc [hl]
+.six
+ ret
+
+BattleAnimFunction_RazorLeaf:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+ dw .four
+ dw .five
+ dw .six
+ dw .seven
+ dw .eight
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $40
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr nc, .sine_cosine
+ call BattleAnim_IncAnonJumptableIndex
+ xor a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hli], a
+ ld [hl], a
+ ld a, BATTLEANIMFRAMESET_17
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 6, [hl]
+ ret z
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld [hl], $5
+ ret
+
+.sine_cosine
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ call Functioncd49c
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ret
+
+.two
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr nz, .sine_cosine_2
+ call DeinitBattleAnimation
+ ret
+
+.sine_cosine_2
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 6, [hl]
+ jr nz, .decrease
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ jr .finish
+
+.decrease
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ dec [hl]
+.finish
+ ld de, $80
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ret
+
+.three
+ ld a, BATTLEANIMFRAMESET_16
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ res 5, [hl]
+.four
+.five
+.six
+.seven
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.eight
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $c0
+ ret nc
+ ld a, $8
+ call Functionce64f
+ ret
+
+Functioncd49c:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ bit 7, a
+ jr nz, .negative
+ cp $20
+ jr nc, .plus_256
+ cp $18
+ jr nc, .plus_384
+ ld de, $200
+ ret
+
+.plus_384
+ ld de, $180
+ ret
+
+.plus_256
+ ld de, $100
+ ret
+
+.negative
+ and $3f
+ cp $20
+ jr nc, .minus_256
+ cp $18
+ jr nc, .minus_384
+ ld de, -$200
+ ret
+
+.minus_384
+ ld de, -$180
+ ret
+
+.minus_256
+ ld de, -$100
+ ret
+
+BattleAnimFunction_4E:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+.zero
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $40
+ rlca
+ rlca
+ add $19
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld [hl], a
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $40
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr nc, .sine_cosine
+ call DeinitBattleAnimation
+ ret
+
+.sine_cosine
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ call Functioncd49c
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ret
+
+BattleAnimFunction_0C:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $c
+.one
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .next
+ dec [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ call Functionce64f
+ ret
+
+.next
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $0
+ ld a, BATTLEANIMFRAMESET_22
+ call ReinitBattleAnimFrameset
+.two
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $98
+ jr nc, .okay
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld h, [hl]
+ ld l, a
+ ld de, $60
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld [hl], d
+.okay
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ ret c
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ ld e, a
+ ld d, $ff
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld [hl], d
+ ret
+
+BattleAnimFunction_0D:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+ dw .four
+.zero
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, LOW(rSCY)
+ ldh [hLCDCPointer], a
+ ld a, $58
+ ldh [hLYOverrideStart], a
+ ld a, $5e
+ ldh [hLYOverrideEnd], a
+ ret
+
+.one
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld e, [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nc, .asm_cd69b
+ call BattleAnim_IncAnonJumptableIndex
+ xor a
+ ldh [hLYOverrideStart], a
+ ret
+
+.asm_cd69b
+ dec a
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ add [hl]
+ sub $10
+ ret c
+ ldh [hLYOverrideStart], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ inc a
+ and $7
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ inc [hl]
+.two
+ ret
+
+.three
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $70
+ jr c, asm_cd6da
+ xor a
+ ldh [hLCDCPointer], a
+ ldh [hLYOverrideStart], a
+ ldh [hLYOverrideEnd], a
+.four
+ call DeinitBattleAnimation
+ ret
+
+asm_cd6da:
+ inc a
+ inc a
+ ld [hl], a
+ sub $10
+ ret c
+ ldh [hLYOverrideStart], a
+ ret
+
+BattleAnimFunction_0E:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd62f
+ dw Functioncd63c
+
+Functioncd62f:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, BATTLEANIMFRAMESET_24
+ add [hl] ; BATTLEANIMFRAMESET_25 BATTLEANIMFRAMESET_26
+ call ReinitBattleAnimFrameset
+
+Functioncd63c:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $b8
+ jr c, .asm_cd704
+ call DeinitBattleAnimation
+ ret
+
+.asm_cd704
+ ld a, $2
+ call Functionce64f
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ ld d, $8
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimFunction_0F:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd66a
+ dw Functioncd66d
+ dw Functioncd6a8
+ dw Functioncd6bb
+
+Functioncd66a:
+ call BattleAnim_IncAnonJumptableIndex
+Functioncd66d:
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr c, .asm_cd747
+ ld a, $2
+ call Functionce64f
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ ld d, $8
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_cd747
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_28
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld [hl], $30
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ld [hl], a
+Functioncd6a8:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $18
+ jr nc, .asm_cd76e
+ inc [hl]
+ ret
+
+.asm_cd76e
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_29
+ call ReinitBattleAnimFrameset
+Functioncd6bb:
+ ret
+
+BattleAnimFunction_11:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $38
+ jr c, .asm_cd784
+ call DeinitBattleAnimation
+ ret
+
+.asm_cd784
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld l, [hl]
+ ld h, a
+ ld de, $80
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ xor $10
+ ld [hl], a
+ ret
+
+BattleAnimFunction_14:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd6f0
+ dw Functioncd717
+
+Functioncd6f0:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ sla a
+ sla a
+ sla a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld [hl], $1
+Functioncd717:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, .asm_cd7de
+ call DeinitBattleAnimation
+ ret
+
+.asm_cd7de
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld d, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ xor $1
+ ld [hl], a
+ ret z
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ dec [hl]
+ ret
+
+BattleAnimFunction_15:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd764
+ dw Functioncd75c
+ dw Functioncd764
+ dw Functioncd765
+
+Functioncd75c:
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_35
+ call ReinitBattleAnimFrameset
+Functioncd764:
+ ret
+
+Functioncd765:
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_16:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd77a
+ dw Functioncd7a5
+ dw Functioncd7d4
+ dw Functioncd7d4
+ dw Functioncd7d4
+ dw Functioncd7d4
+ dw Functioncd7d8
+
+Functioncd77a:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 7, [hl]
+ jr nz, .asm_cd852
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $10
+ jr .asm_cd858
+
+.asm_cd852
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $30
+.asm_cd858
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ ld [hl], a
+Functioncd7a5:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ bit 7, a
+ jr nz, .load_no_inc
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ inc a ; BATTLEANIMFRAMESET_3B
+ ; BATTLEANIMFRAMESET_A1
+ jr .reinit
+
+.load_no_inc
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl] ; BATTLEANIMFRAMESET_3A
+ ; BATTLEANIMFRAMESET_A0
+.reinit
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $1f
+ ret nz
+Functioncd7d4:
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functioncd7d8:
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], $1
+ ret
+
+BattleAnimFunction_17:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd7f0
+ dw Functioncd811
+ dw Functioncd83a
+ dw Functioncd83a
+ dw Functioncd83a
+ dw Functioncd83a
+ dw Functioncd83e
+
+Functioncd7f0:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 7, [hl]
+ jr nz, .asm_cd8be
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $10
+ jr .asm_cd8c4
+
+.asm_cd8be
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $30
+.asm_cd8c4
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ ld [hl], a
+
+Functioncd811:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ bit 7, a
+ jr nz, .asm_cd8e6
+ ld a, BATTLEANIMFRAMESET_3D
+ jr .asm_cd8e8
+
+.asm_cd8e6
+ ld a, BATTLEANIMFRAMESET_3C
+.asm_cd8e8
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ inc [hl]
+ ld a, [hl]
+ and $1f
+ ret nz
+
+Functioncd83a:
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functioncd83e:
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], $1
+ ret
+
+BattleAnimFunction_18:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd84c
+ dw Functioncd858
+
+Functioncd84c:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $28
+ inc hl
+ ld [hl], $0
+Functioncd858:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld d, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cd950
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld e, [hl]
+ ld hl, -$80
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], d
+ ret
+
+.asm_cd950
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_19:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd8a6
+ dw Functioncd8af
+ dw Functioncd8b3
+ dw Functioncd8af
+ dw Functioncd8c0
+
+Functioncd8a6:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld [hl], $0
+Functioncd8af:
+ call Functioncd8df
+ ret
+
+Functioncd8b3:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ jr c, asm_cd988
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functioncd8c0:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $b8
+ jr c, asm_cd988
+ call DeinitBattleAnimation
+ ret
+
+asm_cd988:
+ call Functioncd8df
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $1
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+Functioncd8df:
+ call Functioncd939
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ sub $8
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ 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, BATTLEANIMSTRUCT_10
+ add hl, bc
+ inc [hl]
+ ret
+
+.asm_cd9e2
+ xor a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hli], a
+ ld [hl], a
+ ret
+
+Functioncd939:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, Unknown_cd946
+ add hl, de
+ ld d, [hl]
+ ret
+
+Unknown_cd946:
+ db 8, 6, 5, 4, 5, 6, 8, 12, 16
+
+BattleAnimFunction_1C:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr nc, .asm_cda17
+ call DeinitBattleAnimation
+ ret
+
+.asm_cda17
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld e, a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ sub e
+ ld [hl], a
+ srl e
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+.asm_cda2c
+ inc [hl]
+ dec e
+ jr nz, .asm_cda2c
+ ret
+
+BattleAnimFunction_1F:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncd991
+ dw Functioncd97f
+ dw Functioncd991
+
+Functioncd97f:
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld a, [hl]
+ inc a ; BATTLEANIMFRAMESET_53
+ ; BATTLEANIMFRAMESET_55
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $8
+Functioncd991:
+ ret
+
+BattleAnimFunction_LeechSeed:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw .three
+.zero:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $40
+ ret
+
+.one:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr c, .sprout
+ call Functioncd9d2
+ ret
+
+.sprout
+ ld [hl], $40
+ ld a, BATTLEANIMFRAMESET_57
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.two:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .flutter
+ dec [hl]
+ ret
+
+.flutter
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_58
+ call ReinitBattleAnimFrameset
+.three:
+ ret
+
+Functioncd9d2:
+ dec [hl]
+ ld d, $20
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_02
+ add hl, bc
+ ld a, [hl]
+ add $2
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld e, [hl]
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ 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, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+BattleAnimFunction_3F:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncda24
+ dw Functioncda2e
+ dw Functioncda3e
+
+Functioncda24:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $40
+ ret
+
+Functioncda2e:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr c, .asm_cdaf6
+ call Functioncd9d2
+ ret
+
+.asm_cdaf6
+ call BattleAnim_IncAnonJumptableIndex
+Functioncda3e:
+ ret
+
+BattleAnimFunction_1A:
+ call BattleAnimFunction_03
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ add $f
+ ld [hl], a
+ ret
+
+BattleAnimFunction_1B:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncda58
+ dw Functioncda59
+ dw Functioncda6d
+ dw Functioncda95
+ dw Functioncdaaa
+
+Functioncda58:
+ ret
+
+Functioncda59:
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr c, .asm_cdb24
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], $0
+ ret
+
+.asm_cdb24
+ add $4
+ ld [hl], a
+ ret
+
+Functioncda6d:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $98
+ ret nc
+ inc [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ set 0, [hl]
+ ld hl, BATTLEANIMSTRUCT_02
+ add hl, bc
+ ld [hl], $90
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld [hl], $0
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], $2
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+Functioncda95:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $2c
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld [hl], $0
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], $80
+Functioncdaaa:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $98
+ ret nc
+ inc [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld d, $8
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimFunction_1D:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdae4
+ dw Functioncdaf8
+ dw Functioncdb14
+ dw Functioncdb30
+ dw Functioncdbb9
+ dw Functioncdb5f
+ dw Functioncdb06
+ dw Functioncdb63
+ dw Functioncdb6c
+ dw Functioncdb7e
+ dw Functioncdbb9
+ dw Functioncdb8d
+ dw Functioncdb9c
+ dw Functioncdbb9
+
+Functioncdae4:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $28
+ inc hl
+ ld [hl], $10
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ ret
+
+Functioncdaf8:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $40
+ jr nc, .asm_cdbbd
+ inc [hl]
+.asm_cdbbd
+ call Functioncdbba
+ ret
+
+Functioncdb06:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $4b
+ jr nc, .asm_cdbcb
+ inc [hl]
+.asm_cdbcb
+ call Functioncdbba
+ ret
+
+Functioncdb14:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $88
+ jr nc, .asm_cdbe6
+ and $f
+ jr nz, asm_cdbfa
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $10
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+.asm_cdbe6
+ call BattleAnim_IncAnonJumptableIndex
+ inc [hl]
+ ret
+
+Functioncdb30:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cdbf5
+ dec [hl]
+ ret
+
+.asm_cdbf5
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ dec [hl]
+asm_cdbfa:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld e, [hl]
+ ld hl, -$80
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ret
+
+Functioncdb5f:
+ call DeinitBattleAnimation
+ ret
+
+Functioncdb63:
+ ld a, BATTLEANIMFRAMESET_4E
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functioncdb6c:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ ld d, $2
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+Functioncdb7e:
+ ld a, BATTLEANIMFRAMESET_50
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], $4
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functioncdb8d:
+ ld a, BATTLEANIMFRAMESET_4F
+ call ReinitBattleAnimFrameset
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $40
+ ret
+
+Functioncdb9c:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $20
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr c, .asm_cdc71
+ dec [hl]
+ ret
+
+.asm_cdc71
+ call BattleAnim_IncAnonJumptableIndex
+Functioncdbb9:
+ ret
+
+Functioncdbba:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $3f
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $20
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ sub $8
+ ld [hl], a
+ ret nz
+ xor a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hli], a
+ ld [hl], a
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+BattleAnimFunction_1E:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cdcb6
+ cp $d8
+ jr nc, .asm_cdcb6
+ call DeinitBattleAnimation
+ ret
+
+.asm_cdcb6
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ sub d
+ ld [hl], a
+ ret
+
+BattleAnimFunction_21:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdc0f
+ dw Functioncdc32
+
+Functioncdc0f:
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .asm_cdcd9
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ xor $ff
+ add $3
+ ld [hl], a
+.asm_cdcd9
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $8
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, BATTLEANIMFRAMESET_59
+ add [hl] ; BATTLEANIMFRAMESET_5A BATTLEANIMFRAMESET_5B
+ call ReinitBattleAnimFrameset
+ ret
+
+Functioncdc32:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cdcfa
+ dec [hl]
+ call Functioncdc43
+ ret
+
+.asm_cdcfa
+ call DeinitBattleAnimation
+ ret
+
+Functioncdc43:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cdd20
+ dec a
+ ret z
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], d
+ ret
+
+.asm_cdd20
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, d
+ xor $ff
+ inc a
+ ld [hl], a
+ ret
+
+BattleAnimFunction_22:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdc76
+ dw Functioncdc94
+
+Functioncdc76:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $80
+ rlca
+ ld [hl], a
+ add BATTLEANIMFRAMESET_5D ; BATTLEANIMFRAMESET_5E
+ call ReinitBattleAnimFrameset
+ ret
+
+Functioncdc94:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ swap a
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ ret nc
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and $3
+ jr nz, .asm_cdd87
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+.asm_cdd87
+ and $1
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimFunction_23:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdcdc
+ dw Functioncdd01
+
+Functioncdcdc:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $80
+ rlca
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ add [hl] ; BATTLEANIMFRAMESET_61 BATTLEANIMFRAMESET_62
+ ; BATTLEANIMFRAMESET_9C BATTLEANIMFRAMESET_9D
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ ld [hl], a
+Functioncdd01:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ and $3f
+ jr z, .asm_cddf0
+ and $1f
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc a ; BATTLEANIMFRAMESET_62
+ ; BATTLEANIMFRAMESET_9D
+ jr .asm_cddf5
+
+.asm_cddf0
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl] ; BATTLEANIMFRAMESET_61
+ ; BATTLEANIMFRAMESET_9C
+.asm_cddf5
+ call ReinitBattleAnimFrameset
+ ret
+
+BattleAnimFunction_24:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdd47
+ dw Functioncdd65
+ dw Functioncdd66
+
+Functioncdd47:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ add BATTLEANIMFRAMESET_63 ; BATTLEANIMFRAMESET_64 BATTLEANIMFRAMESET_65
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, Unknown_cdd6a
+ add hl, de
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+Functioncdd65:
+ ret
+
+Functioncdd66:
+ call DeinitBattleAnimation
+ ret
+
+Unknown_cdd6a:
+ db $ec, $f8, $00
+
+BattleAnimFunction_25:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ ld d, $4
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld e, [hl]
+ lb hl, -1, $a0
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], e
+ ret
+
+BattleAnimFunction_26:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ dec [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimFunction_27:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncddb7
+ dw Functioncddcd
+
+Functioncddb7:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, .asm_cde83
+ ld hl, BATTLEANIMSTRUCT_01
+ add hl, bc
+ set 6, [hl]
+.asm_cde83
+ add BATTLEANIMFRAMESET_6A ; BATTLEANIMFRAMESET_6B BATTLEANIMFRAMESET_6C
+ call ReinitBattleAnimFrameset
+Functioncddcd:
+ ret
+
+BattleAnimFunction_28:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncddd5
+ dw Functioncde04
+
+Functioncddd5:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $0
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld e, [hl]
+ ld a, e
+ and $70
+ swap a
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ 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, BATTLEANIMFRAMESET_6E
+ call ReinitBattleAnimFrameset
+ ret
+
+Functioncde04:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_cdec9
+ dec [hl]
+ ret
+
+.asm_cdec9
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ xor $ff
+ inc a
+ ld [hl], a
+ ret
+
+BattleAnimFunction_SpiralDescent:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $7
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $28
+ jr nc, .delete
+ inc [hl]
+ ret
+
+.delete
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_2D:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $3
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $28
+ jr nc, .asm_cdf55
+ inc [hl]
+ ret
+
+.asm_cdf55
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_PoisonGas:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdea5
+ dw BattleAnimFunction_SpiralDescent
+
+Functioncdea5:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ jr nc, .next
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld d, $18
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+.next
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+BattleAnimFunction_34:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ inc [hl]
+ inc [hl]
+ ld a, [hl]
+ and $7
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $e8
+ jr z, .asm_cdfc7
+ dec [hl]
+ ret
+
+.asm_cdfc7
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_3C:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ inc [hl]
+ inc [hl]
+ ld a, [hl]
+ and $3
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $d0
+ jr z, .asm_ce007
+ dec [hl]
+ dec [hl]
+ ret
+
+.asm_ce007
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_35:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functioncdf59
+ dw Functioncdf68
+ dw Functioncdfa4
+
+Functioncdf59:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $34
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $10
+Functioncdf68:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $6c
+ jr c, .asm_ce02d
+ ret
+
+.asm_ce02d
+ ld a, $2
+ call Functionce64f
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld d, [hl]
+ call BattleAnim_Sine
+ bit 7, a
+ jr nz, .asm_ce046
+ xor $ff
+ inc a
+.asm_ce046
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ sub $4
+ ld [hl], a
+ and $1f
+ cp $20
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ srl [hl]
+ ret
+
+Functioncdfa4:
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_Horn:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw .zero
+ dw .one
+ dw .two
+ dw Functioncdfe3
+.zero:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ret
+
+.one:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ ret nc
+ ld a, $2
+ call Functionce64f
+ ret
+
+.two:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr c, Functioncdfe3
+ call DeinitBattleAnimation
+ ret
+
+Functioncdfe3:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ ld d, $8
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ sra a
+ xor $ff
+ inc a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ add $8
+ ld [hl], a
+ ret
+
+BattleAnimFunction_2C:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce013
+ dw Functionce03d
+ dw Functionce022
+
+Functionce013:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ swap a
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ ret
+
+Functionce022:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ bit 7, a
+ jr z, .asm_ce0f0
+ ld [hl], a
+.asm_ce0f0
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ sub $4
+ ld [hl], a
+Functionce03d:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ jr c, .asm_ce105
+ call DeinitBattleAnimation
+ ret
+
+.asm_ce105
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ call Functionce64f
+ ret
+
+BattleAnimFunction_2E:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce05a
+ dw Functionce06f
+
+Functionce05a:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $28
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ sub $28
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+Functionce06f:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ and [hl]
+ jr nz, .asm_ce149
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ dec [hl]
+.asm_ce149
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $3f
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $20
+ inc hl
+ srl [hl]
+ ret
+
+BattleAnimFunction_2F:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld d, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $1
+ jr nz, .asm_ce189
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ dec [hl]
+.asm_ce189
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $3
+ jr nz, .asm_ce197
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ inc [hl]
+.asm_ce197
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ 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 DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_42:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld d, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ cp $40
+ jr nc, .asm_ce1df
+ inc [hl]
+ ret
+
+.asm_ce1df
+ ld a, [hl]
+ dec [hl]
+ and a
+ ret nz
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_30:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce133
+ dw Functionce140
+
+Functionce133:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], a
+Functionce140:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $30
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ add $8
+ ld d, $30
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimFunction_31:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce172
+ dw Functionce199
+
+Functionce172:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $10
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld [hl], $f
+Functionce199:
+ ret
+
+BattleAnimFunction_32:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce1a5
+ dw Functionce1b9
+ dw Functionce1bd
+ dw Functionce1ce
+
+Functionce1a5:
+ call BattleAnim_IncAnonJumptableIndex
+ ldh a, [hBattleTurn]
+ and a
+ jr nz, .asm_ce26c
+ ld a, $f0
+ jr .asm_ce26e
+
+.asm_ce26c
+ ld a, $cc
+.asm_ce26e
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], a
+ ret
+
+Functionce1b9:
+ call Functionce1e4
+ ret
+
+Functionce1bd:
+ call Functionce1e4
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ ret nc
+ ld a, $4
+ call Functionce64f
+ ret
+
+Functionce1ce:
+ call Functionce1e4
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $d0
+ jr nc, .asm_ce29b
+ ld a, $4
+ call Functionce64f
+ ret
+
+.asm_ce29b
+ call DeinitBattleAnimation
+ ret
+
+Functionce1e4:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and $7
+ inc [hl]
+ srl a
+ ld e, a
+ ld d, $0
+ ldh a, [hSGB]
+ and a
+ jr nz, .asm_ce2b6
+ ld hl, Unknown_ce209
+ jr .asm_ce2b9
+
+.asm_ce2b6
+ ld hl, Unknown_ce20d
+.asm_ce2b9
+ add hl, de
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ and [hl]
+ ld [wOBP0], a
+ ret
+
+Unknown_ce209:
+ db $ff, $aa, $55, $aa
+Unknown_ce20d:
+ db $ff, $ff, $00, $00
+
+BattleAnimFunction_33:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ call BattleAnim_Sine
+ sra a
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ add [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld d, $18
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ dec [hl]
+ dec [hl]
+ ret
+
+BattleAnimFunction_36:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce24b
+ dw Functionce275
+ dw Functionce291
+
+Functionce24b:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $e0
+ jr nz, .asm_ce319
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $2
+ ret
+
+.asm_ce319
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld e, [hl]
+ ld hl, -$80
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ret
+
+Functionce275:
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_ce33a
+ dec [hl]
+ ret
+
+.asm_ce33a
+ ld [hl], $4
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ xor $ff
+ inc a
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ret
+
+Functionce291:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $84
+ jr nc, .asm_ce35b
+ ld a, $4
+ call Functionce64f
+ ret
+
+.asm_ce35b
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_37:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce2ab
+ dw Functionce2ba
+
+Functionce2ab:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ add BATTLEANIMFRAMESET_81 ; BATTLEANIMFRAMESET_82 BATTLEANIMFRAMESET_83
+ call ReinitBattleAnimFrameset
+Functionce2ba:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ bit 7, [hl]
+ jr nz, .asm_ce383
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ inc [hl]
+ ret
+
+.asm_ce383
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ dec [hl]
+ ret
+
+BattleAnimFunction_38:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce2d7
+ dw Functionce2e1
+ dw Functionce2f3
+
+Functionce2d7:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $c
+ ret
+
+Functionce2e1:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_ce3a6
+ dec [hl]
+ ret
+
+.asm_ce3a6
+ call BattleAnim_IncAnonJumptableIndex
+ ld a, BATTLEANIMFRAMESET_20
+ call ReinitBattleAnimFrameset
+Functionce2f3:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ dec [hl]
+ ret
+
+BattleAnimFunction_39:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ push af
+ ld d, $2
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop af
+ ld d, $8
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimFunction_3A:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr c, .asm_ce3df
+ call DeinitBattleAnimation
+ ret
+
+.asm_ce3df
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $8
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ add $2
+ ld [hl], a
+ and $7
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnimFunction_3B:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce34b
+ dw Functionce357
+
+Functionce34b:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ret
+
+Functionce357:
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_3D:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld d, $18
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ sra a
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ret
+
+BattleAnimFunction_3E:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce388
+ dw Functionce3aa
+ dw Functionce3d5
+
+Functionce388:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $28
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ add [hl] ; BATTLEANIMFRAMESET_8F BATTLEANIMFRAMESET_90 BATTLEANIMFRAMESET_91
+ ; BATTLEANIMFRAMESET_93 BATTLEANIMFRAMESET_94 BATTLEANIMFRAMESET_95
+ call ReinitBattleAnimFrameset
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ or $8
+ ld [hl], a
+Functionce3aa:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_ce48b
+ dec [hl]
+ add $8
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_ce48b
+ ld [hl], $10
+ call BattleAnim_IncAnonJumptableIndex
+Functionce3d5:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ and a
+ ret nz
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_40:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce3e8
+ dw Functionce3f5
+
+Functionce3e8:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, BATTLEANIMFRAMESET_24
+ add [hl] ; BATTLEANIMFRAMESET_25 BATTLEANIMFRAMESET_26
+ call ReinitBattleAnimFrameset
+Functionce3f5:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $38
+ jr nc, .asm_ce4d8
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ ld d, $18
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ dec [hl]
+ ret
+
+.asm_ce4d8
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_41:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call BattleAnim_Sine
+ bit 7, a
+ jr nz, .asm_ce4f4
+ xor $ff
+ inc a
+.asm_ce4f4
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ and $1f
+ ret nz
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ srl [hl]
+ ret
+
+BattleAnimFunction_43:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $10
+ jr nc, .asm_ce52e
+ inc [hl]
+ inc [hl]
+ ld d, a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_ce52e
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_44:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld e, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ 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 BattleAnim_Sine
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimFunction_45:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce4a9
+ dw Functionce4b3
+ dw Functionce4bc
+
+Functionce4a9:
+ ld d, $18
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ jr asm_ce4d4
+
+Functionce4b3:
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], $18
+Functionce4bc:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr nc, .asm_ce58b
+ ld d, a
+ add $8
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ jr asm_ce4d4
+
+.asm_ce58b
+ call DeinitBattleAnimation
+ ret
+
+asm_ce4d4:
+ call Functionce636
+ ret
+
+BattleAnimFunction_46:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce4f8
+ dw Functionce4df
+
+Functionce4df:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr c, .asm_ce5b0
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ dec [hl]
+ dec [hl]
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+ inc [hl]
+ inc [hl]
+ ret
+
+.asm_ce5b0
+ call DeinitBattleAnimation
+Functionce4f8:
+ ret
+
+BattleAnimFunction_47:
+ ld d, $50
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ inc [hl]
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ add [hl]
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+BattleAnimFunction_48:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $d0
+ jr z, .disappear
+ dec [hl]
+ dec [hl]
+ dec [hl]
+ dec [hl]
+ ret
+
+.disappear
+ call DeinitBattleAnimation
+ ret
+
+BattleAnimFunction_49:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce53e
+ dw Functionce54f
+ dw Functionce567
+ dw Functionce55d
+
+Functionce53e:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr nz, asm_ce561
+ call BattleAnim_IncAnonJumptableIndex
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], $ec
+Functionce54f:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $4
+ jr z, Functionce55d
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ inc [hl]
+ ret
+
+Functionce55d:
+ call DeinitBattleAnimation
+ ret
+
+asm_ce561:
+ call BattleAnim_IncAnonJumptableIndex
+ call BattleAnim_IncAnonJumptableIndex
+Functionce567:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ cp $d8
+ ret z
+ dec [hl]
+ dec [hl]
+ dec [hl]
+ dec [hl]
+ ret
+
+BattleAnimFunction_4A:
+ call BattleAnim_AnonJumptable
+.anon_dw
+ dw Functionce57f
+ dw Functionce58d
+ dw Functionce5a1
+ dw Functionce5b7
+
+Functionce57f:
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ ld [hl], a
+ call BattleAnim_IncAnonJumptableIndex
+ ret
+
+Functionce58d:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ add $4
+ cp $70
+ jr c, .asm_ce654
+ xor a
+.asm_ce654
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ inc [hl]
+ inc [hl]
+ ret
+
+Functionce5a1:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ add $4
+ cp $70
+ jr c, .asm_ce668
+ xor a
+.asm_ce668
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ add $8
+ ld [hl], a
+ ret
+
+Functionce5b7:
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld a, [hl]
+ add $4
+ cp $70
+ jr c, .asm_ce67e
+ xor a
+.asm_ce67e
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld a, [hl]
+ add $4
+ ld [hl], a
+ ret
+
+BattleAnimFunction_4B:
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld e, [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ 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, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ ld [hl], d
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld [hl], e
+ ret
+
+BattleAnimFunction_4C:
+ ld d, $18
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call Functionce636
+ ret
+
+BattleAnimFunction_4F:
+ ld d, $18
+ ld hl, BATTLEANIMSTRUCT_10
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ srl a
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ add [hl]
+ call Functionce636
+ ret
+
+BattleAnimFunction_4D:
+ ld hl, BATTLEANIMSTRUCT_0F
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr nc, .asm_ce6ed
+ inc [hl]
+ ld hl, BATTLEANIMSTRUCT_PARAM
+ add hl, bc
+ ld d, [hl]
+ call BattleAnim_Sine
+ xor $ff
+ inc a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+.asm_ce6ed
+ call DeinitBattleAnimation
+ ret
+
+Functionce636:
+ push af
+ push de
+ call BattleAnim_Sine
+ sra a
+ sra a
+ ld hl, BATTLEANIMSTRUCT_YOFFSET
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call BattleAnim_Cosine
+ ld hl, BATTLEANIMSTRUCT_XOFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+
+Functionce64f:
+ and $f
+ ld e, a
+ ld hl, BATTLEANIMSTRUCT_XCOORD
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ srl e
+ ld hl, BATTLEANIMSTRUCT_YCOORD
+ add hl, bc
+.asm_ce719
+ dec [hl]
+ dec e
+ jr nz, .asm_ce719
+ ret
+
+BattleAnim_AnonJumptable:
+ pop de
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ 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
+
+BattleAnim_IncAnonJumptableIndex:
+ ld hl, BATTLEANIMSTRUCT_ANON_JT_INDEX
+ add hl, bc
+ inc [hl]
+ ret
+
+BattleAnim_Cosine:
+; a = d * cos(a * pi/32)
+ add %010000 ; cos(x) = sin(x + pi/2)
+ ; fallthrough
+BattleAnim_Sine:
+; a = d * sin(a * pi/32)
+ calc_sine_wave BattleAnimSineWave
+
+BattleAnim_Sine_e:
+ ld a, e
+ call BattleAnim_Sine
+ ld e, a
+ ret
+
+BattleAnim_Cosine_e:
+ ld a, e
+ call BattleAnim_Cosine
+ ld e, a
+ ret
+
+BattleAnim_AbsSinePrecise:
+ ld a, e
+ call BattleAnim_Sine
+ ld e, l
+ ld d, h
+ ret
+
+BattleAnim_AbsCosinePrecise:
+ ld a, e
+ call BattleAnim_Cosine
+ ld e, l
+ ld d, h
+ ret
+
+BattleAnimSineWave:
+ sine_table 256
diff --git a/engine/battle_anims/helpers.asm b/engine/battle_anims/helpers.asm
new file mode 100755
index 00000000..208ab614
--- /dev/null
+++ b/engine/battle_anims/helpers.asm
@@ -0,0 +1,123 @@
+ReinitBattleAnimFrameset:
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld [hl], a
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], 0
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld [hl], -1
+ ret
+
+GetBattleAnimFrame:
+.loop
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .next_frame
+ dec [hl]
+ call .GetPointer
+ ld a, [hli]
+ push af
+ jr .okay
+
+.next_frame
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ inc [hl]
+ call .GetPointer
+ ld a, [hli]
+ cp dorestart_command
+ jr z, .restart
+ cp endanim_command
+ jr z, .repeat_last
+
+ push af
+ ld a, [hl]
+ push hl
+ and $ff ^ (Y_FLIP << 1 | X_FLIP << 1)
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], a
+ pop hl
+.okay
+ ld a, [hl]
+ and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro
+ srl a
+ ld [wBattleAnimTempFrameOAMFlags], a
+ pop af
+ ret
+
+.repeat_last
+ xor a
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], a
+
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ dec [hl]
+ dec [hl]
+ jr .loop
+
+.restart
+ xor a
+ ld hl, BATTLEANIMSTRUCT_DURATION
+ add hl, bc
+ ld [hl], a
+ dec a
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld [hl], a
+ jr .loop
+
+.GetPointer:
+ ld hl, BATTLEANIMSTRUCT_FRAMESET_ID
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, BattleAnimFrameData
+ add hl, de
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, BATTLEANIMSTRUCT_FRAME
+ add hl, bc
+ ld l, [hl]
+ ld h, $0
+ add hl, hl
+ add hl, de
+ ret
+
+GetBattleAnimOAMPointer:
+ ld l, a
+ ld h, 0
+ ld de, BattleAnimOAMData
+ add hl, hl
+ add hl, hl
+ add hl, de
+ ret
+
+LoadBattleAnimGFX:
+ 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 DecompressRequest2bpp
+ pop bc
+ ret
diff --git a/engine/events/bug_contest/display_stats.asm b/engine/events/bug_contest/display_stats.asm
new file mode 100755
index 00000000..bfa6d90b
--- /dev/null
+++ b/engine/events/bug_contest/display_stats.asm
@@ -0,0 +1,104 @@
+DisplayCaughtContestMonStats:
+ call ClearBGPalettes
+ call ClearTilemap
+ call ClearSprites
+ call LoadFontsBattleExtra
+
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+
+ hlcoord 0, 0
+ ld b, 4
+ ld c, 13
+ call Textbox
+
+ hlcoord 0, 6
+ ld b, 4
+ ld c, 13
+ call Textbox
+
+ hlcoord 2, 0
+ ld de, .Stock
+ call PlaceString
+
+ hlcoord 2, 6
+ ld de, .This
+ call PlaceString
+
+ hlcoord 5, 4
+ ld de, .Health
+ call PlaceString
+
+ hlcoord 5, 10
+ ld de, .Health
+ call PlaceString
+
+ ld a, [wContestMon]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld de, wStringBuffer1
+ hlcoord 1, 2
+ call PlaceString
+
+ ld h, b
+ ld l, c
+ ld a, [wContestMonLevel]
+ ld [wTempMonLevel], a
+ call PrintLevel
+
+ ld de, wEnemyMonNick
+ hlcoord 1, 8
+ call PlaceString
+
+ ld h, b
+ ld l, c
+ ld a, [wEnemyMonLevel]
+ ld [wTempMonLevel], a
+ call PrintLevel
+
+ hlcoord 11, 4
+ ld de, wContestMonMaxHP
+ lb bc, 2, 3
+ call PrintNum
+
+ hlcoord 11, 10
+ ld de, wEnemyMonMaxHP
+ call PrintNum
+
+ ld hl, ContestAskSwitchText
+ call PrintText
+
+ pop af
+ ld [wOptions], a
+
+ call WaitBGMap
+ ld b, SCGB_DIPLOMA
+ call GetSGBLayout
+ call SetPalettes
+ ret
+
+.Health:
+ db "HEALTH@"
+.Stock:
+ db " STOCK <PK><MN> @"
+.This:
+ db " THIS <PK><MN> @"
+
+ContestAskSwitchText:
+ text_far _ContestAskSwitchText
+ text_end
+
+DisplayAlreadyCaughtText:
+ call GetPokemonName
+ ld hl, .ContestAlreadyCaughtText
+ jp PrintText
+
+.ContestAlreadyCaughtText:
+ text_far _ContestAlreadyCaughtText
+ text_end
+
+DummyPredef38:
+DummyPredef39:
+ ret
diff --git a/gfx/battle/minimize.2bpp b/gfx/battle/minimize.2bpp
new file mode 100755
index 00000000..66b554de
--- /dev/null
+++ b/gfx/battle/minimize.2bpp
Binary files differ
diff --git a/gfx/battle/minimize.png b/gfx/battle/minimize.png
new file mode 100755
index 00000000..95502f19
--- /dev/null
+++ b/gfx/battle/minimize.png
Binary files differ
diff --git a/main.asm b/main.asm
index 51170d3f..addb6945 100644
--- a/main.asm
+++ b/main.asm
@@ -297,30 +297,15 @@ INCBIN "gfx/credits/theend.2bpp"
SECTION "Move Animations", ROMX
-DisplayCaughtContestMonStats::
- dr $cc000, $cc0c8
-DisplayAlreadyCaughtText::
- dr $cc0c8, $cc0d6
-DummyPredef38::
-DummyPredef39::
- ret
-PlayBattleAnim::
- dr $cc0d7, $cc283
-BattleAnimCommands::
- dr $cc283, $cc5f7
-BattleAnimCmd_RaiseSub::
- dr $cc5f7, $cc67c
-BattleAnimCmd_MinimizeOpp::
- dr $cc67c, $cc836
-ClearBattleAnims::
- dr $cc836, $cc8f0
-QueueBattleAnimation::
- dr $cc8f0, $ce6aa
-
-BattleAnim_Sine_e::
- dr $ce6aa, $ce6b0
-BattleAnim_Cosine_e::
- dr $ce6b0, $cfce3
+INCLUDE "engine/events/bug_contest/display_stats.asm"
+INCLUDE "engine/battle_anims/anim_commands.asm"
+INCLUDE "engine/battle_anims/core.asm"
+INCLUDE "data/battle_anims/objects.asm"
+INCLUDE "engine/battle_anims/functions.asm"
+INCLUDE "engine/battle_anims/helpers.asm"
+INCLUDE "data/battle_anims/framesets.asm"
+INCLUDE "data/battle_anims/oam.asm"
+INCLUDE "data/battle_anims/object_gfx.asm"
SECTION "Font Inversed", ROMX