shithub: pokecrystal

Download patch

ref: ee906a67c76ec6b7eb85e4aa1aed588fa4aad45d
parent: 87b733994bdcb85e544f99899e50193c407909c6
author: pikalaxalt <[email protected]>
date: Sun May 15 18:33:51 EDT 2016

These macros are perfect for the object anim engine

--- a/data/sprite_engine.asm
+++ b/data/sprite_engine.asm
@@ -66,435 +66,435 @@
 	dw .Frameset_40 ; 40 celebi on the left
 	dw .Frameset_41 ; 41 celebi on the right
 ; 8d76a
-; OAM idx (see SpriteAnimOAMData), flip flags/duration
+
 .Frameset_00:
-	db SPRITE_ANIM_FRAME_IDX_00, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_00,  32
+	endanim
 
 .Frameset_01:
-	db SPRITE_ANIM_FRAME_IDX_00, $08
-	db SPRITE_ANIM_FRAME_IDX_01, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_00,   8
+	frame SPRITE_ANIM_FRAME_IDX_01,   8
+	dorestart
 
 .Frameset_02:
-	db SPRITE_ANIM_FRAME_IDX_3D, $08
-	db SPRITE_ANIM_FRAME_IDX_3E, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_3D,   8
+	frame SPRITE_ANIM_FRAME_IDX_3E,   8
+	dorestart
 
 .Frameset_03:
-	db SPRITE_ANIM_FRAME_IDX_3F, $08
-	db SPRITE_ANIM_FRAME_IDX_40, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_3F,   8
+	frame SPRITE_ANIM_FRAME_IDX_40,   8
+	dorestart
 
 .Frameset_04:
-	db SPRITE_ANIM_FRAME_IDX_00, $04
-	db SPRITE_ANIM_FRAME_IDX_01, $04
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_00,   4
+	frame SPRITE_ANIM_FRAME_IDX_01,   4
+	dorestart
 
 .Frameset_05:
-	db SPRITE_ANIM_FRAME_IDX_3D, $04
-	db SPRITE_ANIM_FRAME_IDX_3E, $04
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_3D,   4
+	frame SPRITE_ANIM_FRAME_IDX_3E,   4
+	dorestart
 
 .Frameset_06:
-	db SPRITE_ANIM_FRAME_IDX_3F, $04
-	db SPRITE_ANIM_FRAME_IDX_40, $04
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_3F,   4
+	frame SPRITE_ANIM_FRAME_IDX_40,   4
+	dorestart
 
 .Frameset_11:
-	db SPRITE_ANIM_FRAME_IDX_00, $08
-	db SPRITE_ANIM_FRAME_IDX_01, $08
-	db SPRITE_ANIM_FRAME_IDX_00, $08
-	db SPRITE_ANIM_FRAME_IDX_01, $48
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_00,   8
+	frame SPRITE_ANIM_FRAME_IDX_01,   8
+	frame SPRITE_ANIM_FRAME_IDX_00,   8
+	frame SPRITE_ANIM_FRAME_IDX_01,  72
+	dorestart
 
 .Frameset_2d:
-	db SPRITE_ANIM_FRAME_IDX_63, $08
-	db SPRITE_ANIM_FRAME_IDX_64, $08
-	db SPRITE_ANIM_FRAME_IDX_63, $08
-	db SPRITE_ANIM_FRAME_IDX_64, $48
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_63,   8
+	frame SPRITE_ANIM_FRAME_IDX_64,   8
+	frame SPRITE_ANIM_FRAME_IDX_63,   8
+	frame SPRITE_ANIM_FRAME_IDX_64,  72
+	dorestart
 
 .Frameset_2e:
-	db SPRITE_ANIM_FRAME_IDX_65, $08
-	db SPRITE_ANIM_FRAME_IDX_66, $08
-	db SPRITE_ANIM_FRAME_IDX_65, $08
-	db SPRITE_ANIM_FRAME_IDX_66, $48
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_65,   8
+	frame SPRITE_ANIM_FRAME_IDX_66,   8
+	frame SPRITE_ANIM_FRAME_IDX_65,   8
+	frame SPRITE_ANIM_FRAME_IDX_66,  72
+	dorestart
 
 .Frameset_07:
