shithub: pokered

Download patch

ref: 2f43a411007194aef77849e4ea982e139e37507d
parent: 0db7ee08ff2eb500f6ddd559cb18cc21219f2e70
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Thu Jul 16 17:45:30 EDT 2020

Use a battle_anim macro for move animations' special effects and subanimations

Move animations' sound IDs are off by one from move IDs.

--- a/constants/move_animation_constants.asm
+++ b/constants/move_animation_constants.asm
@@ -1,6 +1,7 @@
 ; special effects that are part of move animations
-
-	const_def $D8
+	const_def $C0
+FIRST_SE_ID EQU const_value
+	const_skip $18
 	const SE_WAVY_SCREEN               ; $D8 used in Psywave/Night Shade/Psychic etc.
 	const SE_SUBSTITUTE_MON            ; $D9 used in Substitute (turns the pokemon into a mini sprite)
 	const SE_SHAKE_BACK_AND_FORTH      ; $DA used in Double Team
@@ -40,3 +41,92 @@
 	const SE_RESET_SCREEN_PALETTE      ; $FC used in Leer/Thunderpunch/etc.
 	const SE_DARK_SCREEN_PALETTE       ; $FD used in Hyper Beam/Thunderpunch/etc.
 	const SE_DARK_SCREEN_FLASH         ; $FE used in Cut/Take Down/etc.
