diff --git a/actors/amp/anims/table.inc.c b/actors/amp/anims/table.inc.c
index 77485e899..ab65f6726 100644
--- a/actors/amp/anims/table.inc.c
+++ b/actors/amp/anims/table.inc.c
@@ -1,4 +1,5 @@
// 0x08004034
-const struct Animation *const amp_seg8_anims_08004034[] = {
- &_seg8_anim_0800401C,
+const struct AnimationTable amp_seg8_anims_08004034 = {
+ .anims = { &_seg8_anim_0800401C, },
+ .count = 1
};
diff --git a/actors/bird/anims/table.inc.c b/actors/bird/anims/table.inc.c
index 709c0ac1f..84445b891 100644
--- a/actors/bird/anims/table.inc.c
+++ b/actors/bird/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x050009E8
-const struct Animation *const birds_seg5_anims_050009E8[] = {
- &birds_seg5_anim_050008D0,
- &birds_seg5_anim_050009D0,
+const struct AnimationTable birds_seg5_anims_050009E8 = {
+ .anims = {
+ &birds_seg5_anim_050008D0,
+ &birds_seg5_anim_050009D0,
+ },
+ .count = 2
};
diff --git a/actors/blargg/anims/table.inc.c b/actors/blargg/anims/table.inc.c
index 6947a4bd9..29f5cca0c 100644
--- a/actors/blargg/anims/table.inc.c
+++ b/actors/blargg/anims/table.inc.c
@@ -1,7 +1,10 @@
// unreferenced
// 0x0500616C
-const struct Animation *const blargg_seg5_anims_0500616C[] = {
- &blargg_seg5_anim_05006154,
- &blargg_seg5_anim_05006070,
- NULL,
+const struct AnimationTable blargg_seg5_anims_0500616C = {
+ .anims = {
+ &blargg_seg5_anim_05006154,
+ &blargg_seg5_anim_05006070,
+ NULL,
+ },
+ .count = 2
};
diff --git a/actors/blue_fish/anims/table.inc.c b/actors/blue_fish/anims/table.inc.c
index 38e67e04f..9b0f9ea6b 100644
--- a/actors/blue_fish/anims/table.inc.c
+++ b/actors/blue_fish/anims/table.inc.c
@@ -1,5 +1,5 @@
// 0x0301C2B0
-const struct Animation *const blue_fish_seg3_anims_0301C2B0[] = {
- &blue_fish_seg3_anim_0301C298,
- NULL,
+const struct AnimationTable blue_fish_seg3_anims_0301C2B0 = {
+ .anims = { &blue_fish_seg3_anim_0301C298, NULL },
+ .count = 1
};
diff --git a/actors/bobomb/anims/table.inc.c b/actors/bobomb/anims/table.inc.c
index 27541ae04..5249f733b 100644
--- a/actors/bobomb/anims/table.inc.c
+++ b/actors/bobomb/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x0802396C
-const struct Animation *const bobomb_seg8_anims_0802396C[] = {
- &bobomb_seg8_anim_080237FC,
- &bobomb_seg8_anim_08023954,
- NULL,
+const struct AnimationTable bobomb_seg8_anims_0802396C = {
+ .anims = {
+ &bobomb_seg8_anim_080237FC,
+ &bobomb_seg8_anim_08023954,
+ NULL,
+ },
+ .count = 2
};
diff --git a/actors/bookend/anims/table.inc.c b/actors/bookend/anims/table.inc.c
index 4a3137f19..18be945f6 100644
--- a/actors/bookend/anims/table.inc.c
+++ b/actors/bookend/anims/table.inc.c
@@ -1,7 +1,10 @@
// 0x05002540
-const struct Animation *const bookend_seg5_anims_05002540[] = {
- &bookend_seg5_anim_05002528,
- &bookend_seg5_anim_050023F4,
- &bookend_seg5_anim_05002510,
- NULL,
+const struct AnimationTable bookend_seg5_anims_05002540 = {
+ .anims = {
+ &bookend_seg5_anim_05002528,
+ &bookend_seg5_anim_050023F4,
+ &bookend_seg5_anim_05002510,
+ NULL,
+ },
+ .count = 3
};
diff --git a/actors/bowser/anims/table.inc.c b/actors/bowser/anims/table.inc.c
index 8edf9d824..7b9d9b229 100644
--- a/actors/bowser/anims/table.inc.c
+++ b/actors/bowser/anims/table.inc.c
@@ -1,30 +1,33 @@
// 0x06057690
-const struct Animation *const bowser_seg6_anims_06057690[] = {
- &bowser_seg6_anim_060445EC,
- &bowser_seg6_anim_060453C8,
- &bowser_seg6_anim_06045D28,
- &bowser_seg6_anim_0604671C,
- &bowser_seg6_anim_0604675C,
- &bowser_seg6_anim_06048200,
- &bowser_seg6_anim_06049880,
- &bowser_seg6_anim_0604A8E4,
- &bowser_seg6_anim_0604B178,
- &bowser_seg6_anim_0604B8CC,
- &bowser_seg6_anim_0604D184,
- &bowser_seg6_anim_0604E5A0,
- &bowser_seg6_anim_0604F030,
- &bowser_seg6_anim_0604FF4C,
- &bowser_seg6_anim_06050530,
- &bowser_seg6_anim_060514E8,
- &bowser_seg6_anim_06051C68,
- &bowser_seg6_anim_06052680,
- &bowser_seg6_anim_06054290,
- &bowser_seg6_anim_06052D94,
- &bowser_seg6_anim_060534F4,
- &bowser_seg6_anim_06053B8C,
- &bowser_seg6_anim_06054950,
- &bowser_seg6_anim_06055210,
- &bowser_seg6_anim_06055984,
- &bowser_seg6_anim_06056774,
- &bowser_seg6_anim_06057678,
+const struct AnimationTable bowser_seg6_anims_06057690 = {
+ .anims = {
+ &bowser_seg6_anim_060445EC,
+ &bowser_seg6_anim_060453C8,
+ &bowser_seg6_anim_06045D28,
+ &bowser_seg6_anim_0604671C,
+ &bowser_seg6_anim_0604675C,
+ &bowser_seg6_anim_06048200,
+ &bowser_seg6_anim_06049880,
+ &bowser_seg6_anim_0604A8E4,
+ &bowser_seg6_anim_0604B178,
+ &bowser_seg6_anim_0604B8CC,
+ &bowser_seg6_anim_0604D184,
+ &bowser_seg6_anim_0604E5A0,
+ &bowser_seg6_anim_0604F030,
+ &bowser_seg6_anim_0604FF4C,
+ &bowser_seg6_anim_06050530,
+ &bowser_seg6_anim_060514E8,
+ &bowser_seg6_anim_06051C68,
+ &bowser_seg6_anim_06052680,
+ &bowser_seg6_anim_06054290,
+ &bowser_seg6_anim_06052D94,
+ &bowser_seg6_anim_060534F4,
+ &bowser_seg6_anim_06053B8C,
+ &bowser_seg6_anim_06054950,
+ &bowser_seg6_anim_06055210,
+ &bowser_seg6_anim_06055984,
+ &bowser_seg6_anim_06056774,
+ &bowser_seg6_anim_06057678,
+ },
+ .count = 27
};
diff --git a/actors/bowser_key/anims/table.inc.c b/actors/bowser_key/anims/table.inc.c
index d9030d064..7ddd2b52b 100644
--- a/actors/bowser_key/anims/table.inc.c
+++ b/actors/bowser_key/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x030172D0
-const struct Animation *const bowser_key_seg3_anims_list[] = {
- &bowser_key_seg3_anim_unlock_door, // id 0
- &bowser_key_seg3_anim_course_exit, // id 1
+const struct AnimationTable bowser_key_seg3_anims_list = {
+ .anims = {
+ &bowser_key_seg3_anim_unlock_door, // id 0
+ &bowser_key_seg3_anim_course_exit, // id 1
+ },
+ .count = 2
};
diff --git a/actors/bub/anims/table.inc.c b/actors/bub/anims/table.inc.c
index b3ca30a74..ee2a5ffa1 100644
--- a/actors/bub/anims/table.inc.c
+++ b/actors/bub/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x06012354
-const struct Animation *const bub_seg6_anims_06012354[] = {
- &bub_seg6_anim_0601233C,
- NULL,
- NULL,
+const struct AnimationTable bub_seg6_anims_06012354 = {
+ .anims = {
+ &bub_seg6_anim_0601233C,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/bully/anims/table.inc.c b/actors/bully/anims/table.inc.c
index b3e89adea..8b7e0be43 100644
--- a/actors/bully/anims/table.inc.c
+++ b/actors/bully/anims/table.inc.c
@@ -1,8 +1,11 @@
// 0x0500470C
-const struct Animation *const bully_seg5_anims_0500470C[] = {
- &bully_seg5_anim_05004598,
- &bully_seg5_anim_050043D8,
- &bully_seg5_anim_050042A4,
- &bully_seg5_anim_050046F4,
- NULL,
+const struct AnimationTable bully_seg5_anims_0500470C = {
+ .anims = {
+ &bully_seg5_anim_05004598,
+ &bully_seg5_anim_050043D8,
+ &bully_seg5_anim_050042A4,
+ &bully_seg5_anim_050046F4,
+ NULL,
+ },
+ .count = 4
};
diff --git a/actors/butterfly/anims/table.inc.c b/actors/butterfly/anims/table.inc.c
index e921246ee..7b0f790e2 100644
--- a/actors/butterfly/anims/table.inc.c
+++ b/actors/butterfly/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x030056B0
-const struct Animation *const butterfly_seg3_anims_030056B0[] = {
- &butterfly_seg3_anim_030055B0,
- &butterfly_seg3_anim_03005698,
+const struct AnimationTable butterfly_seg3_anims_030056B0 = {
+ .anims = {
+ &butterfly_seg3_anim_030055B0,
+ &butterfly_seg3_anim_03005698,
+ },
+ .count = 2
};
diff --git a/actors/chain_chomp/anims/table.inc.c b/actors/chain_chomp/anims/table.inc.c
index 45ea0809c..6cdc1b222 100644
--- a/actors/chain_chomp/anims/table.inc.c
+++ b/actors/chain_chomp/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x06025178
-const struct Animation *const chain_chomp_seg6_anims_06025178[] = {
- &chain_chomp_seg6_anim_06025160,
- NULL,
+const struct AnimationTable chain_chomp_seg6_anims_06025178 = {
+ .anims = {
+ &chain_chomp_seg6_anim_06025160,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/chair/anims/table.inc.c b/actors/chair/anims/table.inc.c
index 1fb28dca8..512d3792f 100644
--- a/actors/chair/anims/table.inc.c
+++ b/actors/chair/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x05005784
-const struct Animation *const chair_seg5_anims_05005784[] = {
- &chair_seg5_anim_0500576C,
+const struct AnimationTable chair_seg5_anims_05005784 = {
+ .anims = {
+ &chair_seg5_anim_0500576C,
+ },
+ .count = 1
};
diff --git a/actors/chillychief/anims/table.inc.c b/actors/chillychief/anims/table.inc.c
index 23e1df37f..c210321a0 100644
--- a/actors/chillychief/anims/table.inc.c
+++ b/actors/chillychief/anims/table.inc.c
@@ -1,8 +1,11 @@
// 0x06003994
-const struct Animation *const chilly_chief_seg6_anims_06003994[] = {
- &chilly_chief_seg6_anim_060035E0,
- &chilly_chief_seg6_anim_06003420,
- &chilly_chief_seg6_anim_060032EC,
- &chilly_chief_seg6_anim_0600373C,
- NULL,
+const struct AnimationTable chilly_chief_seg6_anims_06003994 = {
+ .anims = {
+ &chilly_chief_seg6_anim_060035E0,
+ &chilly_chief_seg6_anim_06003420,
+ &chilly_chief_seg6_anim_060032EC,
+ &chilly_chief_seg6_anim_0600373C,
+ NULL,
+ },
+ .count = 4
};
diff --git a/actors/chuckya/anims/table.inc.c b/actors/chuckya/anims/table.inc.c
index 054f98de8..b471f2e19 100644
--- a/actors/chuckya/anims/table.inc.c
+++ b/actors/chuckya/anims/table.inc.c
@@ -1,9 +1,12 @@
// 0x0800C070
-const struct Animation *const chuckya_seg8_anims_0800C070[] = {
- &chuckya_seg8_anim_0800AF68,
- &chuckya_seg8_anim_0800B1A8,
- &chuckya_seg8_anim_0800B4A8,
- &chuckya_seg8_anim_0800B9F8,
- &chuckya_seg8_anim_0800BBEC,
- &chuckya_seg8_anim_0800C058,
+const struct AnimationTable chuckya_seg8_anims_0800C070 = {
+ .anims = {
+ &chuckya_seg8_anim_0800AF68,
+ &chuckya_seg8_anim_0800B1A8,
+ &chuckya_seg8_anim_0800B4A8,
+ &chuckya_seg8_anim_0800B9F8,
+ &chuckya_seg8_anim_0800BBEC,
+ &chuckya_seg8_anim_0800C058,
+ },
+ .count = 6
};
diff --git a/actors/clam_shell/anims/table.inc.c b/actors/clam_shell/anims/table.inc.c
index f03907da3..b638c68d0 100644
--- a/actors/clam_shell/anims/table.inc.c
+++ b/actors/clam_shell/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x05001744
-const struct Animation *const clam_shell_seg5_anims_05001744[] = {
- &clam_shell_seg5_anim_05001654,
- &clam_shell_seg5_anim_0500172C,
- NULL,
+const struct AnimationTable clam_shell_seg5_anims_05001744 = {
+ .anims = {
+ &clam_shell_seg5_anim_05001654,
+ &clam_shell_seg5_anim_0500172C,
+ NULL,
+ },
+ .count = 2
};
diff --git a/actors/common0.h b/actors/common0.h
index f4a791db3..220349fe0 100644
--- a/actors/common0.h
+++ b/actors/common0.h
@@ -21,7 +21,7 @@ extern const Gfx amp_seg8_dl_080039D0[];
extern const Gfx amp_seg8_dl_08003DA8[];
extern const Gfx amp_seg8_dl_08003DD8[];
extern const Gfx amp_seg8_dl_08003E00[];
-extern const struct Animation *const amp_seg8_anims_08004034[];
+extern const struct AnimationTable amp_seg8_anims_08004034;
// blue_coin_switch
extern const GeoLayout blue_coin_switch_geo[];
@@ -44,7 +44,7 @@ extern const Gfx bobomb_seg8_dl_08022D78[];
extern const Gfx bobomb_seg8_dl_08023270[];
extern const Gfx bobomb_seg8_dl_08023378[];
extern const Gfx bobomb_seg8_dl_08023480[];
-extern const struct Animation *const bobomb_seg8_anims_0802396C[];
+extern const struct AnimationTable bobomb_seg8_anims_0802396C;
// bowling_ball
extern const GeoLayout bowling_ball_geo[];
@@ -108,7 +108,7 @@ extern const Gfx chuckya_seg8_dl_0800A958[];
extern const Gfx chuckya_seg8_dl_0800A998[];
extern const Gfx chuckya_seg8_dl_0800AB70[];
extern const Gfx chuckya_seg8_dl_0800ABE8[];
-extern const struct Animation *const chuckya_seg8_anims_0800C070[];
+extern const struct AnimationTable chuckya_seg8_anims_0800C070;
// exclamation_box
extern const GeoLayout exclamation_box_geo[];
@@ -149,7 +149,7 @@ extern const Gfx flyguy_seg8_dl_080113A8[];
extern const Gfx flyguy_seg8_dl_08011420[];
extern const Gfx flyguy_seg8_dl_080116D0[];
extern const Gfx flyguy_seg8_dl_08011710[];
-extern const struct Animation *const flyguy_seg8_anims_08011A64[];
+extern const struct AnimationTable flyguy_seg8_anims_08011A64;
// goomba
extern const GeoLayout goomba_geo[];
@@ -165,7 +165,7 @@ extern const Gfx goomba_seg8_dl_0801CF78[];
extern const Gfx goomba_seg8_dl_0801D0D0[];
extern const Gfx goomba_seg8_dl_0801D360[];
extern const Gfx goomba_seg8_dl_0801D760[];
-extern const struct Animation *const goomba_seg8_anims_0801DA4C[];
+extern const struct AnimationTable goomba_seg8_anims_0801DA4C;
// heart
extern const GeoLayout heart_geo[];
diff --git a/actors/common1.h b/actors/common1.h
index 9a1b650e1..098fad2d6 100644
--- a/actors/common1.h
+++ b/actors/common1.h
@@ -10,19 +10,19 @@ extern const Gfx blue_fish_seg3_dl_0301BEC0[];
extern const Gfx blue_fish_seg3_dl_0301BFB8[];
extern const Gfx blue_fish_seg3_dl_0301C0A8[];
extern const Gfx blue_fish_seg3_dl_0301C150[];
-extern const struct Animation *const blue_fish_seg3_anims_0301C2B0[];
+extern const struct AnimationTable blue_fish_seg3_anims_0301C2B0;
// bowser_key
extern const GeoLayout bowser_key_geo[];
extern const GeoLayout bowser_key_cutscene_geo[];
extern const Gfx bowser_key_dl[];
-extern const struct Animation *const bowser_key_seg3_anims_list[];
+extern const struct AnimationTable bowser_key_seg3_anims_list;
// butterfly
extern const GeoLayout butterfly_geo[];
extern const Gfx butterfly_seg3_dl_03005408[];
extern const Gfx butterfly_seg3_dl_030054A0[];
-extern const struct Animation *const butterfly_seg3_anims_030056B0[];
+extern const struct AnimationTable butterfly_seg3_anims_030056B0;
// coin
extern const GeoLayout yellow_coin_geo[];
@@ -112,7 +112,7 @@ extern const Gfx door_seg3_dl_03015008[];
extern const Gfx door_seg3_dl_03015078[];
extern const Gfx door_seg3_dl_030150E8[];
extern const Gfx door_seg3_dl_03015158[];
-extern const struct Animation *const door_seg3_anims_030156C0[];
+extern const struct AnimationTable door_seg3_anims_030156C0;
// explosion
extern const GeoLayout explosion_geo[];
diff --git a/actors/cyan_fish/anims/table.inc.c b/actors/cyan_fish/anims/table.inc.c
index 2c2c3d4f4..9e3b16169 100644
--- a/actors/cyan_fish/anims/table.inc.c
+++ b/actors/cyan_fish/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x0600E264
-const struct Animation *const cyan_fish_seg6_anims_0600E264[] = {
- &cyan_fish_seg6_anim_0600E24C,
- NULL,
- NULL,
+const struct AnimationTable cyan_fish_seg6_anims_0600E264 = {
+ .anims = {
+ &cyan_fish_seg6_anim_0600E24C,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/door/anims/table.inc.c b/actors/door/anims/table.inc.c
index 9d33cadd3..bb1302b37 100644
--- a/actors/door/anims/table.inc.c
+++ b/actors/door/anims/table.inc.c
@@ -1,9 +1,12 @@
// 0x030156C0
-const struct Animation *const door_seg3_anims_030156C0[] = {
- &door_seg3_anim_03015208,
- &door_seg3_anim_03015440,
- &door_seg3_anim_03015690,
- &door_seg3_anim_03015458,
- &door_seg3_anim_030156A8,
- NULL,
+const struct AnimationTable door_seg3_anims_030156C0 = {
+ .anims = {
+ &door_seg3_anim_03015208,
+ &door_seg3_anim_03015440,
+ &door_seg3_anim_03015690,
+ &door_seg3_anim_03015458,
+ &door_seg3_anim_030156A8,
+ NULL,
+ },
+ .count = 5
};
diff --git a/actors/dorrie/anims/table.inc.c b/actors/dorrie/anims/table.inc.c
index 99911f3c9..a1712cd72 100644
--- a/actors/dorrie/anims/table.inc.c
+++ b/actors/dorrie/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x0600F638
-const struct Animation *const dorrie_seg6_anims_0600F638[] = {
- &dorrie_seg6_anim_0600E18C,
- &dorrie_seg6_anim_0600E9BC,
- &dorrie_seg6_anim_0600F620,
+const struct AnimationTable dorrie_seg6_anims_0600F638 = {
+ .anims = {
+ &dorrie_seg6_anim_0600E18C,
+ &dorrie_seg6_anim_0600E9BC,
+ &dorrie_seg6_anim_0600F620,
+ },
+ .count = 3
};
diff --git a/actors/eyerok/anims/table.inc.c b/actors/eyerok/anims/table.inc.c
index e5db12082..848294ba6 100644
--- a/actors/eyerok/anims/table.inc.c
+++ b/actors/eyerok/anims/table.inc.c
@@ -1,12 +1,15 @@
// 0x050116E4
-const struct Animation *const eyerok_seg5_anims_050116E4[] = {
- &eyerok_seg5_anim_0500D270,
- &eyerok_seg5_anim_0500DF50,
- &eyerok_seg5_anim_0500E1D8,
- &eyerok_seg5_anim_0500E99C,
- &eyerok_seg5_anim_0500F3D8,
- &eyerok_seg5_anim_0500FCCC,
- &eyerok_seg5_anim_050116CC,
- &eyerok_seg5_anim_0500F3F0,
- NULL,
+const struct AnimationTable eyerok_seg5_anims_050116E4 = {
+ .anims = {
+ &eyerok_seg5_anim_0500D270,
+ &eyerok_seg5_anim_0500DF50,
+ &eyerok_seg5_anim_0500E1D8,
+ &eyerok_seg5_anim_0500E99C,
+ &eyerok_seg5_anim_0500F3D8,
+ &eyerok_seg5_anim_0500FCCC,
+ &eyerok_seg5_anim_050116CC,
+ &eyerok_seg5_anim_0500F3F0,
+ NULL,
+ },
+ .count = 8
};
diff --git a/actors/flyguy/anims/table.inc.c b/actors/flyguy/anims/table.inc.c
index a0e5cac91..e7ea236dd 100644
--- a/actors/flyguy/anims/table.inc.c
+++ b/actors/flyguy/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x08011A64
-const struct Animation *const flyguy_seg8_anims_08011A64[] = {
- &flyguy_seg8_anim_08011A4C,
- NULL,
- NULL,
+const struct AnimationTable flyguy_seg8_anims_08011A64 = {
+ .anims = {
+ &flyguy_seg8_anim_08011A4C,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/goomba/anims/table.inc.c b/actors/goomba/anims/table.inc.c
index 5c60c4ea1..35049c75a 100644
--- a/actors/goomba/anims/table.inc.c
+++ b/actors/goomba/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x0801DA4C
-const struct Animation *const goomba_seg8_anims_0801DA4C[] = {
- &goomba_seg8_anim_0801DA34,
- NULL,
- NULL,
+const struct AnimationTable goomba_seg8_anims_0801DA4C = {
+ .anims = {
+ &goomba_seg8_anim_0801DA34,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/group1.h b/actors/group1.h
index 23990b040..5ff7f9353 100644
--- a/actors/group1.h
+++ b/actors/group1.h
@@ -35,7 +35,7 @@ extern const Gfx heave_ho_seg5_dl_05014560[];
extern const Gfx heave_ho_seg5_dl_050145D0[];
extern const Gfx heave_ho_seg5_dl_050149A8[];
extern const Gfx heave_ho_seg5_dl_05014D80[];
-extern const struct Animation *const heave_ho_seg5_anims_0501534C[];
+extern const struct AnimationTable heave_ho_seg5_anims_0501534C;
// hoot
extern const GeoLayout hoot_geo[];
@@ -63,7 +63,7 @@ extern const Gfx hoot_seg5_dl_05004A98[];
extern const Gfx hoot_seg5_dl_05004B38[];
extern const Gfx hoot_seg5_dl_05004CA8[];
extern const Gfx hoot_seg5_dl_05004D48[];
-extern const struct Animation *const hoot_seg5_anims_05005768[];
+extern const struct AnimationTable hoot_seg5_anims_05005768;
// thwomp
extern const GeoLayout thwomp_geo[];
diff --git a/actors/group10.h b/actors/group10.h
index 6a518be28..e23080e19 100644
--- a/actors/group10.h
+++ b/actors/group10.h
@@ -9,7 +9,7 @@ extern const Gfx birds_seg5_dl_05000528[];
extern const Gfx birds_seg5_dl_05000598[];
extern const Gfx birds_seg5_dl_05000600[];
extern const Gfx birds_seg5_dl_05000670[];
-extern const struct Animation *const birds_seg5_anims_050009E8[];
+extern const struct AnimationTable birds_seg5_anims_050009E8;
// peach
extern const GeoLayout peach_geo_000098[];
@@ -65,7 +65,7 @@ extern const Gfx peach_seg5_dl_05009940[];
extern const Gfx peach_seg5_dl_05009E20[];
extern const Gfx peach_seg5_dl_0500A0A8[];
extern const Gfx peach_seg5_us_dl_0500A188[];
-extern const struct Animation *const peach_seg5_anims_0501C41C[];
+extern const struct AnimationTable peach_seg5_anims_0501C41C;
// yoshi
extern const GeoLayout yoshi_geo[];
@@ -92,6 +92,6 @@ extern const Gfx yoshi_seg5_dl_05022160[];
extern const Gfx yoshi_seg5_dl_050222A8[];
extern const Gfx yoshi_seg5_dl_05022408[];
extern const Gfx yoshi_seg5_dl_05022608[];
-extern const struct Animation *const yoshi_seg5_anims_05024100[];
+extern const struct AnimationTable yoshi_seg5_anims_05024100;
#endif
diff --git a/actors/group11.h b/actors/group11.h
index 6d6fdc43b..6828346a6 100644
--- a/actors/group11.h
+++ b/actors/group11.h
@@ -34,7 +34,7 @@ extern const Gfx lakitu_enemy_seg5_dl_050134A8[];
extern const Gfx lakitu_enemy_seg5_dl_050136A0[];
extern const Gfx lakitu_enemy_seg5_dl_05013860[];
extern const Gfx lakitu_enemy_seg5_dl_050138B0[];
-extern const struct Animation *const lakitu_enemy_seg5_anims_050144D4[];
+extern const struct AnimationTable lakitu_enemy_seg5_anims_050144D4;
// spiny
extern const GeoLayout spiny_geo[];
@@ -44,7 +44,7 @@ extern const Gfx spiny_seg5_dl_050165A8[];
extern const Gfx spiny_seg5_dl_05016670[];
extern const Gfx spiny_seg5_dl_05016738[];
extern const Gfx spiny_seg5_dl_05016A48[];
-extern const struct Animation *const spiny_seg5_anims_05016EAC[];
+extern const struct AnimationTable spiny_seg5_anims_05016EAC;
// spiny_egg
extern const GeoLayout spiny_ball_geo[];
@@ -58,7 +58,7 @@ extern const Gfx spiny_egg_seg5_dl_050152F8[];
extern const Gfx spiny_egg_seg5_dl_05015330[];
extern const Gfx spiny_egg_seg5_dl_05015368[];
extern const Gfx spiny_egg_seg5_dl_05015740[];
-extern const struct Animation *const spiny_egg_seg5_anims_050157E4[];
+extern const struct AnimationTable spiny_egg_seg5_anims_050157E4;
// wiggler_body
extern const Gfx wiggler_seg5_dl_0500BCB8[];
@@ -71,7 +71,7 @@ extern const Gfx wiggler_seg5_dl_0500C208[];
extern const Gfx wiggler_seg5_dl_0500C240[];
extern const Gfx wiggler_seg5_dl_0500C278[];
extern const GeoLayout wiggler_body_geo[];
-extern const struct Animation *const wiggler_seg5_anims_0500C874[];
+extern const struct AnimationTable wiggler_seg5_anims_0500C874;
// wiggler_head
extern const GeoLayout wiggler_head_geo[];
@@ -93,6 +93,6 @@ extern const Gfx wiggler_seg5_dl_0500E518[];
extern const Gfx wiggler_seg5_dl_0500E608[];
extern const Gfx wiggler_seg5_dl_0500E640[];
extern const Gfx wiggler_seg5_dl_0500E678[];
-extern const struct Animation *const wiggler_seg5_anims_0500EC8C[];
+extern const struct AnimationTable wiggler_seg5_anims_0500EC8C;
#endif
diff --git a/actors/group12.h b/actors/group12.h
index 2a73af219..433092118 100644
--- a/actors/group12.h
+++ b/actors/group12.h
@@ -89,7 +89,7 @@ extern const Gfx bowser_seg6_dl_060431F0[];
extern const Gfx bowser_seg6_dl_06043548[];
extern const Gfx bowser_seg6_dl_06043648[];
extern const Gfx bowser_seg6_dl_06043698[];
-extern const struct Animation *const bowser_seg6_anims_06057690[];
+extern const struct AnimationTable bowser_seg6_anims_06057690;
extern const s16 bowser_seg6_unkmoveshorts_060576FC[];
// bowser_flame
diff --git a/actors/group13.h b/actors/group13.h
index 6978503d8..91db76843 100644
--- a/actors/group13.h
+++ b/actors/group13.h
@@ -17,7 +17,7 @@ extern const Gfx bub_seg6_dl_06011DC0[];
extern const Gfx bub_seg6_dl_06011E48[];
extern const Gfx bub_seg6_dl_06011F18[];
extern const Gfx bub_seg6_dl_06011FA0[];
-extern const struct Animation *const bub_seg6_anims_06012354[];
+extern const struct AnimationTable bub_seg6_anims_06012354;
// cyan_fish
extern const GeoLayout cyan_fish_geo[];
@@ -27,7 +27,7 @@ extern const Gfx cyan_fish_seg6_dl_0600DE90[];
extern const Gfx cyan_fish_seg6_dl_0600DED8[];
extern const Gfx cyan_fish_seg6_dl_0600DFC0[];
extern const Gfx cyan_fish_seg6_dl_0600E038[];
-extern const struct Animation *const cyan_fish_seg6_anims_0600E264[];
+extern const struct AnimationTable cyan_fish_seg6_anims_0600E264;
// seaweed
extern const GeoLayout seaweed_geo[];
@@ -39,7 +39,7 @@ extern const Gfx seaweed_seg6_dl_0600A040[];
extern const Gfx seaweed_seg6_dl_0600A088[];
extern const Gfx seaweed_seg6_dl_0600A138[];
extern const Gfx seaweed_seg6_dl_0600A180[];
-extern const struct Animation *const seaweed_seg6_anims_0600A4D4[];
+extern const struct AnimationTable seaweed_seg6_anims_0600A4D4;
// skeeter
extern const GeoLayout skeeter_geo[];
@@ -72,7 +72,7 @@ extern const Gfx skeeter_seg6_dl_06004678[];
extern const Gfx skeeter_seg6_dl_06004A40[];
extern const Gfx skeeter_seg6_dl_06005328[];
extern const Gfx skeeter_seg6_dl_06005358[];
-extern const struct Animation *const skeeter_seg6_anims_06007DE0[];
+extern const struct AnimationTable skeeter_seg6_anims_06007DE0;
// treasure_chest
extern const GeoLayout treasure_chest_base_geo[];
@@ -98,6 +98,6 @@ extern const Gfx water_mine_seg6_dl_0600D3F8[];
// water_ring
extern const GeoLayout water_ring_geo[];
extern const Gfx water_ring_seg6_dl_06013AC0[];
-extern const struct Animation *const water_ring_seg6_anims_06013F7C[];
+extern const struct AnimationTable water_ring_seg6_anims_06013F7C;
#endif
diff --git a/actors/group14.h b/actors/group14.h
index f776dcd5a..72d00ceb5 100644
--- a/actors/group14.h
+++ b/actors/group14.h
@@ -21,7 +21,7 @@ extern const Gfx chain_chomp_seg6_dl_06024CF0[];
extern const Gfx chain_chomp_seg6_dl_06024D60[];
extern const Gfx chain_chomp_seg6_dl_06024F50[];
extern const Gfx chain_chomp_seg6_dl_06024FC0[];
-extern const struct Animation *const chain_chomp_seg6_anims_06025178[];
+extern const struct AnimationTable chain_chomp_seg6_anims_06025178;
// koopa
extern const GeoLayout koopa_without_shell_geo[];
@@ -57,7 +57,7 @@ extern const Gfx koopa_seg6_dl_0600BE10[];
extern const Gfx koopa_seg6_dl_0600BE80[];
extern const Gfx koopa_seg6_dl_0600C240[];
extern const Gfx koopa_seg6_dl_0600C498[];
-extern const struct Animation *const koopa_seg6_anims_06011364[];
+extern const struct AnimationTable koopa_seg6_anims_06011364;
// koopa_flag
extern const GeoLayout koopa_flag_geo[];
@@ -74,7 +74,7 @@ extern const Gfx koopa_flag_seg6_dl_06000D90[];
extern const Gfx koopa_flag_seg6_dl_06000DB0[];
extern const Gfx koopa_flag_seg6_dl_06000E20[];
extern const Gfx koopa_flag_seg6_dl_06000E38[];
-extern const struct Animation *const koopa_flag_seg6_anims_06001028[];
+extern const struct AnimationTable koopa_flag_seg6_anims_06001028;
// piranha_plant
extern const GeoLayout piranha_plant_geo[];
@@ -103,7 +103,7 @@ extern const Gfx piranha_plant_seg6_dl_06016D30[];
extern const Gfx piranha_plant_seg6_dl_06016D98[];
extern const Gfx piranha_plant_seg6_dl_06016EB8[];
extern const Gfx piranha_plant_seg6_dl_06016F20[];
-extern const struct Animation *const piranha_plant_seg6_anims_0601C31C[];
+extern const struct AnimationTable piranha_plant_seg6_anims_0601C31C;
// poundable_pole
extern const GeoLayout wooden_post_geo[];
@@ -130,7 +130,7 @@ extern const Gfx whomp_seg6_dl_0601FE10[];
extern const Gfx whomp_seg6_dl_0601FEA8[];
extern const Gfx whomp_seg6_dl_0601FFA0[];
extern const Gfx whomp_seg6_dl_06020038[];
-extern const struct Animation *const whomp_seg6_anims_06020A04[];
+extern const struct AnimationTable whomp_seg6_anims_06020A04;
extern const Collision whomp_seg6_collision_06020A0C[];
#endif
diff --git a/actors/group15.h b/actors/group15.h
index 76f4a650d..fd7aa6bef 100644
--- a/actors/group15.h
+++ b/actors/group15.h
@@ -30,7 +30,7 @@ extern const Gfx lakitu_seg6_dl_06005360[];
extern const Gfx lakitu_seg6_dl_06005598[];
extern const Gfx lakitu_seg6_dl_060055E8[];
extern const Gfx lakitu_seg6_dl_06005610[];
-extern const struct Animation *const lakitu_seg6_anims_060058F8[];
+extern const struct AnimationTable lakitu_seg6_anims_060058F8;
// mips
extern const GeoLayout mips_geo[];
@@ -59,7 +59,7 @@ extern const Gfx mips_seg6_dl_06011E88[];
extern const Gfx mips_seg6_dl_06011ED8[];
extern const Gfx mips_seg6_dl_06011F70[];
extern const Gfx mips_seg6_dl_06011FC0[];
-extern const struct Animation *const mips_seg6_anims_06015634[];
+extern const struct AnimationTable mips_seg6_anims_06015634;
// toad
extern const GeoLayout toad_geo_000114[];
@@ -84,6 +84,6 @@ extern const Gfx toad_seg6_dl_06008748[];
extern const Gfx toad_seg6_dl_06008890[];
extern const Gfx toad_seg6_dl_06008A90[];
extern const Gfx toad_seg6_dl_06008BD8[];
-extern const struct Animation *const toad_seg6_anims_0600FB58[];
+extern const struct AnimationTable toad_seg6_anims_0600FB58;
#endif
diff --git a/actors/group16.h b/actors/group16.h
index 5ebea5dff..db63aa7b7 100644
--- a/actors/group16.h
+++ b/actors/group16.h
@@ -17,7 +17,7 @@ extern const Gfx chilly_chief_seg6_dl_06002FC8[];
extern const Gfx chilly_chief_seg6_dl_06003010[];
extern const GeoLayout chilly_chief_geo[];
extern const GeoLayout chilly_chief_big_geo[];
-extern const struct Animation *const chilly_chief_seg6_anims_06003994[];
+extern const struct AnimationTable chilly_chief_seg6_anims_06003994;
// moneybag
extern const GeoLayout moneybag_geo_000000[];
@@ -33,6 +33,6 @@ extern const Gfx moneybag_seg6_dl_06005708[];
extern const Gfx moneybag_seg6_dl_06005750[];
extern const Gfx moneybag_seg6_dl_06005980[];
extern const Gfx moneybag_seg6_dl_060059F0[];
-extern const struct Animation *const moneybag_seg6_anims_06005E5C[];
+extern const struct AnimationTable moneybag_seg6_anims_06005E5C;
#endif
diff --git a/actors/group17.h b/actors/group17.h
index e28bc0244..20075c86c 100644
--- a/actors/group17.h
+++ b/actors/group17.h
@@ -31,7 +31,7 @@ extern const Gfx dorrie_seg6_dl_0600DDA0[];
extern const Gfx dorrie_seg6_dl_0600DE38[];
extern const Gfx dorrie_seg6_dl_0600DF60[];
extern const Gfx dorrie_seg6_dl_0600DFA8[];
-extern const struct Animation *const dorrie_seg6_anims_0600F638[];
+extern const struct AnimationTable dorrie_seg6_anims_0600F638;
extern const Collision dorrie_seg6_collision_0600F644[];
extern const Collision dorrie_seg6_collision_0600FBB8[];
@@ -68,7 +68,7 @@ extern const Gfx scuttlebug_seg6_dl_06014238[];
extern const Gfx scuttlebug_seg6_dl_06014270[];
extern const Gfx scuttlebug_seg6_dl_06014338[];
extern const Gfx scuttlebug_seg6_dl_06014378[];
-extern const struct Animation *const scuttlebug_seg6_anims_06015064[];
+extern const struct AnimationTable scuttlebug_seg6_anims_06015064;
// snufit
extern const GeoLayout snufit_geo[];
@@ -100,6 +100,6 @@ extern const Gfx swoop_seg6_dl_06006B98[];
extern const Gfx swoop_seg6_dl_06006BD0[];
extern const Gfx swoop_seg6_dl_06006CC8[];
extern const Gfx swoop_seg6_dl_06006D00[];
-extern const struct Animation *const swoop_seg6_anims_060070D0[];
+extern const struct AnimationTable swoop_seg6_anims_060070D0;
#endif
diff --git a/actors/group2.h b/actors/group2.h
index 45d1aad2f..0c683a0c1 100644
--- a/actors/group2.h
+++ b/actors/group2.h
@@ -8,7 +8,7 @@ extern const GeoLayout blargg_geo[];
extern const Gfx blargg_seg5_dl_050058D0[];
extern const Gfx blargg_seg5_dl_05005A60[];
extern const Gfx blargg_seg5_dl_05005D00[];
-extern const struct Animation *const blargg_seg5_anims_0500616C[];
+extern const struct AnimationTable blargg_seg5_anims_0500616C;
// bully
extern const GeoLayout bully_geo[];
@@ -27,6 +27,6 @@ extern const Gfx bully_seg5_dl_05003E70[];
extern const Gfx bully_seg5_dl_05003EA8[];
extern const Gfx bully_seg5_dl_05003F80[];
extern const Gfx bully_seg5_dl_05003FC8[];
-extern const struct Animation *const bully_seg5_anims_0500470C[];
+extern const struct AnimationTable bully_seg5_anims_0500470C;
#endif
diff --git a/actors/group3.h b/actors/group3.h
index e6154e111..f8e96a689 100644
--- a/actors/group3.h
+++ b/actors/group3.h
@@ -30,7 +30,7 @@ extern const Gfx king_bobomb_seg5_dl_0500B3C8[];
extern const Gfx king_bobomb_seg5_dl_0500B418[];
extern const Gfx king_bobomb_seg5_dl_0500B5F0[];
extern const Gfx king_bobomb_seg5_dl_0500B6C0[];
-extern const struct Animation *const king_bobomb_seg5_anims_0500FE30[];
+extern const struct AnimationTable king_bobomb_seg5_anims_0500FE30;
// water_bubble
extern const GeoLayout water_bomb_geo[];
diff --git a/actors/group4.h b/actors/group4.h
index 16b3aa494..fd92b7847 100644
--- a/actors/group4.h
+++ b/actors/group4.h
@@ -11,7 +11,7 @@ extern const Gfx clam_shell_seg5_dl_050012B8[];
extern const Gfx clam_shell_seg5_dl_05001478[];
extern const Gfx clam_shell_seg5_dl_050014F8[];
extern const Gfx clam_shell_seg5_dl_05001568[];
-extern const struct Animation *const clam_shell_seg5_anims_05001744[];
+extern const struct AnimationTable clam_shell_seg5_anims_05001744;
// manta
extern const Gfx manta_seg5_dl_05004960[];
@@ -55,7 +55,7 @@ extern const Gfx manta_seg5_dl_05006B08[];
extern const Gfx manta_seg5_dl_05006B70[];
extern const Gfx manta_seg5_dl_05006C08[];
extern const GeoLayout manta_seg5_geo_05008D14[];
-extern const struct Animation *const manta_seg5_anims_05008EB4[];
+extern const struct AnimationTable manta_seg5_anims_05008EB4;
// sushi
extern const GeoLayout sushi_geo[];
@@ -72,7 +72,7 @@ extern const Gfx sushi_seg5_dl_0500A860[];
extern const Gfx sushi_seg5_dl_0500A8A8[];
extern const Gfx sushi_seg5_dl_0500A958[];
extern const Gfx sushi_seg5_dl_0500A990[];
-extern const struct Animation *const sushi_seg5_anims_0500AE54[];
+extern const struct AnimationTable sushi_seg5_anims_0500AE54;
// unagi
extern const GeoLayout unagi_geo[];
@@ -99,7 +99,7 @@ extern const Gfx unagi_seg5_dl_0500E030[];
extern const Gfx unagi_seg5_dl_0500E088[];
extern const Gfx unagi_seg5_dl_0500E200[];
extern const Gfx unagi_seg5_dl_0500E258[];
-extern const struct Animation *const unagi_seg5_anims_05012824[];
+extern const struct AnimationTable unagi_seg5_anims_05012824;
// whirlpool
extern const Gfx whirlpool_seg5_dl_05013B58[];
diff --git a/actors/group5.h b/actors/group5.h
index 9135cdb1e..5d673eed2 100644
--- a/actors/group5.h
+++ b/actors/group5.h
@@ -29,7 +29,7 @@ extern const Gfx eyerok_seg5_dl_0500CAE8[];
extern const Gfx eyerok_seg5_dl_0500CB80[];
extern const Gfx eyerok_seg5_dl_0500CC18[];
extern const Gfx eyerok_seg5_dl_0500CC30[];
-extern const struct Animation *const eyerok_seg5_anims_050116E4[];
+extern const struct AnimationTable eyerok_seg5_anims_050116E4;
// klepto
extern const GeoLayout klepto_geo[];
@@ -65,7 +65,7 @@ extern const Gfx klepto_seg5_dl_05005020[];
extern const Gfx klepto_seg5_dl_05005068[];
extern const Gfx klepto_seg5_dl_05005130[];
extern const Gfx klepto_seg5_dl_05005178[];
-extern const struct Animation *const klepto_seg5_anims_05008CFC[];
+extern const struct AnimationTable klepto_seg5_anims_05008CFC;
// pokey
extern const GeoLayout pokey_head_geo[];
diff --git a/actors/group6.h b/actors/group6.h
index d8c6fc1c5..f0f240e70 100644
--- a/actors/group6.h
+++ b/actors/group6.h
@@ -36,7 +36,7 @@ extern const Gfx monty_mole_seg5_dl_05004BE0[];
extern const Gfx monty_mole_seg5_dl_05004C00[];
extern const Gfx monty_mole_seg5_dl_05004CE8[];
extern const Gfx monty_mole_seg5_dl_05004D30[];
-extern const struct Animation *const monty_mole_seg5_anims_05007248[];
+extern const struct AnimationTable monty_mole_seg5_anims_05007248;
// monty_mole_hole
extern const Gfx monty_mole_hole_seg5_dl_05000840[];
@@ -82,6 +82,6 @@ extern const Gfx ukiki_seg5_dl_0500CF68[];
extern const Gfx ukiki_seg5_dl_0500CFF0[];
extern const Gfx ukiki_seg5_dl_0500D078[];
extern const Gfx ukiki_seg5_dl_0500D108[];
-extern const struct Animation *const ukiki_seg5_anims_05015784[];
+extern const struct AnimationTable ukiki_seg5_anims_05015784;
#endif
diff --git a/actors/group7.h b/actors/group7.h
index f5d9332fe..699379939 100644
--- a/actors/group7.h
+++ b/actors/group7.h
@@ -21,7 +21,7 @@ extern const Gfx penguin_seg5_dl_05007238[];
extern const Gfx penguin_seg5_dl_050072C8[];
extern const Gfx penguin_seg5_dl_05007358[];
extern const Gfx penguin_seg5_dl_05007540[];
-extern const struct Animation *const penguin_seg5_anims_05008B74[];
+extern const struct AnimationTable penguin_seg5_anims_05008B74;
extern const Collision penguin_seg5_collision_05008B88[];
// snowman
@@ -41,7 +41,7 @@ extern const Gfx snowman_seg5_dl_0500CBC0[];
extern const Gfx snowman_seg5_dl_0500CBF8[];
extern const Gfx snowman_seg5_dl_0500CCB0[];
extern const Gfx snowman_seg5_dl_0500CCE8[];
-extern const struct Animation *const snowman_seg5_anims_0500D118[];
+extern const struct AnimationTable snowman_seg5_anims_0500D118;
// spindrift
extern const GeoLayout spindrift_geo[];
@@ -59,6 +59,6 @@ extern const Gfx spindrift_seg5_dl_05002AD8[];
extern const Gfx spindrift_seg5_dl_05002B30[];
extern const Gfx spindrift_seg5_dl_05002C98[];
extern const Gfx spindrift_seg5_dl_05002D08[];
-extern const struct Animation *const spindrift_seg5_anims_05002D68[];
+extern const struct AnimationTable spindrift_seg5_anims_05002D68;
#endif
diff --git a/actors/group9.h b/actors/group9.h
index 3aa3eff72..05d28c276 100644
--- a/actors/group9.h
+++ b/actors/group9.h
@@ -34,7 +34,7 @@ extern const Gfx bookend_seg5_dl_050020E8[];
extern const Gfx bookend_seg5_dl_05002140[];
extern const Gfx bookend_seg5_dl_05002288[];
extern const Gfx bookend_seg5_dl_050022E0[];
-extern const struct Animation *const bookend_seg5_anims_05002540[];
+extern const struct AnimationTable bookend_seg5_anims_05002540;
// chair
extern const GeoLayout haunted_chair_geo[];
@@ -46,7 +46,7 @@ extern const Gfx chair_seg5_dl_05005378[];
extern const Gfx chair_seg5_dl_05005408[];
extern const Gfx chair_seg5_dl_050055F0[];
extern const Gfx chair_seg5_dl_05005680[];
-extern const struct Animation *const chair_seg5_anims_05005784[];
+extern const struct AnimationTable chair_seg5_anims_05005784;
// haunted_cage
extern const GeoLayout haunted_cage_geo[];
@@ -71,7 +71,7 @@ extern const Gfx mad_piano_seg5_dl_050097F8[];
extern const Gfx mad_piano_seg5_dl_05009840[];
extern const Gfx mad_piano_seg5_dl_05009888[];
extern const Gfx mad_piano_seg5_dl_050098E8[];
-extern const struct Animation *const mad_piano_seg5_anims_05009B14[];
+extern const struct AnimationTable mad_piano_seg5_anims_05009B14;
// small_key
extern const GeoLayout small_key_geo[];
diff --git a/actors/heave_ho/anims/table.inc.c b/actors/heave_ho/anims/table.inc.c
index 71b0e4372..d011d673f 100644
--- a/actors/heave_ho/anims/table.inc.c
+++ b/actors/heave_ho/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x0501534C
-const struct Animation *const heave_ho_seg5_anims_0501534C[] = {
- &heave_ho_seg5_anim_05015118,
- &heave_ho_seg5_anim_05015334,
- &heave_ho_seg5_anim_05014F28,
+const struct AnimationTable heave_ho_seg5_anims_0501534C = {
+ .anims = {
+ &heave_ho_seg5_anim_05015118,
+ &heave_ho_seg5_anim_05015334,
+ &heave_ho_seg5_anim_05014F28,
+ },
+ .count = 3
};
diff --git a/actors/hoot/anims/table.inc.c b/actors/hoot/anims/table.inc.c
index 4ccc3defe..1afb9a3ad 100644
--- a/actors/hoot/anims/table.inc.c
+++ b/actors/hoot/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x05005768
-const struct Animation *const hoot_seg5_anims_05005768[] = {
- &hoot_seg5_anim_050053EC,
- &hoot_seg5_anim_05005750,
+const struct AnimationTable hoot_seg5_anims_05005768 = {
+ .anims = {
+ &hoot_seg5_anim_050053EC,
+ &hoot_seg5_anim_05005750,
+ },
+ .count = 2
};
diff --git a/actors/king_bobomb/anims/table.inc.c b/actors/king_bobomb/anims/table.inc.c
index ef6d00efa..f3ff6fcaf 100644
--- a/actors/king_bobomb/anims/table.inc.c
+++ b/actors/king_bobomb/anims/table.inc.c
@@ -1,15 +1,18 @@
// 0x0500FE30
-const struct Animation *const king_bobomb_seg5_anims_0500FE30[] = {
- &king_bobomb_seg5_anim_0500BDFC,
- &king_bobomb_seg5_anim_0500C2AC,
- &king_bobomb_seg5_anim_0500C520,
- &king_bobomb_seg5_anim_0500C774,
- &king_bobomb_seg5_anim_0500CFCC,
- &king_bobomb_seg5_anim_0500D5B0,
- &king_bobomb_seg5_anim_0500D978,
- &king_bobomb_seg5_anim_0500DDD8,
- &king_bobomb_seg5_anim_0500E10C,
- &king_bobomb_seg5_anim_0500F078,
- &king_bobomb_seg5_anim_0500F6C8,
- &king_bobomb_seg5_anim_0500FE18,
+const struct AnimationTable king_bobomb_seg5_anims_0500FE30 = {
+ .anims = {
+ &king_bobomb_seg5_anim_0500BDFC,
+ &king_bobomb_seg5_anim_0500C2AC,
+ &king_bobomb_seg5_anim_0500C520,
+ &king_bobomb_seg5_anim_0500C774,
+ &king_bobomb_seg5_anim_0500CFCC,
+ &king_bobomb_seg5_anim_0500D5B0,
+ &king_bobomb_seg5_anim_0500D978,
+ &king_bobomb_seg5_anim_0500DDD8,
+ &king_bobomb_seg5_anim_0500E10C,
+ &king_bobomb_seg5_anim_0500F078,
+ &king_bobomb_seg5_anim_0500F6C8,
+ &king_bobomb_seg5_anim_0500FE18,
+ },
+ .count = 12
};
diff --git a/actors/klepto/anims/table.inc.c b/actors/klepto/anims/table.inc.c
index 7e72f4db2..accf65fcd 100644
--- a/actors/klepto/anims/table.inc.c
+++ b/actors/klepto/anims/table.inc.c
@@ -1,12 +1,15 @@
// 0x05008CFC
-const struct Animation *const klepto_seg5_anims_05008CFC[] = {
- &klepto_seg5_anim_05005E44,
- &klepto_seg5_anim_05007574,
- &klepto_seg5_anim_050079B0,
- &klepto_seg5_anim_05007E34,
- &klepto_seg5_anim_050086C0,
- &klepto_seg5_anim_05008A18,
- &klepto_seg5_anim_05008CE4,
- NULL,
- NULL,
+const struct AnimationTable klepto_seg5_anims_05008CFC = {
+ .anims = {
+ &klepto_seg5_anim_05005E44,
+ &klepto_seg5_anim_05007574,
+ &klepto_seg5_anim_050079B0,
+ &klepto_seg5_anim_05007E34,
+ &klepto_seg5_anim_050086C0,
+ &klepto_seg5_anim_05008A18,
+ &klepto_seg5_anim_05008CE4,
+ NULL,
+ NULL,
+ },
+ .count = 7
};
diff --git a/actors/koopa/anims/table.inc.c b/actors/koopa/anims/table.inc.c
index 274c3ff7b..f8ad08ef9 100644
--- a/actors/koopa/anims/table.inc.c
+++ b/actors/koopa/anims/table.inc.c
@@ -1,20 +1,23 @@
// 0x06011364
-const struct Animation *const koopa_seg6_anims_06011364[] = {
- &koopa_seg6_anim_0600CC24,
- &koopa_seg6_anim_0600CFB8,
- &koopa_seg6_anim_0600D518,
- &koopa_seg6_anim_0600D804,
- &koopa_seg6_anim_0600DD90,
- &koopa_seg6_anim_0600E32C,
- &koopa_seg6_anim_0600E928,
- &koopa_seg6_anim_0600F3EC,
- &koopa_seg6_anim_0600FB1C,
- &koopa_seg6_anim_06010258,
- &koopa_seg6_anim_06010634,
- &koopa_seg6_anim_06010E48,
- &koopa_seg6_anim_0601134C, // Hmm.. these last 2 are swapped.
- &koopa_seg6_anim_060110D8,
- NULL,
- NULL,
- NULL,
+const struct AnimationTable koopa_seg6_anims_06011364 = {
+ .anims = {
+ &koopa_seg6_anim_0600CC24,
+ &koopa_seg6_anim_0600CFB8,
+ &koopa_seg6_anim_0600D518,
+ &koopa_seg6_anim_0600D804,
+ &koopa_seg6_anim_0600DD90,
+ &koopa_seg6_anim_0600E32C,
+ &koopa_seg6_anim_0600E928,
+ &koopa_seg6_anim_0600F3EC,
+ &koopa_seg6_anim_0600FB1C,
+ &koopa_seg6_anim_06010258,
+ &koopa_seg6_anim_06010634,
+ &koopa_seg6_anim_06010E48,
+ &koopa_seg6_anim_0601134C, // Hmm.. these last 2 are swapped.
+ &koopa_seg6_anim_060110D8,
+ NULL,
+ NULL,
+ NULL,
+ },
+ .count = 14
};
diff --git a/actors/koopa_flag/anims/table.inc.c b/actors/koopa_flag/anims/table.inc.c
index 16ddb72ee..e44d45255 100644
--- a/actors/koopa_flag/anims/table.inc.c
+++ b/actors/koopa_flag/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x06001028
-const struct Animation *const koopa_flag_seg6_anims_06001028[] = {
- &koopa_flag_seg6_anim_06001010,
- NULL,
+const struct AnimationTable koopa_flag_seg6_anims_06001028 = {
+ .anims = {
+ &koopa_flag_seg6_anim_06001010,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/lakitu_cameraman/anims/table.inc.c b/actors/lakitu_cameraman/anims/table.inc.c
index 71bea9027..cefd4e49a 100644
--- a/actors/lakitu_cameraman/anims/table.inc.c
+++ b/actors/lakitu_cameraman/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x060058F8
-const struct Animation *const lakitu_seg6_anims_060058F8[] = {
- &lakitu_seg6_anim_060058E0,
- NULL,
+const struct AnimationTable lakitu_seg6_anims_060058F8 = {
+ .anims = {
+ &lakitu_seg6_anim_060058E0,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/lakitu_enemy/anims/table.inc.c b/actors/lakitu_enemy/anims/table.inc.c
index 0fc2b12af..594c42d93 100644
--- a/actors/lakitu_enemy/anims/table.inc.c
+++ b/actors/lakitu_enemy/anims/table.inc.c
@@ -1,10 +1,13 @@
// 0x050144D4
-const struct Animation *const lakitu_enemy_seg5_anims_050144D4[] = {
- &lakitu_enemy_seg5_anim_05013EDC,
- &lakitu_enemy_seg5_anim_050140E8,
- &lakitu_enemy_seg5_anim_050142E0,
- &lakitu_enemy_seg5_anim_050144BC,
- NULL,
- NULL,
- NULL,
+const struct AnimationTable lakitu_enemy_seg5_anims_050144D4 = {
+ .anims = {
+ &lakitu_enemy_seg5_anim_05013EDC,
+ &lakitu_enemy_seg5_anim_050140E8,
+ &lakitu_enemy_seg5_anim_050142E0,
+ &lakitu_enemy_seg5_anim_050144BC,
+ NULL,
+ NULL,
+ NULL,
+ },
+ .count = 4
};
diff --git a/actors/mad_piano/anims/table.inc.c b/actors/mad_piano/anims/table.inc.c
index 790bf2928..2fe666eb5 100644
--- a/actors/mad_piano/anims/table.inc.c
+++ b/actors/mad_piano/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x05009B14
-const struct Animation *const mad_piano_seg5_anims_05009B14[] = {
- &mad_piano_seg5_anim_05009A04,
- &mad_piano_seg5_anim_05009AFC,
- NULL,
+const struct AnimationTable mad_piano_seg5_anims_05009B14 = {
+ .anims = {
+ &mad_piano_seg5_anim_05009A04,
+ &mad_piano_seg5_anim_05009AFC,
+ NULL,
+ },
+ .count = 2
};
diff --git a/actors/manta/anims/table.inc.c b/actors/manta/anims/table.inc.c
index 9ebdcabaf..f40db219d 100644
--- a/actors/manta/anims/table.inc.c
+++ b/actors/manta/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x05008EB4
-const struct Animation *const manta_seg5_anims_05008EB4[] = {
- &manta_seg5_anim_05008CFC,
- NULL,
- NULL,
+const struct AnimationTable manta_seg5_anims_05008EB4 = {
+ .anims = {
+ &manta_seg5_anim_05008CFC,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/mips/anims/table.inc.c b/actors/mips/anims/table.inc.c
index 55f18d853..519ab3407 100644
--- a/actors/mips/anims/table.inc.c
+++ b/actors/mips/anims/table.inc.c
@@ -1,10 +1,13 @@
// 0x06015634
-const struct Animation *const mips_seg6_anims_06015634[] = {
- &mips_seg6_anim_06014B94,
- &mips_seg6_anim_060139F8,
- &mips_seg6_anim_06013248,
- &mips_seg6_anim_0601561C,
- &mips_seg6_anim_0601369C,
- NULL,
- NULL,
+const struct AnimationTable mips_seg6_anims_06015634 = {
+ .anims = {
+ &mips_seg6_anim_06014B94,
+ &mips_seg6_anim_060139F8,
+ &mips_seg6_anim_06013248,
+ &mips_seg6_anim_0601561C,
+ &mips_seg6_anim_0601369C,
+ NULL,
+ NULL,
+ },
+ .count = 5
};
diff --git a/actors/moneybag/anims/table.inc.c b/actors/moneybag/anims/table.inc.c
index b7b411cf3..12896461d 100644
--- a/actors/moneybag/anims/table.inc.c
+++ b/actors/moneybag/anims/table.inc.c
@@ -1,8 +1,11 @@
// 0x06005E5C
-const struct Animation *const moneybag_seg6_anims_06005E5C[] = {
- &moneybag_seg6_anim_06005AD8,
- &moneybag_seg6_anim_06005BEC,
- &moneybag_seg6_anim_06005C98,
- &moneybag_seg6_anim_06005D3C,
- &moneybag_seg6_anim_06005E44,
+const struct AnimationTable moneybag_seg6_anims_06005E5C = {
+ .anims = {
+ &moneybag_seg6_anim_06005AD8,
+ &moneybag_seg6_anim_06005BEC,
+ &moneybag_seg6_anim_06005C98,
+ &moneybag_seg6_anim_06005D3C,
+ &moneybag_seg6_anim_06005E44,
+ },
+ .count = 5
};
diff --git a/actors/monty_mole/anims/table.inc.c b/actors/monty_mole/anims/table.inc.c
index 4289fa35a..5dd53e962 100644
--- a/actors/monty_mole/anims/table.inc.c
+++ b/actors/monty_mole/anims/table.inc.c
@@ -1,15 +1,18 @@
// 0x05007248
-const struct Animation *const monty_mole_seg5_anims_05007248[] = {
- &monty_mole_seg5_anim_05004FEC,
- &monty_mole_seg5_anim_0500527C,
- &monty_mole_seg5_anim_050054B0,
- &monty_mole_seg5_anim_050062B0,
- &monty_mole_seg5_anim_050065C0,
- &monty_mole_seg5_anim_05006880,
- &monty_mole_seg5_anim_05006B10,
- &monty_mole_seg5_anim_05006DB8,
- &monty_mole_seg5_anim_05007230,
- &monty_mole_seg5_anim_050065D8,
- NULL,
- NULL,
+const struct AnimationTable monty_mole_seg5_anims_05007248 = {
+ .anims = {
+ &monty_mole_seg5_anim_05004FEC,
+ &monty_mole_seg5_anim_0500527C,
+ &monty_mole_seg5_anim_050054B0,
+ &monty_mole_seg5_anim_050062B0,
+ &monty_mole_seg5_anim_050065C0,
+ &monty_mole_seg5_anim_05006880,
+ &monty_mole_seg5_anim_05006B10,
+ &monty_mole_seg5_anim_05006DB8,
+ &monty_mole_seg5_anim_05007230,
+ &monty_mole_seg5_anim_050065D8,
+ NULL,
+ NULL,
+ },
+ .count = 10
};
diff --git a/actors/peach/anims/table.inc.c b/actors/peach/anims/table.inc.c
index 4ff047d14..3aa57b9dd 100644
--- a/actors/peach/anims/table.inc.c
+++ b/actors/peach/anims/table.inc.c
@@ -1,16 +1,19 @@
// 0x0501C41C
-const struct Animation *const peach_seg5_anims_0501C41C[] = {
- &peach_seg5_anim_0500C638,
- &peach_seg5_anim_0500E6B4,
- &peach_seg5_anim_0500ED94,
- &peach_seg5_anim_0500F474,
- &peach_seg5_anim_0500FE84,
- &peach_seg5_anim_05011050,
- &peach_seg5_anim_05012F40,
- &peach_seg5_anim_05015468,
- &peach_seg5_anim_05016798,
- &peach_seg5_anim_05018664,
- &peach_seg5_anim_0501B328,
- &peach_seg5_anim_0501C404,
- NULL,
+const struct AnimationTable peach_seg5_anims_0501C41C = {
+ .anims = {
+ &peach_seg5_anim_0500C638,
+ &peach_seg5_anim_0500E6B4,
+ &peach_seg5_anim_0500ED94,
+ &peach_seg5_anim_0500F474,
+ &peach_seg5_anim_0500FE84,
+ &peach_seg5_anim_05011050,
+ &peach_seg5_anim_05012F40,
+ &peach_seg5_anim_05015468,
+ &peach_seg5_anim_05016798,
+ &peach_seg5_anim_05018664,
+ &peach_seg5_anim_0501B328,
+ &peach_seg5_anim_0501C404,
+ NULL,
+ },
+ .count = 12
};
diff --git a/actors/penguin/anims/table.inc.c b/actors/penguin/anims/table.inc.c
index 1f88c82ea..74e57293b 100644
--- a/actors/penguin/anims/table.inc.c
+++ b/actors/penguin/anims/table.inc.c
@@ -1,8 +1,11 @@
// 0x05008B74
-const struct Animation *const penguin_seg5_anims_05008B74[] = {
- &penguin_seg5_anim_05008B5C,
- &penguin_seg5_anim_050079E4,
- &penguin_seg5_anim_05007DCC,
- &penguin_seg5_anim_050087C0,
- &penguin_seg5_anim_05008B5C, // duplicate pointer?
+const struct AnimationTable penguin_seg5_anims_05008B74 = {
+ .anims = {
+ &penguin_seg5_anim_05008B5C,
+ &penguin_seg5_anim_050079E4,
+ &penguin_seg5_anim_05007DCC,
+ &penguin_seg5_anim_050087C0,
+ &penguin_seg5_anim_05008B5C, // duplicate pointer?
+ },
+ .count = 5
};
diff --git a/actors/piranha_plant/anims/table.inc.c b/actors/piranha_plant/anims/table.inc.c
index 96ac962c8..4521050c1 100644
--- a/actors/piranha_plant/anims/table.inc.c
+++ b/actors/piranha_plant/anims/table.inc.c
@@ -1,16 +1,19 @@
// 0x0601C31C
-const struct Animation *const piranha_plant_seg6_anims_0601C31C[] = {
- &piranha_plant_seg6_anim_06017C38,
- &piranha_plant_seg6_anim_06017D88,
- &piranha_plant_seg6_anim_060187B0,
- &piranha_plant_seg6_anim_06018BA8,
- &piranha_plant_seg6_anim_06019854,
- &piranha_plant_seg6_anim_0601A014,
- &piranha_plant_seg6_anim_0601AF34,
- &piranha_plant_seg6_anim_0601AAE4,
- &piranha_plant_seg6_anim_0601B634,
- &piranha_plant_seg6_anim_0601C304,
- NULL,
+const struct AnimationTable piranha_plant_seg6_anims_0601C31C = {
+ .anims = {
+ &piranha_plant_seg6_anim_06017C38,
+ &piranha_plant_seg6_anim_06017D88,
+ &piranha_plant_seg6_anim_060187B0,
+ &piranha_plant_seg6_anim_06018BA8,
+ &piranha_plant_seg6_anim_06019854,
+ &piranha_plant_seg6_anim_0601A014,
+ &piranha_plant_seg6_anim_0601AF34,
+ &piranha_plant_seg6_anim_0601AAE4,
+ &piranha_plant_seg6_anim_0601B634,
+ &piranha_plant_seg6_anim_0601C304,
+ NULL,
+ },
+ .count = 10
};
// huh? this isnt following the Bin ID format?
diff --git a/actors/scuttlebug/anims/table.inc.c b/actors/scuttlebug/anims/table.inc.c
index 2891af246..ae9cf3ce4 100644
--- a/actors/scuttlebug/anims/table.inc.c
+++ b/actors/scuttlebug/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x06015064
-const struct Animation *const scuttlebug_seg6_anims_06015064[] = {
- &scuttlebug_seg6_anim_0601504C,
+const struct AnimationTable scuttlebug_seg6_anims_06015064 = {
+ .anims = {
+ &scuttlebug_seg6_anim_0601504C,
+ },
+ .count = 1
};
diff --git a/actors/seaweed/anims/table.inc.c b/actors/seaweed/anims/table.inc.c
index 3b04ef870..a5e2169de 100644
--- a/actors/seaweed/anims/table.inc.c
+++ b/actors/seaweed/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x0600A4D4
-const struct Animation *const seaweed_seg6_anims_0600A4D4[] = {
- &seaweed_seg6_anim_0600A4BC,
+const struct AnimationTable seaweed_seg6_anims_0600A4D4 = {
+ .anims = {
+ &seaweed_seg6_anim_0600A4BC,
+ },
+ .count = 1
};
diff --git a/actors/skeeter/anims/table.inc.c b/actors/skeeter/anims/table.inc.c
index a5fa6b58c..78143de4d 100644
--- a/actors/skeeter/anims/table.inc.c
+++ b/actors/skeeter/anims/table.inc.c
@@ -1,7 +1,10 @@
// 0x06007DE0
-const struct Animation *const skeeter_seg6_anims_06007DE0[] = {
- &skeeter_seg6_anim_06005D44,
- &skeeter_seg6_anim_06006B70,
- &skeeter_seg6_anim_060071E0,
- &skeeter_seg6_anim_06007DC8,
+const struct AnimationTable skeeter_seg6_anims_06007DE0 = {
+ .anims = {
+ &skeeter_seg6_anim_06005D44,
+ &skeeter_seg6_anim_06006B70,
+ &skeeter_seg6_anim_060071E0,
+ &skeeter_seg6_anim_06007DC8,
+ },
+ .count = 4
};
diff --git a/actors/snowman/anims/table.inc.c b/actors/snowman/anims/table.inc.c
index aa460bf26..aa51381ac 100644
--- a/actors/snowman/anims/table.inc.c
+++ b/actors/snowman/anims/table.inc.c
@@ -1,7 +1,10 @@
// 0x0500D118
-const struct Animation *const snowman_seg5_anims_0500D118[] = {
- &snowman_seg5_anim_0500CED8,
- &snowman_seg5_anim_0500D100,
- NULL,
- NULL,
+const struct AnimationTable snowman_seg5_anims_0500D118 = {
+ .anims = {
+ &snowman_seg5_anim_0500CED8,
+ &snowman_seg5_anim_0500D100,
+ NULL,
+ NULL,
+ },
+ .count = 2
};
diff --git a/actors/spindrift/anims/table.inc.c b/actors/spindrift/anims/table.inc.c
index 91c63ac78..2122a1f9f 100644
--- a/actors/spindrift/anims/table.inc.c
+++ b/actors/spindrift/anims/table.inc.c
@@ -1,7 +1,10 @@
// 0x05002D68
-const struct Animation *const spindrift_seg5_anims_05002D68[] = {
- &spindrift_seg5_anim_050006AC,
- NULL,
- NULL,
- NULL,
+const struct AnimationTable spindrift_seg5_anims_05002D68 = {
+ .anims = {
+ &spindrift_seg5_anim_050006AC,
+ NULL,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/spiny/anims/table.inc.c b/actors/spiny/anims/table.inc.c
index 3b8d95484..98dc9dd4b 100644
--- a/actors/spiny/anims/table.inc.c
+++ b/actors/spiny/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x05016EAC
-const struct Animation *const spiny_seg5_anims_05016EAC[] = {
- &spiny_seg5_anim_05016E94,
- NULL,
- NULL,
+const struct AnimationTable spiny_seg5_anims_05016EAC = {
+ .anims = {
+ &spiny_seg5_anim_05016E94,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/spiny_egg/anims/table.inc.c b/actors/spiny_egg/anims/table.inc.c
index a1c37e5bc..a0b64fc74 100644
--- a/actors/spiny_egg/anims/table.inc.c
+++ b/actors/spiny_egg/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x050157E4
-const struct Animation *const spiny_egg_seg5_anims_050157E4[] = {
- &spiny_egg_seg5_anim_050157CC,
- NULL,
- NULL,
+const struct AnimationTable spiny_egg_seg5_anims_050157E4 = {
+ .anims = {
+ &spiny_egg_seg5_anim_050157CC,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/sushi/anims/table.inc.c b/actors/sushi/anims/table.inc.c
index 9e535e8b4..25e808810 100644
--- a/actors/sushi/anims/table.inc.c
+++ b/actors/sushi/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x0500AE54
-const struct Animation *const sushi_seg5_anims_0500AE54[] = {
- &sushi_seg5_anim_0500AE3C,
+const struct AnimationTable sushi_seg5_anims_0500AE54 = {
+ .anims = {
+ &sushi_seg5_anim_0500AE3C,
+ },
+ .count = 1
};
diff --git a/actors/swoop/anims/table.inc.c b/actors/swoop/anims/table.inc.c
index cec845745..78913c676 100644
--- a/actors/swoop/anims/table.inc.c
+++ b/actors/swoop/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x060070D0
-const struct Animation *const swoop_seg6_anims_060070D0[] = {
- &swoop_seg6_anim_06006E88,
- &swoop_seg6_anim_060070B8,
+const struct AnimationTable swoop_seg6_anims_060070D0 = {
+ .anims = {
+ &swoop_seg6_anim_06006E88,
+ &swoop_seg6_anim_060070B8,
+ },
+ .count = 2
};
diff --git a/actors/toad/anims/table.inc.c b/actors/toad/anims/table.inc.c
index b566ea1ec..6449b2ae9 100644
--- a/actors/toad/anims/table.inc.c
+++ b/actors/toad/anims/table.inc.c
@@ -1,11 +1,14 @@
// 0x0600FB58
-const struct Animation *const toad_seg6_anims_0600FB58[] = {
- &toad_seg6_anim_0600B66C,
- &toad_seg6_anim_0600CE78,
- &toad_seg6_anim_0600E414,
- &toad_seg6_anim_0600FB40,
- &toad_seg6_anim_060099F0,
- &toad_seg6_anim_0600A0D0,
- &toad_seg6_anim_06008F7C,
- &toad_seg6_anim_06009310,
+const struct AnimationTable toad_seg6_anims_0600FB58 = {
+ .anims = {
+ &toad_seg6_anim_0600B66C,
+ &toad_seg6_anim_0600CE78,
+ &toad_seg6_anim_0600E414,
+ &toad_seg6_anim_0600FB40,
+ &toad_seg6_anim_060099F0,
+ &toad_seg6_anim_0600A0D0,
+ &toad_seg6_anim_06008F7C,
+ &toad_seg6_anim_06009310,
+ },
+ .count = 8
};
diff --git a/actors/ukiki/anims/table.inc.c b/actors/ukiki/anims/table.inc.c
index 532c30afa..a05e81b67 100644
--- a/actors/ukiki/anims/table.inc.c
+++ b/actors/ukiki/anims/table.inc.c
@@ -1,18 +1,21 @@
// 0x05015784
-const struct Animation *const ukiki_seg5_anims_05015784[] = {
- &ukiki_seg5_anim_0500D658,
- &ukiki_seg5_anim_0500DC80,
- &ukiki_seg5_anim_0500DDEC,
- &ukiki_seg5_anim_0500EACC,
- &ukiki_seg5_anim_0500EEA8,
- &ukiki_seg5_anim_0500F530,
- &ukiki_seg5_anim_0500FC84,
- &ukiki_seg5_anim_0501006C,
- &ukiki_seg5_anim_050103F4,
- &ukiki_seg5_anim_05012ABC,
- &ukiki_seg5_anim_05014BE4,
- &ukiki_seg5_anim_050153C4,
- &ukiki_seg5_anim_0501576C,
- NULL,
- NULL,
+const struct AnimationTable ukiki_seg5_anims_05015784 = {
+ .anims = {
+ &ukiki_seg5_anim_0500D658,
+ &ukiki_seg5_anim_0500DC80,
+ &ukiki_seg5_anim_0500DDEC,
+ &ukiki_seg5_anim_0500EACC,
+ &ukiki_seg5_anim_0500EEA8,
+ &ukiki_seg5_anim_0500F530,
+ &ukiki_seg5_anim_0500FC84,
+ &ukiki_seg5_anim_0501006C,
+ &ukiki_seg5_anim_050103F4,
+ &ukiki_seg5_anim_05012ABC,
+ &ukiki_seg5_anim_05014BE4,
+ &ukiki_seg5_anim_050153C4,
+ &ukiki_seg5_anim_0501576C,
+ NULL,
+ NULL,
+ },
+ .count = 13
};
diff --git a/actors/unagi/anims/table.inc.c b/actors/unagi/anims/table.inc.c
index f672621b5..520515cc9 100644
--- a/actors/unagi/anims/table.inc.c
+++ b/actors/unagi/anims/table.inc.c
@@ -1,10 +1,13 @@
// 0x05012824
-const struct Animation *const unagi_seg5_anims_05012824[] = {
- &unagi_seg5_anim_0500FBF4,
- &unagi_seg5_anim_05010488,
- &unagi_seg5_anim_05010B54,
- &unagi_seg5_anim_05011488,
- &unagi_seg5_anim_05011890,
- &unagi_seg5_anim_05011D40,
- &unagi_seg5_anim_0501280C,
+const struct AnimationTable unagi_seg5_anims_05012824 = {
+ .anims = {
+ &unagi_seg5_anim_0500FBF4,
+ &unagi_seg5_anim_05010488,
+ &unagi_seg5_anim_05010B54,
+ &unagi_seg5_anim_05011488,
+ &unagi_seg5_anim_05011890,
+ &unagi_seg5_anim_05011D40,
+ &unagi_seg5_anim_0501280C,
+ },
+ .count = 7
};
diff --git a/actors/water_ring/anims/table.inc.c b/actors/water_ring/anims/table.inc.c
index c8181fd70..81e9d8d70 100644
--- a/actors/water_ring/anims/table.inc.c
+++ b/actors/water_ring/anims/table.inc.c
@@ -1,6 +1,9 @@
// 0x06013F7C
-const struct Animation *const water_ring_seg6_anims_06013F7C[] = {
- &water_ring_seg6_anim_06013F64,
- NULL,
- NULL,
+const struct AnimationTable water_ring_seg6_anims_06013F7C = {
+ .anims = {
+ &water_ring_seg6_anim_06013F64,
+ NULL,
+ NULL,
+ },
+ .count = 1
};
diff --git a/actors/whomp/anims/table.inc.c b/actors/whomp/anims/table.inc.c
index 60a80d101..b2f0597f1 100644
--- a/actors/whomp/anims/table.inc.c
+++ b/actors/whomp/anims/table.inc.c
@@ -1,5 +1,8 @@
// 0x06020A04
-const struct Animation *const whomp_seg6_anims_06020A04[] = {
- &whomp_seg6_anim_060209EC,
- &whomp_seg6_anim_060202DC,
+const struct AnimationTable whomp_seg6_anims_06020A04 = {
+ .anims = {
+ &whomp_seg6_anim_060209EC,
+ &whomp_seg6_anim_060202DC,
+ },
+ .count = 2
};
diff --git a/actors/wiggler_body/anims/table.inc.c b/actors/wiggler_body/anims/table.inc.c
index 2ecc852cc..2aa06c28e 100644
--- a/actors/wiggler_body/anims/table.inc.c
+++ b/actors/wiggler_body/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x0500C874
-const struct Animation *const wiggler_seg5_anims_0500C874[] = {
- &wiggler_seg5_anim_0500C760,
+const struct AnimationTable wiggler_seg5_anims_0500C874 = {
+ .anims = {
+ &wiggler_seg5_anim_0500C760,
+ },
+ .count = 1
};
diff --git a/actors/wiggler_head/anims/table.inc.c b/actors/wiggler_head/anims/table.inc.c
index d64626356..7aace1378 100644
--- a/actors/wiggler_head/anims/table.inc.c
+++ b/actors/wiggler_head/anims/table.inc.c
@@ -1,4 +1,7 @@
// 0x0500EC8C
-const struct Animation *const wiggler_seg5_anims_0500EC8C[] = {
- &wiggler_seg5_anim_0500EC74,
+const struct AnimationTable wiggler_seg5_anims_0500EC8C = {
+ .anims = {
+ &wiggler_seg5_anim_0500EC74,
+ },
+ .count = 1
};
diff --git a/actors/yoshi/anims/table.inc.c b/actors/yoshi/anims/table.inc.c
index 290de1b0f..8de3890a9 100644
--- a/actors/yoshi/anims/table.inc.c
+++ b/actors/yoshi/anims/table.inc.c
@@ -1,7 +1,10 @@
// 0x05024100
-const struct Animation *const yoshi_seg5_anims_05024100[] = {
- &yoshi_seg5_anim_050233A4,
- &yoshi_seg5_anim_05023E4C,
- &yoshi_seg5_anim_050240E8,
- NULL,
+const struct AnimationTable yoshi_seg5_anims_05024100 = {
+ .anims = {
+ &yoshi_seg5_anim_050233A4,
+ &yoshi_seg5_anim_05023E4C,
+ &yoshi_seg5_anim_050240E8,
+ NULL,
+ },
+ .count = 3
};
diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py
index 725e89243..dcbbd45cd 100644
--- a/autogen/convert_functions.py
+++ b/autogen/convert_functions.py
@@ -786,6 +786,32 @@ def process_files():
processed_files.append(process_file(f))
return processed_files
+
+############################################################################
+
+def output_nuke_function(fname, function):
+ first = True
+ comment = ''
+ fid = function['identifier']
+ print(fid + '(', end='')
+ for param in function['params']:
+ if first:
+ first = False
+ else:
+ print(', ', end='')
+ comment += ', '
+ pid = param['identifier']
+ ptype = param['type']
+ ptype, plink = translate_type_to_lua(ptype)
+
+ if ptype == '`integer`' or ptype == '`number`' or 'enum' in ptype:
+ print('0', end='')
+ else:
+ print('nil', end='')
+ comment += ptype
+
+ print(') -- ' + comment)
+
############################################################################
def doc_should_document(fname, identifier):
@@ -847,6 +873,9 @@ def doc_function(fname, function):
if not function['implemented']:
return ''
+ # debug print out lua nuke functions
+ # output_nuke_function(fname, function)
+
if not doc_should_document(fname, function['identifier']):
return ''
diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py
index fe636d33c..54a32f2aa 100644
--- a/autogen/convert_structs.py
+++ b/autogen/convert_structs.py
@@ -102,6 +102,8 @@ override_field_immutable = {
"GraphNode": [ "next", "prev", "parent" ],
"ObjectWarpNode": [ "next "],
"SpawnInfo": [ "next" ],
+ "Animation": [ "length" ],
+ "AnimationTable": [ "count" ],
}
override_field_version_excludes = {
diff --git a/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua
index b61242282..289ca23af 100644
--- a/autogen/lua_definitions/structs.lua
+++ b/autogen/lua_definitions/structs.lua
@@ -24,6 +24,9 @@
--- @field public unusedBoneCount integer
--- @field public values Pointer_integer
+--- @class AnimationTable
+--- @field public count integer
+
--- @class Area
--- @field public camera Camera
--- @field public flags integer
diff --git a/data/behavior_data.c b/data/behavior_data.c
index ad675f1aa..6ac700c22 100644
--- a/data/behavior_data.c
+++ b/data/behavior_data.c
@@ -202,7 +202,7 @@ const BehaviorScript bhvKingBobomb[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvKingBobomb),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, king_bobomb_seg5_anims_0500FE30),
+ LOAD_ANIMATIONS(oAnimations, &king_bobomb_seg5_anims_0500FE30),
SET_INT(oInteractType, INTERACT_GRABBABLE),
SET_HITBOX(/*Radius*/ 100, /*Height*/ 100),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
@@ -432,7 +432,7 @@ const BehaviorScript bhvChuckya[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvChuckya),
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, chuckya_seg8_anims_0800C070),
+ LOAD_ANIMATIONS(oAnimations, &chuckya_seg8_anims_0800C070),
ANIMATE(5),
SET_INT(oInteractType, INTERACT_GRABBABLE),
SET_HITBOX(/*Radius*/ 150, /*Height*/ 100),
@@ -879,7 +879,7 @@ const BehaviorScript bhvDoor[] = {
SET_INT(oInteractType, INTERACT_DOOR),
// Door - common:
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, door_seg3_anims_030156C0),
+ LOAD_ANIMATIONS(oAnimations, &door_seg3_anims_030156C0),
ANIMATE(0),
LOAD_COLLISION_DATA(door_seg3_collision_0301CE78),
SET_HITBOX(/*Radius*/ 80, /*Height*/ 100),
@@ -1139,7 +1139,7 @@ const BehaviorScript bhvEndToad[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvEndToad),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58),
+ LOAD_ANIMATIONS(oAnimations, &toad_seg6_anims_0600FB58),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_end_toad_loop),
@@ -1150,7 +1150,7 @@ const BehaviorScript bhvEndPeach[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvEndPeach),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C),
+ LOAD_ANIMATIONS(oAnimations, &peach_seg5_anims_0501C41C),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_end_peach_loop),
@@ -1440,7 +1440,7 @@ const BehaviorScript bhvSpindrift[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSpindrift),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, spindrift_seg5_anims_05002D68),
+ LOAD_ANIMATIONS(oAnimations, &spindrift_seg5_anims_05002D68),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -1649,7 +1649,7 @@ const BehaviorScript bhvHeaveHo[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvHeaveHo),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, heave_ho_seg5_anims_0501534C),
+ LOAD_ANIMATIONS(oAnimations, &heave_ho_seg5_anims_0501534C),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0),
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvHeaveHoThrowMario),
@@ -1864,7 +1864,7 @@ const BehaviorScript bhvBowser[] = {
SET_HITBOX(/*Radius*/ 400, /*Height*/ 400),
DROP_TO_FLOOR(),
SET_HOME(),
- LOAD_ANIMATIONS(oAnimations, bowser_seg6_anims_06057690),
+ LOAD_ANIMATIONS(oAnimations, &bowser_seg6_anims_06057690),
SPAWN_CHILD(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserBodyAnchor),
SPAWN_CHILD(/*Model*/ MODEL_BOWSER_BOMB_CHILD_OBJ, /*Behavior*/ bhvBowserFlameSpawn),
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserTailAnchor),
@@ -2031,7 +2031,7 @@ const BehaviorScript bhvBlueFish[] = {
ID(id_bhvBlueFish),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
SET_HOME(),
- LOAD_ANIMATIONS(oAnimations, blue_fish_seg3_anims_0301C2B0),
+ LOAD_ANIMATIONS(oAnimations, &blue_fish_seg3_anims_0301C2B0),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_blue_fish_movement_loop),
@@ -2074,7 +2074,7 @@ const BehaviorScript bhvCheckerboardPlatformSub[] = {
const BehaviorScript bhvBowserKeyUnlockDoor[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvBowserKeyUnlockDoor),
- LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list),
+ LOAD_ANIMATIONS(oAnimations, &bowser_key_seg3_anims_list),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
BEGIN_LOOP(),
CALL_NATIVE(bhv_bowser_key_unlock_door_loop),
@@ -2084,7 +2084,7 @@ const BehaviorScript bhvBowserKeyUnlockDoor[] = {
const BehaviorScript bhvBowserKeyCourseExit[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvBowserKeyCourseExit),
- LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list),
+ LOAD_ANIMATIONS(oAnimations, &bowser_key_seg3_anims_list),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
BEGIN_LOOP(),
CALL_NATIVE(bhv_bowser_key_course_exit_loop),
@@ -2163,7 +2163,7 @@ const BehaviorScript bhvMacroUkiki[] = {
SET_HITBOX(/*Radius*/ 40, /*Height*/ 40),
SET_INT(oIntangibleTimer, 0),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, ukiki_seg5_anims_05015784),
+ LOAD_ANIMATIONS(oAnimations, &ukiki_seg5_anims_05015784),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -2383,7 +2383,7 @@ const BehaviorScript bhvPiranhaPlant[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvPiranhaPlant),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C),
+ LOAD_ANIMATIONS(oAnimations, &piranha_plant_seg6_anims_0601C31C),
ANIMATE(0),
SET_INTERACT_TYPE(INTERACT_DAMAGE),
SET_HITBOX(/*Radius*/ 100, /*Height*/ 200),
@@ -2436,7 +2436,7 @@ const BehaviorScript bhvTuxiesMother[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvTuxiesMother),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
+ LOAD_ANIMATIONS(oAnimations, &penguin_seg5_anims_05008B74),
ANIMATE(3),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
SET_HOME(),
@@ -2465,7 +2465,7 @@ const BehaviorScript bhvSmallPenguin[] = {
ID(id_bhvSmallPenguin),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
+ LOAD_ANIMATIONS(oAnimations, &penguin_seg5_anims_05008B74),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_INT(oInteractType, INTERACT_GRABBABLE),
@@ -2555,7 +2555,7 @@ const BehaviorScript bhvBub[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBub),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bub_seg6_anims_06012354),
+ LOAD_ANIMATIONS(oAnimations, &bub_seg6_anims_06012354),
ANIMATE(0),
SET_HITBOX_WITH_OFFSET(/*Radius*/ 20, /*Height*/ 10, /*Downwards offset*/ 10),
SET_INTERACT_TYPE(INTERACT_DAMAGE),
@@ -2642,7 +2642,7 @@ const BehaviorScript bhvSushiShark[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSushiShark),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, sushi_seg5_anims_0500AE54),
+ LOAD_ANIMATIONS(oAnimations, &sushi_seg5_anims_0500AE54),
SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvSushiSharkCollisionChild),
SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ 50),
SET_INTERACT_TYPE(INTERACT_DAMAGE),
@@ -3269,7 +3269,7 @@ const BehaviorScript bhvScuttlebug[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvScuttlebug),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, scuttlebug_seg6_anims_06015064),
+ LOAD_ANIMATIONS(oAnimations, &scuttlebug_seg6_anims_06015064),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 80, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -3302,7 +3302,7 @@ const BehaviorScript bhvSmallWhomp[] = {
SET_INT(oNumLootCoins, 5),
// Whomp - common:
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, whomp_seg6_anims_06020A04),
+ LOAD_ANIMATIONS(oAnimations, &whomp_seg6_anims_06020A04),
LOAD_COLLISION_DATA(whomp_seg6_collision_06020A0C),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
@@ -3537,7 +3537,7 @@ const BehaviorScript bhvSLWalkingPenguin[] = {
ID(id_bhvSLWalkingPenguin),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
LOAD_COLLISION_DATA(penguin_seg5_collision_05008B88),
- LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
+ LOAD_ANIMATIONS(oAnimations, &penguin_seg5_anims_05008B74),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SCALE(/*Unused*/ 0, /*Field*/ 600),
@@ -3576,7 +3576,7 @@ const BehaviorScript bhvToadMessage[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvToadMessage),
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58),
+ LOAD_ANIMATIONS(oAnimations, &toad_seg6_anims_0600FB58),
ANIMATE(6),
SET_INTERACT_TYPE(INTERACT_TEXT),
SET_HITBOX(/*Radius*/ 80, /*Height*/ 100),
@@ -3782,7 +3782,7 @@ const BehaviorScript bhvSeaweed[] = {
BEGIN(OBJ_LIST_LEVEL),
ID(id_bhvSeaweed),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, seaweed_seg6_anims_0600A4D4),
+ LOAD_ANIMATIONS(oAnimations, &seaweed_seg6_anims_0600A4D4),
ANIMATE(0),
CALL_NATIVE(bhv_seaweed_init),
BEGIN_LOOP(),
@@ -3803,7 +3803,7 @@ const BehaviorScript bhvBobomb[] = {
BEGIN(OBJ_LIST_DESTRUCTIVE),
ID(id_bhvBobomb),
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
+ LOAD_ANIMATIONS(oAnimations, &bobomb_seg8_anims_0802396C),
DROP_TO_FLOOR(),
ANIMATE(0),
SET_INT(oIntangibleTimer, 0),
@@ -3832,7 +3832,7 @@ const BehaviorScript bhvBobombBuddy[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBobombBuddy),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
+ LOAD_ANIMATIONS(oAnimations, &bobomb_seg8_anims_0802396C),
SET_INTERACT_TYPE(INTERACT_TEXT),
DROP_TO_FLOOR(),
SET_HITBOX(/*Radius*/ 100, /*Height*/ 60),
@@ -3851,7 +3851,7 @@ const BehaviorScript bhvBobombBuddyOpensCannon[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBobombBuddyOpensCannon),
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C),
+ LOAD_ANIMATIONS(oAnimations, &bobomb_seg8_anims_0802396C),
SET_INTERACT_TYPE(INTERACT_TEXT),
DROP_TO_FLOOR(),
SET_HITBOX(/*Radius*/ 100, /*Height*/ 60),
@@ -3932,7 +3932,7 @@ const BehaviorScript bhvHomingAmp[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvHomingAmp),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034),
+ LOAD_ANIMATIONS(oAnimations, &_seg8_anims_08004034),
ANIMATE(0),
SET_FLOAT(oGraphYOffset, 40),
SET_INT(oIntangibleTimer, 0),
@@ -3946,7 +3946,7 @@ const BehaviorScript bhvCirclingAmp[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvCirclingAmp),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034),
+ LOAD_ANIMATIONS(oAnimations, &_seg8_anims_08004034),
ANIMATE(0),
SET_FLOAT(oGraphYOffset, 40),
SET_INT(oIntangibleTimer, 0),
@@ -3960,7 +3960,7 @@ const BehaviorScript bhvButterfly[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvButterfly),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0),
+ LOAD_ANIMATIONS(oAnimations, &butterfly_seg3_anims_030056B0),
DROP_TO_FLOOR(),
SET_FLOAT(oGraphYOffset, 5),
CALL_NATIVE(bhv_butterfly_init),
@@ -3973,7 +3973,7 @@ const BehaviorScript bhvHoot[] = {
BEGIN(OBJ_LIST_POLELIKE),
ID(id_bhvHoot),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, hoot_seg5_anims_05005768),
+ LOAD_ANIMATIONS(oAnimations, &hoot_seg5_anims_05005768),
SET_INT(oInteractType, INTERACT_HOOT),
SET_HITBOX(/*Radius*/ 75, /*Height*/ 75),
CALL_NATIVE(bhv_hoot_init),
@@ -4148,7 +4148,7 @@ const BehaviorScript bhvSmallBully[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSmallBully),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
+ LOAD_ANIMATIONS(oAnimations, &bully_seg5_anims_0500470C),
DROP_TO_FLOOR(),
SET_HOME(),
CALL_NATIVE(bhv_small_bully_init),
@@ -4162,7 +4162,7 @@ const BehaviorScript bhvBigBully[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBigBully),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
+ LOAD_ANIMATIONS(oAnimations, &bully_seg5_anims_0500470C),
DROP_TO_FLOOR(),
SET_HOME(),
CALL_NATIVE(bhv_big_bully_init),
@@ -4176,7 +4176,7 @@ const BehaviorScript bhvBigBullyWithMinions[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBigBullyWithMinions),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C),
+ LOAD_ANIMATIONS(oAnimations, &bully_seg5_anims_0500470C),
SET_HOME(),
CALL_NATIVE(bhv_big_bully_init),
CALL_NATIVE(bhv_big_bully_with_minions_init),
@@ -4189,7 +4189,7 @@ const BehaviorScript bhvSmallChillBully[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSmallChillBully),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994),
+ LOAD_ANIMATIONS(oAnimations, &chilly_chief_seg6_anims_06003994),
DROP_TO_FLOOR(),
SET_HOME(),
SET_INT(oBullySubtype, 0x0010),
@@ -4204,7 +4204,7 @@ const BehaviorScript bhvBigChillBully[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvBigChillBully),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994),
+ LOAD_ANIMATIONS(oAnimations, &chilly_chief_seg6_anims_06003994),
DROP_TO_FLOOR(),
SET_HOME(),
SET_INT(oBullySubtype, 0x0010),
@@ -4228,7 +4228,7 @@ const BehaviorScript bhvJetStreamWaterRing[] = {
BEGIN(OBJ_LIST_LEVEL),
ID(id_bhvJetStreamWaterRing),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C),
+ LOAD_ANIMATIONS(oAnimations, &water_ring_seg6_anims_06013F7C),
SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20),
SET_INTERACT_TYPE(INTERACT_WATER_RING),
SET_INT(oDamageOrCoinValue, 2),
@@ -4244,7 +4244,7 @@ const BehaviorScript bhvMantaRayWaterRing[] = {
BEGIN(OBJ_LIST_LEVEL),
ID(id_bhvMantaRayWaterRing),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C),
+ LOAD_ANIMATIONS(oAnimations, &water_ring_seg6_anims_06013F7C),
SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20),
SET_INTERACT_TYPE(INTERACT_WATER_RING),
SET_INT(oDamageOrCoinValue, 2),
@@ -4393,7 +4393,7 @@ const BehaviorScript bhvMoneybag[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvMoneybag),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, moneybag_seg6_anims_06005E5C),
+ LOAD_ANIMATIONS(oAnimations, &moneybag_seg6_anims_06005E5C),
DROP_TO_FLOOR(),
SET_HOME(),
SET_INT(oIntangibleTimer, -1),
@@ -4598,7 +4598,7 @@ const BehaviorScript bhvCastleFlagWaving[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvCastleFlagWaving),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, castle_grounds_seg7_anims_flags),
+ LOAD_ANIMATIONS(oAnimations, &castle_grounds_seg7_anims_flags),
ANIMATE(0),
CALL_NATIVE(bhv_castle_flag_init),
BEGIN_LOOP(),
@@ -5128,7 +5128,7 @@ const BehaviorScript bhvMantaRay[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvMantaRay),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, manta_seg5_anims_05008EB4),
+ LOAD_ANIMATIONS(oAnimations, &manta_seg5_anims_05008EB4),
ANIMATE(0),
CALL_NATIVE(bhv_manta_ray_init),
BEGIN_LOOP(),
@@ -5249,7 +5249,7 @@ const BehaviorScript bhvMips[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvMips),
OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, mips_seg6_anims_06015634),
+ LOAD_ANIMATIONS(oAnimations, &mips_seg6_anims_06015634),
SET_INT(oInteractType, INTERACT_GRABBABLE),
DROP_TO_FLOOR(),
SET_HITBOX(/*Radius*/ 50, /*Height*/ 75),
@@ -5264,7 +5264,7 @@ const BehaviorScript bhvYoshi[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvYoshi),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, yoshi_seg5_anims_05024100),
+ LOAD_ANIMATIONS(oAnimations, &yoshi_seg5_anims_05024100),
SET_INTERACT_TYPE(INTERACT_TEXT),
DROP_TO_FLOOR(),
SET_HITBOX(/*Radius*/ 160, /*Height*/ 150),
@@ -5282,7 +5282,7 @@ const BehaviorScript bhvKoopa[] = {
ID(id_bhvKoopa),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, koopa_seg6_anims_06011364),
+ LOAD_ANIMATIONS(oAnimations, &koopa_seg6_anims_06011364),
ANIMATE(9),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
@@ -5313,7 +5313,7 @@ const BehaviorScript bhvKoopaFlag[] = {
SET_INT(oIntangibleTimer, 0),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, koopa_flag_seg6_anims_06001028),
+ LOAD_ANIMATIONS(oAnimations, &koopa_flag_seg6_anims_06001028),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_pole_base_loop),
@@ -5347,7 +5347,7 @@ const BehaviorScript bhvSwoop[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSwoop),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, swoop_seg6_anims_060070D0),
+ LOAD_ANIMATIONS(oAnimations, &swoop_seg6_anims_060070D0),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
CALL_NATIVE(bhv_init_room),
@@ -5361,7 +5361,7 @@ const BehaviorScript bhvFlyGuy[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvFlyGuy),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, flyguy_seg8_anims_08011A64),
+ LOAD_ANIMATIONS(oAnimations, &flyguy_seg8_anims_08011A64),
ANIMATE(0),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0),
@@ -5379,7 +5379,7 @@ const BehaviorScript bhvGoomba[] = {
ID(id_bhvGoomba),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, goomba_seg8_anims_0801DA4C),
+ LOAD_ANIMATIONS(oAnimations, &goomba_seg8_anims_0801DA4C),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
CALL_NATIVE(bhv_goomba_init),
@@ -5403,7 +5403,7 @@ const BehaviorScript bhvChainChomp[] = {
ID(id_bhvChainChomp),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, chain_chomp_seg6_anims_06025178),
+ LOAD_ANIMATIONS(oAnimations, &chain_chomp_seg6_anims_06025178),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
HIDE(),
@@ -5462,7 +5462,7 @@ const BehaviorScript bhvWigglerHead[] = {
ID(id_bhvWigglerHead),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500EC8C),
+ LOAD_ANIMATIONS(oAnimations, &wiggler_seg5_anims_0500EC8C),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
HIDE(),
@@ -5477,7 +5477,7 @@ const BehaviorScript bhvWigglerBody[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvWigglerBody),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500C874),
+ LOAD_ANIMATIONS(oAnimations, &wiggler_seg5_anims_0500C874),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SCALE(/*Unused*/ 0, /*Field*/ 400),
BEGIN_LOOP(),
@@ -5489,7 +5489,7 @@ const BehaviorScript bhvEnemyLakitu[] = {
BEGIN(OBJ_LIST_PUSHABLE),
ID(id_bhvEnemyLakitu),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, lakitu_enemy_seg5_anims_050144D4),
+ LOAD_ANIMATIONS(oAnimations, &lakitu_enemy_seg5_anims_050144D4),
ANIMATE(0),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
@@ -5502,7 +5502,7 @@ const BehaviorScript bhvCameraLakitu[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvCameraLakitu),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8),
+ LOAD_ANIMATIONS(oAnimations, &lakitu_seg6_anims_060058F8),
ANIMATE(0),
CALL_NATIVE(bhv_init_room),
CALL_NATIVE(bhv_camera_lakitu_init),
@@ -5537,7 +5537,7 @@ const BehaviorScript bhvSpiny[] = {
BEGIN(OBJ_LIST_PUSHABLE),
ID(id_bhvSpiny),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, spiny_seg5_anims_05016EAC),
+ LOAD_ANIMATIONS(oAnimations, &spiny_seg5_anims_05016EAC),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
BEGIN_LOOP(),
@@ -5550,7 +5550,7 @@ const BehaviorScript bhvMontyMole[] = {
ID(id_bhvMontyMole),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, monty_mole_seg5_anims_05007248),
+ LOAD_ANIMATIONS(oAnimations, &monty_mole_seg5_anims_05007248),
ANIMATE(3),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
HIDE(),
@@ -5801,7 +5801,7 @@ const BehaviorScript bhvMrBlizzard[] = {
ID(id_bhvMrBlizzard),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, snowman_seg5_anims_0500D118),
+ LOAD_ANIMATIONS(oAnimations, &snowman_seg5_anims_0500D118),
ANIMATE(0),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
@@ -5906,7 +5906,7 @@ const BehaviorScript bhvUnagi[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvUnagi),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, unagi_seg5_anims_05012824),
+ LOAD_ANIMATIONS(oAnimations, &unagi_seg5_anims_05012824),
ANIMATE(6),
SET_HOME(),
SCALE(/*Unused*/ 0, /*Field*/ 300),
@@ -5931,7 +5931,7 @@ const BehaviorScript bhvDorrie[] = {
ID(id_bhvDorrie),
LOAD_COLLISION_DATA(dorrie_seg6_collision_0600F644),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, dorrie_seg6_anims_0600F638),
+ LOAD_ANIMATIONS(oAnimations, &dorrie_seg6_anims_0600F638),
SET_HOME(),
SET_FLOAT(oCollisionDistance, 30000),
ADD_FLOAT(oPosX, 2000),
@@ -5947,7 +5947,7 @@ const BehaviorScript bhvHauntedChair[] = {
ID(id_bhvHauntedChair),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, chair_seg5_anims_05005784),
+ LOAD_ANIMATIONS(oAnimations, &chair_seg5_anims_05005784),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -5963,7 +5963,7 @@ const BehaviorScript bhvMadPiano[] = {
ID(id_bhvMadPiano),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, mad_piano_seg5_anims_05009B14),
+ LOAD_ANIMATIONS(oAnimations, &mad_piano_seg5_anims_05009B14),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
ADD_INT(oMoveAngleYaw, 0x4000),
@@ -5977,7 +5977,7 @@ const BehaviorScript bhvFlyingBookend[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvFlyingBookend),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, bookend_seg5_anims_05002540),
+ LOAD_ANIMATIONS(oAnimations, &bookend_seg5_anims_05002540),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_INT(oMoveFlags, 0),
@@ -6026,7 +6026,7 @@ const BehaviorScript bhvFirePiranhaPlant[] = {
ID(id_bhvFirePiranhaPlant),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C),
+ LOAD_ANIMATIONS(oAnimations, &piranha_plant_seg6_anims_0601C31C),
ANIMATE(0),
SET_HOME(),
HIDE(),
@@ -6130,7 +6130,7 @@ const BehaviorScript bhvEyerokHand[] = {
BEGIN(OBJ_LIST_SURFACE),
ID(id_bhvEyerokHand),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, eyerok_seg5_anims_050116E4),
+ LOAD_ANIMATIONS(oAnimations, &eyerok_seg5_anims_050116E4),
ANIMATE(6),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 150, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -6144,7 +6144,7 @@ const BehaviorScript bhvKlepto[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvKlepto),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, klepto_seg5_anims_05008CFC),
+ LOAD_ANIMATIONS(oAnimations, &klepto_seg5_anims_05008CFC),
ANIMATE(0),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 100, /*Gravity*/ 0, /*Bounciness*/ -20, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
SET_HOME(),
@@ -6158,7 +6158,7 @@ const BehaviorScript bhvBird[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvBird),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
+ LOAD_ANIMATIONS(oAnimations, &birds_seg5_anims_050009E8),
ANIMATE(0),
HIDE(),
SCALE(/*Unused*/ 0, /*Field*/ 70),
@@ -6171,7 +6171,7 @@ const BehaviorScript bhvRacingPenguin[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvRacingPenguin),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74),
+ LOAD_ANIMATIONS(oAnimations, &penguin_seg5_anims_05008B74),
ANIMATE(3),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 300, /*Gravity*/ -800, /*Bounciness*/ -5, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0),
SCALE(/*Unused*/ 0, /*Field*/ 400),
@@ -6226,7 +6226,7 @@ const BehaviorScript bhvClamShell[] = {
ID(id_bhvClamShell),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
DROP_TO_FLOOR(),
- LOAD_ANIMATIONS(oAnimations, clam_shell_seg5_anims_05001744),
+ LOAD_ANIMATIONS(oAnimations, &clam_shell_seg5_anims_05001744),
SET_FLOAT(oGraphYOffset, 10),
BEGIN_LOOP(),
CALL_NATIVE(bhv_clam_loop),
@@ -6237,7 +6237,7 @@ const BehaviorScript bhvSkeeter[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvSkeeter),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, skeeter_seg6_anims_06007DE0),
+ LOAD_ANIMATIONS(oAnimations, &skeeter_seg6_anims_06007DE0),
SET_HOME(),
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 180, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 1200, /*Unused*/ 0, 0),
BEGIN_LOOP(),
@@ -6320,7 +6320,7 @@ const BehaviorScript bhvTripletButterfly[] = {
BEGIN(OBJ_LIST_GENACTOR),
ID(id_bhvTripletButterfly),
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0),
+ LOAD_ANIMATIONS(oAnimations, &butterfly_seg3_anims_030056B0),
ANIMATE(0),
HIDE(),
SET_HOME(),
@@ -6347,7 +6347,7 @@ const BehaviorScript bhvBeginningLakitu[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvBeginningLakitu),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8),
+ LOAD_ANIMATIONS(oAnimations, &lakitu_seg6_anims_060058F8),
ANIMATE(0),
SET_FLOAT(oOpacity, 0),
BEGIN_LOOP(),
@@ -6359,7 +6359,7 @@ const BehaviorScript bhvBeginningPeach[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvBeginningPeach),
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
- LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C),
+ LOAD_ANIMATIONS(oAnimations, &peach_seg5_anims_0501C41C),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_intro_peach_loop),
@@ -6370,7 +6370,7 @@ const BehaviorScript bhvEndBirds1[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvEndBirds1),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
+ LOAD_ANIMATIONS(oAnimations, &birds_seg5_anims_050009E8),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_end_birds_1_loop),
@@ -6381,7 +6381,7 @@ const BehaviorScript bhvEndBirds2[] = {
BEGIN(OBJ_LIST_DEFAULT),
ID(id_bhvEndBirds2),
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
- LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8),
+ LOAD_ANIMATIONS(oAnimations, &birds_seg5_anims_050009E8),
ANIMATE(0),
BEGIN_LOOP(),
CALL_NATIVE(bhv_end_birds_2_loop),
diff --git a/data/dynos_mgr_anim.cpp b/data/dynos_mgr_anim.cpp
index 983c88e0d..6e9fb54cb 100644
--- a/data/dynos_mgr_anim.cpp
+++ b/data/dynos_mgr_anim.cpp
@@ -29,8 +29,9 @@ static s32 RetrieveCurrentAnimationIndex(struct Object *aObject) {
if (!aObject->oAnimations || !aObject->header.gfx.animInfo.curAnim || smlua_anim_util_get_current_animation_name(aObject)) {
return -1;
}
- for (s32 i = 0; aObject->oAnimations[i] != NULL; ++i) {
- if (aObject->oAnimations[i] == aObject->header.gfx.animInfo.curAnim) {
+ struct AnimationTable* animations = aObject->oAnimations;
+ for (s32 i = 0; i < animations->count; ++i) {
+ if (animations->anims[i] == aObject->header.gfx.animInfo.curAnim) {
return i;
}
}
diff --git a/data/dynos_mgr_builtin.cpp b/data/dynos_mgr_builtin.cpp
index 5ce78da82..928881b9f 100644
--- a/data/dynos_mgr_builtin.cpp
+++ b/data/dynos_mgr_builtin.cpp
@@ -88,6 +88,7 @@ extern "C" {
}
#define define_builtin(_ptr) (const void*)#_ptr, (const void*)_ptr
+#define define_builtin_ptr(_ptr) (const void*)#_ptr, (const void*)&_ptr
#define define_animation_builtin(_ptr) (const void*)#_ptr, (const void*)_ptr
@@ -1206,61 +1207,61 @@ const char* DynOS_Builtin_Col_GetFromData(const Collision* aData) {
////////////////
static const void* sDynosBuiltinAnims[] = {
- define_builtin(amp_seg8_anims_08004034),
- define_builtin(bobomb_seg8_anims_0802396C),
- define_builtin(chuckya_seg8_anims_0800C070),
- define_builtin(flyguy_seg8_anims_08011A64),
- define_builtin(goomba_seg8_anims_0801DA4C),
- define_builtin(blue_fish_seg3_anims_0301C2B0),
- define_builtin(bowser_key_seg3_anims_list),
- define_builtin(butterfly_seg3_anims_030056B0),
- define_builtin(door_seg3_anims_030156C0),
- define_builtin(heave_ho_seg5_anims_0501534C),
- define_builtin(hoot_seg5_anims_05005768),
- define_builtin(blargg_seg5_anims_0500616C),
- define_builtin(bully_seg5_anims_0500470C),
- define_builtin(king_bobomb_seg5_anims_0500FE30),
- define_builtin(clam_shell_seg5_anims_05001744),
- define_builtin(manta_seg5_anims_05008EB4),
- define_builtin(sushi_seg5_anims_0500AE54),
- define_builtin(unagi_seg5_anims_05012824),
- define_builtin(eyerok_seg5_anims_050116E4),
- define_builtin(klepto_seg5_anims_05008CFC),
- define_builtin(monty_mole_seg5_anims_05007248),
- define_builtin(ukiki_seg5_anims_05015784),
- define_builtin(penguin_seg5_anims_05008B74),
- define_builtin(snowman_seg5_anims_0500D118),
- define_builtin(spindrift_seg5_anims_05002D68),
- define_builtin(bookend_seg5_anims_05002540),
- define_builtin(chair_seg5_anims_05005784),
- define_builtin(mad_piano_seg5_anims_05009B14),
- define_builtin(birds_seg5_anims_050009E8),
- define_builtin(peach_seg5_anims_0501C41C),
- define_builtin(yoshi_seg5_anims_05024100),
- define_builtin(lakitu_enemy_seg5_anims_050144D4),
- define_builtin(spiny_seg5_anims_05016EAC),
- define_builtin(spiny_egg_seg5_anims_050157E4),
- define_builtin(wiggler_seg5_anims_0500C874),
- define_builtin(wiggler_seg5_anims_0500EC8C),
- define_builtin(bowser_seg6_anims_06057690),
- define_builtin(bub_seg6_anims_06012354),
- define_builtin(cyan_fish_seg6_anims_0600E264),
- define_builtin(seaweed_seg6_anims_0600A4D4),
- define_builtin(skeeter_seg6_anims_06007DE0),
- define_builtin(water_ring_seg6_anims_06013F7C),
- define_builtin(chain_chomp_seg6_anims_06025178),
- define_builtin(koopa_seg6_anims_06011364),
- define_builtin(koopa_flag_seg6_anims_06001028),
- define_builtin(piranha_plant_seg6_anims_0601C31C),
- define_builtin(whomp_seg6_anims_06020A04),
- define_builtin(lakitu_seg6_anims_060058F8),
- define_builtin(mips_seg6_anims_06015634),
- define_builtin(toad_seg6_anims_0600FB58),
- define_builtin(chilly_chief_seg6_anims_06003994),
- define_builtin(moneybag_seg6_anims_06005E5C),
- define_builtin(dorrie_seg6_anims_0600F638),
- define_builtin(scuttlebug_seg6_anims_06015064),
- define_builtin(swoop_seg6_anims_060070D0),
+ define_builtin_ptr(amp_seg8_anims_08004034),
+ define_builtin_ptr(bobomb_seg8_anims_0802396C),
+ define_builtin_ptr(chuckya_seg8_anims_0800C070),
+ define_builtin_ptr(flyguy_seg8_anims_08011A64),
+ define_builtin_ptr(goomba_seg8_anims_0801DA4C),
+ define_builtin_ptr(blue_fish_seg3_anims_0301C2B0),
+ define_builtin_ptr(bowser_key_seg3_anims_list),
+ define_builtin_ptr(butterfly_seg3_anims_030056B0),
+ define_builtin_ptr(door_seg3_anims_030156C0),
+ define_builtin_ptr(heave_ho_seg5_anims_0501534C),
+ define_builtin_ptr(hoot_seg5_anims_05005768),
+ define_builtin_ptr(blargg_seg5_anims_0500616C),
+ define_builtin_ptr(bully_seg5_anims_0500470C),
+ define_builtin_ptr(king_bobomb_seg5_anims_0500FE30),
+ define_builtin_ptr(clam_shell_seg5_anims_05001744),
+ define_builtin_ptr(manta_seg5_anims_05008EB4),
+ define_builtin_ptr(sushi_seg5_anims_0500AE54),
+ define_builtin_ptr(unagi_seg5_anims_05012824),
+ define_builtin_ptr(eyerok_seg5_anims_050116E4),
+ define_builtin_ptr(klepto_seg5_anims_05008CFC),
+ define_builtin_ptr(monty_mole_seg5_anims_05007248),
+ define_builtin_ptr(ukiki_seg5_anims_05015784),
+ define_builtin_ptr(penguin_seg5_anims_05008B74),
+ define_builtin_ptr(snowman_seg5_anims_0500D118),
+ define_builtin_ptr(spindrift_seg5_anims_05002D68),
+ define_builtin_ptr(bookend_seg5_anims_05002540),
+ define_builtin_ptr(chair_seg5_anims_05005784),
+ define_builtin_ptr(mad_piano_seg5_anims_05009B14),
+ define_builtin_ptr(birds_seg5_anims_050009E8),
+ define_builtin_ptr(peach_seg5_anims_0501C41C),
+ define_builtin_ptr(yoshi_seg5_anims_05024100),
+ define_builtin_ptr(lakitu_enemy_seg5_anims_050144D4),
+ define_builtin_ptr(spiny_seg5_anims_05016EAC),
+ define_builtin_ptr(spiny_egg_seg5_anims_050157E4),
+ define_builtin_ptr(wiggler_seg5_anims_0500C874),
+ define_builtin_ptr(wiggler_seg5_anims_0500EC8C),
+ define_builtin_ptr(bowser_seg6_anims_06057690),
+ define_builtin_ptr(bub_seg6_anims_06012354),
+ define_builtin_ptr(cyan_fish_seg6_anims_0600E264),
+ define_builtin_ptr(seaweed_seg6_anims_0600A4D4),
+ define_builtin_ptr(skeeter_seg6_anims_06007DE0),
+ define_builtin_ptr(water_ring_seg6_anims_06013F7C),
+ define_builtin_ptr(chain_chomp_seg6_anims_06025178),
+ define_builtin_ptr(koopa_seg6_anims_06011364),
+ define_builtin_ptr(koopa_flag_seg6_anims_06001028),
+ define_builtin_ptr(piranha_plant_seg6_anims_0601C31C),
+ define_builtin_ptr(whomp_seg6_anims_06020A04),
+ define_builtin_ptr(lakitu_seg6_anims_060058F8),
+ define_builtin_ptr(mips_seg6_anims_06015634),
+ define_builtin_ptr(toad_seg6_anims_0600FB58),
+ define_builtin_ptr(chilly_chief_seg6_anims_06003994),
+ define_builtin_ptr(moneybag_seg6_anims_06005E5C),
+ define_builtin_ptr(dorrie_seg6_anims_0600F638),
+ define_builtin_ptr(scuttlebug_seg6_anims_06015064),
+ define_builtin_ptr(swoop_seg6_anims_060070D0),
};
const Animation *DynOS_Builtin_Anim_GetFromName(const char *aDataName) {
diff --git a/docs/lua/structs.md b/docs/lua/structs.md
index b175c66b4..856130267 100644
--- a/docs/lua/structs.md
+++ b/docs/lua/structs.md
@@ -3,6 +3,7 @@
# Supported Structs
- [AnimInfo](#AnimInfo)
- [Animation](#Animation)
+- [AnimationTable](#AnimationTable)
- [Area](#Area)
- [BassAudio](#BassAudio)
- [BehaviorDialogs](#BehaviorDialogs)
@@ -107,7 +108,7 @@
| animYTransDivisor | `integer` | |
| flags | `integer` | |
| index | `Pointer` <`integer`> | |
-| length | `integer` | |
+| length | `integer` | read-only |
| loopEnd | `integer` | |
| loopStart | `integer` | |
| startFrame | `integer` | |
@@ -118,6 +119,16 @@
+## [AnimationTable](#AnimationTable)
+
+| Field | Type | Access |
+| ----- | ---- | ------ |
+| count | `integer` | read-only |
+
+[:arrow_up_small:](#)
+
+
+
## [Area](#Area)
| Field | Type | Access |
diff --git a/include/types.h b/include/types.h
index 9bb4a0953..c21cecf54 100644
--- a/include/types.h
+++ b/include/types.h
@@ -105,6 +105,11 @@ struct Animation {
/*0x14*/ u32 length; // only used with Mario animations to determine how much to load. 0 otherwise.
};
+struct AnimationTable {
+ u32 count;
+ const struct Animation* const anims[];
+};
+
#define ANIMINDEX_NUMPARTS(animindex) (sizeof(animindex) / sizeof(u16) / 6 - 1)
struct GraphNode
@@ -195,7 +200,7 @@ struct Object
union {
s16 *asS16P[0x50];
s32 *asS32P[0x50];
- struct Animation **asAnims[0x50];
+ struct AnimationTable *asAnims[0x50];
struct Waypoint *asWaypoint[0x50];
struct ChainSegment *asChainSegment[0x50];
struct Object *asObject[0x50];
diff --git a/levels/castle_grounds/areas/1/11/anim.inc.c b/levels/castle_grounds/areas/1/11/anim.inc.c
index aec7cb208..bf9eb7af6 100644
--- a/levels/castle_grounds/areas/1/11/anim.inc.c
+++ b/levels/castle_grounds/areas/1/11/anim.inc.c
@@ -36,6 +36,9 @@ static const struct Animation castle_grounds_seg7_anim_flags = {
};
// 0x0700C95C - 0x0700C960
-const struct Animation *const castle_grounds_seg7_anims_flags[] = {
- &castle_grounds_seg7_anim_flags, // 0x0700C944
+const struct AnimationTable castle_grounds_seg7_anims_flags = {
+ .anims = {
+ &castle_grounds_seg7_anim_flags, // 0x0700C944
+ },
+ .count = 1
};
diff --git a/levels/castle_grounds/header.h b/levels/castle_grounds/header.h
index 5e32ed949..0fb6fcd65 100644
--- a/levels/castle_grounds/header.h
+++ b/levels/castle_grounds/header.h
@@ -27,7 +27,7 @@ extern const Gfx castle_grounds_seg7_dl_0700C6A8[];
extern const Gfx castle_grounds_seg7_dl_0700C6E8[];
extern const Gfx castle_grounds_seg7_dl_0700C728[];
extern const Gfx castle_grounds_seg7_dl_0700C768[];
-extern const struct Animation *const castle_grounds_seg7_anims_flags[];
+extern const struct AnimationTable castle_grounds_seg7_anims_flags;
extern const Gfx castle_grounds_seg7_dl_0700EA58[];
extern const Gfx castle_grounds_seg7_us_dl_0700F2E8[];
extern const Collision castle_grounds_seg7_collision_level[];
diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c
index 2363bf70e..7535ddd16 100644
--- a/src/engine/behavior_script.c
+++ b/src/engine/behavior_script.c
@@ -585,9 +585,11 @@ static s32 bhv_cmd_load_animations(void) {
// Usage: ANIMATE(animIndex)
static s32 bhv_cmd_animate(void) {
s32 animIndex = BHV_CMD_GET_2ND_U8(0);
- struct Animation **animations = gCurrentObject->oAnimations;
+ struct AnimationTable *animations = gCurrentObject->oAnimations;
- geo_obj_init_animation(&gCurrentObject->header.gfx, &animations[animIndex]);
+ if (animations && (u32)animIndex < animations->count) {
+ geo_obj_init_animation(&gCurrentObject->header.gfx, (struct Animation*)animations->anims[animIndex]);
+ }
gCurBhvCommand++;
return BHV_PROC_CONTINUE;
diff --git a/src/engine/graph_node.c b/src/engine/graph_node.c
index 71eba0088..d966f42b8 100644
--- a/src/engine/graph_node.c
+++ b/src/engine/graph_node.c
@@ -775,16 +775,12 @@ void geo_obj_init_spawninfo(struct GraphNodeObject *graphNode, struct SpawnInfo
/**
* Initialize the animation of an object node
*/
-void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr) {
- if (graphNode == NULL) { return; }
- if (animPtrAddr == NULL) { return; }
- if (*animPtrAddr == NULL) { return; }
-
- struct Animation **animSegmented = segmented_to_virtual(animPtrAddr);
- struct Animation *anim = segmented_to_virtual(*animSegmented);
+void geo_obj_init_animation(struct GraphNodeObject *graphNode, const struct Animation * const anim) {
+ if (!graphNode) { return; }
+ if (!anim) { return; }
if (graphNode->animInfo.curAnim != anim) {
- graphNode->animInfo.curAnim = anim;
+ graphNode->animInfo.curAnim = (struct Animation*)anim;
graphNode->animInfo.animFrame = anim->startFrame + ((anim->flags & ANIM_FLAG_FORWARD) ? 1 : -1);
graphNode->animInfo.animAccel = 0;
graphNode->animInfo.animYTrans = 0;
@@ -794,16 +790,12 @@ void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation
/**
* Initialize the animation of an object node
*/
-void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr, u32 animAccel) {
- if (graphNode == NULL) { return; }
- if (animPtrAddr == NULL) { return; }
- if (*animPtrAddr == NULL) { return; }
-
- struct Animation **animSegmented = segmented_to_virtual(animPtrAddr);
- struct Animation *anim = segmented_to_virtual(*animSegmented);
+void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, const struct Animation * const anim, u32 animAccel) {
+ if (!graphNode) { return; }
+ if (!anim) { return; }
if (graphNode->animInfo.curAnim != anim) {
- graphNode->animInfo.curAnim = anim;
+ graphNode->animInfo.curAnim = (struct Animation*)anim;
graphNode->animInfo.animYTrans = 0;
graphNode->animInfo.animFrameAccelAssist =
(anim->startFrame << 16) + ((anim->flags & ANIM_FLAG_FORWARD) ? animAccel : -animAccel);
diff --git a/src/engine/graph_node.h b/src/engine/graph_node.h
index 853826cb7..c8d548d00 100644
--- a/src/engine/graph_node.h
+++ b/src/engine/graph_node.h
@@ -438,8 +438,8 @@ void geo_call_global_function_nodes(struct GraphNode *graphNode, s32 callContext
void geo_reset_object_node(struct GraphNodeObject *graphNode);
void geo_obj_init(struct GraphNodeObject *graphNode, void *sharedChild, Vec3f pos, Vec3s angle);
void geo_obj_init_spawninfo(struct GraphNodeObject *graphNode, struct SpawnInfo *spawn);
-void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr);
-void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, struct Animation **animPtrAddr, u32 animAccel);
+void geo_obj_init_animation(struct GraphNodeObject *graphNode, const struct Animation * const anim);
+void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, const struct Animation * const anim, u32 animAccel);
s32 retrieve_animation_index(s32 frame, u16 **attributes);
diff --git a/src/game/behaviors/bowser.inc.c b/src/game/behaviors/bowser.inc.c
index bb4901ff2..6b57d6b7e 100644
--- a/src/game/behaviors/bowser.inc.c
+++ b/src/game/behaviors/bowser.inc.c
@@ -1287,14 +1287,16 @@ void bhv_bowser_loop(void) {
s32 angleToPlayer = player ? obj_angle_to_object(o, player) : 0;
// look for animation difference and override
+
+ struct AnimationTable *animations = o->oAnimations;
struct Animation* anim = NULL;
- if (o->oAnimations != NULL && networkBowserAnimationIndex <= 26) {
- anim = o->oAnimations[networkBowserAnimationIndex];
- if (anim != NULL && o->header.gfx.animInfo.curAnim != anim) {
- geo_obj_init_animation(&o->header.gfx, &anim);
+ if (animations && networkBowserAnimationIndex < animations->count) {
+ anim = (struct Animation*)animations->anims[networkBowserAnimationIndex];
+ if (o->header.gfx.animInfo.curAnim != anim) {
+ geo_obj_init_animation(&o->header.gfx, anim);
}
}
-
+
// If Bowser isn't in a cutscene, It's been played already.
if (!bowserCutscenePlayed && (o->oAction != 5 && o->oAction != 6 && o->oAction != 20)) {
bowserCutscenePlayed = TRUE;
@@ -1345,11 +1347,13 @@ void bhv_bowser_loop(void) {
}
// update animation index
- anim = o->oAnimations[networkBowserAnimationIndex];
- if (o->header.gfx.animInfo.curAnim != anim) {
- for (s32 i = 0; i < 32; i++) {
- if (o->header.gfx.animInfo.curAnim == o->oAnimations[i]) {
- networkBowserAnimationIndex = i;
+ if (animations) {
+ anim = (struct Animation*)animations->anims[networkBowserAnimationIndex];
+ if (o->header.gfx.animInfo.curAnim != anim) {
+ for (u32 i = 0; i < animations->count; i++) {
+ if (o->header.gfx.animInfo.curAnim == o->oAnimations->anims[i]) {
+ networkBowserAnimationIndex = i;
+ }
}
}
}
diff --git a/src/game/behaviors/enemy_lakitu.inc.c b/src/game/behaviors/enemy_lakitu.inc.c
index 768b61c05..f59e15bda 100644
--- a/src/game/behaviors/enemy_lakitu.inc.c
+++ b/src/game/behaviors/enemy_lakitu.inc.c
@@ -127,7 +127,7 @@ static void enemy_lakitu_sub_act_no_spiny(void) {
if (spiny != NULL) {
o->prevObj = spiny;
spiny->oAction = SPINY_ACT_HELD_BY_LAKITU;
- obj_init_animation_with_sound(spiny, spiny_egg_seg5_anims_050157E4, 0);
+ obj_init_animation_with_sound(spiny, &spiny_egg_seg5_anims_050157E4, 0);
o->oEnemyLakituNumSpinies += 1;
o->oSubAction = ENEMY_LAKITU_SUB_ACT_HOLD_SPINY;
diff --git a/src/game/behaviors/fish.inc.c b/src/game/behaviors/fish.inc.c
index 889f07a9f..56bbb2b1b 100644
--- a/src/game/behaviors/fish.inc.c
+++ b/src/game/behaviors/fish.inc.c
@@ -11,26 +11,26 @@ static void fish_spawner_act_spawn(void) {
s32 i = 0;
s32 schoolQuantity = 0;
s16 model = MODEL_ERROR_MODEL;
- const struct Animation * const *fishAnimation = NULL;
+ const struct AnimationTable* fishAnimation = NULL;
struct Object *fishObject;
switch (o->oBehParams2ndByte) {
// Cases need to be on one line to match with and without optimizations.
case FISH_SPAWNER_BP_MANY_BLUE:
- model = MODEL_FISH; schoolQuantity = 20; fishAnimation = blue_fish_seg3_anims_0301C2B0;
+ model = MODEL_FISH; schoolQuantity = 20; fishAnimation = &blue_fish_seg3_anims_0301C2B0;
break;
case FISH_SPAWNER_BP_FEW_BLUE:
- model = MODEL_FISH; schoolQuantity = 5; fishAnimation = blue_fish_seg3_anims_0301C2B0;
+ model = MODEL_FISH; schoolQuantity = 5; fishAnimation = &blue_fish_seg3_anims_0301C2B0;
break;
case FISH_SPAWNER_BP_MANY_CYAN:
- model = MODEL_CYAN_FISH; schoolQuantity = 20; fishAnimation = cyan_fish_seg6_anims_0600E264;
+ model = MODEL_CYAN_FISH; schoolQuantity = 20; fishAnimation = &cyan_fish_seg6_anims_0600E264;
break;
case FISH_SPAWNER_BP_FEW_CYAN:
- model = MODEL_CYAN_FISH; schoolQuantity = 5; fishAnimation = cyan_fish_seg6_anims_0600E264;
+ model = MODEL_CYAN_FISH; schoolQuantity = 5; fishAnimation = &cyan_fish_seg6_anims_0600E264;
break;
}
@@ -41,7 +41,7 @@ static void fish_spawner_act_spawn(void) {
fishObject = spawn_object(o, model, bhvFish);
if (fishObject == NULL) { continue; }
fishObject->oBehParams2ndByte = o->oBehParams2ndByte;
- obj_init_animation_with_sound(fishObject, fishAnimation, 0);
+ obj_init_animation_with_sound(fishObject, (struct AnimationTable*)fishAnimation, 0);
obj_translate_xyz_random(fishObject, 700.0f);
}
o->oAction = FISH_SPAWNER_ACT_IDLE;
diff --git a/src/game/behaviors/spiny.inc.c b/src/game/behaviors/spiny.inc.c
index 2816576d4..1ab65140e 100644
--- a/src/game/behaviors/spiny.inc.c
+++ b/src/game/behaviors/spiny.inc.c
@@ -36,28 +36,28 @@ static u8 sSpinyWalkAttackHandlers[] = {
static u32 spinyAnimCache = 0;
static void spiny_to_anim_cache(void) {
- if (o->oAnimations == (struct Animation**)spiny_egg_seg5_anims_050157E4) {
+ if (o->oAnimations == &spiny_egg_seg5_anims_050157E4) {
spinyAnimCache = 0;
- } else if (o->oAnimations == (struct Animation**)spiny_seg5_anims_05016EAC) {
+ } else if (o->oAnimations == &spiny_seg5_anims_05016EAC) {
spinyAnimCache = 1;
}
}
static void spiny_from_anim_cache(void) {
- struct Animation** anim = NULL;
+ struct AnimationTable* anim = NULL;
switch (spinyAnimCache) {
case 0:
- anim = (struct Animation**)spiny_egg_seg5_anims_050157E4;
+ anim = (struct AnimationTable*)&spiny_egg_seg5_anims_050157E4;
break;
case 1:
- anim = (struct Animation**)spiny_seg5_anims_05016EAC;
+ anim = (struct AnimationTable*)&spiny_seg5_anims_05016EAC;
break;
default:
break;
}
if (anim != o->oAnimations) {
- obj_init_animation_with_sound(o, (const struct Animation* const*)anim, 0);
+ obj_init_animation_with_sound(o, anim, 0);
}
}
@@ -203,7 +203,7 @@ static void spiny_act_thrown_by_lakitu(void) {
if (o->oMoveFlags & OBJ_MOVE_LANDED) {
cur_obj_play_sound_2(SOUND_OBJ_SPINY_UNK59);
cur_obj_set_model(smlua_model_util_load(E_MODEL_SPINY));
- obj_init_animation_with_sound(o, spiny_seg5_anims_05016EAC, 0);
+ obj_init_animation_with_sound(o, (struct AnimationTable*)&spiny_seg5_anims_05016EAC, 0);
o->oGraphYOffset = -17.0f;
o->oFaceAnglePitch = 0;
@@ -259,7 +259,7 @@ void bhv_spiny_update(void) {
if ((lakitu->oSubAction == ENEMY_LAKITU_SUB_ACT_HOLD_SPINY) && (o->oAction == SPINY_ACT_HELD_BY_LAKITU)) {
lakitu->prevObj = o;
o->oAction = SPINY_ACT_HELD_BY_LAKITU;
- obj_init_animation_with_sound(o, spiny_egg_seg5_anims_050157E4, 0);
+ obj_init_animation_with_sound(o, (struct AnimationTable*)&spiny_egg_seg5_anims_050157E4, 0);
}
}
}
diff --git a/src/game/behaviors/water_splashes_and_waves.inc.c b/src/game/behaviors/water_splashes_and_waves.inc.c
index 5d115965c..8d0628fdb 100644
--- a/src/game/behaviors/water_splashes_and_waves.inc.c
+++ b/src/game/behaviors/water_splashes_and_waves.inc.c
@@ -123,7 +123,7 @@ void bhv_shallow_water_splash_init(void) {
{
fishObj = spawn_water_droplet(o, &sWaterDropletFishParams);
if (fishObj != NULL) {
- obj_init_animation_with_sound(fishObj, blue_fish_seg3_anims_0301C2B0, 0);
+ obj_init_animation_with_sound(fishObj, &blue_fish_seg3_anims_0301C2B0, 0);
}
}
}
diff --git a/src/game/behaviors/wiggler.inc.c b/src/game/behaviors/wiggler.inc.c
index a74dc6081..16257c12f 100644
--- a/src/game/behaviors/wiggler.inc.c
+++ b/src/game/behaviors/wiggler.inc.c
@@ -151,7 +151,7 @@ void wiggler_init_segments(void) {
for (s32 i = 1; i <= 3; i++) {
struct Object *bodyPart = spawn_object_relative(i, 0, 0, 0, o, MODEL_WIGGLER_BODY, bhvWigglerBody);
if (bodyPart != NULL) {
- obj_init_animation_with_sound(bodyPart, wiggler_seg5_anims_0500C874, 0);
+ obj_init_animation_with_sound(bodyPart, (struct AnimationTable*)&wiggler_seg5_anims_0500C874, 0);
bodyPart->header.gfx.animInfo.animFrame = (23 * i) % 26 - 1;
}
}
diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c
index dc81b3b6b..374d93ac7 100644
--- a/src/game/object_helpers.c
+++ b/src/game/object_helpers.c
@@ -790,8 +790,10 @@ void obj_set_gfx_pos_from_pos(struct Object *obj) {
}
void obj_init_animation(struct Object *obj, s32 animIndex) {
- struct Animation **anims = o->oAnimations;
- geo_obj_init_animation(&obj->header.gfx, &anims[animIndex]);
+ struct AnimationTable *animations = o->oAnimations;
+ if (animations && (u32)animIndex < animations->count) {
+ geo_obj_init_animation(&obj->header.gfx, animations->anims[animIndex]);
+ }
}
/**
@@ -871,46 +873,44 @@ void cur_obj_scale(f32 scale) {
}
void cur_obj_init_animation(s32 animIndex) {
- struct Animation **anims = o->oAnimations;
- if (anims != NULL) {
- geo_obj_init_animation(&o->header.gfx, &anims[animIndex]);
+ struct AnimationTable *animations = o->oAnimations;
+ if (animations && (u32)animIndex < animations->count) {
+ geo_obj_init_animation(&o->header.gfx, animations->anims[animIndex]);
}
}
void cur_obj_init_animation_with_sound(s32 animIndex) {
- struct Animation **anims = o->oAnimations;
- if (anims != NULL) {
- geo_obj_init_animation(&o->header.gfx, &anims[animIndex]);
+ struct AnimationTable *animations = o->oAnimations;
+ if (animations && (u32)animIndex < animations->count) {
+ geo_obj_init_animation(&o->header.gfx, animations->anims[animIndex]);
}
o->oSoundStateID = animIndex;
}
void obj_init_animation_with_accel_and_sound(struct Object *obj, s32 animIndex, f32 accel) {
if (obj != NULL) {
- struct Animation **anims = obj->oAnimations;
- if (anims != NULL) {
+ struct AnimationTable *animations = o->oAnimations;
+ if (animations && (u32)animIndex < animations->count) {
s32 animAccel = (s32)(accel * 65536.0f);
- geo_obj_init_animation_accel(&obj->header.gfx, &anims[animIndex], animAccel);
+ geo_obj_init_animation_accel(&obj->header.gfx, animations->anims[animIndex], animAccel);
}
obj->oSoundStateID = animIndex;
}
}
void cur_obj_init_animation_with_accel_and_sound(s32 animIndex, f32 accel) {
- struct Animation **anims = o->oAnimations;
- if (anims != NULL) {
+ struct AnimationTable *animations = o->oAnimations;
+ if (animations && (u32)animIndex < animations->count) {
s32 animAccel = (s32)(accel * 65536.0f);
- geo_obj_init_animation_accel(&o->header.gfx, &anims[animIndex], animAccel);
+ geo_obj_init_animation_accel(&o->header.gfx, animations->anims[animIndex], animAccel);
}
o->oSoundStateID = animIndex;
}
-void obj_init_animation_with_sound(struct Object *obj, const struct Animation * const* animations, s32 animIndex) {
+void obj_init_animation_with_sound(struct Object *obj, const struct AnimationTable* animations, s32 animIndex) {
if (obj == NULL) { return; }
- struct Animation **anims = (struct Animation **)animations;
- obj->oAnimations = (struct Animation **)animations;
- if (anims != NULL) {
- geo_obj_init_animation(&obj->header.gfx, &anims[animIndex]);
+ if (animations && (u32)animIndex < animations->count) {
+ geo_obj_init_animation(&obj->header.gfx, animations->anims[animIndex]);
}
obj->oSoundStateID = animIndex;
}
diff --git a/src/game/object_helpers.h b/src/game/object_helpers.h
index 7e9675f18..5934ce933 100644
--- a/src/game/object_helpers.h
+++ b/src/game/object_helpers.h
@@ -138,7 +138,7 @@ void cur_obj_init_animation_with_sound(s32 animIndex);
void obj_init_animation_with_accel_and_sound(struct Object *obj, s32 animIndex, f32 accel);
void cur_obj_init_animation_with_accel_and_sound(s32 animIndex, f32 accel);
void cur_obj_init_animation(s32 animIndex);
-void obj_init_animation_with_sound(struct Object *obj, const struct Animation * const* animations, s32 animIndex);
+void obj_init_animation_with_sound(struct Object *obj, const struct AnimationTable* animations, s32 animIndex);
void cur_obj_enable_rendering(void);
void cur_obj_disable_rendering(void);
void cur_obj_unhide(void);
diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c
index ca1300d2f..7accd057e 100644
--- a/src/pc/lua/smlua_cobject_autogen.c
+++ b/src/pc/lua/smlua_cobject_autogen.c
@@ -43,7 +43,7 @@ static struct LuaObjectField sAnimationFields[LUA_ANIMATION_FIELD_COUNT] = {
{ "animYTransDivisor", LVT_S16, offsetof(struct Animation, animYTransDivisor), false, LOT_NONE },
{ "flags", LVT_S16, offsetof(struct Animation, flags), false, LOT_NONE },
{ "index", LVT_U16_P, offsetof(struct Animation, index), false, LOT_POINTER },
- { "length", LVT_U32, offsetof(struct Animation, length), false, LOT_NONE },
+ { "length", LVT_U32, offsetof(struct Animation, length), true, LOT_NONE },
{ "loopEnd", LVT_S16, offsetof(struct Animation, loopEnd), false, LOT_NONE },
{ "loopStart", LVT_S16, offsetof(struct Animation, loopStart), false, LOT_NONE },
{ "startFrame", LVT_S16, offsetof(struct Animation, startFrame), false, LOT_NONE },
@@ -51,6 +51,12 @@ static struct LuaObjectField sAnimationFields[LUA_ANIMATION_FIELD_COUNT] = {
{ "values", LVT_S16_P, offsetof(struct Animation, values), false, LOT_POINTER },
};
+#define LUA_ANIMATION_TABLE_FIELD_COUNT 1
+static struct LuaObjectField sAnimationTableFields[LUA_ANIMATION_TABLE_FIELD_COUNT] = {
+// { "const anims", LOT_???, offsetof(struct AnimationTable, const anims), true, LOT_??? }, <--- UNIMPLEMENTED
+ { "count", LVT_U32, offsetof(struct AnimationTable, count), true, LOT_NONE },
+};
+
#define LUA_AREA_FIELD_COUNT 18
static struct LuaObjectField sAreaFields[LUA_AREA_FIELD_COUNT] = {
{ "camera", LVT_COBJECT_P, offsetof(struct Area, camera), false, LOT_CAMERA },
@@ -2111,6 +2117,7 @@ static struct LuaObjectField sstruct802A1230Fields[LUA_STRUCT802_A1230_FIELD_COU
struct LuaObjectTable sLuaObjectAutogenTable[LOT_AUTOGEN_MAX - LOT_AUTOGEN_MIN] = {
{ LOT_ANIMINFO, sAnimInfoFields, LUA_ANIM_INFO_FIELD_COUNT },
{ LOT_ANIMATION, sAnimationFields, LUA_ANIMATION_FIELD_COUNT },
+ { LOT_ANIMATIONTABLE, sAnimationTableFields, LUA_ANIMATION_TABLE_FIELD_COUNT },
{ LOT_AREA, sAreaFields, LUA_AREA_FIELD_COUNT },
{ LOT_BASSAUDIO, sBassAudioFields, LUA_BASS_AUDIO_FIELD_COUNT },
{ LOT_BEHAVIORDIALOGS, sBehaviorDialogsFields, LUA_BEHAVIOR_DIALOGS_FIELD_COUNT },
diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h
index b31ae5ca8..95d12546a 100644
--- a/src/pc/lua/smlua_cobject_autogen.h
+++ b/src/pc/lua/smlua_cobject_autogen.h
@@ -7,6 +7,7 @@ enum LuaObjectAutogenType {
LOT_AUTOGEN_MIN = 1000,
LOT_ANIMINFO,
LOT_ANIMATION,
+ LOT_ANIMATIONTABLE,
LOT_AREA,
LOT_BASSAUDIO,
LOT_BEHAVIORDIALOGS,
diff --git a/src/pc/lua/utils/smlua_anim_utils.c b/src/pc/lua/utils/smlua_anim_utils.c
index 271a2f2e0..ef98dfa9c 100644
--- a/src/pc/lua/utils/smlua_anim_utils.c
+++ b/src/pc/lua/utils/smlua_anim_utils.c
@@ -30,62 +30,62 @@
#include "levels/castle_grounds/header.h"
struct GlobalObjectAnimations gGlobalObjectAnimations = {
- .amp_seg8_anims_08004034 = (struct Animation**) amp_seg8_anims_08004034,
- .birds_seg5_anims_050009E8 = (struct Animation**) birds_seg5_anims_050009E8,
- .blargg_seg5_anims_0500616C = (struct Animation**) blargg_seg5_anims_0500616C,
- .blue_fish_seg3_anims_0301C2B0 = (struct Animation**) blue_fish_seg3_anims_0301C2B0,
- .bobomb_seg8_anims_0802396C = (struct Animation**) bobomb_seg8_anims_0802396C,
- .bookend_seg5_anims_05002540 = (struct Animation**) bookend_seg5_anims_05002540,
- .bowser_key_seg3_anims_list = (struct Animation**) bowser_key_seg3_anims_list,
- .bowser_seg6_anims_06057690 = (struct Animation**) bowser_seg6_anims_06057690,
- .bub_seg6_anims_06012354 = (struct Animation**) bub_seg6_anims_06012354,
- .bully_seg5_anims_0500470C = (struct Animation**) bully_seg5_anims_0500470C,
- .butterfly_seg3_anims_030056B0 = (struct Animation**) butterfly_seg3_anims_030056B0,
- .castle_grounds_seg7_anims_flags = (struct Animation**) castle_grounds_seg7_anims_flags,
- .chain_chomp_seg6_anims_06025178 = (struct Animation**) chain_chomp_seg6_anims_06025178,
- .chair_seg5_anims_05005784 = (struct Animation**) chair_seg5_anims_05005784,
- .chilly_chief_seg6_anims_06003994 = (struct Animation**) chilly_chief_seg6_anims_06003994,
- .chuckya_seg8_anims_0800C070 = (struct Animation**) chuckya_seg8_anims_0800C070,
- .clam_shell_seg5_anims_05001744 = (struct Animation**) clam_shell_seg5_anims_05001744,
- .cyan_fish_seg6_anims_0600E264 = (struct Animation**) cyan_fish_seg6_anims_0600E264,
- .door_seg3_anims_030156C0 = (struct Animation**) door_seg3_anims_030156C0,
- .dorrie_seg6_anims_0600F638 = (struct Animation**) dorrie_seg6_anims_0600F638,
- .eyerok_seg5_anims_050116E4 = (struct Animation**) eyerok_seg5_anims_050116E4,
- .flyguy_seg8_anims_08011A64 = (struct Animation**) flyguy_seg8_anims_08011A64,
- .goomba_seg8_anims_0801DA4C = (struct Animation**) goomba_seg8_anims_0801DA4C,
- .heave_ho_seg5_anims_0501534C = (struct Animation**) heave_ho_seg5_anims_0501534C,
- .hoot_seg5_anims_05005768 = (struct Animation**) hoot_seg5_anims_05005768,
- .king_bobomb_seg5_anims_0500FE30 = (struct Animation**) king_bobomb_seg5_anims_0500FE30,
- .klepto_seg5_anims_05008CFC = (struct Animation**) klepto_seg5_anims_05008CFC,
- .koopa_flag_seg6_anims_06001028 = (struct Animation**) koopa_flag_seg6_anims_06001028,
- .koopa_seg6_anims_06011364 = (struct Animation**) koopa_seg6_anims_06011364,
- .lakitu_enemy_seg5_anims_050144D4 = (struct Animation**) lakitu_enemy_seg5_anims_050144D4,
- .lakitu_seg6_anims_060058F8 = (struct Animation**) lakitu_seg6_anims_060058F8,
- .mad_piano_seg5_anims_05009B14 = (struct Animation**) mad_piano_seg5_anims_05009B14,
- .manta_seg5_anims_05008EB4 = (struct Animation**) manta_seg5_anims_05008EB4,
- .mips_seg6_anims_06015634 = (struct Animation**) mips_seg6_anims_06015634,
- .moneybag_seg6_anims_06005E5C = (struct Animation**) moneybag_seg6_anims_06005E5C,
- .monty_mole_seg5_anims_05007248 = (struct Animation**) monty_mole_seg5_anims_05007248,
- .peach_seg5_anims_0501C41C = (struct Animation**) peach_seg5_anims_0501C41C,
- .penguin_seg5_anims_05008B74 = (struct Animation**) penguin_seg5_anims_05008B74,
- .piranha_plant_seg6_anims_0601C31C= (struct Animation**) piranha_plant_seg6_anims_0601C31C,
- .scuttlebug_seg6_anims_06015064 = (struct Animation**) scuttlebug_seg6_anims_06015064,
- .seaweed_seg6_anims_0600A4D4 = (struct Animation**) seaweed_seg6_anims_0600A4D4,
- .skeeter_seg6_anims_06007DE0 = (struct Animation**) skeeter_seg6_anims_06007DE0,
- .snowman_seg5_anims_0500D118 = (struct Animation**) snowman_seg5_anims_0500D118,
- .spindrift_seg5_anims_05002D68 = (struct Animation**) spindrift_seg5_anims_05002D68,
- .spiny_seg5_anims_05016EAC = (struct Animation**) spiny_seg5_anims_05016EAC,
- .spiny_egg_seg5_anims_050157E4 = (struct Animation**) spiny_egg_seg5_anims_050157E4,
- .sushi_seg5_anims_0500AE54 = (struct Animation**) sushi_seg5_anims_0500AE54,
- .swoop_seg6_anims_060070D0 = (struct Animation**) swoop_seg6_anims_060070D0,
- .toad_seg6_anims_0600FB58 = (struct Animation**) toad_seg6_anims_0600FB58,
- .ukiki_seg5_anims_05015784 = (struct Animation**) ukiki_seg5_anims_05015784,
- .unagi_seg5_anims_05012824 = (struct Animation**) unagi_seg5_anims_05012824,
- .water_ring_seg6_anims_06013F7C = (struct Animation**) water_ring_seg6_anims_06013F7C,
- .whomp_seg6_anims_06020A04 = (struct Animation**) whomp_seg6_anims_06020A04,
- .wiggler_seg5_anims_0500C874 = (struct Animation**) wiggler_seg5_anims_0500C874,
- .wiggler_seg5_anims_0500EC8C = (struct Animation**) wiggler_seg5_anims_0500EC8C,
- .yoshi_seg5_anims_05024100 = (struct Animation**) yoshi_seg5_anims_05024100,
+ .amp_seg8_anims_08004034 = (struct AnimationTable*) &_seg8_anims_08004034,
+ .birds_seg5_anims_050009E8 = (struct AnimationTable*) &birds_seg5_anims_050009E8,
+ .blargg_seg5_anims_0500616C = (struct AnimationTable*) &blargg_seg5_anims_0500616C,
+ .blue_fish_seg3_anims_0301C2B0 = (struct AnimationTable*) &blue_fish_seg3_anims_0301C2B0,
+ .bobomb_seg8_anims_0802396C = (struct AnimationTable*) &bobomb_seg8_anims_0802396C,
+ .bookend_seg5_anims_05002540 = (struct AnimationTable*) &bookend_seg5_anims_05002540,
+ .bowser_key_seg3_anims_list = (struct AnimationTable*) &bowser_key_seg3_anims_list,
+ .bowser_seg6_anims_06057690 = (struct AnimationTable*) &bowser_seg6_anims_06057690,
+ .bub_seg6_anims_06012354 = (struct AnimationTable*) &bub_seg6_anims_06012354,
+ .bully_seg5_anims_0500470C = (struct AnimationTable*) &bully_seg5_anims_0500470C,
+ .butterfly_seg3_anims_030056B0 = (struct AnimationTable*) &butterfly_seg3_anims_030056B0,
+ .castle_grounds_seg7_anims_flags = (struct AnimationTable*) &castle_grounds_seg7_anims_flags,
+ .chain_chomp_seg6_anims_06025178 = (struct AnimationTable*) &chain_chomp_seg6_anims_06025178,
+ .chair_seg5_anims_05005784 = (struct AnimationTable*) &chair_seg5_anims_05005784,
+ .chilly_chief_seg6_anims_06003994 = (struct AnimationTable*) &chilly_chief_seg6_anims_06003994,
+ .chuckya_seg8_anims_0800C070 = (struct AnimationTable*) &chuckya_seg8_anims_0800C070,
+ .clam_shell_seg5_anims_05001744 = (struct AnimationTable*) &clam_shell_seg5_anims_05001744,
+ .cyan_fish_seg6_anims_0600E264 = (struct AnimationTable*) &cyan_fish_seg6_anims_0600E264,
+ .door_seg3_anims_030156C0 = (struct AnimationTable*) &door_seg3_anims_030156C0,
+ .dorrie_seg6_anims_0600F638 = (struct AnimationTable*) &dorrie_seg6_anims_0600F638,
+ .eyerok_seg5_anims_050116E4 = (struct AnimationTable*) &eyerok_seg5_anims_050116E4,
+ .flyguy_seg8_anims_08011A64 = (struct AnimationTable*) &flyguy_seg8_anims_08011A64,
+ .goomba_seg8_anims_0801DA4C = (struct AnimationTable*) &goomba_seg8_anims_0801DA4C,
+ .heave_ho_seg5_anims_0501534C = (struct AnimationTable*) &heave_ho_seg5_anims_0501534C,
+ .hoot_seg5_anims_05005768 = (struct AnimationTable*) &hoot_seg5_anims_05005768,
+ .king_bobomb_seg5_anims_0500FE30 = (struct AnimationTable*) &king_bobomb_seg5_anims_0500FE30,
+ .klepto_seg5_anims_05008CFC = (struct AnimationTable*) &klepto_seg5_anims_05008CFC,
+ .koopa_flag_seg6_anims_06001028 = (struct AnimationTable*) &koopa_flag_seg6_anims_06001028,
+ .koopa_seg6_anims_06011364 = (struct AnimationTable*) &koopa_seg6_anims_06011364,
+ .lakitu_enemy_seg5_anims_050144D4 = (struct AnimationTable*) &lakitu_enemy_seg5_anims_050144D4,
+ .lakitu_seg6_anims_060058F8 = (struct AnimationTable*) &lakitu_seg6_anims_060058F8,
+ .mad_piano_seg5_anims_05009B14 = (struct AnimationTable*) &mad_piano_seg5_anims_05009B14,
+ .manta_seg5_anims_05008EB4 = (struct AnimationTable*) &manta_seg5_anims_05008EB4,
+ .mips_seg6_anims_06015634 = (struct AnimationTable*) &mips_seg6_anims_06015634,
+ .moneybag_seg6_anims_06005E5C = (struct AnimationTable*) &moneybag_seg6_anims_06005E5C,
+ .monty_mole_seg5_anims_05007248 = (struct AnimationTable*) &monty_mole_seg5_anims_05007248,
+ .peach_seg5_anims_0501C41C = (struct AnimationTable*) &peach_seg5_anims_0501C41C,
+ .penguin_seg5_anims_05008B74 = (struct AnimationTable*) &penguin_seg5_anims_05008B74,
+ .piranha_plant_seg6_anims_0601C31C= (struct AnimationTable*) &piranha_plant_seg6_anims_0601C31C,
+ .scuttlebug_seg6_anims_06015064 = (struct AnimationTable*) &scuttlebug_seg6_anims_06015064,
+ .seaweed_seg6_anims_0600A4D4 = (struct AnimationTable*) &seaweed_seg6_anims_0600A4D4,
+ .skeeter_seg6_anims_06007DE0 = (struct AnimationTable*) &skeeter_seg6_anims_06007DE0,
+ .snowman_seg5_anims_0500D118 = (struct AnimationTable*) &snowman_seg5_anims_0500D118,
+ .spindrift_seg5_anims_05002D68 = (struct AnimationTable*) &spindrift_seg5_anims_05002D68,
+ .spiny_seg5_anims_05016EAC = (struct AnimationTable*) &spiny_seg5_anims_05016EAC,
+ .spiny_egg_seg5_anims_050157E4 = (struct AnimationTable*) &spiny_egg_seg5_anims_050157E4,
+ .sushi_seg5_anims_0500AE54 = (struct AnimationTable*) &sushi_seg5_anims_0500AE54,
+ .swoop_seg6_anims_060070D0 = (struct AnimationTable*) &swoop_seg6_anims_060070D0,
+ .toad_seg6_anims_0600FB58 = (struct AnimationTable*) &toad_seg6_anims_0600FB58,
+ .ukiki_seg5_anims_05015784 = (struct AnimationTable*) &ukiki_seg5_anims_05015784,
+ .unagi_seg5_anims_05012824 = (struct AnimationTable*) &unagi_seg5_anims_05012824,
+ .water_ring_seg6_anims_06013F7C = (struct AnimationTable*) &water_ring_seg6_anims_06013F7C,
+ .whomp_seg6_anims_06020A04 = (struct AnimationTable*) &whomp_seg6_anims_06020A04,
+ .wiggler_seg5_anims_0500C874 = (struct AnimationTable*) &wiggler_seg5_anims_0500C874,
+ .wiggler_seg5_anims_0500EC8C = (struct AnimationTable*) &wiggler_seg5_anims_0500EC8C,
+ .yoshi_seg5_anims_05024100 = (struct AnimationTable*) &yoshi_seg5_anims_05024100,
};
///////////////////////
diff --git a/src/pc/lua/utils/smlua_anim_utils.h b/src/pc/lua/utils/smlua_anim_utils.h
index f21006a6e..56c0ca1a3 100644
--- a/src/pc/lua/utils/smlua_anim_utils.h
+++ b/src/pc/lua/utils/smlua_anim_utils.h
@@ -3,7 +3,7 @@
#include "types.h"
-typedef struct Animation* ObjectAnimPointer;
+typedef struct AnimationTable ObjectAnimPointer;
struct GlobalObjectAnimations {
ObjectAnimPointer* amp_seg8_anims_08004034;