-	db SPRITE_ANIM_FRAME_IDX_1E, $01
-	db SPRITE_ANIM_FRAME_IDX_1F, $01
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_1E,   1
+	frame SPRITE_ANIM_FRAME_IDX_1F,   1
+	dorestart
 
 .Frameset_08:
-	db SPRITE_ANIM_FRAME_IDX_20, $01
-	db -3, $01
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_20,   1
+	dorepeat  1
+	dorestart
 
 .Frameset_09:
-	db SPRITE_ANIM_FRAME_IDX_21, $01
-	db -3, $01
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_21,   1
+	dorepeat  1
+	dorestart
 
 .Frameset_0a:
-	db SPRITE_ANIM_FRAME_IDX_81, $0c
-	db SPRITE_ANIM_FRAME_IDX_82, $01
-	db SPRITE_ANIM_FRAME_IDX_83, $01
-	db SPRITE_ANIM_FRAME_IDX_82, $04
-	db SPRITE_ANIM_FRAME_IDX_81, $0c
-	db SPRITE_ANIM_FRAME_IDX_82, $0c
-	db SPRITE_ANIM_FRAME_IDX_83, $04
-	db SPRITE_ANIM_FRAME_IDX_84, $20
-	db SPRITE_ANIM_FRAME_IDX_85, $03
-	db SPRITE_ANIM_FRAME_IDX_86, $03
-	db SPRITE_ANIM_FRAME_IDX_87, $04
-	db SPRITE_ANIM_FRAME_IDX_88, $04
-	db SPRITE_ANIM_FRAME_IDX_89, $04
-	db SPRITE_ANIM_FRAME_IDX_8A, $0a
-	db SPRITE_ANIM_FRAME_IDX_8B, $07
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_81,  12
+	frame SPRITE_ANIM_FRAME_IDX_82,   1
+	frame SPRITE_ANIM_FRAME_IDX_83,   1
+	frame SPRITE_ANIM_FRAME_IDX_82,   4
+	frame SPRITE_ANIM_FRAME_IDX_81,  12
+	frame SPRITE_ANIM_FRAME_IDX_82,  12
+	frame SPRITE_ANIM_FRAME_IDX_83,   4
+	frame SPRITE_ANIM_FRAME_IDX_84,  32
+	frame SPRITE_ANIM_FRAME_IDX_85,   3
+	frame SPRITE_ANIM_FRAME_IDX_86,   3
+	frame SPRITE_ANIM_FRAME_IDX_87,   4
+	frame SPRITE_ANIM_FRAME_IDX_88,   4
+	frame SPRITE_ANIM_FRAME_IDX_89,   4
+	frame SPRITE_ANIM_FRAME_IDX_8A,  10
+	frame SPRITE_ANIM_FRAME_IDX_8B,   7
+	endanim
 
 .Frameset_0b:
-	db SPRITE_ANIM_FRAME_IDX_23, $03
-	db SPRITE_ANIM_FRAME_IDX_23, $83
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_23,   3
+	frame SPRITE_ANIM_FRAME_IDX_23, 131
+	dorestart
 
 .Frameset_0c:
-	db SPRITE_ANIM_FRAME_IDX_24, $02
-	db SPRITE_ANIM_FRAME_IDX_25, $02
-	db SPRITE_ANIM_FRAME_IDX_26, $02
-	db SPRITE_ANIM_FRAME_IDX_25, $02
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_24,   2
+	frame SPRITE_ANIM_FRAME_IDX_25,   2
+	frame SPRITE_ANIM_FRAME_IDX_26,   2
+	frame SPRITE_ANIM_FRAME_IDX_25,   2
+	dorestart
 
 .Frameset_0d:
-	db SPRITE_ANIM_FRAME_IDX_27, $07
-	db SPRITE_ANIM_FRAME_IDX_28, $07
-	db SPRITE_ANIM_FRAME_IDX_27, $87
-	db SPRITE_ANIM_FRAME_IDX_28, $47
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_27,   7
+	frame SPRITE_ANIM_FRAME_IDX_28,   7
+	frame SPRITE_ANIM_FRAME_IDX_27, 135
+	frame SPRITE_ANIM_FRAME_IDX_28,  71
+	dorestart
 
 .Frameset_0e:
