From d30b1e61a6f821c134b2b92f92477287c0cc0d94 Mon Sep 17 00:00:00 2001 From: MysterD Date: Wed, 10 May 2023 15:20:52 -0700 Subject: [PATCH] Add a container to animation tables so that we can track their length and stay in bounds --- actors/amp/anims/table.inc.c | 5 +- actors/bird/anims/table.inc.c | 9 +- actors/blargg/anims/table.inc.c | 11 +- actors/blue_fish/anims/table.inc.c | 6 +- actors/bobomb/anims/table.inc.c | 11 +- actors/bookend/anims/table.inc.c | 13 +- actors/bowser/anims/table.inc.c | 59 ++++---- actors/bowser_key/anims/table.inc.c | 9 +- actors/bub/anims/table.inc.c | 11 +- actors/bully/anims/table.inc.c | 15 +- actors/butterfly/anims/table.inc.c | 9 +- actors/chain_chomp/anims/table.inc.c | 9 +- actors/chair/anims/table.inc.c | 7 +- actors/chillychief/anims/table.inc.c | 15 +- actors/chuckya/anims/table.inc.c | 17 ++- actors/clam_shell/anims/table.inc.c | 11 +- actors/common0.h | 10 +- actors/common1.h | 8 +- actors/cyan_fish/anims/table.inc.c | 11 +- actors/door/anims/table.inc.c | 17 ++- actors/dorrie/anims/table.inc.c | 11 +- actors/eyerok/anims/table.inc.c | 23 +-- actors/flyguy/anims/table.inc.c | 11 +- actors/goomba/anims/table.inc.c | 11 +- actors/group1.h | 4 +- actors/group10.h | 6 +- actors/group11.h | 10 +- actors/group12.h | 2 +- actors/group13.h | 10 +- actors/group14.h | 10 +- actors/group15.h | 6 +- actors/group16.h | 4 +- actors/group17.h | 6 +- actors/group2.h | 4 +- actors/group3.h | 2 +- actors/group4.h | 8 +- actors/group5.h | 4 +- actors/group6.h | 4 +- actors/group7.h | 6 +- actors/group9.h | 6 +- actors/heave_ho/anims/table.inc.c | 11 +- actors/hoot/anims/table.inc.c | 9 +- actors/king_bobomb/anims/table.inc.c | 29 ++-- actors/klepto/anims/table.inc.c | 23 +-- actors/koopa/anims/table.inc.c | 39 ++--- actors/koopa_flag/anims/table.inc.c | 9 +- actors/lakitu_cameraman/anims/table.inc.c | 9 +- actors/lakitu_enemy/anims/table.inc.c | 19 ++- actors/mad_piano/anims/table.inc.c | 11 +- actors/manta/anims/table.inc.c | 11 +- actors/mips/anims/table.inc.c | 19 ++- actors/moneybag/anims/table.inc.c | 15 +- actors/monty_mole/anims/table.inc.c | 29 ++-- actors/peach/anims/table.inc.c | 31 ++-- actors/penguin/anims/table.inc.c | 15 +- actors/piranha_plant/anims/table.inc.c | 27 ++-- actors/scuttlebug/anims/table.inc.c | 7 +- actors/seaweed/anims/table.inc.c | 7 +- actors/skeeter/anims/table.inc.c | 13 +- actors/snowman/anims/table.inc.c | 13 +- actors/spindrift/anims/table.inc.c | 13 +- actors/spiny/anims/table.inc.c | 11 +- actors/spiny_egg/anims/table.inc.c | 11 +- actors/sushi/anims/table.inc.c | 7 +- actors/swoop/anims/table.inc.c | 9 +- actors/toad/anims/table.inc.c | 21 +-- actors/ukiki/anims/table.inc.c | 35 +++-- actors/unagi/anims/table.inc.c | 19 ++- actors/water_ring/anims/table.inc.c | 11 +- actors/whomp/anims/table.inc.c | 9 +- actors/wiggler_body/anims/table.inc.c | 7 +- actors/wiggler_head/anims/table.inc.c | 7 +- actors/yoshi/anims/table.inc.c | 13 +- autogen/convert_functions.py | 29 ++++ autogen/convert_structs.py | 2 + autogen/lua_definitions/structs.lua | 3 + data/behavior_data.c | 142 +++++++++--------- data/dynos_mgr_anim.cpp | 5 +- data/dynos_mgr_builtin.cpp | 111 +++++++------- docs/lua/structs.md | 13 +- include/types.h | 7 +- levels/castle_grounds/areas/1/11/anim.inc.c | 7 +- levels/castle_grounds/header.h | 2 +- src/engine/behavior_script.c | 6 +- src/engine/graph_node.c | 24 +-- src/engine/graph_node.h | 4 +- src/game/behaviors/bowser.inc.c | 24 +-- src/game/behaviors/enemy_lakitu.inc.c | 2 +- src/game/behaviors/fish.inc.c | 12 +- src/game/behaviors/spiny.inc.c | 16 +- .../behaviors/water_splashes_and_waves.inc.c | 2 +- src/game/behaviors/wiggler.inc.c | 2 +- src/game/object_helpers.c | 38 ++--- src/game/object_helpers.h | 2 +- src/pc/lua/smlua_cobject_autogen.c | 9 +- src/pc/lua/smlua_cobject_autogen.h | 1 + src/pc/lua/utils/smlua_anim_utils.c | 112 +++++++------- src/pc/lua/utils/smlua_anim_utils.h | 2 +- 98 files changed, 864 insertions(+), 643 deletions(-) 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;