+
+; subanimations that are part of move animations
+	const_def
+	const SUBANIM_00
+	const SUBANIM_01
+	const SUBANIM_02
+	const SUBANIM_03
+	const SUBANIM_04
+	const SUBANIM_05
+	const SUBANIM_06
+	const SUBANIM_07
+	const SUBANIM_08
+	const SUBANIM_09
+	const SUBANIM_0A
+	const SUBANIM_0B
+	const SUBANIM_0C
+	const SUBANIM_0D
+	const SUBANIM_0E
+	const SUBANIM_0F
+	const SUBANIM_10
+	const SUBANIM_11
+	const SUBANIM_12
+	const SUBANIM_13
+	const SUBANIM_14
+	const SUBANIM_15
+	const SUBANIM_16
+	const SUBANIM_17
+	const SUBANIM_18
+	const SUBANIM_19
+	const SUBANIM_1A
+	const SUBANIM_1B
+	const SUBANIM_1C
+	const SUBANIM_1D
+	const SUBANIM_1E
+	const SUBANIM_1F
+	const SUBANIM_20
+	const SUBANIM_21
+	const SUBANIM_22
+	const SUBANIM_23
+	const SUBANIM_24
+	const SUBANIM_25
+	const SUBANIM_26
+	const SUBANIM_27
+	const SUBANIM_28
+	const SUBANIM_29
+	const SUBANIM_2A
+	const SUBANIM_2B
+	const SUBANIM_2C
+	const SUBANIM_2D
+	const SUBANIM_2E
+	const SUBANIM_2F
+	const SUBANIM_30
+	const SUBANIM_31
+	const SUBANIM_32
+	const SUBANIM_33
+	const SUBANIM_34
+	const SUBANIM_35
+	const SUBANIM_36
+	const SUBANIM_37
+	const SUBANIM_38
+	const SUBANIM_39
+	const SUBANIM_3A
+	const SUBANIM_3B
+	const SUBANIM_3C
+	const SUBANIM_3D
+	const SUBANIM_3E
+	const SUBANIM_3F
+	const SUBANIM_40
+	const SUBANIM_41
+	const SUBANIM_42
+	const SUBANIM_43
+	const SUBANIM_44
+	const SUBANIM_45
+	const SUBANIM_46
+	const SUBANIM_47
+	const SUBANIM_48
+	const SUBANIM_49
+	const SUBANIM_4A
+	const SUBANIM_4B
+	const SUBANIM_4C
+	const SUBANIM_4D
+	const SUBANIM_4E
+	const SUBANIM_4F
+	const SUBANIM_50
+	const SUBANIM_51
+	const SUBANIM_52
+	const SUBANIM_53
+	const SUBANIM_54
+	const SUBANIM_55
--- a/data/battle_anims/frame_blocks.asm
+++ b/data/battle_anims/frame_blocks.asm
@@ -131,7 +131,7 @@
 ; third byte = tile id (it's actually tile id - $31)
 ; fourth byte = tile properties (xflip/yflip/etc.)
 FrameBlock01:
-	db $09
+	db 9 ; #
 	db $00, $00, $2c, $00
 	db $00, $08, $2d, $00
 	db $00, $10, $2c, $20
@@ -143,7 +143,7 @@
 	db $10, $10, $2c, $60
 
 FrameBlock02:
-	db $10
+	db 16 ; #
 	db $00, $00, $20, $00
 	db $00, $08, $21, $00
 	db $00, $10, $21, $20
@@ -162,7 +162,7 @@
 	db $18, $18, $20, $60
 
 FrameBlock03:
-	db $04
+	db 4 ; #
 	db $00, $00, $02, $00
 	db $00, $08, $02, $20
 	db $08, $00, $12, $00
@@ -169,7 +169,7 @@
 	db $08, $08, $12, $20
 
 FrameBlock04:
-	db $04
+	db 4 ; #
 	db $00, $00, $06, $00
 	db $00, $08, $07, $00
 	db $08, $00, $16, $00
@@ -176,7 +176,7 @@
 	db $08, $08, $17, $00
 
 FrameBlock05:
-	db $04
+	db 4 ; #
 	db $00, $00, $07, $20
 	db $00, $08, $06, $20
 	db $08, $00, $17, $20
@@ -183,7 +183,7 @@
 	db $08, $08, $16, $20
 
 FrameBlock06:
-	db $0c
+	db 12 ; #
 	db $00, $08, $23, $00
 	db $08, $00, $32, $00
 	db $08, $08, $33, $00
@@ -198,7 +198,7 @@
 	db $18, $10, $23, $60
 
 FrameBlock07:
-	db $10
+	db 16 ; #
 	db $00, $00, $20, $00
 	db $00, $08, $21, $00
 	db $08, $00, $30, $00
@@ -217,7 +217,7 @@
 	db $18, $18, $20, $60
 
 FrameBlock08:
-	db $10
+	db 16 ; #
 	db $00, $00, $20, $00
 	db $00, $08, $21, $00
 	db $08, $00, $30, $00
@@ -236,7 +236,7 @@
 	db $20, $20, $20, $60
 
 FrameBlock09:
-	db $0c
+	db 12 ; #
 	db $00, $00, $24, $00
 	db $00, $08, $25, $00
 	db $08, $00, $34, $00
@@ -251,7 +251,7 @@
 	db $20, $20, $24, $60
 
 FrameBlock0a:
-	db $0c
+	db 12 ; #
 	db $00, $00, $24, $00
 	db $00, $08, $25, $00
 	db $08, $00, $34, $00
@@ -266,7 +266,7 @@
 	db $28, $28, $24, $60
 
 FrameBlock0b:
-	db $04
+	db 4 ; #
 	db $00, $00, $05, $00
 	db $00, $08, $05, $20
 	db $08, $00, $15, $00
@@ -273,7 +273,7 @@
 	db $08, $08, $15, $20
 
 FrameBlock0c:
-	db $04
+	db 4 ; #
 	db $00, $00, $04, $00
 	db $00, $08, $04, $20
 	db $08, $00, $14, $00
@@ -280,7 +280,7 @@
 	db $08, $08, $14, $20
 
 FrameBlock0d:
-	db $08
+	db 8 ; #
 	db $00, $00, $0c, $00
 	db $00, $08, $0d, $00
 	db $08, $00, $1c, $00
@@ -291,7 +291,7 @@
 	db $18, $08, $0c, $60
 
 FrameBlock0e:
-	db $04
+	db 4 ; #
 	db $20, $00, $0c, $00
 	db $20, $08, $0d, $00
 	db $28, $00, $1c, $00
@@ -298,7 +298,7 @@
 	db $28, $08, $1d, $00
 
 FrameBlock0f:
-	db $04
+	db 4 ; #
 	db $30, $00, $1d, $60
 	db $30, $08, $1c, $60
 	db $38, $00, $0d, $60
@@ -305,7 +305,7 @@
 	db $38, $08, $0c, $60
 
 FrameBlock10:
-	db $08
+	db 8 ; #
 	db $00, $00, $0e, $00
 	db $00, $08, $0f, $00
 	db $08, $00, $1e, $00
@@ -316,7 +316,7 @@
 	db $08, $18, $1e, $20
 
 FrameBlock11:
-	db $08
+	db 8 ; #
 	db $00, $00, $0e, $00
 	db $00, $08, $0f, $00
 	db $08, $00, $1e, $00
@@ -327,13 +327,13 @@
 	db $08, $28, $1e, $20
 
 FrameBlock12:
-	db $03
+	db 3 ; #
 	db $00, $00, $37, $00
 	db $08, $10, $37, $00
 	db $00, $20, $37, $00
 
 FrameBlock13:
-	db $04
+	db 4 ; #
 	db $00, $00, $36, $00
 	db $00, $08, $36, $20
 	db $08, $00, $36, $40
@@ -340,7 +340,7 @@
 	db $08, $08, $36, $60
 
 FrameBlock14:
-	db $08
+	db 8 ; #
 	db $00, $10, $28, $00
 	db $00, $18, $28, $20
 	db $08, $10, $38, $00
@@ -351,7 +351,7 @@
 	db $08, $28, $36, $60
 
 FrameBlock15:
-	db $0c
+	db 12 ; #
 	db $00, $00, $28, $00
 	db $00, $08, $28, $20
 	db $08, $00, $38, $00
@@ -366,7 +366,7 @@
 	db $08, $28, $38, $20
 
 FrameBlock16:
-	db $08
+	db 8 ; #
 	db $00, $00, $29, $00
 	db $00, $08, $29, $20
 	db $08, $00, $39, $00
@@ -377,7 +377,7 @@
 	db $08, $28, $39, $20
 
 FrameBlock17:
-	db $04
+	db 4 ; #
 	db $00, $00, $08, $00
 	db $00, $08, $09, $00
 	db $08, $00, $18, $00
@@ -384,41 +384,41 @@
 	db $08, $08, $19, $00
 
 FrameBlock18:
-	db $01
+	db 1 ; #
 	db $18, $00, $45, $60
 
 FrameBlock19:
-	db $02
+	db 2 ; #
 	db $18, $08, $45, $00
 	db $10, $08, $46, $60
 
 FrameBlock1a:
-	db $02
+	db 2 ; #
 	db $10, $10, $45, $60
 	db $18, $10, $46, $00
 
 FrameBlock1b:
-	db $02
+	db 2 ; #
 	db $10, $18, $45, $00
 	db $08, $18, $46, $60
 
 FrameBlock1c:
-	db $02
+	db 2 ; #
 	db $08, $20, $45, $60
 	db $10, $20, $46, $00
 
 FrameBlock1d:
-	db $02
+	db 2 ; #
 	db $08, $28, $45, $00
 	db $00, $28, $46, $60
 
 FrameBlock1e:
-	db $02
+	db 2 ; #
 	db $00, $30, $45, $60
 	db $08, $30, $46, $00
 
 FrameBlock75:
-	db $04
+	db 4 ; #
 	db $00, $00, $43, $00
 	db $00, $08, $43, $20
 	db $08, $00, $22, $00
@@ -425,12 +425,12 @@
 	db $08, $08, $43, $60
 
 FrameBlock1f:
-	db $02
+	db 2 ; #
 	db $00, $00, $03, $00
 	db $00, $30, $03, $20
 
 FrameBlock20:
-	db $06
+	db 6 ; #
 	db $00, $00, $03, $00
 	db $00, $30, $03, $20
 	db $08, $08, $03, $00
@@ -439,7 +439,7 @@
 	db $08, $30, $13, $20
 
 FrameBlock21:
-	db $0c
+	db 12 ; #
 	db $00, $00, $03, $00
 	db $00, $30, $03, $20
 	db $08, $08, $03, $00
@@ -454,7 +454,7 @@
 	db $10, $30, $03, $20
 
 FrameBlock22:
-	db $13
+	db 19 ; #
 	db $00, $00, $03, $00
 	db $08, $00, $13, $00
 	db $10, $00, $03, $00
@@ -476,7 +476,7 @@
 	db $18, $30, $13, $20
 
 FrameBlock23:
-	db $04
+	db 4 ; #
 	db $00, $00, $0a, $00
 	db $00, $08, $0b, $00
 	db $08, $00, $1a, $00
@@ -483,12 +483,12 @@
 	db $08, $08, $1b, $00
 
 FrameBlock24:
-	db $02
+	db 2 ; #
 	db $08, $00, $0a, $00
 	db $08, $08, $0b, $00
 
 FrameBlock25:
-	db $0c
+	db 12 ; #
 	db $10, $00, $0a, $00
 	db $10, $08, $0b, $00
 	db $18, $00, $1a, $00
@@ -503,7 +503,7 @@
 	db $10, $28, $1b, $00
 
 FrameBlock26:
-	db $04
+	db 4 ; #
 	db $00, $10, $44, $00
 	db $00, $18, $44, $20
 	db $08, $10, $44, $40
@@ -510,7 +510,7 @@
 	db $08, $18, $44, $60
 
 FrameBlock27:
-	db $05
+	db 5 ; #
 	db $08, $08, $44, $00
 	db $08, $10, $44, $20
 	db $10, $08, $44, $40
@@ -518,7 +518,7 @@
 	db $00, $18, $47, $00
 
 FrameBlock28:
-	db $06
+	db 6 ; #
 	db $10, $00, $44, $00
 	db $10, $08, $44, $20
 	db $18, $00, $44, $40
@@ -527,7 +527,7 @@
 	db $02, $16, $47, $00
 
 FrameBlock29:
-	db $04
+	db 4 ; #
 	db $18, $00, $47, $00
 	db $12, $06, $47, $00
 	db $0c, $0c, $47, $00
@@ -534,7 +534,7 @@
 	db $06, $12, $47, $00
 
 FrameBlock2a:
-	db $04
+	db 4 ; #
 	db $00, $00, $44, $00
 	db $00, $08, $44, $20
 	db $08, $00, $44, $40
@@ -541,16 +541,16 @@
 	db $08, $08, $44, $60
 
 FrameBlock2b:
-	db $02
+	db 2 ; #
 	db $06, $02, $47, $00
 	db $00, $08, $47, $00
 
 FrameBlock2c:
-	db $01
+	db 1 ; #
 	db $a0, $00, $4d, $00
 
 FrameBlock2d:
-	db $08
+	db 8 ; #
 	db $00, $00, $26, $00
 	db $00, $08, $27, $00
 	db $08, $00, $36, $00
@@ -561,7 +561,7 @@
 	db $18, $08, $39, $00
 
 FrameBlock2e:
-	db $08
+	db 8 ; #
 	db $00, $00, $27, $20
 	db $00, $08, $26, $20
 	db $08, $00, $37, $20
@@ -572,7 +572,7 @@
 	db $18, $08, $38, $20
 
 FrameBlock2f:
-	db $04
+	db 4 ; #
 	db $00, $00, $0c, $00
 	db $00, $08, $0d, $00
 	db $08, $00, $0c, $40
@@ -579,7 +579,7 @@
 	db $08, $08, $0d, $40
 
 FrameBlock30:
-	db $04
+	db 4 ; #
 	db $00, $00, $44, $00
 	db $00, $08, $44, $20
 	db $08, $00, $44, $40
@@ -586,11 +586,11 @@
 	db $08, $08, $44, $60
 
 FrameBlock31:
-	db $01
+	db 1 ; #
 	db $00, $00, $45, $00
 
 FrameBlock32:
-	db $07
+	db 7 ; #
 	db $00, $00, $4d, $00
 	db $00, $08, $2f, $00
 	db $00, $10, $4d, $20
@@ -600,7 +600,7 @@
 	db $10, $08, $3f, $00
 
 FrameBlock33:
-	db $07
+	db 7 ; #
 	db $00, $08, $3f, $40
 	db $08, $00, $4e, $40
 	db $08, $08, $07, $40
@@ -610,11 +610,11 @@
 	db $10, $10, $4d, $60
 
 FrameBlock34:
-	db $01
+	db 1 ; #
 	db $a0, $00, $00, $10
 
 FrameBlock35:
-	db $06
+	db 6 ; #
 	db $00, $00, $2a, $00
 	db $00, $08, $2b, $00
 	db $08, $00, $3a, $00
@@ -623,7 +623,7 @@
 	db $18, $08, $2b, $40
 
 FrameBlock36:
-	db $04
+	db 4 ; #
 	db $00, $00, $00, $00
 	db $00, $08, $01, $00
 	db $08, $00, $10, $00
@@ -630,7 +630,7 @@
 	db $08, $08, $11, $00
 
 FrameBlock37:
-	db $04
+	db 4 ; #
 	db $00, $00, $01, $a0
 	db $00, $08, $00, $a0
 	db $08, $00, $11, $a0
@@ -637,7 +637,7 @@
 	db $08, $08, $10, $a0
 
 FrameBlock38:
-	db $04
+	db 4 ; #
 	db $00, $00, $0a, $00
 	db $00, $08, $0b, $00
 	db $08, $00, $1a, $00
@@ -644,7 +644,7 @@
 	db $08, $08, $1b, $00
 
 FrameBlock39:
-	db $04
+	db 4 ; #
 	db $00, $00, $0b, $20
 	db $00, $08, $0a, $20
 	db $08, $00, $1b, $20
@@ -651,7 +651,7 @@
 	db $08, $08, $1a, $20
 
 FrameBlock3a:
-	db $04
+	db 4 ; #
 	db $20, $00, $05, $00
 	db $20, $08, $05, $20
 	db $28, $00, $15, $00
@@ -658,7 +658,7 @@
 	db $28, $08, $15, $20
 
 FrameBlock3b:
-	db $05
+	db 5 ; #
 	db $18, $00, $04, $00
 	db $18, $08, $04, $20
 	db $20, $00, $14, $00
@@ -666,7 +666,7 @@
 	db $28, $04, $41, $00
 
 FrameBlock3c:
-	db $06
+	db 6 ; #
 	db $10, $00, $05, $00
 	db $10, $08, $05, $20
 	db $18, $00, $15, $00
@@ -675,7 +675,7 @@
 	db $28, $04, $42, $00
 
 FrameBlock3d:
-	db $07
+	db 7 ; #
 	db $08, $00, $04, $00
 	db $08, $08, $04, $20
 	db $10, $00, $14, $00
@@ -685,7 +685,7 @@
 	db $28, $04, $41, $00
 
 FrameBlock3e:
-	db $08
+	db 8 ; #
 	db $00, $00, $05, $00
 	db $00, $08, $05, $20
 	db $08, $00, $15, $00
@@ -696,7 +696,7 @@
 	db $28, $04, $42, $00
 
 FrameBlock3f:
-	db $08
+	db 8 ; #
 	db $00, $00, $04, $00
 	db $00, $08, $04, $20
 	db $08, $00, $14, $00
@@ -707,13 +707,13 @@
 	db $28, $04, $41, $00
 
 FrameBlock40:
-	db $03
+	db 3 ; #
 	db $00, $00, $3d, $00
 	db $00, $08, $3d, $00
 	db $08, $08, $3d, $00
 
 FrameBlock41:
-	db $04
+	db 4 ; #
 	db $00, $00, $06, $00
 	db $00, $08, $06, $20
 	db $08, $00, $16, $00
@@ -720,7 +720,7 @@
 	db $08, $08, $17, $00
 
 FrameBlock42:
-	db $0b
+	db 11 ; #
 	db $00, $10, $42, $00
 	db $08, $00, $42, $00
 	db $08, $08, $42, $00
@@ -734,7 +734,7 @@
 	db $20, $20, $42, $00
 
 FrameBlock43:
-	db $0b
+	db 11 ; #
 	db $00, $10, $41, $00
 	db $08, $00, $41, $00
 	db $08, $08, $41, $00
@@ -748,7 +748,7 @@
 	db $20, $20, $41, $00
 
 FrameBlock44:
-	db $04
+	db 4 ; #
 	db $00, $00, $49, $00
 	db $00, $28, $49, $00
 	db $28, $00, $49, $00
@@ -755,7 +755,7 @@
 	db $28, $28, $49, $00
 
 FrameBlock45:
-	db $04
+	db 4 ; #
 	db $00, $00, $49, $00
 	db $00, $18, $49, $00
 	db $18, $00, $49, $00
@@ -762,7 +762,7 @@
 	db $18, $18, $49, $00
 
 FrameBlock46:
-	db $04
+	db 4 ; #
 	db $00, $00, $49, $00
 	db $00, $08, $49, $00
 	db $08, $00, $49, $00
@@ -769,7 +769,7 @@
 	db $08, $08, $49, $00
 
 FrameBlock47:
-	db $04
+	db 4 ; #
 	db $00, $00, $43, $00
 	db $00, $08, $43, $20
 	db $08, $00, $43, $40
@@ -776,7 +776,7 @@
 	db $08, $08, $43, $60
 
 SmallBlackCircleFrameBlock:
-	db $04
+	db 4 ; #
 	db $08, $08, $33, $00
 	db $08, $10, $33, $20
 	db $10, $08, $33, $40
@@ -783,7 +783,7 @@
 	db $10, $10, $33, $60
 
 LargeBlockCircleFrameBlock:
-	db $10
+	db 16 ; #
 	db $00, $00, $22, $00
 	db $00, $08, $23, $00
 	db $00, $10, $23, $20
@@ -802,7 +802,7 @@
 	db $18, $18, $22, $60
 
 FrameBlock71:
-	db $10
+	db 16 ; #
 	db $00, $00, $22, $00
 	db $00, $08, $3b, $00
 	db $00, $10, $23, $20
@@ -821,7 +821,7 @@
 	db $18, $18, $22, $60
 
 FrameBlock72:
-	db $0c
+	db 12 ; #
 	db $00, $00, $32, $00
 	db $00, $08, $43, $00
 	db $00, $10, $43, $20
@@ -836,7 +836,7 @@
 	db $10, $18, $22, $60
 
 FrameBlock73:
-	db $08
+	db 8 ; #
 	db $00, $00, $32, $40
 	db $00, $08, $43, $40
 	db $00, $10, $43, $60
@@ -847,7 +847,7 @@
 	db $08, $18, $22, $60
 
 FrameBlock74:
-	db $04
+	db 4 ; #
 	db $00, $00, $22, $40
 	db $00, $08, $23, $40
 	db $00, $10, $23, $60
@@ -854,7 +854,7 @@
 	db $00, $18, $22, $60
 
 FrameBlock4a:
-	db $04
+	db 4 ; #
 	db $08, $18, $4c, $20
 	db $20, $08, $4b, $00
 	db $30, $20, $4c, $00
@@ -861,7 +861,7 @@
 	db $18, $30, $4b, $40
 
 FrameBlock4b:
-	db $04
+	db 4 ; #
 	db $00, $18, $4c, $00
 	db $20, $00, $4b, $40
 	db $38, $20, $4c, $20
@@ -868,7 +868,7 @@
 	db $18, $38, $4b, $00
 
 FrameBlock4c:
-	db $04
+	db 4 ; #
 	db $10, $08, $4a, $40
 	db $30, $10, $4a, $00
 	db $28, $30, $4a, $20
@@ -875,7 +875,7 @@
 	db $08, $28, $4a, $60
 
 FrameBlock4d:
-	db $04
+	db 4 ; #
 	db $08, $00, $4a, $20
 	db $38, $08, $4a, $60
 	db $30, $38, $4a, $40
@@ -882,7 +882,7 @@
 	db $00, $30, $4a, $00
 
 FrameBlock4e:
-	db $08
+	db 8 ; #
 	db $00, $30, $44, $00
 	db $00, $38, $44, $20
 	db $08, $30, $44, $40
@@ -893,7 +893,7 @@
 	db $2e, $12, $44, $60
 
 FrameBlock4f:
-	db $0c
+	db 12 ; #
 	db $0e, $22, $44, $00
 	db $0e, $2a, $44, $20
 	db $16, $22, $44, $40
@@ -908,7 +908,7 @@
 	db $2a, $0e, $47, $00
 
 FrameBlock50:
-	db $08
+	db 8 ; #
 	db $06, $32, $47, $00
 	db $00, $38, $47, $00
 	db $12, $26, $47, $00
@@ -919,7 +919,7 @@
 	db $24, $14, $47, $00
 
 FrameBlock51:
-	db $08
+	db 8 ; #
 	db $00, $00, $35, $20
 	db $08, $00, $35, $40
 	db $10, $00, $35, $00
@@ -930,7 +930,7 @@
 	db $18, $40, $35, $40
 
 FrameBlock52:
-	db $04
+	db 4 ; #
 	db $00, $00, $2a, $00
 	db $00, $08, $2b, $00
 	db $08, $00, $3a, $00
@@ -937,13 +937,13 @@
 	db $08, $08, $3b, $00
 
 FrameBlock53:
-	db $03
+	db 3 ; #
 	db $00, $00, $3f, $00
 	db $00, $08, $3f, $00
 	db $08, $06, $3f, $00
 
 FrameBlock54:
-	db $04
+	db 4 ; #
 	db $00, $00, $0e, $00
 	db $00, $08, $0e, $20
 	db $08, $00, $0f, $00
@@ -950,13 +950,13 @@
 	db $08, $08, $0f, $20
 
 FrameBlock55:
-	db $03
+	db 3 ; #
 	db $10, $00, $2c, $00
 	db $10, $08, $3c, $00
 	db $10, $10, $2d, $00
 
 FrameBlock56:
-	db $06
+	db 6 ; #
 	db $10, $10, $31, $00
 	db $10, $18, $31, $00
 	db $08, $10, $2c, $00
@@ -965,7 +965,7 @@
 	db $10, $20, $2d, $00
 
 FrameBlock57:
-	db $09
+	db 9 ; #
 	db $08, $20, $31, $00
 	db $10, $20, $31, $00
 	db $08, $28, $31, $00
@@ -977,7 +977,7 @@
 	db $10, $30, $2d, $00
 
 FrameBlock58:
-	db $07
+	db 7 ; #
 	db $00, $00, $46, $00
 	db $08, $02, $47, $00
 	db $10, $03, $48, $00
@@ -987,11 +987,11 @@
 	db $30, $05, $48, $00
 
 FrameBlock59:
-	db $01
+	db 1 ; #
 	db $00, $00, $42, $00
 
 FrameBlock5a:
-	db $0c
+	db 12 ; #
 	db $00, $00, $24, $00
 	db $00, $08, $25, $00
 	db $08, $00, $34, $00
@@ -1006,7 +1006,7 @@
 	db $18, $18, $24, $60
 
 FrameBlock5b:
-	db $04
+	db 4 ; #
 	db $00, $00, $43, $00
 	db $00, $08, $43, $20
 	db $08, $00, $43, $40
@@ -1013,7 +1013,7 @@
 	db $08, $08, $43, $60
 
 FrameBlock5c:
-	db $08
+	db 8 ; #
 	db $00, $00, $49, $00
 	db $02, $08, $49, $00
 	db $18, $00, $49, $00
@@ -1024,7 +1024,7 @@
 	db $10, $08, $43, $60
 
 FrameBlock5d:
-	db $0b
+	db 11 ; #
 	db $00, $00, $49, $00
 	db $18, $02, $49, $00
 	db $14, $10, $49, $00
@@ -1038,7 +1038,7 @@
 	db $0c, $10, $43, $60
 
 FrameBlock5e:
-	db $0f
+	db 15 ; #
 	db $00, $08, $49, $00
 	db $08, $10, $49, $00
 	db $20, $00, $49, $00
@@ -1056,7 +1056,7 @@
 	db $28, $10, $43, $60
 
 FrameBlock5f:
-	db $04
+	db 4 ; #
 	db $00, $00, $49, $00
 	db $00, $10, $49, $00
 	db $00, $20, $49, $00
@@ -1063,7 +1063,7 @@
 	db $00, $30, $49, $00
 
 FrameBlock60:
-	db $08
+	db 8 ; #
 	db $00, $00, $49, $00
 	db $00, $10, $49, $00
 	db $00, $20, $49, $00
@@ -1074,7 +1074,7 @@
 	db $08, $38, $49, $00
 
 FrameBlock61:
-	db $0c
+	db 12 ; #
 	db $00, $00, $49, $00
 	db $00, $10, $49, $00
 	db $00, $20, $49, $00
@@ -1089,7 +1089,7 @@
 	db $10, $30, $49, $00
 
 FrameBlock62:
-	db $0f
+	db 15 ; #
 	db $00, $00, $49, $00
 	db $00, $10, $49, $00
 	db $00, $20, $49, $00
@@ -1108,7 +1108,7 @@
 	db $18, $38, $49, $00 ; unused
 
 FrameBlock63:
-	db $06
+	db 6 ; #
 	db $10, $00, $26, $00
 	db $10, $08, $27, $00
 	db $08, $10, $26, $00
@@ -1117,7 +1117,7 @@
 	db $00, $28, $27, $00
 
 FrameBlock64:
-	db $06
+	db 6 ; #
 	db $18, $00, $27, $00
 	db $10, $08, $26, $00
 	db $10, $10, $27, $00
@@ -1126,7 +1126,7 @@
 	db $00, $28, $26, $00
 
 FrameBlock65:
-	db $06
+	db 6 ; #
 	db $00, $00, $1c, $00
 	db $00, $08, $1d, $00
 	db $10, $00, $1c, $00
@@ -1135,16 +1135,16 @@
 	db $20, $08, $1d, $00
 
 FrameBlock66:
-	db $02
+	db 2 ; #
 	db $00, $00, $03, $00
 	db $08, $00, $13, $00
 
 FrameBlock67:
-	db $01
+	db 1 ; #
 	db $00, $00, $03, $00
 
 FrameBlock68:
-	db $04
+	db 4 ; #
 	db $00, $00, $03, $00
 	db $00, $08, $03, $20
 	db $08, $00, $13, $00
@@ -1151,11 +1151,11 @@
 	db $08, $08, $13, $20
 
 FrameBlock69:
-	db $01
+	db 1 ; #
 	db $00, $00, $06, $00
 
 FrameBlock6a:
-	db $08
+	db 8 ; #
 	db $00, $00, $2e, $00
 	db $00, $30, $2e, $20
 	db $30, $00, $2e, $40
@@ -1166,7 +1166,7 @@
 	db $18, $30, $3e, $20
 
 FrameBlock6b:
-	db $08
+	db 8 ; #
 	db $00, $00, $2e, $00
 	db $00, $20, $2e, $20
 	db $20, $00, $2e, $40
@@ -1177,7 +1177,7 @@
 	db $10, $20, $3e, $20
 
 FrameBlock6c:
-	db $08
+	db 8 ; #
 	db $00, $00, $2e, $00
 	db $00, $10, $2e, $20
 	db $10, $00, $2e, $40
@@ -1188,12 +1188,12 @@
 	db $08, $10, $3e, $20
 
 FrameBlock6d:
-	db $02
+	db 2 ; #
 	db $00, $00, $1e, $00
 	db $00, $08, $1f, $00
 
 FrameBlock6e:
-	db $04
+	db 4 ; #
 	db $00, $00, $48, $00
 	db $00, $08, $48, $20
 	db $08, $00, $12, $00
@@ -1200,7 +1200,7 @@
 	db $08, $08, $12, $20
 
 FrameBlock6f:
-	db $04
+	db 4 ; #
 	db $00, $00, $4a, $00
 	db $00, $08, $07, $00
 	db $08, $00, $16, $00
@@ -1207,7 +1207,7 @@
 	db $08, $08, $17, $00
 
 FrameBlock70:
-	db $04
+	db 4 ; #
 	db $00, $00, $07, $20
 	db $00, $08, $4a, $20
 	db $08, $00, $17, $20
@@ -1214,7 +1214,7 @@
 	db $08, $08, $16, $20
 
 FrameBlock76:
-	db $07
+	db 7 ; #
 	db $00, $10, $2f, $00
 	db $01, $08, $2f, $00
 	db $01, $18, $2f, $00
@@ -1224,7 +1224,7 @@
 	db $0a, $20, $3e, $20
 
 FrameBlock77:
-	db $04
+	db 4 ; #
 	db $00, $02, $4b, $00
 	db $00, $0a, $4c, $00
 	db $08, $00, $4c, $60
@@ -1231,11 +1231,11 @@
 	db $08, $08, $4b, $60
 
 FrameBlock78:
-	db $01
+	db 1 ; #
 	db $00, $00, $4d, $00
 
 FrameBlock79:
-	db $01
+	db 1 ; #
 	db $00, $00, $4e, $00
 
 FrameBlockBaseCoords:
@@ -1418,4 +1418,5 @@
 	db $48, $28
 
 FrameBlock00:
-	db $00, $00
+	db 0 ; #
+	db $00
--- a/data/battle_anims/special_effect_pointers.asm
+++ b/data/battle_anims/special_effect_pointers.asm
@@ -5,43 +5,43 @@
 
 SpecialEffectPointers:
 	; special effect id, effect routine address
-	special_effect SE_DARK_SCREEN_FLASH, AnimationFlashScreen ; $FE
-	special_effect SE_DARK_SCREEN_PALETTE, AnimationDarkScreenPalette ; $FD
-	special_effect SE_RESET_SCREEN_PALETTE, AnimationResetScreenPalette ; $FC
-	special_effect SE_SHAKE_SCREEN, AnimationShakeScreen ; $FB
+	special_effect SE_DARK_SCREEN_FLASH,         AnimationFlashScreen             ; $FE
+	special_effect SE_DARK_SCREEN_PALETTE,       AnimationDarkScreenPalette       ; $FD
+	special_effect SE_RESET_SCREEN_PALETTE,      AnimationResetScreenPalette      ; $FC
+	special_effect SE_SHAKE_SCREEN,              AnimationShakeScreen             ; $FB
 	special_effect SE_WATER_DROPLETS_EVERYWHERE, AnimationWaterDropletsEverywhere ; $FA
-	special_effect SE_DARKEN_MON_PALETTE, AnimationDarkenMonPalette ; $F9
-	special_effect SE_FLASH_SCREEN_LONG, AnimationFlashScreenLong ; $F8
-	special_effect SE_SLIDE_MON_UP, AnimationSlideMonUp ; $F7
-	special_effect SE_SLIDE_MON_DOWN, AnimationSlideMonDown ; $F6
-	special_effect SE_FLASH_MON_PIC, AnimationFlashMonPic ; $F5
-	special_effect SE_SLIDE_MON_OFF, AnimationSlideMonOff ; $F4
-	special_effect SE_BLINK_MON, AnimationBlinkMon ; $F3
-	special_effect SE_MOVE_MON_HORIZONTALLY, AnimationMoveMonHorizontally ; $F2
-	special_effect SE_RESET_MON_POSITION, AnimationResetMonPosition ; $F1
-	special_effect SE_LIGHT_SCREEN_PALETTE, AnimationLightScreenPalette ; $F0
-	special_effect SE_HIDE_MON_PIC, AnimationHideMonPic ; $EF
-	special_effect SE_SQUISH_MON_PIC, AnimationSquishMonPic ; $EE
-	special_effect SE_SHOOT_BALLS_UPWARD, AnimationShootBallsUpward ; $ED
-	special_effect SE_SHOOT_MANY_BALLS_UPWARD, AnimationShootManyBallsUpward ; $EC
-	special_effect SE_BOUNCE_UP_AND_DOWN, AnimationBoundUpAndDown ; $EB
-	special_effect SE_MINIMIZE_MON, AnimationMinimizeMon ; $EA
-	special_effect SE_SLIDE_MON_DOWN_AND_HIDE, AnimationSlideMonDownAndHide ; $E9
-	special_effect SE_TRANSFORM_MON, AnimationTransformMon ; $E8
-	special_effect SE_LEAVES_FALLING, AnimationLeavesFalling ; $E7
-	special_effect SE_PETALS_FALLING, AnimationPetalsFalling ; $E6
-	special_effect SE_SLIDE_MON_HALF_OFF, AnimationSlideMonHalfOff ; $E5
-	special_effect SE_SHAKE_ENEMY_HUD, AnimationShakeEnemyHUD ; $E4
-	special_effect SE_SHAKE_ENEMY_HUD_2, AnimationShakeEnemyHUD ; unused--same pointer as SE_SHAKE_ENEMY_HUD ($E4)
-	special_effect SE_SPIRAL_BALLS_INWARD, AnimationSpiralBallsInward ; $E2
-	special_effect SE_DELAY_ANIMATION_10, AnimationDelay10 ; $E1
-	special_effect SE_FLASH_ENEMY_MON_PIC, AnimationFlashEnemyMonPic ; unused--same as SE_FLASH_MON_PIC ($F5), but for the enemy mon
-	special_effect SE_HIDE_ENEMY_MON_PIC, AnimationHideEnemyMonPic ; $DF
-	special_effect SE_BLINK_ENEMY_MON, AnimationBlinkEnemyMon ; $DE
-	special_effect SE_SHOW_MON_PIC, AnimationShowMonPic ; $DD
-	special_effect SE_SHOW_ENEMY_MON_PIC, AnimationShowEnemyMonPic ; $DC
-	special_effect SE_SLIDE_ENEMY_MON_OFF, AnimationSlideEnemyMonOff ; $DB
-	special_effect SE_SHAKE_BACK_AND_FORTH, AnimationShakeBackAndForth ; $DA
-	special_effect SE_SUBSTITUTE_MON, AnimationSubstitute ; $D9
-	special_effect SE_WAVY_SCREEN, AnimationWavyScreen ; $D8
+	special_effect SE_DARKEN_MON_PALETTE,        AnimationDarkenMonPalette        ; $F9
+	special_effect SE_FLASH_SCREEN_LONG,         AnimationFlashScreenLong         ; $F8
+	special_effect SE_SLIDE_MON_UP,              AnimationSlideMonUp              ; $F7
+	special_effect SE_SLIDE_MON_DOWN,            AnimationSlideMonDown            ; $F6
+	special_effect SE_FLASH_MON_PIC,             AnimationFlashMonPic             ; $F5
+	special_effect SE_SLIDE_MON_OFF,             AnimationSlideMonOff             ; $F4
+	special_effect SE_BLINK_MON,                 AnimationBlinkMon                ; $F3
+	special_effect SE_MOVE_MON_HORIZONTALLY,     AnimationMoveMonHorizontally     ; $F2
+	special_effect SE_RESET_MON_POSITION,        AnimationResetMonPosition        ; $F1
+	special_effect SE_LIGHT_SCREEN_PALETTE,      AnimationLightScreenPalette      ; $F0
+	special_effect SE_HIDE_MON_PIC,              AnimationHideMonPic              ; $EF
+	special_effect SE_SQUISH_MON_PIC,            AnimationSquishMonPic            ; $EE
+	special_effect SE_SHOOT_BALLS_UPWARD,        AnimationShootBallsUpward        ; $ED
+	special_effect SE_SHOOT_MANY_BALLS_UPWARD,   AnimationShootManyBallsUpward    ; $EC
+	special_effect SE_BOUNCE_UP_AND_DOWN,        AnimationBoundUpAndDown          ; $EB
+	special_effect SE_MINIMIZE_MON,              AnimationMinimizeMon             ; $EA
+	special_effect SE_SLIDE_MON_DOWN_AND_HIDE,   AnimationSlideMonDownAndHide     ; $E9
+	special_effect SE_TRANSFORM_MON,             AnimationTransformMon            ; $E8
+	special_effect SE_LEAVES_FALLING,            AnimationLeavesFalling           ; $E7
+	special_effect SE_PETALS_FALLING,            AnimationPetalsFalling           ; $E6
+	special_effect SE_SLIDE_MON_HALF_OFF,        AnimationSlideMonHalfOff         ; $E5
+	special_effect SE_SHAKE_ENEMY_HUD,           AnimationShakeEnemyHUD           ; $E4
+	special_effect SE_SHAKE_ENEMY_HUD_2,         AnimationShakeEnemyHUD           ; $E3 unused
+	special_effect SE_SPIRAL_BALLS_INWARD,       AnimationSpiralBallsInward       ; $E2
+	special_effect SE_DELAY_ANIMATION_10,        AnimationDelay10                 ; $E1
+	special_effect SE_FLASH_ENEMY_MON_PIC,       AnimationFlashEnemyMonPic        ; $E0 unused
+	special_effect SE_HIDE_ENEMY_MON_PIC,        AnimationHideEnemyMonPic         ; $DF
+	special_effect SE_BLINK_ENEMY_MON,           AnimationBlinkEnemyMon           ; $DE
+	special_effect SE_SHOW_MON_PIC,              AnimationShowMonPic              ; $DD
+	special_effect SE_SHOW_ENEMY_MON_PIC,        AnimationShowEnemyMonPic         ; $DC
+	special_effect SE_SLIDE_ENEMY_MON_OFF,       AnimationSlideEnemyMonOff        ; $DB
+	special_effect SE_SHAKE_BACK_AND_FORTH,      AnimationShakeBackAndForth       ; $DA
+	special_effect SE_SUBSTITUTE_MON,            AnimationSubstitute              ; $D9
+	special_effect SE_WAVY_SCREEN,               AnimationWavyScreen              ; $D8
 	db -1 ; end
--- a/data/battle_anims/special_effects.asm
+++ b/data/battle_anims/special_effects.asm
@@ -5,28 +5,28 @@
 
 AnimationIdSpecialEffects:
 	; animation id, effect routine address
-	anim_special_effect MEGA_PUNCH, AnimationFlashScreen
-	anim_special_effect GUILLOTINE, AnimationFlashScreen
-	anim_special_effect MEGA_KICK, AnimationFlashScreen
-	anim_special_effect HEADBUTT, AnimationFlashScreen
-	anim_special_effect TAIL_WHIP, TailWhipAnimationUnused
-	anim_special_effect GROWL, DoGrowlSpecialEffects
-	anim_special_effect DISABLE, AnimationFlashScreen
-	anim_special_effect BLIZZARD, DoBlizzardSpecialEffects
-	anim_special_effect BUBBLEBEAM, AnimationFlashScreen
-	anim_special_effect HYPER_BEAM, FlashScreenEveryFourFrameBlocks
-	anim_special_effect THUNDERBOLT, FlashScreenEveryEightFrameBlocks
-	anim_special_effect REFLECT, AnimationFlashScreen
-	anim_special_effect SELFDESTRUCT, DoExplodeSpecialEffects
-	anim_special_effect SPORE, AnimationFlashScreen
-	anim_special_effect EXPLOSION, DoExplodeSpecialEffects
-	anim_special_effect ROCK_SLIDE, DoRockSlideSpecialEffects
-	anim_special_effect TRADE_BALL_DROP_ANIM, TradeHidePokemon
+	anim_special_effect MEGA_PUNCH,            AnimationFlashScreen
+	anim_special_effect GUILLOTINE,            AnimationFlashScreen
+	anim_special_effect MEGA_KICK,             AnimationFlashScreen
+	anim_special_effect HEADBUTT,              AnimationFlashScreen
+	anim_special_effect TAIL_WHIP,             TailWhipAnimationUnused
+	anim_special_effect GROWL,                 DoGrowlSpecialEffects
+	anim_special_effect DISABLE,               AnimationFlashScreen
+	anim_special_effect BLIZZARD,              DoBlizzardSpecialEffects
+	anim_special_effect BUBBLEBEAM,            AnimationFlashScreen
+	anim_special_effect HYPER_BEAM,            FlashScreenEveryFourFrameBlocks
+	anim_special_effect THUNDERBOLT,           FlashScreenEveryEightFrameBlocks
+	anim_special_effect REFLECT,               AnimationFlashScreen
+	anim_special_effect SELFDESTRUCT,          DoExplodeSpecialEffects
+	anim_special_effect SPORE,                 AnimationFlashScreen
+	anim_special_effect EXPLOSION,             DoExplodeSpecialEffects
+	anim_special_effect ROCK_SLIDE,            DoRockSlideSpecialEffects
+	anim_special_effect TRADE_BALL_DROP_ANIM,  TradeHidePokemon
 	anim_special_effect TRADE_BALL_SHAKE_ANIM, TradeShakePokeball
-	anim_special_effect TRADE_BALL_TILT_ANIM, TradeJumpPokeball
-	anim_special_effect TOSS_ANIM, DoBallTossSpecialEffects
-	anim_special_effect SHAKE_ANIM, DoBallShakeSpecialEffects
-	anim_special_effect POOF_ANIM, DoPoofSpecialEffects
-	anim_special_effect GREATTOSS_ANIM, DoBallTossSpecialEffects
-	anim_special_effect ULTRATOSS_ANIM, DoBallTossSpecialEffects
+	anim_special_effect TRADE_BALL_TILT_ANIM,  TradeJumpPokeball
+	anim_special_effect TOSS_ANIM,             DoBallTossSpecialEffects
+	anim_special_effect SHAKE_ANIM,            DoBallShakeSpecialEffects
+	anim_special_effect POOF_ANIM,             DoPoofSpecialEffects
+	anim_special_effect GREATTOSS_ANIM,        DoBallTossSpecialEffects
+	anim_special_effect ULTRATOSS_ANIM,        DoBallTossSpecialEffects
 	db -1 ; end
--- a/data/moves/animations.asm
+++ b/data/moves/animations.asm
@@ -203,1059 +203,1072 @@
 	dw ThrowBaitAnim
 	dw ZigZagScreenAnim
 
-; each animation is a list of subanimations and special effects
-; if first byte < $56
-;	db tileset_and_delay, sound_id, subanimation_id
-; if first byte >= $D8
-;	db special_effect_id, sound_id
-; $FF terminated
+; each animation is a list of subanimations
+; and/or special effects, terminated by -1
+
+;\1: sound_id
+;\2: special_effect_id or subanimation_id
+; if \2 is a subanimation_id:
+;\3: tileset_id
+;\4: delay
+battle_anim: MACRO
+	IF _NARG == 4
+		db (\3 << 6) | \4
+		db \1 - 1
+		db \2
+	ELSE
+		db \2
+		db \1 - 1
+	ENDC
+ENDM
+
 ZigZagScreenAnim:
-	db SE_WAVY_SCREEN, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_WAVY_SCREEN
+	db -1 ; end
 
 PoundAnim:
 StruggleAnim:
-	db $08, $00, $01
-	db $FF
+	battle_anim POUND, SUBANIM_01, 0, 8
+	db -1 ; end
 
 KarateChopAnim:
-	db $08, $01, $03
-	db $FF
+	battle_anim KARATE_CHOP, SUBANIM_03, 0, 8
+	db -1 ; end
 
 DoubleSlapAnim:
-	db $05, $02, $01
-	db $05, $02, $01
-	db $FF
+	battle_anim DOUBLESLAP, SUBANIM_01, 0, 5
+	battle_anim DOUBLESLAP, SUBANIM_01, 0, 5
+	db -1 ; end
 
 CometPunchAnim:
-	db $04, $03, $02
-	db $04, $03, $02
-	db $FF
+	battle_anim COMET_PUNCH, SUBANIM_02, 0, 4
+	battle_anim COMET_PUNCH, SUBANIM_02, 0, 4
+	db -1 ; end
 
 MegaPunchAnim:
-	db $46, $04, $04
-	db $FF
+	battle_anim MEGA_PUNCH, SUBANIM_04, 1, 6
+	db -1 ; end
 
 PayDayAnim:
-	db $08, $00, $01
-	db $04, $05, $52
-	db $FF
+	battle_anim POUND, SUBANIM_01, 0, 8
+	battle_anim PAY_DAY, SUBANIM_52, 0, 4
+	db -1 ; end
 
 FirePunchAnim:
-	db $06, $06, $02
-	db $46, $FF, $11
-	db $FF
+	battle_anim FIRE_PUNCH, SUBANIM_02, 0, 6
+	battle_anim NO_MOVE, SUBANIM_11, 1, 6
+	db -1 ; end
 
 IcePunchAnim:
-	db $06, $07, $02
-	db $10, $FF, $2F
-	db $FF
+	battle_anim ICE_PUNCH, SUBANIM_02, 0, 6
+	battle_anim NO_MOVE, SUBANIM_2F, 0, 16
+	db -1 ; end
 
 ThunderPunchAnim:
-	db $06, $08, $02
-	db SE_DARK_SCREEN_PALETTE, $FF
-	db $46, $FF, $2B
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim THUNDERPUNCH, SUBANIM_02, 0, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_2B, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ScratchAnim:
-	db $06, $09, $0F
-	db $FF
+	battle_anim SCRATCH, SUBANIM_0F, 0, 6
+	db -1 ; end
 
 VicegripAnim:
-	db $08, $0A, $2A
-	db $FF
+	battle_anim VICEGRIP, SUBANIM_2A, 0, 8
+	db -1 ; end
 
 GuillotineAnim:
-	db $06, $0B, $2A
-	db $FF
+	battle_anim GUILLOTINE, SUBANIM_2A, 0, 6
+	db -1 ; end
 
 RazorWindAnim:
-	db $04, $0C, $16
-	db $FF
+	battle_anim RAZOR_WIND, SUBANIM_16, 0, 4
+	db -1 ; end
 
 SwordsDanceAnim:
-	db $46, $0D, $18
-	db $46, $0D, $18
-	db $46, $0D, $18
-	db $FF
+	battle_anim SWORDS_DANCE, SUBANIM_18, 1, 6
+	battle_anim SWORDS_DANCE, SUBANIM_18, 1, 6
+	battle_anim SWORDS_DANCE, SUBANIM_18, 1, 6
+	db -1 ; end
 
 CutAnim:
-	db SE_DARK_SCREEN_FLASH, $0E
-	db $04, $FF, $16
-	db $FF
+	battle_anim CUT, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_16, 0, 4
+	db -1 ; end
 
 GustAnim:
-	db $46, $0F, $10
-	db $06, $FF, $02
-	db $FF
+	battle_anim GUST, SUBANIM_10, 1, 6
+	battle_anim NO_MOVE, SUBANIM_02, 0, 6
+	db -1 ; end
 
 WingAttackAnim:
-	db $46, $10, $04
-	db $FF
+	battle_anim WING_ATTACK, SUBANIM_04, 1, 6
+	db -1 ; end
 
 WhirlwindAnim:
-	db $46, $11, $10
-	db SE_SLIDE_ENEMY_MON_OFF, $FF
-	db $FF
+	battle_anim WHIRLWIND, SUBANIM_10, 1, 6
+	battle_anim NO_MOVE, SE_SLIDE_ENEMY_MON_OFF
+	db -1 ; end
 
 FlyAnim:
-	db $46, $12, $04
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim FLY, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 BindAnim:
-	db $04, $13, $23
-	db $04, $13, $23
-	db $FF
+	battle_anim BIND, SUBANIM_23, 0, 4
+	battle_anim BIND, SUBANIM_23, 0, 4
+	db -1 ; end
 
 SlamAnim:
-	db $06, $14, $02
-	db $FF
+	battle_anim SLAM, SUBANIM_02, 0, 6
+	db -1 ; end
 
 VineWhipAnim:
-	db $01, $15, $16
-	db $08, $FF, $01
-	db $FF
+	battle_anim VINE_WHIP, SUBANIM_16, 0, 1
+	battle_anim NO_MOVE, SUBANIM_01, 0, 8
+	db -1 ; end
 
 StompAnim:
-	db $48, $16, $05
-	db $FF
+	battle_anim STOMP, SUBANIM_05, 1, 8
+	db -1 ; end
 
 DoubleKickAnim:
-	db $08, $17, $01
-	db $08, $17, $01
-	db $FF
+	battle_anim DOUBLE_KICK, SUBANIM_01, 0, 8
+	battle_anim DOUBLE_KICK, SUBANIM_01, 0, 8
+	db -1 ; end
 
 MegaKickAnim:
-	db $46, $18, $04
-	db $FF
+	battle_anim MEGA_KICK, SUBANIM_04, 1, 6
+	db -1 ; end
 
 JumpKickAnim:
-	db $46, $19, $04
-	db $FF
+	battle_anim JUMP_KICK, SUBANIM_04, 1, 6
+	db -1 ; end
 
 RollingKickAnim:
-	db SE_DARK_SCREEN_FLASH, $1A
-	db $46, $FF, $04
-	db $FF
+	battle_anim ROLLING_KICK, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_04, 1, 6
+	db -1 ; end
 
 SandAttackAnim:
-	db $46, $1B, $28
-	db $FF
+	battle_anim SAND_ATTACK, SUBANIM_28, 1, 6
+	db -1 ; end
 
 HeatButtAnim:
-	db $46, $1C, $05
-	db $FF
+	battle_anim HEADBUTT, SUBANIM_05, 1, 6
+	db -1 ; end
 
 HornAttackAnim:
-	db $06, $1D, $45
-	db $46, $FF, $05
-	db $FF
+	battle_anim HORN_ATTACK, SUBANIM_45, 0, 6
+	battle_anim NO_MOVE, SUBANIM_05, 1, 6
+	db -1 ; end
 
 FuryAttackAnim:
-	db $02, $1E, $46
-	db $02, $FF, $46
-	db $FF
+	battle_anim FURY_ATTACK, SUBANIM_46, 0, 2
+	battle_anim NO_MOVE, SUBANIM_46, 0, 2
+	db -1 ; end
 
 HornDrillAnim:
-	db $42, $1F, $05
-	db $42, $FF, $05
-	db $42, $FF, $05
-	db $42, $FF, $05
-	db $42, $FF, $05
-	db $FF
+	battle_anim HORN_DRILL, SUBANIM_05, 1, 2
+	battle_anim NO_MOVE, SUBANIM_05, 1, 2
+	battle_anim NO_MOVE, SUBANIM_05, 1, 2
+	battle_anim NO_MOVE, SUBANIM_05, 1, 2
+	battle_anim NO_MOVE, SUBANIM_05, 1, 2
+	db -1 ; end
 
 TackleAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $48
-	db SE_RESET_MON_POSITION, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_RESET_MON_POSITION
+	db -1 ; end
 
 BodySlamAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $48
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_MON_POSITION, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_MON_POSITION
+	db -1 ; end
 
 WrapAnim:
-	db $04, $22, $23
-	db $04, $22, $23
-	db $04, $22, $23
-	db $FF
+	battle_anim WRAP, SUBANIM_23, 0, 4
+	battle_anim WRAP, SUBANIM_23, 0, 4
+	battle_anim WRAP, SUBANIM_23, 0, 4
+	db -1 ; end
 
 TakeDownAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $48
-	db SE_DARK_SCREEN_FLASH, $23
-	db SE_RESET_MON_POSITION, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_MOVE_MON_HORIZONTALLY
+	battle_anim TAKE_DOWN, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_MON_POSITION
+	db -1 ; end
 
 ThrashAnim:
-	db $46, $24, $04
-	db $FF
+	battle_anim THRASH, SUBANIM_04, 1, 6
+	db -1 ; end
 
 DoubleEdgeAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $48
-	db $06, $FF, $2D
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db SE_MOVE_MON_HORIZONTALLY, $FF
-	db SE_DARK_SCREEN_FLASH, $25
-	db SE_RESET_MON_POSITION, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_2D, 0, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_MOVE_MON_HORIZONTALLY
+	battle_anim DOUBLE_EDGE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_MON_POSITION
+	db -1 ; end
 
 TailWhipAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_RESET_MON_POSITION, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_MOVE_MON_HORIZONTALLY, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_RESET_MON_POSITION, $84
-	db $FF
+	battle_anim AMNESIA, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_RESET_MON_POSITION
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_RESET_MON_POSITION
+	db -1 ; end
 
 PoisonStingAnim:
-	db $06, $27, $00
-	db $FF
+	battle_anim POISON_STING, SUBANIM_00, 0, 6
+	db -1 ; end
 
 TwineedleAnim:
-	db $05, $28, $01
-	db $05, $28, $01
-	db $FF
+	battle_anim TWINEEDLE, SUBANIM_01, 0, 5
+	battle_anim TWINEEDLE, SUBANIM_01, 0, 5
+	db -1 ; end
 
 PinMissileAnim:
-	db $03, $29, $01
-	db $FF
+	battle_anim PIN_MISSILE, SUBANIM_01, 0, 3
+	db -1 ; end
 
 LeerAnim:
-	db SE_DARK_SCREEN_PALETTE, $48
-	db SE_DARK_SCREEN_FLASH, $2A
-	db SE_DARK_SCREEN_FLASH, $2A
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARK_SCREEN_PALETTE
+	battle_anim LEER, SE_DARK_SCREEN_FLASH
+	battle_anim LEER, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 BiteAnim:
-	db $08, $2B, $02
-	db $FF
+	battle_anim BITE, SUBANIM_02, 0, 8
+	db -1 ; end
 
 GrowlAnim:
-	db $46, $2C, $12
-	db $FF
+	battle_anim GROWL, SUBANIM_12, 1, 6
+	db -1 ; end
 
 RoarAnim:
-	db $46, $2D, $15
-	db $46, $2D, $15
-	db $46, $2D, $15
-	db $FF
+	battle_anim ROAR, SUBANIM_15, 1, 6
+	battle_anim ROAR, SUBANIM_15, 1, 6
+	battle_anim ROAR, SUBANIM_15, 1, 6
+	db -1 ; end
 
 SingAnim:
-	db $46, $2E, $12
-	db $50, $FF, $40
-	db $50, $FF, $40
-	db $FF
+	battle_anim SING, SUBANIM_12, 1, 6
+	battle_anim NO_MOVE, SUBANIM_40, 1, 16
+	battle_anim NO_MOVE, SUBANIM_40, 1, 16
+	db -1 ; end
 
 SupersonicAnim:
-	db $06, $2F, $31
-	db $FF
+	battle_anim SUPERSONIC, SUBANIM_31, 0, 6
+	db -1 ; end
 
 SonicBoomAnim:
-	db $46, $2D, $15
-	db $46, $2D, $15
-	db $46, $0F, $10
-	db $46, $FF, $05
-	db $FF
+	battle_anim ROAR, SUBANIM_15, 1, 6
+	battle_anim ROAR, SUBANIM_15, 1, 6
+	battle_anim GUST, SUBANIM_10, 1, 6
+	battle_anim NO_MOVE, SUBANIM_05, 1, 6
+	db -1 ; end
 
 DisableAnim:
-	db SE_DARK_SCREEN_PALETTE, $48
-	db SE_DARK_SCREEN_FLASH, $2A
-	db SE_DARK_SCREEN_FLASH, $2A
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARK_SCREEN_PALETTE
+	battle_anim LEER, SE_DARK_SCREEN_FLASH
+	battle_anim LEER, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 AcidAnim:
-	db $46, $32, $13
-	db $46, $32, $14
-	db $FF
+	battle_anim ACID, SUBANIM_13, 1, 6
+	battle_anim ACID, SUBANIM_14, 1, 6
+	db -1 ; end
 
 EmberAnim:
-	db $46, $33, $11
-	db $FF
+	battle_anim EMBER, SUBANIM_11, 1, 6
+	db -1 ; end
 
 FlamethrowerAnim:
-	db $46, $34, $1F
-	db $46, $34, $0C
-	db $46, $34, $0D
-	db $FF
+	battle_anim FLAMETHROWER, SUBANIM_1F, 1, 6
+	battle_anim FLAMETHROWER, SUBANIM_0C, 1, 6
+	battle_anim FLAMETHROWER, SUBANIM_0D, 1, 6
+	db -1 ; end
 
 MistAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db SE_WATER_DROPLETS_EVERYWHERE, $38
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim SURF, SE_WATER_DROPLETS_EVERYWHERE
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 WaterGunAnim:
-	db $06, $36, $2C
-	db $FF
+	battle_anim WATER_GUN, SUBANIM_2C, 0, 6
+	db -1 ; end
 
 HydroPumpAnim:
-	db $06, $37, $1A
-	db $06, $37, $1A
-	db $FF
+	battle_anim HYDRO_PUMP, SUBANIM_1A, 0, 6
+	battle_anim HYDRO_PUMP, SUBANIM_1A, 0, 6
+	db -1 ; end
 
 SurfAnim:
-	db SE_WATER_DROPLETS_EVERYWHERE, $38
-	db $06, $37, $1A
-	db $FF
+	battle_anim SURF, SE_WATER_DROPLETS_EVERYWHERE
+	battle_anim HYDRO_PUMP, SUBANIM_1A, 0, 6
+	db -1 ; end
 
 IceBeamAnim:
-	db $03, $39, $2E
-	db $10, $FF, $2F
-	db $FF
+	battle_anim ICE_BEAM, SUBANIM_2E, 0, 3
+	battle_anim NO_MOVE, SUBANIM_2F, 0, 16
+	db -1 ; end
 
 BlizzardAnim:
-	db $04, $3A, $38
-	db $04, $37, $38
-	db $FF
+	battle_anim BLIZZARD, SUBANIM_38, 0, 4
+	battle_anim HYDRO_PUMP, SUBANIM_38, 0, 4
+	db -1 ; end
 
 PsyBeamAnim:
-	db $03, $3B, $2E
-	db SE_FLASH_SCREEN_LONG, $FF
-	db $FF
+	battle_anim PSYBEAM, SUBANIM_2E, 0, 3
+	battle_anim NO_MOVE, SE_FLASH_SCREEN_LONG
+	db -1 ; end
 
 BubbleBeamAnim:
-	db $12, $3C, $35
-	db $FF
+	battle_anim BUBBLEBEAM, SUBANIM_35, 0, 18
+	db -1 ; end
 
 AuroraBeamAnim:
-	db $03, $3D, $2E
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db $FF
+	battle_anim AURORA_BEAM, SUBANIM_2E, 0, 3
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	db -1 ; end
 
 HyperBeamAnim:
-	db SE_DARK_SCREEN_PALETTE, $48
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db $02, $3E, $2E
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $46, $04, $04
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim HYPER_BEAM, SUBANIM_2E, 0, 2
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim MEGA_PUNCH, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 PeckAnim:
-	db $08, $3F, $01
-	db $FF
+	battle_anim PECK, SUBANIM_01, 0, 8
+	db -1 ; end
 
 DrillPeckAnim:
-	db $46, $40, $04
-	db $FF
+	battle_anim DRILL_PECK, SUBANIM_04, 1, 6
+	db -1 ; end
 
 SubmissionAnim:
-	db SE_SLIDE_MON_OFF, $41
-	db $06, $FF, $01
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim SUBMISSION, SE_SLIDE_MON_OFF
+	battle_anim NO_MOVE, SUBANIM_01, 0, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 LowKickAnim:
-	db SE_SLIDE_MON_OFF, $42
-	db $46, $FF, $04
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim LOW_KICK, SE_SLIDE_MON_OFF
+	battle_anim NO_MOVE, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 CounterAnim:
-	db SE_SLIDE_MON_OFF, $43
-	db $46, $FF, $04
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim COUNTER, SE_SLIDE_MON_OFF
+	battle_anim NO_MOVE, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 SeismicTossAnim:
-	db SE_BLINK_ENEMY_MON, $FF
-	db $41, $8B, $4E
-	db SE_HIDE_ENEMY_MON_PIC, $FF
-	db SE_SLIDE_MON_OFF, $FF
-	db $42, $44, $4F
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_SHOW_MON_PIC, $FF
-	db $41, $44, $50
-	db SE_SHOW_ENEMY_MON_PIC, $FF
-	db SE_SHAKE_SCREEN, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_BLINK_ENEMY_MON
+	battle_anim BARRAGE, SUBANIM_4E, 1, 1
+	battle_anim NO_MOVE, SE_HIDE_ENEMY_MON_PIC
+	battle_anim NO_MOVE, SE_SLIDE_MON_OFF
+	battle_anim SEISMIC_TOSS, SUBANIM_4F, 1, 2
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	battle_anim SEISMIC_TOSS, SUBANIM_50, 1, 1
+	battle_anim NO_MOVE, SE_SHOW_ENEMY_MON_PIC
+	battle_anim NO_MOVE, SE_SHAKE_SCREEN
+	db -1 ; end
 
 StrengthAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $48
-	db SE_RESET_MON_POSITION, $FF
-	db $46, $06, $04
-	db $FF
+	battle_anim LEECH_SEED, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_RESET_MON_POSITION
+	battle_anim FIRE_PUNCH, SUBANIM_04, 1, 6
+	db -1 ; end
 
 AbsorbAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $46
-	db $06, $FF, $21
-	db $06, $FF, $22
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim ABSORB, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_21, 0, 6
+	battle_anim NO_MOVE, SUBANIM_22, 0, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 MegaDrainAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $47
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $06, $FF, $21
-	db $06, $FF, $22
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim MEGA_DRAIN, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_21, 0, 6
+	battle_anim NO_MOVE, SUBANIM_22, 0, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 LeechSeedAnim:
-	db $46, $48, $1B
-	db $55, $4D, $1C
-	db $FF
+	battle_anim LEECH_SEED, SUBANIM_1B, 1, 6
+	battle_anim STUN_SPORE, SUBANIM_1C, 1, 21
+	db -1 ; end
 
 GrowthAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $49
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim GROWTH, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 RazorLeafAnim:
-	db SE_LEAVES_FALLING, $4A
-	db $41, $80, $44
-	db $01, $0C, $16
-	db $FF
+	battle_anim RAZOR_LEAF, SE_LEAVES_FALLING
+	battle_anim SWIFT, SUBANIM_44, 1, 1
+	battle_anim RAZOR_WIND, SUBANIM_16, 0, 1
+	db -1 ; end
 
 SolarBeamAnim:
-	db $06, $4B, $2E
-	db $06, $FF, $01
-	db $FF
+	battle_anim SOLARBEAM, SUBANIM_2E, 0, 6
+	battle_anim NO_MOVE, SUBANIM_01, 0, 6
+	db -1 ; end
 
 PoisonPowderAnim:
-	db $06, $4C, $36
-	db $FF
+	battle_anim POISONPOWDER, SUBANIM_36, 0, 6
+	db -1 ; end
 
 StunSporeAnim:
-	db $06, $4D, $36
-	db $FF
+	battle_anim STUN_SPORE, SUBANIM_36, 0, 6
+	db -1 ; end
 
 SleepPowderAnim:
-	db $06, $4E, $36
-	db $FF
+	battle_anim SLEEP_POWDER, SUBANIM_36, 0, 6
+	db -1 ; end
 
 PedalDanceAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $4F
-	db SE_PETALS_FALLING, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim PETAL_DANCE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_PETALS_FALLING
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 StringShotAnim:
-	db $08, $50, $37
-	db $FF
+	battle_anim STRING_SHOT, SUBANIM_37, 0, 8
+	db -1 ; end
 
 DragonRageAnim:
-	db $46, $51, $1F
-	db $46, $FF, $0C
-	db $46, $FF, $0D
-	db $46, $FF, $0E
-	db $FF
+	battle_anim DRAGON_RAGE, SUBANIM_1F, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0C, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0D, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0E, 1, 6
+	db -1 ; end
 
 FireSpinAnim:
-	db $46, $52, $0C
-	db $46, $FF, $0D
-	db $46, $FF, $0E
-	db $FF
+	battle_anim FIRE_SPIN, SUBANIM_0C, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0D, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0E, 1, 6
+	db -1 ; end
 
 ThunderShockAnim:
-	db $42, $53, $29
-	db $FF
+	battle_anim THUNDERSHOCK, SUBANIM_29, 1, 2
+	db -1 ; end
 
 ThunderBoltAnim:
-	db $41, $54, $29
-	db $41, $54, $29
-	db $FF
+	battle_anim THUNDERBOLT, SUBANIM_29, 1, 1
+	battle_anim THUNDERBOLT, SUBANIM_29, 1, 1
+	db -1 ; end
 
 ThunderWaveAnim:
-	db $42, $55, $29
-	db $02, $FF, $23
-	db $04, $FF, $23
-	db $FF
+	battle_anim THUNDER_WAVE, SUBANIM_29, 1, 2
+	battle_anim NO_MOVE, SUBANIM_23, 0, 2
+	battle_anim NO_MOVE, SUBANIM_23, 0, 4
+	db -1 ; end
 
 ThunderAnim:
-	db SE_DARK_SCREEN_PALETTE, $56
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $46, $FF, $2B
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $42, $54, $29
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim THUNDER, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_2B, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim THUNDERBOLT, SUBANIM_29, 1, 2
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 RockThrowAnim:
-	db $04, $57, $30
-	db $FF
+	battle_anim ROCK_THROW, SUBANIM_30, 0, 4
+	db -1 ; end
 
 EarthquakeAnim:
-	db SE_SHAKE_SCREEN, $58
-	db SE_SHAKE_SCREEN, $58
-	db $FF
+	battle_anim EARTHQUAKE, SE_SHAKE_SCREEN
+	battle_anim EARTHQUAKE, SE_SHAKE_SCREEN
+	db -1 ; end
 
 FissureAnim:
-	db SE_DARK_SCREEN_FLASH, $59
-	db SE_SHAKE_SCREEN, $FF
-	db SE_DARK_SCREEN_FLASH, $59
-	db SE_SHAKE_SCREEN, $FF
-	db $FF
+	battle_anim FISSURE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_SHAKE_SCREEN
+	battle_anim FISSURE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_SHAKE_SCREEN
+	db -1 ; end
 
 DigAnim:
-	db $46, $5A, $04
-	db SE_SLIDE_MON_UP, $FF
-	db $FF
+	battle_anim DIG, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SLIDE_MON_UP
+	db -1 ; end
 
 ToxicAnim:
-	db SE_WATER_DROPLETS_EVERYWHERE, $38
-	db $46, $5B, $14
-	db $FF
+	battle_anim SURF, SE_WATER_DROPLETS_EVERYWHERE
+	battle_anim TOXIC, SUBANIM_14, 1, 6
+	db -1 ; end
 
 ConfusionAnim:
-	db SE_FLASH_SCREEN_LONG, $5C
-	db $FF
+	battle_anim CONFUSION, SE_FLASH_SCREEN_LONG
+	db -1 ; end
 
 PsychicAnim:
-	db SE_FLASH_SCREEN_LONG, $5D
-	db SE_WAVY_SCREEN, $FF
-	db $FF
+	battle_anim PSYCHIC_M, SE_FLASH_SCREEN_LONG
+	battle_anim NO_MOVE, SE_WAVY_SCREEN
+	db -1 ; end
 
 HypnosisAnim:
-	db SE_FLASH_SCREEN_LONG, $5E
-	db $FF
+	battle_anim HYPNOSIS, SE_FLASH_SCREEN_LONG
+	db -1 ; end
 
 MeditateAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $5F
-	db $46, $FF, $43
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim MEDITATE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 AgilityAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $60
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim AGILITY, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 QuickAttackAnim:
-	db SE_SLIDE_MON_OFF, $61
-	db $46, $FF, $04
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim QUICK_ATTACK, SE_SLIDE_MON_OFF
+	battle_anim NO_MOVE, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 RageAnim:
-	db $06, $62, $01
-	db $FF
+	battle_anim RAGE, SUBANIM_01, 0, 6
+	db -1 ; end
 
 TeleportAnim:
-	db SE_SQUISH_MON_PIC, $63
-	db SE_SHOOT_BALLS_UPWARD, $FF
-	db $FF
+	battle_anim TELEPORT, SE_SQUISH_MON_PIC
+	battle_anim NO_MOVE, SE_SHOOT_BALLS_UPWARD
+	db -1 ; end
 
 NightShadeAnim:
-	db SE_FLASH_SCREEN_LONG, $5C
-	db SE_WAVY_SCREEN, $FF
-	db $FF
+	battle_anim CONFUSION, SE_FLASH_SCREEN_LONG
+	battle_anim NO_MOVE, SE_WAVY_SCREEN
+	db -1 ; end
 
 MimicAnim:
-	db $46, $65, $21
-	db $46, $65, $22
-	db $FF
+	battle_anim MIMIC, SUBANIM_21, 1, 6
+	battle_anim MIMIC, SUBANIM_22, 1, 6
+	db -1 ; end
 
 ScreechAnim:
-	db $46, $66, $12
-	db $FF
+	battle_anim SCREECH, SUBANIM_12, 1, 6
+	db -1 ; end
 
 DoubleTeamAnim:
-	db SE_DARK_SCREEN_PALETTE, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db SE_SHAKE_BACK_AND_FORTH, $67
-	db SE_SHOW_MON_PIC, $FF
-	db $46, $6F, $33
-	db $FF
+	battle_anim NO_MOVE, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	battle_anim DOUBLE_TEAM, SE_SHAKE_BACK_AND_FORTH
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	battle_anim BARRIER, SUBANIM_33, 1, 6
+	db -1 ; end
 
 RecoverAnim:
-	db SE_BLINK_MON, $68
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim RECOVER, SE_BLINK_MON
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 HardenAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $69
-	db $46, $FF, $43
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim HARDEN, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 MinimizeAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $6A
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_MINIMIZE_MON, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim MINIMIZE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_MINIMIZE_MON
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 SmokeScreenAnim:
-	db $46, $6B, $28
-	db $04, $FF, $0A
-	db SE_DARKEN_MON_PALETTE, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DARK_SCREEN_PALETTE, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_DARKEN_MON_PALETTE, $FF
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim SMOKESCREEN, SUBANIM_28, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0A, 0, 4
+	battle_anim NO_MOVE, SE_DARKEN_MON_PALETTE
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_DARKEN_MON_PALETTE
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ConfuseRayAnim:
-	db SE_DARK_SCREEN_PALETTE, $6C
-	db $46, $FF, $3E
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim CONFUSE_RAY, SE_DARK_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_3E, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 WithdrawAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $6E
-	db SE_SLIDE_MON_DOWN, $FF
-	db $06, $FF, $51
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim DEFENSE_CURL, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SLIDE_MON_DOWN
+	battle_anim NO_MOVE, SUBANIM_51, 0, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 DefenseCurlAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $6E
-	db $06, $FF, $43
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim DEFENSE_CURL, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 0, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 BarrierAnim:
-	db $46, $6F, $33
-	db $46, $6F, $33
-	db $FF
+	battle_anim BARRIER, SUBANIM_33, 1, 6
+	battle_anim BARRIER, SUBANIM_33, 1, 6
+	db -1 ; end
 
 LightScreenAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db $46, $70, $33
-	db $46, $70, $33
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim LIGHT_SCREEN, SUBANIM_33, 1, 6
+	battle_anim LIGHT_SCREEN, SUBANIM_33, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 HazeAnim:
-	db SE_DARKEN_MON_PALETTE, $FF
-	db SE_WATER_DROPLETS_EVERYWHERE, $38
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_DARKEN_MON_PALETTE
+	battle_anim SURF, SE_WATER_DROPLETS_EVERYWHERE
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ReflectAnim:
-	db SE_DARK_SCREEN_PALETTE, $FF
-	db $46, $72, $33
-	db $46, $72, $33
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_DARK_SCREEN_PALETTE
+	battle_anim REFLECT, SUBANIM_33, 1, 6
+	battle_anim REFLECT, SUBANIM_33, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 FocusEnergyAnim:
-	db SE_SPIRAL_BALLS_INWARD, $73
-	db $FF
+	battle_anim FOCUS_ENERGY, SE_SPIRAL_BALLS_INWARD
+	db -1 ; end
 
 BideAnim:
-	db $46, $74, $04
-	db $FF
+	battle_anim BIDE, SUBANIM_04, 1, 6
+	db -1 ; end
 
 MetronomeAnim:
-	db SE_MOVE_MON_HORIZONTALLY, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_RESET_MON_POSITION, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_MOVE_MON_HORIZONTALLY, $84
-	db SE_DELAY_ANIMATION_10, $FF
-	db SE_RESET_MON_POSITION, $84
-	db $FF
+	battle_anim AMNESIA, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_RESET_MON_POSITION
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_MOVE_MON_HORIZONTALLY
+	battle_anim NO_MOVE, SE_DELAY_ANIMATION_10
+	battle_anim AMNESIA, SE_RESET_MON_POSITION
+	db -1 ; end
 
 MirrorMoveAnim:
-	db $08, $76, $01
-	db $FF
+	battle_anim MIRROR_MOVE, SUBANIM_01, 0, 8
+	db -1 ; end
 
 SelfdestructAnim:
-	db $43, $77, $34
-	db $FF
+	battle_anim SELFDESTRUCT, SUBANIM_34, 1, 3
+	db -1 ; end
 
 EggBombAnim:
-	db $44, $78, $41
-	db $44, $78, $42
-	db $FF
+	battle_anim EGG_BOMB, SUBANIM_41, 1, 4
+	battle_anim EGG_BOMB, SUBANIM_42, 1, 4
+	db -1 ; end
 
 LickAnim:
-	db $46, $7B, $14
-	db $FF
+	battle_anim SLUDGE, SUBANIM_14, 1, 6
+	db -1 ; end
 
 SmogAnim:
-	db SE_DARKEN_MON_PALETTE, $48
-	db $46, $7A, $19
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARKEN_MON_PALETTE
+	battle_anim SMOG, SUBANIM_19, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 SludgeAnim:
-	db $46, $7B, $13
-	db $46, $7B, $14
-	db $FF
+	battle_anim SLUDGE, SUBANIM_13, 1, 6
+	battle_anim SLUDGE, SUBANIM_14, 1, 6
+	db -1 ; end
 
 BoneClubAnim:
-	db $08, $7C, $02
-	db $FF
+	battle_anim BONE_CLUB, SUBANIM_02, 0, 8
+	db -1 ; end
 
 FireBlastAnim:
-	db $46, $7D, $1F
-	db $46, $FF, $20
-	db $46, $FF, $20
-	db $46, $FF, $0C
-	db $46, $FF, $0D
-	db $FF
+	battle_anim FIRE_BLAST, SUBANIM_1F, 1, 6
+	battle_anim NO_MOVE, SUBANIM_20, 1, 6
+	battle_anim NO_MOVE, SUBANIM_20, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0C, 1, 6
+	battle_anim NO_MOVE, SUBANIM_0D, 1, 6
+	db -1 ; end
 
 WaterfallAnim:
-	db SE_SLIDE_MON_DOWN, $48
-	db $06, $37, $1A
-	db $08, $FF, $02
-	db SE_SLIDE_MON_UP, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_SLIDE_MON_DOWN
+	battle_anim HYDRO_PUMP, SUBANIM_1A, 0, 6
+	battle_anim NO_MOVE, SUBANIM_02, 0, 8
+	battle_anim NO_MOVE, SE_SLIDE_MON_UP
+	db -1 ; end
 
 ClampAnim:
-	db $08, $7F, $2A
-	db $06, $83, $23
-	db $06, $83, $23
-	db $FF
+	battle_anim CLAMP, SUBANIM_2A, 0, 8
+	battle_anim CONSTRICT, SUBANIM_23, 0, 6
+	battle_anim CONSTRICT, SUBANIM_23, 0, 6
+	db -1 ; end
 
 SwiftAnim:
-	db $43, $80, $3F
-	db $FF
+	battle_anim SWIFT, SUBANIM_3F, 1, 3
+	db -1 ; end
 
 SkullBashAnim:
-	db $46, $81, $05
-	db $FF
+	battle_anim SKULL_BASH, SUBANIM_05, 1, 6
+	db -1 ; end
 
 SpikeCannonAnim:
-	db $44, $82, $04
-	db $FF
+	battle_anim SPIKE_CANNON, SUBANIM_04, 1, 4
+	db -1 ; end
 
 ConstrictAnim:
-	db $06, $83, $23
-	db $06, $83, $23
-	db $06, $83, $23
-	db $FF
+	battle_anim CONSTRICT, SUBANIM_23, 0, 6
+	battle_anim CONSTRICT, SUBANIM_23, 0, 6
+	battle_anim CONSTRICT, SUBANIM_23, 0, 6
+	db -1 ; end
 
 AmnesiaAnim:
-	db $08, $84, $25
-	db $08, $84, $25
-	db $FF
+	battle_anim AMNESIA, SUBANIM_25, 0, 8
+	battle_anim AMNESIA, SUBANIM_25, 0, 8
+	db -1 ; end
 
 KinesisAnim:
-	db $08, $85, $01
-	db $FF
+	battle_anim KINESIS, SUBANIM_01, 0, 8
+	db -1 ; end
 
 SoftboiledAnim:
-	db SE_SLIDE_MON_HALF_OFF, $48
-	db $08, $86, $4C
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_SLIDE_MON_HALF_OFF
+	battle_anim SOFTBOILED, SUBANIM_4C, 0, 8
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 HiJumpKickAnim:
-	db $46, $87, $04
-	db $FF
+	battle_anim HI_JUMP_KICK, SUBANIM_04, 1, 6
+	db -1 ; end
 
 GlareAnim:
-	db SE_DARK_SCREEN_PALETTE, $48
-	db SE_DARK_SCREEN_FLASH, $88
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARK_SCREEN_PALETTE
+	battle_anim GLARE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 DreamEaterAnim:
-	db SE_FLASH_SCREEN_LONG, $89
-	db SE_DARK_SCREEN_PALETTE, $89
-	db $08, $89, $02
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim DREAM_EATER, SE_FLASH_SCREEN_LONG
+	battle_anim DREAM_EATER, SE_DARK_SCREEN_PALETTE
+	battle_anim DREAM_EATER, SUBANIM_02, 0, 8
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 PoisonGasAnim:
-	db $46, $8A, $19
-	db $FF
+	battle_anim POISON_GAS, SUBANIM_19, 1, 6
+	db -1 ; end
 
 BarrageAnim:
-	db $43, $8B, $41
-	db $05, $FF, $55
-	db $FF
+	battle_anim BARRAGE, SUBANIM_41, 1, 3
+	battle_anim NO_MOVE, SUBANIM_55, 0, 5
+	db -1 ; end
 
 LeechLifeAnim:
-	db $08, $8C, $02
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $06, $FF, $21
-	db $06, $FF, $22
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $FF
+	battle_anim LEECH_LIFE, SUBANIM_02, 0, 8
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_21, 0, 6
+	battle_anim NO_MOVE, SUBANIM_22, 0, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	db -1 ; end
 
 LovelyKissAnim:
-	db $06, $8D, $12
-	db $FF
+	battle_anim LOVELY_KISS, SUBANIM_12, 0, 6
+	db -1 ; end
 
 SkyAttackAnim:
-	db SE_SQUISH_MON_PIC, $8E
-	db SE_SHOOT_BALLS_UPWARD, $FF
-	db $46, $87, $04
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim SKY_ATTACK, SE_SQUISH_MON_PIC
+	battle_anim NO_MOVE, SE_SHOOT_BALLS_UPWARD
+	battle_anim HI_JUMP_KICK, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 TransformAnim:
-	db $46, $8F, $21
-	db $44, $8F, $22
-	db $08, $FF, $47
-	db SE_TRANSFORM_MON, $FF
-	db $FF
+	battle_anim TRANSFORM, SUBANIM_21, 1, 6
+	battle_anim TRANSFORM, SUBANIM_22, 1, 4
+	battle_anim NO_MOVE, SUBANIM_47, 0, 8
+	battle_anim NO_MOVE, SE_TRANSFORM_MON
+	db -1 ; end
 
 BubbleAnim:
-	db $16, $90, $35
-	db $FF
+	battle_anim BUBBLE, SUBANIM_35, 0, 22
+	db -1 ; end
 
 DizzyPunchAnim:
-	db $06, $91, $17
-	db $06, $91, $17
-	db $06, $91, $17
-	db $06, $02, $02
-	db $FF
+	battle_anim DIZZY_PUNCH, SUBANIM_17, 0, 6
+	battle_anim DIZZY_PUNCH, SUBANIM_17, 0, 6
+	battle_anim DIZZY_PUNCH, SUBANIM_17, 0, 6
+	battle_anim DOUBLESLAP, SUBANIM_02, 0, 6
+	db -1 ; end
 
 SporeAnim:
-	db $06, $92, $36
-	db $FF
+	battle_anim SPORE, SUBANIM_36, 0, 6
+	db -1 ; end
 
 FlashAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $48
-	db SE_DARK_SCREEN_FLASH, $88
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_LIGHT_SCREEN_PALETTE
+	battle_anim GLARE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 PsywaveAnim:
-	db $06, $2F, $31
-	db SE_WAVY_SCREEN, $5C
-	db $FF
+	battle_anim SUPERSONIC, SUBANIM_31, 0, 6
+	battle_anim CONFUSION, SE_WAVY_SCREEN
+	db -1 ; end
 
 SplashAnim:
-	db SE_BOUNCE_UP_AND_DOWN, $95
-	db $FF
+	battle_anim SPLASH, SE_BOUNCE_UP_AND_DOWN
+	db -1 ; end
 
 AcidArmorAnim:
-	db SE_SLIDE_MON_DOWN_AND_HIDE, $96
-	db $FF
+	battle_anim ACID_ARMOR, SE_SLIDE_MON_DOWN_AND_HIDE
+	db -1 ; end
 
 CrabHammerAnim:
-	db $46, $97, $05
-	db $06, $FF, $2A
-	db $FF
+	battle_anim CRABHAMMER, SUBANIM_05, 1, 6
+	battle_anim NO_MOVE, SUBANIM_2A, 0, 6
+	db -1 ; end
 
 ExplosionAnim:
-	db $43, $98, $34
-	db $FF
+	battle_anim EXPLOSION, SUBANIM_34, 1, 3
+	db -1 ; end
 
 FurySwipesAnim:
-	db $04, $99, $0F
-	db $FF
+	battle_anim FURY_SWIPES, SUBANIM_0F, 0, 4
+	db -1 ; end
 
 BonemerangAnim:
-	db $06, $9A, $02
-	db $FF
+	battle_anim BONEMERANG, SUBANIM_02, 0, 6
+	db -1 ; end
 
 RestAnim:
-	db $10, $9B, $3A
-	db $10, $9B, $3A
-	db $FF
+	battle_anim REST, SUBANIM_3A, 0, 16
+	battle_anim REST, SUBANIM_3A, 0, 16
+	db -1 ; end
 
 RockSlideAnim:
-	db $04, $9C, $1D
-	db $03, $9C, $1E
-	db $46, $9D, $04
-	db $FF
+	battle_anim ROCK_SLIDE, SUBANIM_1D, 0, 4
+	battle_anim ROCK_SLIDE, SUBANIM_1E, 0, 3
+	battle_anim HYPER_FANG, SUBANIM_04, 1, 6
+	db -1 ; end
 
 HyperFangAnim:
-	db $06, $9D, $02
-	db $FF
+	battle_anim HYPER_FANG, SUBANIM_02, 0, 6
+	db -1 ; end
 
 SharpenAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $9E
-	db $46, $FF, $43
-	db SE_DARK_SCREEN_FLASH, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim SHARPEN, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ConversionAnim:
-	db SE_DARK_SCREEN_FLASH, $9F
-	db $46, $FF, $21
-	db $46, $FF, $22
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $FF
+	battle_anim CONVERSION, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_21, 1, 6
+	battle_anim NO_MOVE, SUBANIM_22, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	db -1 ; end
 
 TriAttackAnim:
-	db SE_DARK_SCREEN_FLASH, $A0
-	db $46, $FF, $4D
-	db SE_DARK_SCREEN_FLASH, $FF
-	db $FF
+	battle_anim TRI_ATTACK, SE_DARK_SCREEN_FLASH
+	battle_anim NO_MOVE, SUBANIM_4D, 1, 6
+	battle_anim NO_MOVE, SE_DARK_SCREEN_FLASH
+	db -1 ; end
 
 SuperFangAnim:
-	db SE_DARK_SCREEN_PALETTE, $48
-	db $46, $A1, $04
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim LEECH_SEED, SE_DARK_SCREEN_PALETTE
+	battle_anim SUPER_FANG, SUBANIM_04, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 SlashAnim:
-	db $06, $A2, $0F
-	db $FF
+	battle_anim SLASH, SUBANIM_0F, 0, 6
+	db -1 ; end
 
 SubstituteAnim:
-	db SE_SLIDE_MON_OFF, $A3
-	db $08, $FF, $47
-	db SE_SUBSTITUTE_MON, $FF
-	db $FF
+	battle_anim SUBSTITUTE, SE_SLIDE_MON_OFF
+	battle_anim NO_MOVE, SUBANIM_47, 0, 8
+	battle_anim NO_MOVE, SE_SUBSTITUTE_MON
+	db -1 ; end
 
 BallTossAnim:
-	db $03, $FF, $06
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_06, 0, 3
+	db -1 ; end
 
 GreatTossAnim:
-	db $03, $FF, $07
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_07, 0, 3
+	db -1 ; end
 
 UltraTossAnim:
-	db $02, $FF, $08
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_08, 0, 2
+	db -1 ; end
 
 BallShakeAnim:
-	db $04, $FF, $09
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_09, 0, 4
+	db -1 ; end
 
 BallPoofAnim:
-	db $04, $FF, $0A
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_0A, 0, 4
+	db -1 ; end
 
 ShowPicAnim:
-	db SE_SHOW_ENEMY_MON_PIC, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_SHOW_ENEMY_MON_PIC
+	db -1 ; end
 
 HidePicAnim:
-	db SE_HIDE_ENEMY_MON_PIC, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_HIDE_ENEMY_MON_PIC
+	db -1 ; end
 
 EnemyFlashAnim:
-	db SE_SHOW_MON_PIC, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_SHOW_MON_PIC
+	db -1 ; end
 
 PlayerFlashAnim:
-	db SE_FLASH_MON_PIC, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_FLASH_MON_PIC
+	db -1 ; end
 
 EnemyHUDShakeAnim:
-	db SE_SHAKE_ENEMY_HUD, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_SHAKE_ENEMY_HUD
+	db -1 ; end
 
 TradeBallDropAnim:
-	db $86, $FF, $48
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_48, 2, 6
+	db -1 ; end
 
 TradeBallAppear1Anim:
-	db $84, $FF, $49
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_49, 2, 4
+	db -1 ; end
 
 TradeBallAppear2Anim:
-	db $86, $FF, $4A
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_4A, 2, 6
+	db -1 ; end
 
 TradeBallPoofAnim:
-	db $86, $FF, $4B
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_4B, 2, 6
+	db -1 ; end
 
 XStatItemAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ShrinkingSquareAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db $46, $FF, $43
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 XStatItemBlackAnim:
-	db SE_DARKEN_MON_PALETTE, $FF
-	db SE_SPIRAL_BALLS_INWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_DARKEN_MON_PALETTE
+	battle_anim NO_MOVE, SE_SPIRAL_BALLS_INWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ShrinkingSquareBlackAnim:
-	db SE_DARKEN_MON_PALETTE, $FF
-	db $46, $FF, $43
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_DARKEN_MON_PALETTE
+	battle_anim NO_MOVE, SUBANIM_43, 1, 6
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 UnusedAnim:
-	db SE_LIGHT_SCREEN_PALETTE, $FF
-	db SE_SHOOT_MANY_BALLS_UPWARD, $FF
-	db SE_RESET_SCREEN_PALETTE, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_LIGHT_SCREEN_PALETTE
+	battle_anim NO_MOVE, SE_SHOOT_MANY_BALLS_UPWARD
+	battle_anim NO_MOVE, SE_RESET_SCREEN_PALETTE
+	db -1 ; end
 
 ParalyzeAnim:
-	db $04, $13, $24
-	db $04, $13, $24
-	db $FF
+	battle_anim BIND, SUBANIM_24, 0, 4
+	battle_anim BIND, SUBANIM_24, 0, 4
+	db -1 ; end
 
 PoisonAnim:
-	db $08, $13, $27
-	db $08, $13, $27
-	db $FF
+	battle_anim BIND, SUBANIM_27, 0, 8
+	battle_anim BIND, SUBANIM_27, 0, 8
+	db -1 ; end
 
 SleepPlayerAnim:
-	db $10, $9B, $3A
-	db $10, $9B, $3A
-	db $FF
+	battle_anim REST, SUBANIM_3A, 0, 16
+	battle_anim REST, SUBANIM_3A, 0, 16
+	db -1 ; end
 
 SleepEnemyAnim:
-	db $10, $9B, $3B
-	db $10, $9B, $3B
-	db $FF
+	battle_anim REST, SUBANIM_3B, 0, 16
+	battle_anim REST, SUBANIM_3B, 0, 16
+	db -1 ; end
 
 ConfusedPlayerAnim:
-	db $08, $84, $25
-	db $08, $84, $25
-	db $FF
+	battle_anim AMNESIA, SUBANIM_25, 0, 8
+	battle_anim AMNESIA, SUBANIM_25, 0, 8
+	db -1 ; end
 
 ConfusedEnemyAnim:
-	db $08, $84, $26
-	db $08, $84, $26
-	db $FF
+	battle_anim AMNESIA, SUBANIM_26, 0, 8
+	battle_anim AMNESIA, SUBANIM_26, 0, 8
+	db -1 ; end
 
 BallBlockAnim:
-	db $03, $FF, $0B
-	db $FF
+	battle_anim NO_MOVE, SUBANIM_0B, 0, 3
+	db -1 ; end
 
 FaintAnim:
-	db SE_SLIDE_MON_DOWN, $5A
-	db $FF
+	battle_anim DIG, SE_SLIDE_MON_DOWN
+	db -1 ; end
 
 ShakeScreenAnim:
-	db SE_SHAKE_SCREEN, $FF
-	db $FF
+	battle_anim NO_MOVE, SE_SHAKE_SCREEN
+	db -1 ; end
 
 ThrowRockAnim:
-	db $03, $8B, $53
-	db $FF
+	battle_anim BARRAGE, SUBANIM_53, 0, 3
+	db -1 ; end
 
 ThrowBaitAnim:
-	db $03, $8B, $54
-	db $FF
+	battle_anim BARRAGE, SUBANIM_54, 0, 3
+	db -1 ; end
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -177,9 +177,9 @@
 	ld l, a
 .animationLoop
 	ld a, [hli]
-	cp $FF
+	cp -1
 	jr z, .AnimationOver
-	cp $C0 ; is this subanimation or a special effect?
+	cp FIRST_SE_ID ; is this subanimation or a special effect?
 	jr c, .playSubanimation
 .doSpecialEffect
 	ld c, a
@@ -194,7 +194,7 @@
 	jr .searchSpecialEffectTableLoop
 .foundMatch
 	ld a, [hli]
-	cp -1 ; is there a sound to play?
+	cp NO_MOVE - 1 ; is there a sound to play?
 	jr z, .skipPlayingSound
 	ld [wAnimSoundID], a ; store sound
 	push hl
@@ -347,19 +347,18 @@
 	ld c, a ; number of tiles
 	jp CopyVideoData ; load tileset
 
+anim_tileset: MACRO
+	db \1
+	dw \2
+	db -1 ; padding
+ENDM
+
 AnimationTilesetPointers:
-	db 79 ; number of tiles
-	dw AnimationTileset1
-	db $FF
+	; number of tiles, gfx pointer
+	anim_tileset 79, AnimationTileset1
+	anim_tileset 79, AnimationTileset2
+	anim_tileset 64, AnimationTileset1
 
-	db 79 ; number of tiles
-	dw AnimationTileset2
-	db $FF
-
-	db 64 ; number of tiles
-	dw AnimationTileset1
-	db $FF
-
 AnimationTileset1:
 	INCBIN "gfx/battle/attack_anim_1.2bpp"
 
@@ -412,7 +411,7 @@
 	ld [wSubAnimSubEntryAddr], a
 	ld [wUnusedD09B], a
 	ld [wSubAnimTransform], a
-	dec a
+	dec a ; NO_MOVE - 1
 	ld [wAnimSoundID], a
 	pop af
 	pop bc
@@ -461,10 +460,10 @@
 	jp hl
 
 AnimationTypePointerTable:
-	dw ShakeScreenVertically ; enemy mon has used a damaging move without a side effect
+	dw ShakeScreenVertically        ; enemy mon has used a damaging move without a side effect
 	dw ShakeScreenHorizontallyHeavy ; enemy mon has used a damaging move with a side effect
-	dw ShakeScreenHorizontallySlow ; enemy mon has used a non-damaging move
-	dw BlinkEnemyMonSprite ; player mon has used a damaging move without a side effect
+	dw ShakeScreenHorizontallySlow  ; enemy mon has used a non-damaging move
+	dw BlinkEnemyMonSprite          ; player mon has used a damaging move without a side effect
 	dw ShakeScreenHorizontallyLight ; player mon has used a damaging move with a side effect
 	dw ShakeScreenHorizontallySlow2 ; player mon has used a non-damaging move
 
@@ -549,7 +548,7 @@
 
 PlaySubanimation:
 	ld a, [wAnimSoundID]
-	cp $FF
+	cp NO_MOVE - 1
 	jr z, .skipPlayingSound
 	call GetMoveSound
 	call PlaySound