-	db SPRITE_ANIM_FRAME_IDX_29, $07
-	db SPRITE_ANIM_FRAME_IDX_2A, $07
-	db SPRITE_ANIM_FRAME_IDX_29, $07
-	db SPRITE_ANIM_FRAME_IDX_2B, $07
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_29,   7
+	frame SPRITE_ANIM_FRAME_IDX_2A,   7
+	frame SPRITE_ANIM_FRAME_IDX_29,   7
+	frame SPRITE_ANIM_FRAME_IDX_2B,   7
+	dorestart
 
 .Frameset_0f:
-	db SPRITE_ANIM_FRAME_IDX_29, $07
-	db SPRITE_ANIM_FRAME_IDX_2C, $07
-	db SPRITE_ANIM_FRAME_IDX_2D, $07
-	db SPRITE_ANIM_FRAME_IDX_2C, $07
-	db SPRITE_ANIM_FRAME_IDX_29, $07
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_29,   7
+	frame SPRITE_ANIM_FRAME_IDX_2C,   7
+	frame SPRITE_ANIM_FRAME_IDX_2D,   7
+	frame SPRITE_ANIM_FRAME_IDX_2C,   7
+	frame SPRITE_ANIM_FRAME_IDX_29,   7
+	endanim
 
 .Frameset_10:
-	db SPRITE_ANIM_FRAME_IDX_2E, $14
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_2E,  20
+	endanim
 
 .Frameset_12:
-	db SPRITE_ANIM_FRAME_IDX_2F, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_2F,  32
+	endanim
 
 .Frameset_13:
-	db SPRITE_ANIM_FRAME_IDX_30, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_30,  32
+	endanim
 
 .Frameset_14:
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	dorestart
 
 .Frameset_15:
-	db SPRITE_ANIM_FRAME_IDX_32, $04
-	db SPRITE_ANIM_FRAME_IDX_33, $04
-	db SPRITE_ANIM_FRAME_IDX_34, $04
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_32,   4
+	frame SPRITE_ANIM_FRAME_IDX_33,   4
+	frame SPRITE_ANIM_FRAME_IDX_34,   4
+	delanim
 
 .Frameset_16:
-	db SPRITE_ANIM_FRAME_IDX_35, $03
-	db SPRITE_ANIM_FRAME_IDX_36, $03
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_35,   3
+	frame SPRITE_ANIM_FRAME_IDX_36,   3
+	dorestart
 
 .Frameset_17:
-	db SPRITE_ANIM_FRAME_IDX_37, $07
-	db SPRITE_ANIM_FRAME_IDX_38, $07
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_37,   7
+	frame SPRITE_ANIM_FRAME_IDX_38,   7
+	dorestart
 
 .Frameset_18:
-	db SPRITE_ANIM_FRAME_IDX_39, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_39,  32
+	endanim
 
 .Frameset_19:
-	db SPRITE_ANIM_FRAME_IDX_3B, $02
-	db SPRITE_ANIM_FRAME_IDX_3A, $02
-	db SPRITE_ANIM_FRAME_IDX_3B, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_3B,   2
+	frame SPRITE_ANIM_FRAME_IDX_3A,   2
+	frame SPRITE_ANIM_FRAME_IDX_3B,   2
+	endanim
 
 .Frameset_1a:
-	db SPRITE_ANIM_FRAME_IDX_3C, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_3C,  32
+	endanim
 
 .Frameset_1b:
-	db SPRITE_ANIM_FRAME_IDX_41, $08
-	db SPRITE_ANIM_FRAME_IDX_42, $08
-	db SPRITE_ANIM_FRAME_IDX_41, $08
-	db SPRITE_ANIM_FRAME_IDX_42, $48
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_41,   8
+	frame SPRITE_ANIM_FRAME_IDX_42,   8
+	frame SPRITE_ANIM_FRAME_IDX_41,   8
+	frame SPRITE_ANIM_FRAME_IDX_42,  72
+	dorestart
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_43, $08
-	db SPRITE_ANIM_FRAME_IDX_44, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_43,   8
+	frame SPRITE_ANIM_FRAME_IDX_44,   8
+	dorestart
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_45, $08
-	db SPRITE_ANIM_FRAME_IDX_46, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_45,   8
+	frame SPRITE_ANIM_FRAME_IDX_46,   8
+	dorestart
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_47, $08
-	db SPRITE_ANIM_FRAME_IDX_48, $08
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_47,   8
+	frame SPRITE_ANIM_FRAME_IDX_48,   8
+	dorestart
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_49, $01
-	db SPRITE_ANIM_FRAME_IDX_49, $41
-	db SPRITE_ANIM_FRAME_IDX_49, $c1
-	db SPRITE_ANIM_FRAME_IDX_49, $81
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_49,   1
+	frame SPRITE_ANIM_FRAME_IDX_49,  65
+	frame SPRITE_ANIM_FRAME_IDX_49, 193
+	frame SPRITE_ANIM_FRAME_IDX_49, 129
+	dorestart
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_4A, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_4A,  32
+	endanim
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_4B, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_4B,  32
+	endanim
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_4C, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_4C,  32
+	endanim
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_4D, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_4D,  32
+	endanim
 
 ; XXX
-	db SPRITE_ANIM_FRAME_IDX_4E, $03
-	db -3, $03
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_4E,   3
+	dorepeat  3
+	dorestart
 
 .Frameset_1c:
-	db -3, $20
-	db -1
+	dorepeat 32
+	endanim
 
 .Frameset_1d:
-	db SPRITE_ANIM_FRAME_IDX_4F, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_4F,  32
+	endanim
 
 .Frameset_1e:
-	db SPRITE_ANIM_FRAME_IDX_50, $02
-	db SPRITE_ANIM_FRAME_IDX_51, $10
-	db -3, $01
-	db SPRITE_ANIM_FRAME_IDX_52, $01
-	db -3, $01
-	db SPRITE_ANIM_FRAME_IDX_53, $01
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_50,   2
+	frame SPRITE_ANIM_FRAME_IDX_51,  16
+	dorepeat  1
+	frame SPRITE_ANIM_FRAME_IDX_52,   1
+	dorepeat  1
+	frame SPRITE_ANIM_FRAME_IDX_53,   1
+	delanim
 
 .Frameset_1f:
-	db SPRITE_ANIM_FRAME_IDX_54, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_54,  32
+	endanim
 
 .Frameset_20:
-	db SPRITE_ANIM_FRAME_IDX_55, $20
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_55,  32
+	endanim
 
 .Frameset_21:
-	db SPRITE_ANIM_FRAME_IDX_55, $60
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_55,  96
+	endanim
 
 .Frameset_22:
-	db SPRITE_ANIM_FRAME_IDX_55, $a0
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_55, 160
+	endanim
 
 .Frameset_23:
-	db SPRITE_ANIM_FRAME_IDX_55, $e0
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_55, 224
+	endanim
 
 .Frameset_24:
-	db SPRITE_ANIM_FRAME_IDX_56, $0a
-	db SPRITE_ANIM_FRAME_IDX_57, $09
-	db SPRITE_ANIM_FRAME_IDX_58, $0a
-	db SPRITE_ANIM_FRAME_IDX_59, $0a
-	db SPRITE_ANIM_FRAME_IDX_58, $09
-	db SPRITE_ANIM_FRAME_IDX_5A, $0a
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_56,  10
+	frame SPRITE_ANIM_FRAME_IDX_57,   9
+	frame SPRITE_ANIM_FRAME_IDX_58,  10
+	frame SPRITE_ANIM_FRAME_IDX_59,  10
+	frame SPRITE_ANIM_FRAME_IDX_58,   9
+	frame SPRITE_ANIM_FRAME_IDX_5A,  10
+	dorestart
 
 .Frameset_25:
-	db SPRITE_ANIM_FRAME_IDX_50, $02
-	db SPRITE_ANIM_FRAME_IDX_5B, $02
-	db SPRITE_ANIM_FRAME_IDX_50, $02
-	db SPRITE_ANIM_FRAME_IDX_5B, $42
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_50,   2
+	frame SPRITE_ANIM_FRAME_IDX_5B,   2
+	frame SPRITE_ANIM_FRAME_IDX_50,   2
+	frame SPRITE_ANIM_FRAME_IDX_5B,  66
+	dorestart
 
 .Frameset_26:
-	db SPRITE_ANIM_FRAME_IDX_5C, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_5C,   2
+	endanim
 
 .Frameset_27:
-	db SPRITE_ANIM_FRAME_IDX_5D, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_5D,   2
+	endanim
 
 .Frameset_28:
-	db SPRITE_ANIM_FRAME_IDX_5E, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_5E,   2
+	endanim
 
 .Frameset_29:
-	db SPRITE_ANIM_FRAME_IDX_5F, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_5F,   2
+	endanim
 
 .Frameset_2a:
-	db SPRITE_ANIM_FRAME_IDX_60, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_60,   2
+	endanim
 
 .Frameset_2b:
-	db SPRITE_ANIM_FRAME_IDX_61, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_61,   2
+	endanim
 
 .Frameset_2c:
-	db SPRITE_ANIM_FRAME_IDX_62, $02
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_62,   2
+	endanim
 
 .Frameset_2f:
-	db SPRITE_ANIM_FRAME_IDX_32, $03
-	db SPRITE_ANIM_FRAME_IDX_33, $03
-	db SPRITE_ANIM_FRAME_IDX_34, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_32,   3
+	frame SPRITE_ANIM_FRAME_IDX_33,   3
+	frame SPRITE_ANIM_FRAME_IDX_34,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	endanim
 
 .Frameset_30:
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $03
-	db SPRITE_ANIM_FRAME_IDX_30, $03
-	db SPRITE_ANIM_FRAME_IDX_31, $43
-	db SPRITE_ANIM_FRAME_IDX_32, $03
-	db SPRITE_ANIM_FRAME_IDX_33, $03
-	db SPRITE_ANIM_FRAME_IDX_34, $03
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,   3
+	frame SPRITE_ANIM_FRAME_IDX_30,   3
+	frame SPRITE_ANIM_FRAME_IDX_31,  67
+	frame SPRITE_ANIM_FRAME_IDX_32,   3
+	frame SPRITE_ANIM_FRAME_IDX_33,   3
+	frame SPRITE_ANIM_FRAME_IDX_34,   3
+	delanim
 
 .Frameset_31:
-	db SPRITE_ANIM_FRAME_IDX_67, $03
-	db SPRITE_ANIM_FRAME_IDX_68, $03
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_67,   3
+	frame SPRITE_ANIM_FRAME_IDX_68,   3
+	dorestart
 
 .Frameset_32:
-	db SPRITE_ANIM_FRAME_IDX_6C, $03
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_6C,   3
+	endanim
 
 .Frameset_33:
-	db SPRITE_ANIM_FRAME_IDX_6D, $03
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_6D,   3
+	endanim
 
 .Frameset_34:
-	db SPRITE_ANIM_FRAME_IDX_69, $02
-	db SPRITE_ANIM_FRAME_IDX_6A, $02
-	db SPRITE_ANIM_FRAME_IDX_6B, $02
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_69,   2
+	frame SPRITE_ANIM_FRAME_IDX_6A,   2
+	frame SPRITE_ANIM_FRAME_IDX_6B,   2
+	delanim
 
 .Frameset_35:
-	db SPRITE_ANIM_FRAME_IDX_6E, $03
-	db SPRITE_ANIM_FRAME_IDX_6F, $03
-	db SPRITE_ANIM_FRAME_IDX_70, $03
-	db SPRITE_ANIM_FRAME_IDX_71, $03
-	db -2
+	frame SPRITE_ANIM_FRAME_IDX_6E,   3
+	frame SPRITE_ANIM_FRAME_IDX_6F,   3
+	frame SPRITE_ANIM_FRAME_IDX_70,   3
+	frame SPRITE_ANIM_FRAME_IDX_71,   3
+	dorestart
 
 .Frameset_36:
-	db SPRITE_ANIM_FRAME_IDX_71, $03
-	db SPRITE_ANIM_FRAME_IDX_6E, $07
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_71,   3
+	frame SPRITE_ANIM_FRAME_IDX_6E,   7
+	endanim
 
 .Frameset_37:
-	db SPRITE_ANIM_FRAME_IDX_72, $20
-	db SPRITE_ANIM_FRAME_IDX_73, $07
-	db SPRITE_ANIM_FRAME_IDX_74, $07
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_72,  32
+	frame SPRITE_ANIM_FRAME_IDX_73,   7
+	frame SPRITE_ANIM_FRAME_IDX_74,   7
+	endanim
 
 .Frameset_38:
-	db SPRITE_ANIM_FRAME_IDX_75, $03
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_75,   3
+	endanim
 
 .Frameset_39:
-	db SPRITE_ANIM_FRAME_IDX_76, $03
-	db SPRITE_ANIM_FRAME_IDX_77, $03
-	db SPRITE_ANIM_FRAME_IDX_78, $07
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_76,   3
+	frame SPRITE_ANIM_FRAME_IDX_77,   3
+	frame SPRITE_ANIM_FRAME_IDX_78,   7
+	delanim
 
 .Frameset_3a:
-	db SPRITE_ANIM_FRAME_IDX_76, $43
-	db SPRITE_ANIM_FRAME_IDX_77, $43
-	db SPRITE_ANIM_FRAME_IDX_78, $47
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_76,  67
+	frame SPRITE_ANIM_FRAME_IDX_77,  67
+	frame SPRITE_ANIM_FRAME_IDX_78,  71
+	delanim
 
 .Frameset_3b:
-	db SPRITE_ANIM_FRAME_IDX_76, $83
-	db SPRITE_ANIM_FRAME_IDX_77, $83
-	db SPRITE_ANIM_FRAME_IDX_78, $87
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_76, 131
+	frame SPRITE_ANIM_FRAME_IDX_77, 131
+	frame SPRITE_ANIM_FRAME_IDX_78, 135
+	delanim
 
 .Frameset_3c:
-	db SPRITE_ANIM_FRAME_IDX_76, $c3
-	db SPRITE_ANIM_FRAME_IDX_77, $c3
-	db SPRITE_ANIM_FRAME_IDX_78, $c7
-	db -4
+	frame SPRITE_ANIM_FRAME_IDX_76, 195
+	frame SPRITE_ANIM_FRAME_IDX_77, 195
+	frame SPRITE_ANIM_FRAME_IDX_78, 199
+	delanim
 
 .Frameset_3d:
-	db SPRITE_ANIM_FRAME_IDX_79, $03
-	db SPRITE_ANIM_FRAME_IDX_7A, $03
-	db SPRITE_ANIM_FRAME_IDX_7B, $03
-	db SPRITE_ANIM_FRAME_IDX_7C, $07
-	db SPRITE_ANIM_FRAME_IDX_7D, $07
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_79,   3
+	frame SPRITE_ANIM_FRAME_IDX_7A,   3
+	frame SPRITE_ANIM_FRAME_IDX_7B,   3
+	frame SPRITE_ANIM_FRAME_IDX_7C,   7
+	frame SPRITE_ANIM_FRAME_IDX_7D,   7
+	endanim
 
 .Frameset_3e:
-	db SPRITE_ANIM_FRAME_IDX_7E, $03
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_7E,   3
+	endanim
 
 .Frameset_3f:
-	db -3, $00
-	db -1
+	dorepeat 0
+	endanim
 
 .Frameset_40:
-	db SPRITE_ANIM_FRAME_IDX_7F, $08
-	db SPRITE_ANIM_FRAME_IDX_80, $08
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_7F,   8
+	frame SPRITE_ANIM_FRAME_IDX_80,   8
+	endanim
 
 .Frameset_41:
-	db SPRITE_ANIM_FRAME_IDX_7F, $48
-	db SPRITE_ANIM_FRAME_IDX_80, $48
-	db -1
+	frame SPRITE_ANIM_FRAME_IDX_7F,  72
+	frame SPRITE_ANIM_FRAME_IDX_80,  72
+	endanim
 ; 8d94d
 
 SpriteAnimOAMData: ; 8d94d
--- a/macros.asm
+++ b/macros.asm
@@ -155,6 +155,12 @@
 	ENDM
 
 
+delanim: MACRO
+	db $fc
+	ENDM
+dorestart: MACRO
+	db $fe
+	ENDM
 
 sine_wave: MACRO
 ; \1: amplitude