From 4638ff6f220438dddf49f74df16f9a270e43e829 Mon Sep 17 00:00:00 2001 From: MysterD Date: Wed, 9 Mar 2022 22:58:45 -0800 Subject: [PATCH] Added the ability to set surface collisions on custom behaviors --- autogen/common.py | 2 +- autogen/convert_functions.py | 2 + autogen/convert_structs.py | 3 +- .../examples/behavior-surface-collisions.lua | 36 +++ docs/lua/functions.md | 126 +++++++++- docs/lua/globals.md | 7 + docs/lua/lua.md | 1 + docs/lua/structs.md | 110 +++++++++ include/types.h | 2 +- mods/football.lua | 3 - src/engine/behavior_script.c | 2 +- src/pc/lua/smlua_anim_utils.h | 1 + src/pc/lua/smlua_cobject.c | 9 + src/pc/lua/smlua_cobject.h | 2 + src/pc/lua/smlua_cobject_autogen.c | 215 +++++++++++++----- src/pc/lua/smlua_cobject_autogen.h | 1 + src/pc/lua/smlua_collision_utils.c | 162 +++++++++++++ src/pc/lua/smlua_collision_utils.h | 115 ++++++++++ src/pc/lua/smlua_functions_autogen.c | 82 ++++++- src/pc/lua/smlua_misc_utils.c | 9 - src/pc/lua/smlua_misc_utils.h | 6 - 21 files changed, 813 insertions(+), 83 deletions(-) create mode 100644 docs/lua/examples/behavior-surface-collisions.lua create mode 100644 src/pc/lua/smlua_collision_utils.c create mode 100644 src/pc/lua/smlua_collision_utils.h diff --git a/autogen/common.py b/autogen/common.py index dff16f11..dc22d685 100644 --- a/autogen/common.py +++ b/autogen/common.py @@ -2,7 +2,7 @@ import os usf_types = ['u8', 'u16', 'u32', 'u64', 's8', 's16', 's32', 's64', 'f32'] vec3_types = ['Vec3s', 'Vec3f'] -typedef_pointers = ['BehaviorScript', 'ObjectAnimPointer'] +typedef_pointers = ['BehaviorScript', 'ObjectAnimPointer', 'Collision'] exclude_structs = [ 'SPTask', diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index 27175c34..e93da6f2 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -37,10 +37,12 @@ in_files = [ "include/behavior_table.h", "src/pc/lua/smlua_obj_utils.h", "src/pc/lua/smlua_misc_utils.h", + 'src/pc/lua/smlua_collision_utils.h', "src/game/object_helpers.c", "src/game/obj_behaviors.c", "src/game/obj_behaviors_2.c", "src/game/spawn_sound.c", + "src/engine/surface_load.h", ] override_allowed_functions = { diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py index 9a558477..6c0d335a 100644 --- a/autogen/convert_structs.py +++ b/autogen/convert_structs.py @@ -17,6 +17,7 @@ in_files = [ 'src/game/mario_step.h', 'src/pc/lua/smlua_anim_utils.h', 'src/pc/lua/smlua_misc_utils.h', + 'src/pc/lua/smlua_collision_utils.h', 'src/game/spawn_sound.h', ] @@ -204,7 +205,7 @@ def get_struct_field_info(struct, field): lvt = translate_type_to_lvt(ftype) lot = translate_type_to_lot(ftype) fimmutable = str(lvt == 'LVT_COBJECT' or 'const ' in ftype).lower() - if lvt.startswith('LVT_') and lvt.endswith('_P') and 'OBJECT' not in lvt: + if lvt.startswith('LVT_') and lvt.endswith('_P') and 'OBJECT' not in lvt and 'COLLISION' not in lvt: fimmutable = 'true' if sid in override_field_immutable: diff --git a/docs/lua/examples/behavior-surface-collisions.lua b/docs/lua/examples/behavior-surface-collisions.lua new file mode 100644 index 00000000..2cf1eb6e --- /dev/null +++ b/docs/lua/examples/behavior-surface-collisions.lua @@ -0,0 +1,36 @@ +-- name: Custom Box with collisions +-- description: Press DPAD+down to spawn a box + +function bhv_custom_box_init(obj) + obj.oFlags = OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE + obj.collisionData = gGlobalObjectCollisionData.breakable_box_seg8_collision_08012D70 + obj.oCollisionDistance = 500 +end + +function bhv_custom_box_loop(obj) + load_object_collision_model() +end + +-- hook the behavior +id_bhvCustomBox = hook_behavior(nil, OBJ_LIST_SURFACE, true, bhv_custom_box_init, bhv_custom_box_loop) + +------------------------ + +function mario_update_local(m) + if (m.controller.buttonPressed & D_JPAD) ~= 0 then + -- spawn breakable box + spawn_non_sync_object( + id_bhvCustomBox, + E_MODEL_BREAKABLE_BOX, + m.pos.x, m.pos.y, m.pos.z, + nil) + end +end + +function mario_update(m) + if m.playerIndex == 0 then + mario_update_local(m) + end +end + +hook_event(HOOK_MARIO_UPDATE, mario_update) diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 8937d724..d18b101c 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -617,8 +617,12 @@
-- smlua_misc_utils.h +- smlua_collision_utils.h - [collision_find_surface_on_ray](#collision_find_surface_on_ray) + +
+ +- smlua_misc_utils.h - [get_network_area_timer](#get_network_area_timer)
@@ -680,6 +684,15 @@
+- surface_load.h + - [alloc_surface_pools](#alloc_surface_pools) + - [clear_dynamic_surfaces](#clear_dynamic_surfaces) + - [get_area_terrain_size](#get_area_terrain_size) + - [load_area_terrain](#load_area_terrain) + - [load_object_collision_model](#load_object_collision_model) + +
+ - thread6.c - [queue_rumble_data](#queue_rumble_data) - [queue_rumble_data_mario](#queue_rumble_data_mario) @@ -11394,7 +11407,7 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
--- -# functions from smlua_misc_utils.h +# functions from smlua_collision_utils.h
@@ -11424,6 +11437,12 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+--- +# functions from smlua_misc_utils.h + +
+ + ## [get_network_area_timer](#get_network_area_timer) ### Lua Example @@ -12297,6 +12316,109 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+--- +# functions from surface_load.h + +
+ + +## [alloc_surface_pools](#alloc_surface_pools) + +### Lua Example +`alloc_surface_pools()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void alloc_surface_pools(void);` + +[:arrow_up_small:](#) + +
+ +## [clear_dynamic_surfaces](#clear_dynamic_surfaces) + +### Lua Example +`clear_dynamic_surfaces()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void clear_dynamic_surfaces(void);` + +[:arrow_up_small:](#) + +
+ +## [get_area_terrain_size](#get_area_terrain_size) + +### Lua Example +`local integerValue = get_area_terrain_size(data)` + +### Parameters +| Field | Type | +| ----- | ---- | +| data | `Pointer` <`integer`> | + +### Returns +- `integer` + +### C Prototype +`u32 get_area_terrain_size(s16 *data);` + +[:arrow_up_small:](#) + +
+ +## [load_area_terrain](#load_area_terrain) + +### Lua Example +`load_area_terrain(index, data, surfaceRooms, macroObjects)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | +| data | `Pointer` <`integer`> | +| surfaceRooms | `Pointer` <`integer`> | +| macroObjects | `Pointer` <`integer`> | + +### Returns +- None + +### C Prototype +`void load_area_terrain(s16 index, s16 *data, s8 *surfaceRooms, s16 *macroObjects);` + +[:arrow_up_small:](#) + +
+ +## [load_object_collision_model](#load_object_collision_model) + +### Lua Example +`load_object_collision_model()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void load_object_collision_model(void);` + +[:arrow_up_small:](#) + +
+ --- # functions from thread6.c diff --git a/docs/lua/globals.md b/docs/lua/globals.md index 2db0b1d0..90884346 100644 --- a/docs/lua/globals.md +++ b/docs/lua/globals.md @@ -44,6 +44,13 @@ The `gObjectAnimations` table contains references to object animations. Listed i
+## [gGlobalObjectCollisionData](#gGlobalObjectCollisionData) +The `gGlobalObjectCollisionData` table contains references to object collision data. Listed in [GlobalObjectCollisionData](structs.md#GlobalObjectCollisionData). + +[:arrow_up_small:](#) + +
+ ## [gGlobalSyncTable](#gGlobalSyncTable) The `gGlobalSyncTable` is a table used for networking. Any field set inside of this table is automatically synchronized with all other clients. Do not use this table for player-specific variables, keep those in [gPlayerSyncTable](#gPlayerSyncTable). Player-specific variable will desynchronize within this table since it doesn't automatically translate `playerIndex`. diff --git a/docs/lua/lua.md b/docs/lua/lua.md index 62ba9fec..1f9e57e0 100644 --- a/docs/lua/lua.md +++ b/docs/lua/lua.md @@ -52,3 +52,4 @@ All of this is a holdover from when there were only two players. It was a reason - [Custom Ball Behavior](examples/behavior-ball.lua) - [Replace Goomba Behavior](examples/behavior-replace-goomba.lua) - [Add to Goomba Behavior](examples/behavior-add-to-goomba.lua) +- [Behavior with Surface Collisions](examples/behavior-surface-collisions.lua) diff --git a/docs/lua/structs.md b/docs/lua/structs.md index 5653152c..dddd8a96 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -17,6 +17,7 @@ - [CutsceneVariable](#CutsceneVariable) - [FloorGeometry](#FloorGeometry) - [GlobalObjectAnimations](#GlobalObjectAnimations) +- [GlobalObjectCollisionData](#GlobalObjectCollisionData) - [GlobalTextures](#GlobalTextures) - [GraphNode](#GraphNode) - [GraphNodeObject](#GraphNodeObject) @@ -419,6 +420,114 @@
+## [GlobalObjectCollisionData](#GlobalObjectCollisionData) + +| Field | Type | Access | +| ----- | ---- | ------ | +| bbh_seg7_collision_coffin | `Pointer` <`Collision`> | | +| bbh_seg7_collision_haunted_bookshelf | `Pointer` <`Collision`> | | +| bbh_seg7_collision_merry_go_round | `Pointer` <`Collision`> | | +| bbh_seg7_collision_mesh_elevator | `Pointer` <`Collision`> | | +| bbh_seg7_collision_staircase_step | `Pointer` <`Collision`> | | +| bbh_seg7_collision_tilt_floor_platform | `Pointer` <`Collision`> | | +| bitdw_seg7_collision_moving_pyramid | `Pointer` <`Collision`> | | +| bitfs_seg7_collision_inverted_pyramid | `Pointer` <`Collision`> | | +| bitfs_seg7_collision_sinking_cage_platform | `Pointer` <`Collision`> | | +| bitfs_seg7_collision_sinking_platform | `Pointer` <`Collision`> | | +| bitfs_seg7_collision_squishable_platform | `Pointer` <`Collision`> | | +| blue_coin_switch_seg8_collision_08000E98 | `Pointer` <`Collision`> | | +| bob_seg7_collision_chain_chomp_gate | `Pointer` <`Collision`> | | +| bowser_2_seg7_collision_tilting_platform | `Pointer` <`Collision`> | | +| breakable_box_seg8_collision_08012D70 | `Pointer` <`Collision`> | | +| cannon_lid_seg8_collision_08004950 | `Pointer` <`Collision`> | | +| capswitch_collision_050033D0 | `Pointer` <`Collision`> | | +| capswitch_collision_05003448 | `Pointer` <`Collision`> | | +| castle_grounds_seg7_collision_cannon_grill | `Pointer` <`Collision`> | | +| castle_grounds_seg7_collision_moat_grills | `Pointer` <`Collision`> | | +| checkerboard_platform_seg8_collision_0800D710 | `Pointer` <`Collision`> | | +| ddd_seg7_collision_bowser_sub_door | `Pointer` <`Collision`> | | +| ddd_seg7_collision_submarine | `Pointer` <`Collision`> | | +| door_seg3_collision_0301CE78 | `Pointer` <`Collision`> | | +| dorrie_seg6_collision_0600F644 | `Pointer` <`Collision`> | | +| exclamation_box_outline_seg8_collision_08025F78 | `Pointer` <`Collision`> | | +| hmc_seg7_collision_controllable_platform | `Pointer` <`Collision`> | | +| hmc_seg7_collision_controllable_platform_sub | `Pointer` <`Collision`> | | +| hmc_seg7_collision_elevator | `Pointer` <`Collision`> | | +| inside_castle_seg7_collision_floor_trap | `Pointer` <`Collision`> | | +| inside_castle_seg7_collision_star_door | `Pointer` <`Collision`> | | +| inside_castle_seg7_collision_water_level_pillar | `Pointer` <`Collision`> | | +| jrb_seg7_collision_floating_box | `Pointer` <`Collision`> | | +| jrb_seg7_collision_floating_platform | `Pointer` <`Collision`> | | +| jrb_seg7_collision_in_sunken_ship | `Pointer` <`Collision`> | | +| jrb_seg7_collision_in_sunken_ship_2 | `Pointer` <`Collision`> | | +| jrb_seg7_collision_in_sunken_ship_3 | `Pointer` <`Collision`> | | +| jrb_seg7_collision_pillar_base | `Pointer` <`Collision`> | | +| jrb_seg7_collision_rock_solid | `Pointer` <`Collision`> | | +| lll_hexagonal_mesh_seg3_collision_0301CECC | `Pointer` <`Collision`> | | +| lll_seg7_collision_drawbridge | `Pointer` <`Collision`> | | +| lll_seg7_collision_falling_wall | `Pointer` <`Collision`> | | +| lll_seg7_collision_floating_block | `Pointer` <`Collision`> | | +| lll_seg7_collision_hexagonal_platform | `Pointer` <`Collision`> | | +| lll_seg7_collision_inverted_pyramid | `Pointer` <`Collision`> | | +| lll_seg7_collision_octagonal_moving_platform | `Pointer` <`Collision`> | | +| lll_seg7_collision_pitoune | `Pointer` <`Collision`> | | +| lll_seg7_collision_puzzle_piece | `Pointer` <`Collision`> | | +| lll_seg7_collision_rotating_fire_bars | `Pointer` <`Collision`> | | +| lll_seg7_collision_rotating_platform | `Pointer` <`Collision`> | | +| lll_seg7_collision_sinking_pyramids | `Pointer` <`Collision`> | | +| lll_seg7_collision_slow_tilting_platform | `Pointer` <`Collision`> | | +| lll_seg7_collision_wood_piece | `Pointer` <`Collision`> | | +| metal_box_seg8_collision_08024C28 | `Pointer` <`Collision`> | | +| penguin_seg5_collision_05008B88 | `Pointer` <`Collision`> | | +| poundable_pole_collision_06002490 | `Pointer` <`Collision`> | | +| purple_switch_seg8_collision_0800C7A8 | `Pointer` <`Collision`> | | +| rr_seg7_collision_donut_platform | `Pointer` <`Collision`> | | +| rr_seg7_collision_elevator_platform | `Pointer` <`Collision`> | | +| rr_seg7_collision_pendulum | `Pointer` <`Collision`> | | +| rr_seg7_collision_rotating_platform_with_fire | `Pointer` <`Collision`> | | +| sl_seg7_collision_pound_explodes | `Pointer` <`Collision`> | | +| sl_seg7_collision_sliding_snow_mound | `Pointer` <`Collision`> | | +| springboard_collision_05001A28 | `Pointer` <`Collision`> | | +| ssl_seg7_collision_0702808C | `Pointer` <`Collision`> | | +| ssl_seg7_collision_grindel | `Pointer` <`Collision`> | | +| ssl_seg7_collision_pyramid_elevator | `Pointer` <`Collision`> | | +| ssl_seg7_collision_pyramid_top | `Pointer` <`Collision`> | | +| ssl_seg7_collision_spindel | `Pointer` <`Collision`> | | +| ssl_seg7_collision_tox_box | `Pointer` <`Collision`> | | +| thi_seg7_collision_top_trap | `Pointer` <`Collision`> | | +| thwomp_seg5_collision_0500B7D0 | `Pointer` <`Collision`> | | +| thwomp_seg5_collision_0500B92C | `Pointer` <`Collision`> | | +| ttc_seg7_collision_clock_main_rotation | `Pointer` <`Collision`> | | +| ttc_seg7_collision_clock_pendulum | `Pointer` <`Collision`> | | +| ttc_seg7_collision_clock_platform | `Pointer` <`Collision`> | | +| ttc_seg7_collision_rotating_clock_platform2 | `Pointer` <`Collision`> | | +| ttc_seg7_collision_sliding_surface | `Pointer` <`Collision`> | | +| ttm_seg7_collision_pitoune_2 | `Pointer` <`Collision`> | | +| ttm_seg7_collision_podium_warp | `Pointer` <`Collision`> | | +| ttm_seg7_collision_ukiki_cage | `Pointer` <`Collision`> | | +| warp_pipe_seg3_collision_03009AC8 | `Pointer` <`Collision`> | | +| wdw_seg7_collision_arrow_lift | `Pointer` <`Collision`> | | +| wdw_seg7_collision_express_elevator_platform | `Pointer` <`Collision`> | | +| wdw_seg7_collision_rect_floating_platform | `Pointer` <`Collision`> | | +| wdw_seg7_collision_square_floating_platform | `Pointer` <`Collision`> | | +| wf_seg7_collision_breakable_wall | `Pointer` <`Collision`> | | +| wf_seg7_collision_breakable_wall_2 | `Pointer` <`Collision`> | | +| wf_seg7_collision_bullet_bill_cannon | `Pointer` <`Collision`> | | +| wf_seg7_collision_clocklike_rotation | `Pointer` <`Collision`> | | +| wf_seg7_collision_kickable_board | `Pointer` <`Collision`> | | +| wf_seg7_collision_large_bomp | `Pointer` <`Collision`> | | +| wf_seg7_collision_platform | `Pointer` <`Collision`> | | +| wf_seg7_collision_sliding_brick_platform | `Pointer` <`Collision`> | | +| wf_seg7_collision_small_bomp | `Pointer` <`Collision`> | | +| wf_seg7_collision_tower | `Pointer` <`Collision`> | | +| wf_seg7_collision_tower_door | `Pointer` <`Collision`> | | +| whomp_seg6_collision_06020A0C | `Pointer` <`Collision`> | | +| wooden_signpost_seg3_collision_0302DD80 | `Pointer` <`Collision`> | | + +[:arrow_up_small:](#) + +
+ ## [GlobalTextures](#GlobalTextures) | Field | Type | Access | @@ -747,6 +856,7 @@ | bhvDelayTimer | `integer` | | | bhvStackIndex | `integer` | | | collidedObjInteractTypes | `integer` | | +| collisionData | `Pointer` <`Collision`> | | | coopFlags | `integer` | read-only | | curBhvCommand | `Pointer` <`BehaviorScript`> | read-only | | globalPlayerIndex | `integer` | | diff --git a/include/types.h b/include/types.h index 6132a697..7e18f951 100644 --- a/include/types.h +++ b/include/types.h @@ -220,7 +220,7 @@ struct Object /*0x20C*/ const BehaviorScript *behavior; /*0x210*/ u32 heldByPlayerIndex; /*0x214*/ struct Object *platform; - /*0x218*/ void *collisionData; + /*0x218*/ Collision *collisionData; /*0x21C*/ Mat4 transform; /*0x25C*/ void *respawnInfo; /*?????*/ u8 coopFlags; diff --git a/mods/football.lua b/mods/football.lua index 16854fb9..e6592568 100644 --- a/mods/football.lua +++ b/mods/football.lua @@ -222,9 +222,6 @@ function bhv_ball_init(obj) obj.hitboxRadius = 100 obj.hitboxHeight = 100 - -- area timer - table.insert(gInitializeBalls, obj) - -- custom values obj.oNetworkTime = 0 obj.oHitTime = 0 diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index af86e3e1..c8f4fb83 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -776,7 +776,7 @@ static s32 bhv_cmd_set_int_random_from_table(void) { static s32 bhv_cmd_load_collision_data(void) { u32 *collisionData = segmented_to_virtual(BHV_CMD_GET_VPTR(1)); - gCurrentObject->collisionData = collisionData; + gCurrentObject->collisionData = (Collision*)collisionData; gCurBhvCommand += 2; return BHV_PROC_CONTINUE; diff --git a/src/pc/lua/smlua_anim_utils.h b/src/pc/lua/smlua_anim_utils.h index a1efcb9f..53742620 100644 --- a/src/pc/lua/smlua_anim_utils.h +++ b/src/pc/lua/smlua_anim_utils.h @@ -58,6 +58,7 @@ struct GlobalObjectAnimations { ObjectAnimPointer* wiggler_seg5_anims_0500EC8C; ObjectAnimPointer* yoshi_seg5_anims_05024100; }; + extern struct GlobalObjectAnimations gGlobalObjectAnimations; #endif diff --git a/src/pc/lua/smlua_cobject.c b/src/pc/lua/smlua_cobject.c index 7798f09b..9c0b6bf2 100644 --- a/src/pc/lua/smlua_cobject.c +++ b/src/pc/lua/smlua_cobject.c @@ -8,6 +8,7 @@ #include "pc/djui/djui_hud_utils.h" #include "pc/lua/smlua.h" #include "pc/lua/smlua_anim_utils.h" +#include "pc/lua/smlua_collision_utils.h" #include "pc/mod_list.h" #define LUA_VEC3S_FIELD_COUNT 3 @@ -304,6 +305,7 @@ static int smlua__get_field(lua_State* L) { case LVT_STRING_P: lua_pushstring(L, *(char**)p); break; case LVT_BEHAVIORSCRIPT: lua_pushinteger(L, *(s32*)p); break; case LVT_OBJECTANIMPOINTER: lua_pushinteger(L, *(s32*)p); break; + case LVT_COLLISION: lua_pushinteger(L, *(s32*)p); break; // pointers case LVT_U8_P: @@ -315,6 +317,7 @@ static int smlua__get_field(lua_State* L) { case LVT_F32_P: case LVT_BEHAVIORSCRIPT_P: case LVT_OBJECTANIMPOINTER_P: + case LVT_COLLISION_P: smlua_push_pointer(L, data->valueType, *(u8**)p); break; @@ -403,6 +406,7 @@ static int smlua__set_field(lua_State* L) { case LVT_F32_P: case LVT_BEHAVIORSCRIPT_P: case LVT_OBJECTANIMPOINTER_P: + case LVT_COLLISION_P: valuePointer = smlua_to_cpointer(L, 4, data->valueType); if (gSmLuaConvertSuccess) { *(u8**)p = valuePointer; @@ -474,6 +478,11 @@ void smlua_cobject_init_globals(void) { lua_setglobal(L, "gObjectAnimations"); } + { + smlua_push_object(L, LOT_GLOBALOBJECTCOLLISIONDATA, &gGlobalObjectCollisionData); + lua_setglobal(L, "gGlobalObjectCollisionData"); + } + } void smlua_cobject_init_per_file_globals(char* path) { diff --git a/src/pc/lua/smlua_cobject.h b/src/pc/lua/smlua_cobject.h index 9d0857c7..eb8b0460 100644 --- a/src/pc/lua/smlua_cobject.h +++ b/src/pc/lua/smlua_cobject.h @@ -25,6 +25,8 @@ enum LuaValueType { LVT_BEHAVIORSCRIPT_P, LVT_OBJECTANIMPOINTER, LVT_OBJECTANIMPOINTER_P, + LVT_COLLISION, + LVT_COLLISION_P, LVT_LUAFUNCTION, LVT_POINTER, LVT_MAX, diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index 33231c47..2f8a6799 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -12,6 +12,7 @@ #include "src/game/mario_step.h" #include "src/pc/lua/smlua_anim_utils.h" #include "src/pc/lua/smlua_misc_utils.h" +#include "src/pc/lua/smlua_collision_utils.h" #include "src/game/spawn_sound.h" #include "include/object_fields.h" @@ -307,6 +308,109 @@ static struct LuaObjectField sGlobalObjectAnimationsFields[LUA_GLOBAL_OBJECT_ANI { "yoshi_seg5_anims_05024100", LVT_OBJECTANIMPOINTER_P, offsetof(struct GlobalObjectAnimations, yoshi_seg5_anims_05024100), true, LOT_POINTER }, }; +#define LUA_GLOBAL_OBJECT_COLLISION_DATA_FIELD_COUNT 99 +static struct LuaObjectField sGlobalObjectCollisionDataFields[LUA_GLOBAL_OBJECT_COLLISION_DATA_FIELD_COUNT] = { + { "bbh_seg7_collision_coffin", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_coffin), false, LOT_POINTER }, + { "bbh_seg7_collision_haunted_bookshelf", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_haunted_bookshelf), false, LOT_POINTER }, + { "bbh_seg7_collision_merry_go_round", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_merry_go_round), false, LOT_POINTER }, + { "bbh_seg7_collision_mesh_elevator", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_mesh_elevator), false, LOT_POINTER }, + { "bbh_seg7_collision_staircase_step", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_staircase_step), false, LOT_POINTER }, + { "bbh_seg7_collision_tilt_floor_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bbh_seg7_collision_tilt_floor_platform), false, LOT_POINTER }, + { "bitdw_seg7_collision_moving_pyramid", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bitdw_seg7_collision_moving_pyramid), false, LOT_POINTER }, + { "bitfs_seg7_collision_inverted_pyramid", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bitfs_seg7_collision_inverted_pyramid), false, LOT_POINTER }, + { "bitfs_seg7_collision_sinking_cage_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bitfs_seg7_collision_sinking_cage_platform), false, LOT_POINTER }, + { "bitfs_seg7_collision_sinking_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bitfs_seg7_collision_sinking_platform), false, LOT_POINTER }, + { "bitfs_seg7_collision_squishable_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bitfs_seg7_collision_squishable_platform), false, LOT_POINTER }, + { "blue_coin_switch_seg8_collision_08000E98", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, blue_coin_switch_seg8_collision_08000E98), false, LOT_POINTER }, + { "bob_seg7_collision_chain_chomp_gate", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bob_seg7_collision_chain_chomp_gate), false, LOT_POINTER }, + { "bowser_2_seg7_collision_tilting_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, bowser_2_seg7_collision_tilting_platform), false, LOT_POINTER }, + { "breakable_box_seg8_collision_08012D70", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, breakable_box_seg8_collision_08012D70), false, LOT_POINTER }, + { "cannon_lid_seg8_collision_08004950", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, cannon_lid_seg8_collision_08004950), false, LOT_POINTER }, + { "capswitch_collision_050033D0", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, capswitch_collision_050033D0), false, LOT_POINTER }, + { "capswitch_collision_05003448", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, capswitch_collision_05003448), false, LOT_POINTER }, + { "castle_grounds_seg7_collision_cannon_grill", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, castle_grounds_seg7_collision_cannon_grill), false, LOT_POINTER }, + { "castle_grounds_seg7_collision_moat_grills", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, castle_grounds_seg7_collision_moat_grills), false, LOT_POINTER }, + { "checkerboard_platform_seg8_collision_0800D710", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, checkerboard_platform_seg8_collision_0800D710), false, LOT_POINTER }, + { "ddd_seg7_collision_bowser_sub_door", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ddd_seg7_collision_bowser_sub_door), false, LOT_POINTER }, + { "ddd_seg7_collision_submarine", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ddd_seg7_collision_submarine), false, LOT_POINTER }, + { "door_seg3_collision_0301CE78", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, door_seg3_collision_0301CE78), false, LOT_POINTER }, + { "dorrie_seg6_collision_0600F644", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, dorrie_seg6_collision_0600F644), false, LOT_POINTER }, + { "exclamation_box_outline_seg8_collision_08025F78", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, exclamation_box_outline_seg8_collision_08025F78), false, LOT_POINTER }, + { "hmc_seg7_collision_controllable_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, hmc_seg7_collision_controllable_platform), false, LOT_POINTER }, + { "hmc_seg7_collision_controllable_platform_sub", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, hmc_seg7_collision_controllable_platform_sub), false, LOT_POINTER }, + { "hmc_seg7_collision_elevator", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, hmc_seg7_collision_elevator), false, LOT_POINTER }, + { "inside_castle_seg7_collision_floor_trap", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, inside_castle_seg7_collision_floor_trap), false, LOT_POINTER }, + { "inside_castle_seg7_collision_star_door", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, inside_castle_seg7_collision_star_door), false, LOT_POINTER }, + { "inside_castle_seg7_collision_water_level_pillar", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, inside_castle_seg7_collision_water_level_pillar), false, LOT_POINTER }, + { "jrb_seg7_collision_floating_box", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_floating_box), false, LOT_POINTER }, + { "jrb_seg7_collision_floating_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_floating_platform), false, LOT_POINTER }, + { "jrb_seg7_collision_in_sunken_ship", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_in_sunken_ship), false, LOT_POINTER }, + { "jrb_seg7_collision_in_sunken_ship_2", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_in_sunken_ship_2), false, LOT_POINTER }, + { "jrb_seg7_collision_in_sunken_ship_3", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_in_sunken_ship_3), false, LOT_POINTER }, + { "jrb_seg7_collision_pillar_base", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_pillar_base), false, LOT_POINTER }, + { "jrb_seg7_collision_rock_solid", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, jrb_seg7_collision_rock_solid), false, LOT_POINTER }, + { "lll_hexagonal_mesh_seg3_collision_0301CECC", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_hexagonal_mesh_seg3_collision_0301CECC), false, LOT_POINTER }, + { "lll_seg7_collision_drawbridge", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_drawbridge), false, LOT_POINTER }, + { "lll_seg7_collision_falling_wall", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_falling_wall), false, LOT_POINTER }, + { "lll_seg7_collision_floating_block", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_floating_block), false, LOT_POINTER }, + { "lll_seg7_collision_hexagonal_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_hexagonal_platform), false, LOT_POINTER }, + { "lll_seg7_collision_inverted_pyramid", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_inverted_pyramid), false, LOT_POINTER }, + { "lll_seg7_collision_octagonal_moving_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_octagonal_moving_platform), false, LOT_POINTER }, + { "lll_seg7_collision_pitoune", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_pitoune), false, LOT_POINTER }, + { "lll_seg7_collision_puzzle_piece", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_puzzle_piece), false, LOT_POINTER }, + { "lll_seg7_collision_rotating_fire_bars", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_rotating_fire_bars), false, LOT_POINTER }, + { "lll_seg7_collision_rotating_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_rotating_platform), false, LOT_POINTER }, + { "lll_seg7_collision_sinking_pyramids", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_sinking_pyramids), false, LOT_POINTER }, + { "lll_seg7_collision_slow_tilting_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_slow_tilting_platform), false, LOT_POINTER }, + { "lll_seg7_collision_wood_piece", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, lll_seg7_collision_wood_piece), false, LOT_POINTER }, + { "metal_box_seg8_collision_08024C28", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, metal_box_seg8_collision_08024C28), false, LOT_POINTER }, + { "penguin_seg5_collision_05008B88", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, penguin_seg5_collision_05008B88), false, LOT_POINTER }, + { "poundable_pole_collision_06002490", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, poundable_pole_collision_06002490), false, LOT_POINTER }, + { "purple_switch_seg8_collision_0800C7A8", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, purple_switch_seg8_collision_0800C7A8), false, LOT_POINTER }, + { "rr_seg7_collision_donut_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, rr_seg7_collision_donut_platform), false, LOT_POINTER }, + { "rr_seg7_collision_elevator_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, rr_seg7_collision_elevator_platform), false, LOT_POINTER }, + { "rr_seg7_collision_pendulum", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, rr_seg7_collision_pendulum), false, LOT_POINTER }, + { "rr_seg7_collision_rotating_platform_with_fire", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, rr_seg7_collision_rotating_platform_with_fire), false, LOT_POINTER }, + { "sl_seg7_collision_pound_explodes", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, sl_seg7_collision_pound_explodes), false, LOT_POINTER }, + { "sl_seg7_collision_sliding_snow_mound", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, sl_seg7_collision_sliding_snow_mound), false, LOT_POINTER }, + { "springboard_collision_05001A28", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, springboard_collision_05001A28), false, LOT_POINTER }, + { "ssl_seg7_collision_0702808C", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_0702808C), false, LOT_POINTER }, + { "ssl_seg7_collision_grindel", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_grindel), false, LOT_POINTER }, + { "ssl_seg7_collision_pyramid_elevator", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_pyramid_elevator), false, LOT_POINTER }, + { "ssl_seg7_collision_pyramid_top", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_pyramid_top), false, LOT_POINTER }, + { "ssl_seg7_collision_spindel", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_spindel), false, LOT_POINTER }, + { "ssl_seg7_collision_tox_box", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ssl_seg7_collision_tox_box), false, LOT_POINTER }, + { "thi_seg7_collision_top_trap", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, thi_seg7_collision_top_trap), false, LOT_POINTER }, + { "thwomp_seg5_collision_0500B7D0", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, thwomp_seg5_collision_0500B7D0), false, LOT_POINTER }, + { "thwomp_seg5_collision_0500B92C", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, thwomp_seg5_collision_0500B92C), false, LOT_POINTER }, + { "ttc_seg7_collision_clock_main_rotation", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttc_seg7_collision_clock_main_rotation), false, LOT_POINTER }, + { "ttc_seg7_collision_clock_pendulum", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttc_seg7_collision_clock_pendulum), false, LOT_POINTER }, + { "ttc_seg7_collision_clock_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttc_seg7_collision_clock_platform), false, LOT_POINTER }, + { "ttc_seg7_collision_rotating_clock_platform2", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttc_seg7_collision_rotating_clock_platform2), false, LOT_POINTER }, + { "ttc_seg7_collision_sliding_surface", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttc_seg7_collision_sliding_surface), false, LOT_POINTER }, + { "ttm_seg7_collision_pitoune_2", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttm_seg7_collision_pitoune_2), false, LOT_POINTER }, + { "ttm_seg7_collision_podium_warp", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttm_seg7_collision_podium_warp), false, LOT_POINTER }, + { "ttm_seg7_collision_ukiki_cage", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, ttm_seg7_collision_ukiki_cage), false, LOT_POINTER }, + { "warp_pipe_seg3_collision_03009AC8", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, warp_pipe_seg3_collision_03009AC8), false, LOT_POINTER }, + { "wdw_seg7_collision_arrow_lift", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wdw_seg7_collision_arrow_lift), false, LOT_POINTER }, + { "wdw_seg7_collision_express_elevator_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wdw_seg7_collision_express_elevator_platform), false, LOT_POINTER }, + { "wdw_seg7_collision_rect_floating_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wdw_seg7_collision_rect_floating_platform), false, LOT_POINTER }, + { "wdw_seg7_collision_square_floating_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wdw_seg7_collision_square_floating_platform), false, LOT_POINTER }, + { "wf_seg7_collision_breakable_wall", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_breakable_wall), false, LOT_POINTER }, + { "wf_seg7_collision_breakable_wall_2", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_breakable_wall_2), false, LOT_POINTER }, + { "wf_seg7_collision_bullet_bill_cannon", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_bullet_bill_cannon), false, LOT_POINTER }, + { "wf_seg7_collision_clocklike_rotation", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_clocklike_rotation), false, LOT_POINTER }, + { "wf_seg7_collision_kickable_board", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_kickable_board), false, LOT_POINTER }, + { "wf_seg7_collision_large_bomp", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_large_bomp), false, LOT_POINTER }, + { "wf_seg7_collision_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_platform), false, LOT_POINTER }, + { "wf_seg7_collision_sliding_brick_platform", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_sliding_brick_platform), false, LOT_POINTER }, + { "wf_seg7_collision_small_bomp", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_small_bomp), false, LOT_POINTER }, + { "wf_seg7_collision_tower", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_tower), false, LOT_POINTER }, + { "wf_seg7_collision_tower_door", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wf_seg7_collision_tower_door), false, LOT_POINTER }, + { "whomp_seg6_collision_06020A0C", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, whomp_seg6_collision_06020A0C), false, LOT_POINTER }, + { "wooden_signpost_seg3_collision_0302DD80", LVT_COLLISION_P, offsetof(struct GlobalObjectCollisionData, wooden_signpost_seg3_collision_0302DD80), false, LOT_POINTER }, +}; + #define LUA_GLOBAL_TEXTURES_FIELD_COUNT 7 static struct LuaObjectField sGlobalTexturesFields[LUA_GLOBAL_TEXTURES_FIELD_COUNT] = { { "arrow_down", LVT_COBJECT, offsetof(struct GlobalTextures, arrow_down), true, LOT_TEXTUREINFO }, @@ -571,7 +675,7 @@ static struct LuaObjectField sNetworkPlayerFields[LUA_NETWORK_PLAYER_FIELD_COUNT { "type", LVT_U8, offsetof(struct NetworkPlayer, type), true, LOT_NONE }, }; -#define LUA_OBJECT_FIELD_COUNT 749 +#define LUA_OBJECT_FIELD_COUNT 750 static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = { { "activeFlags", LVT_S16, offsetof(struct Object, activeFlags), false, LOT_NONE }, { "areaTimer", LVT_U32, offsetof(struct Object, areaTimer), false, LOT_NONE }, @@ -584,7 +688,7 @@ static struct LuaObjectField sObjectFields[LUA_OBJECT_FIELD_COUNT] = { { "bhvStackIndex", LVT_U32, offsetof(struct Object, bhvStackIndex), false, LOT_NONE }, { "collidedObjInteractTypes", LVT_U32, offsetof(struct Object, collidedObjInteractTypes), false, LOT_NONE }, // { "collidedObjs", LOT_???, offsetof(struct Object, collidedObjs), false, LOT_??? }, <--- UNIMPLEMENTED -// { "collisionData", LVT_???, offsetof(struct Object, collisionData), false, LOT_??? }, <--- UNIMPLEMENTED + { "collisionData", LVT_COLLISION_P, offsetof(struct Object, collisionData), false, LOT_POINTER }, { "coopFlags", LVT_U8, offsetof(struct Object, coopFlags), true, LOT_NONE }, { "curBhvCommand", LVT_BEHAVIORSCRIPT_P, offsetof(struct Object, curBhvCommand), true, LOT_POINTER }, { "globalPlayerIndex", LVT_U8, offsetof(struct Object, globalPlayerIndex), false, LOT_NONE }, @@ -1569,59 +1673,60 @@ 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_AREA, sAreaFields, LUA_AREA_FIELD_COUNT }, - { LOT_BULLYCOLLISIONDATA, sBullyCollisionDataFields, LUA_BULLY_COLLISION_DATA_FIELD_COUNT }, - { LOT_CAMERA, sCameraFields, LUA_CAMERA_FIELD_COUNT }, - { LOT_CAMERAFOVSTATUS, sCameraFOVStatusFields, LUA_CAMERA_FOVSTATUS_FIELD_COUNT }, - { LOT_CAMERASTOREDINFO, sCameraStoredInfoFields, LUA_CAMERA_STORED_INFO_FIELD_COUNT }, - { LOT_CAMERATRIGGER, sCameraTriggerFields, LUA_CAMERA_TRIGGER_FIELD_COUNT }, - { LOT_CHAINSEGMENT, sChainSegmentFields, LUA_CHAIN_SEGMENT_FIELD_COUNT }, - { LOT_CHARACTER, sCharacterFields, LUA_CHARACTER_FIELD_COUNT }, - { LOT_CONTROLLER, sControllerFields, LUA_CONTROLLER_FIELD_COUNT }, - { LOT_CUTSCENE, sCutsceneFields, LUA_CUTSCENE_FIELD_COUNT }, - { LOT_CUTSCENESPLINEPOINT, sCutsceneSplinePointFields, LUA_CUTSCENE_SPLINE_POINT_FIELD_COUNT }, - { LOT_CUTSCENEVARIABLE, sCutsceneVariableFields, LUA_CUTSCENE_VARIABLE_FIELD_COUNT }, - { LOT_FLOORGEOMETRY, sFloorGeometryFields, LUA_FLOOR_GEOMETRY_FIELD_COUNT }, - { LOT_GLOBALOBJECTANIMATIONS, sGlobalObjectAnimationsFields, LUA_GLOBAL_OBJECT_ANIMATIONS_FIELD_COUNT }, - { LOT_GLOBALTEXTURES, sGlobalTexturesFields, LUA_GLOBAL_TEXTURES_FIELD_COUNT }, - { LOT_GRAPHNODE, sGraphNodeFields, LUA_GRAPH_NODE_FIELD_COUNT }, - { LOT_GRAPHNODEOBJECT, sGraphNodeObjectFields, LUA_GRAPH_NODE_OBJECT_FIELD_COUNT }, - { LOT_GRAPHNODE_802A45E4, sGraphNode_802A45E4Fields, LUA_GRAPH_NODE_802_A45_E4_FIELD_COUNT }, - { LOT_HANDHELDSHAKEPOINT, sHandheldShakePointFields, LUA_HANDHELD_SHAKE_POINT_FIELD_COUNT }, - { LOT_INSTANTWARP, sInstantWarpFields, LUA_INSTANT_WARP_FIELD_COUNT }, - { LOT_LAKITUSTATE, sLakituStateFields, LUA_LAKITU_STATE_FIELD_COUNT }, - { LOT_LINEARTRANSITIONPOINT, sLinearTransitionPointFields, LUA_LINEAR_TRANSITION_POINT_FIELD_COUNT }, - { LOT_MARIOANIMATION, sMarioAnimationFields, LUA_MARIO_ANIMATION_FIELD_COUNT }, - { LOT_MARIOBODYSTATE, sMarioBodyStateFields, LUA_MARIO_BODY_STATE_FIELD_COUNT }, - { LOT_MARIOSTATE, sMarioStateFields, LUA_MARIO_STATE_FIELD_COUNT }, - { LOT_MODETRANSITIONINFO, sModeTransitionInfoFields, LUA_MODE_TRANSITION_INFO_FIELD_COUNT }, - { LOT_NETWORKPLAYER, sNetworkPlayerFields, LUA_NETWORK_PLAYER_FIELD_COUNT }, - { LOT_OBJECT, sObjectFields, LUA_OBJECT_FIELD_COUNT }, - { LOT_OBJECTHITBOX, sObjectHitboxFields, LUA_OBJECT_HITBOX_FIELD_COUNT }, - { LOT_OBJECTNODE, sObjectNodeFields, LUA_OBJECT_NODE_FIELD_COUNT }, - { LOT_OBJECTWARPNODE, sObjectWarpNodeFields, LUA_OBJECT_WARP_NODE_FIELD_COUNT }, - { LOT_OFFSETSIZEPAIR, sOffsetSizePairFields, LUA_OFFSET_SIZE_PAIR_FIELD_COUNT }, - { LOT_PARALLELTRACKINGPOINT, sParallelTrackingPointFields, LUA_PARALLEL_TRACKING_POINT_FIELD_COUNT }, - { LOT_PLAYERCAMERASTATE, sPlayerCameraStateFields, LUA_PLAYER_CAMERA_STATE_FIELD_COUNT }, - { LOT_PLAYERGEOMETRY, sPlayerGeometryFields, LUA_PLAYER_GEOMETRY_FIELD_COUNT }, - { LOT_RAYINTERSECTIONINFO, sRayIntersectionInfoFields, LUA_RAY_INTERSECTION_INFO_FIELD_COUNT }, - { LOT_SOUNDSTATE, sSoundStateFields, LUA_SOUND_STATE_FIELD_COUNT }, - { LOT_SPAWNINFO, sSpawnInfoFields, LUA_SPAWN_INFO_FIELD_COUNT }, - { LOT_SPAWNPARTICLESINFO, sSpawnParticlesInfoFields, LUA_SPAWN_PARTICLES_INFO_FIELD_COUNT }, - { LOT_STRUCT802A272C, sStruct802A272CFields, LUA_STRUCT802_A272_C_FIELD_COUNT }, - { LOT_SURFACE, sSurfaceFields, LUA_SURFACE_FIELD_COUNT }, - { LOT_TEXTUREINFO, sTextureInfoFields, LUA_TEXTURE_INFO_FIELD_COUNT }, - { LOT_TRANSITIONINFO, sTransitionInfoFields, LUA_TRANSITION_INFO_FIELD_COUNT }, - { LOT_WALLCOLLISIONDATA, sWallCollisionDataFields, LUA_WALL_COLLISION_DATA_FIELD_COUNT }, - { LOT_WARPNODE, sWarpNodeFields, LUA_WARP_NODE_FIELD_COUNT }, - { LOT_WARPTRANSITION, sWarpTransitionFields, LUA_WARP_TRANSITION_FIELD_COUNT }, - { LOT_WARPTRANSITIONDATA, sWarpTransitionDataFields, LUA_WARP_TRANSITION_DATA_FIELD_COUNT }, - { LOT_WATERDROPLETPARAMS, sWaterDropletParamsFields, LUA_WATER_DROPLET_PARAMS_FIELD_COUNT }, - { LOT_WAYPOINT, sWaypointFields, LUA_WAYPOINT_FIELD_COUNT }, - { LOT_WHIRLPOOL, sWhirlpoolFields, LUA_WHIRLPOOL_FIELD_COUNT }, - { LOT_STRUCT802A1230, sstruct802A1230Fields, LUA_STRUCT802_A1230_FIELD_COUNT }, + { LOT_ANIMINFO, sAnimInfoFields, LUA_ANIM_INFO_FIELD_COUNT }, + { LOT_ANIMATION, sAnimationFields, LUA_ANIMATION_FIELD_COUNT }, + { LOT_AREA, sAreaFields, LUA_AREA_FIELD_COUNT }, + { LOT_BULLYCOLLISIONDATA, sBullyCollisionDataFields, LUA_BULLY_COLLISION_DATA_FIELD_COUNT }, + { LOT_CAMERA, sCameraFields, LUA_CAMERA_FIELD_COUNT }, + { LOT_CAMERAFOVSTATUS, sCameraFOVStatusFields, LUA_CAMERA_FOVSTATUS_FIELD_COUNT }, + { LOT_CAMERASTOREDINFO, sCameraStoredInfoFields, LUA_CAMERA_STORED_INFO_FIELD_COUNT }, + { LOT_CAMERATRIGGER, sCameraTriggerFields, LUA_CAMERA_TRIGGER_FIELD_COUNT }, + { LOT_CHAINSEGMENT, sChainSegmentFields, LUA_CHAIN_SEGMENT_FIELD_COUNT }, + { LOT_CHARACTER, sCharacterFields, LUA_CHARACTER_FIELD_COUNT }, + { LOT_CONTROLLER, sControllerFields, LUA_CONTROLLER_FIELD_COUNT }, + { LOT_CUTSCENE, sCutsceneFields, LUA_CUTSCENE_FIELD_COUNT }, + { LOT_CUTSCENESPLINEPOINT, sCutsceneSplinePointFields, LUA_CUTSCENE_SPLINE_POINT_FIELD_COUNT }, + { LOT_CUTSCENEVARIABLE, sCutsceneVariableFields, LUA_CUTSCENE_VARIABLE_FIELD_COUNT }, + { LOT_FLOORGEOMETRY, sFloorGeometryFields, LUA_FLOOR_GEOMETRY_FIELD_COUNT }, + { LOT_GLOBALOBJECTANIMATIONS, sGlobalObjectAnimationsFields, LUA_GLOBAL_OBJECT_ANIMATIONS_FIELD_COUNT }, + { LOT_GLOBALOBJECTCOLLISIONDATA, sGlobalObjectCollisionDataFields, LUA_GLOBAL_OBJECT_COLLISION_DATA_FIELD_COUNT }, + { LOT_GLOBALTEXTURES, sGlobalTexturesFields, LUA_GLOBAL_TEXTURES_FIELD_COUNT }, + { LOT_GRAPHNODE, sGraphNodeFields, LUA_GRAPH_NODE_FIELD_COUNT }, + { LOT_GRAPHNODEOBJECT, sGraphNodeObjectFields, LUA_GRAPH_NODE_OBJECT_FIELD_COUNT }, + { LOT_GRAPHNODE_802A45E4, sGraphNode_802A45E4Fields, LUA_GRAPH_NODE_802_A45_E4_FIELD_COUNT }, + { LOT_HANDHELDSHAKEPOINT, sHandheldShakePointFields, LUA_HANDHELD_SHAKE_POINT_FIELD_COUNT }, + { LOT_INSTANTWARP, sInstantWarpFields, LUA_INSTANT_WARP_FIELD_COUNT }, + { LOT_LAKITUSTATE, sLakituStateFields, LUA_LAKITU_STATE_FIELD_COUNT }, + { LOT_LINEARTRANSITIONPOINT, sLinearTransitionPointFields, LUA_LINEAR_TRANSITION_POINT_FIELD_COUNT }, + { LOT_MARIOANIMATION, sMarioAnimationFields, LUA_MARIO_ANIMATION_FIELD_COUNT }, + { LOT_MARIOBODYSTATE, sMarioBodyStateFields, LUA_MARIO_BODY_STATE_FIELD_COUNT }, + { LOT_MARIOSTATE, sMarioStateFields, LUA_MARIO_STATE_FIELD_COUNT }, + { LOT_MODETRANSITIONINFO, sModeTransitionInfoFields, LUA_MODE_TRANSITION_INFO_FIELD_COUNT }, + { LOT_NETWORKPLAYER, sNetworkPlayerFields, LUA_NETWORK_PLAYER_FIELD_COUNT }, + { LOT_OBJECT, sObjectFields, LUA_OBJECT_FIELD_COUNT }, + { LOT_OBJECTHITBOX, sObjectHitboxFields, LUA_OBJECT_HITBOX_FIELD_COUNT }, + { LOT_OBJECTNODE, sObjectNodeFields, LUA_OBJECT_NODE_FIELD_COUNT }, + { LOT_OBJECTWARPNODE, sObjectWarpNodeFields, LUA_OBJECT_WARP_NODE_FIELD_COUNT }, + { LOT_OFFSETSIZEPAIR, sOffsetSizePairFields, LUA_OFFSET_SIZE_PAIR_FIELD_COUNT }, + { LOT_PARALLELTRACKINGPOINT, sParallelTrackingPointFields, LUA_PARALLEL_TRACKING_POINT_FIELD_COUNT }, + { LOT_PLAYERCAMERASTATE, sPlayerCameraStateFields, LUA_PLAYER_CAMERA_STATE_FIELD_COUNT }, + { LOT_PLAYERGEOMETRY, sPlayerGeometryFields, LUA_PLAYER_GEOMETRY_FIELD_COUNT }, + { LOT_RAYINTERSECTIONINFO, sRayIntersectionInfoFields, LUA_RAY_INTERSECTION_INFO_FIELD_COUNT }, + { LOT_SOUNDSTATE, sSoundStateFields, LUA_SOUND_STATE_FIELD_COUNT }, + { LOT_SPAWNINFO, sSpawnInfoFields, LUA_SPAWN_INFO_FIELD_COUNT }, + { LOT_SPAWNPARTICLESINFO, sSpawnParticlesInfoFields, LUA_SPAWN_PARTICLES_INFO_FIELD_COUNT }, + { LOT_STRUCT802A272C, sStruct802A272CFields, LUA_STRUCT802_A272_C_FIELD_COUNT }, + { LOT_SURFACE, sSurfaceFields, LUA_SURFACE_FIELD_COUNT }, + { LOT_TEXTUREINFO, sTextureInfoFields, LUA_TEXTURE_INFO_FIELD_COUNT }, + { LOT_TRANSITIONINFO, sTransitionInfoFields, LUA_TRANSITION_INFO_FIELD_COUNT }, + { LOT_WALLCOLLISIONDATA, sWallCollisionDataFields, LUA_WALL_COLLISION_DATA_FIELD_COUNT }, + { LOT_WARPNODE, sWarpNodeFields, LUA_WARP_NODE_FIELD_COUNT }, + { LOT_WARPTRANSITION, sWarpTransitionFields, LUA_WARP_TRANSITION_FIELD_COUNT }, + { LOT_WARPTRANSITIONDATA, sWarpTransitionDataFields, LUA_WARP_TRANSITION_DATA_FIELD_COUNT }, + { LOT_WATERDROPLETPARAMS, sWaterDropletParamsFields, LUA_WATER_DROPLET_PARAMS_FIELD_COUNT }, + { LOT_WAYPOINT, sWaypointFields, LUA_WAYPOINT_FIELD_COUNT }, + { LOT_WHIRLPOOL, sWhirlpoolFields, LUA_WHIRLPOOL_FIELD_COUNT }, + { LOT_STRUCT802A1230, sstruct802A1230Fields, LUA_STRUCT802_A1230_FIELD_COUNT }, }; struct LuaObjectField* smlua_get_object_field_autogen(u16 lot, const char* key) { diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h index 967b5e92..4d776c2e 100644 --- a/src/pc/lua/smlua_cobject_autogen.h +++ b/src/pc/lua/smlua_cobject_autogen.h @@ -21,6 +21,7 @@ enum LuaObjectAutogenType { LOT_CUTSCENEVARIABLE, LOT_FLOORGEOMETRY, LOT_GLOBALOBJECTANIMATIONS, + LOT_GLOBALOBJECTCOLLISIONDATA, LOT_GLOBALTEXTURES, LOT_GRAPHNODE, LOT_GRAPHNODEOBJECT, diff --git a/src/pc/lua/smlua_collision_utils.c b/src/pc/lua/smlua_collision_utils.c new file mode 100644 index 00000000..ddc8bfe9 --- /dev/null +++ b/src/pc/lua/smlua_collision_utils.c @@ -0,0 +1,162 @@ +#include "types.h" + +#include "src/engine/surface_collision.h" + +#include "smlua.h" +#include "smlua_collision_utils.h" +#include "pc/debuglog.h" + +// actors +#include "actors/common0.h" +#include "actors/common1.h" +#include "actors/custom0.h" +#include "actors/group1.h" +#include "actors/group2.h" +#include "actors/group3.h" +#include "actors/group4.h" +#include "actors/group5.h" +#include "actors/group6.h" +#include "actors/group7.h" +#include "actors/group8.h" +#include "actors/group9.h" +#include "actors/group10.h" +#include "actors/group11.h" +#include "actors/group12.h" +#include "actors/group13.h" +#include "actors/group14.h" +#include "actors/group15.h" +#include "actors/group16.h" +#include "actors/group17.h" +#include "actors/zcustom0.h" + +// levels +#include "levels/bbh/header.h" +#include "levels/castle_inside/header.h" +#include "levels/hmc/header.h" +#include "levels/ssl/header.h" +#include "levels/bob/header.h" +#include "levels/sl/header.h" +#include "levels/wdw/header.h" +#include "levels/jrb/header.h" +#include "levels/thi/header.h" +#include "levels/ttc/header.h" +#include "levels/rr/header.h" +#include "levels/castle_grounds/header.h" +#include "levels/bitdw/header.h" +#include "levels/lll/header.h" +#include "levels/sa/header.h" +#include "levels/bitfs/header.h" +#include "levels/ddd/header.h" +#include "levels/wf/header.h" +#include "levels/bowser_2/header.h" +#include "levels/ttm/header.h" + +struct GlobalObjectCollisionData gGlobalObjectCollisionData = { + .bbh_seg7_collision_coffin = (Collision*) bbh_seg7_collision_coffin, + .bbh_seg7_collision_haunted_bookshelf = (Collision*) bbh_seg7_collision_haunted_bookshelf, + .bbh_seg7_collision_merry_go_round = (Collision*) bbh_seg7_collision_merry_go_round, + .bbh_seg7_collision_mesh_elevator = (Collision*) bbh_seg7_collision_mesh_elevator, + .bbh_seg7_collision_staircase_step = (Collision*) bbh_seg7_collision_staircase_step, + .bbh_seg7_collision_tilt_floor_platform = (Collision*) bbh_seg7_collision_tilt_floor_platform, + .bitdw_seg7_collision_moving_pyramid = (Collision*) bitdw_seg7_collision_moving_pyramid, + .bitfs_seg7_collision_inverted_pyramid = (Collision*) bitfs_seg7_collision_inverted_pyramid, + .bitfs_seg7_collision_sinking_cage_platform = (Collision*) bitfs_seg7_collision_sinking_cage_platform, + .bitfs_seg7_collision_sinking_platform = (Collision*) bitfs_seg7_collision_sinking_platform, + .bitfs_seg7_collision_squishable_platform = (Collision*) bitfs_seg7_collision_squishable_platform, + .blue_coin_switch_seg8_collision_08000E98 = (Collision*) blue_coin_switch_seg8_collision_08000E98, + .bob_seg7_collision_chain_chomp_gate = (Collision*) bob_seg7_collision_chain_chomp_gate, + .bowser_2_seg7_collision_tilting_platform = (Collision*) bowser_2_seg7_collision_tilting_platform, + .breakable_box_seg8_collision_08012D70 = (Collision*) breakable_box_seg8_collision_08012D70, + .cannon_lid_seg8_collision_08004950 = (Collision*) cannon_lid_seg8_collision_08004950, + .capswitch_collision_050033D0 = (Collision*) capswitch_collision_050033D0, + .capswitch_collision_05003448 = (Collision*) capswitch_collision_05003448, + .castle_grounds_seg7_collision_cannon_grill = (Collision*) castle_grounds_seg7_collision_cannon_grill, + .castle_grounds_seg7_collision_moat_grills = (Collision*) castle_grounds_seg7_collision_moat_grills, + .checkerboard_platform_seg8_collision_0800D710 = (Collision*) checkerboard_platform_seg8_collision_0800D710, + .ddd_seg7_collision_bowser_sub_door = (Collision*) ddd_seg7_collision_bowser_sub_door, + .ddd_seg7_collision_submarine = (Collision*) ddd_seg7_collision_submarine, + .door_seg3_collision_0301CE78 = (Collision*) door_seg3_collision_0301CE78, + .dorrie_seg6_collision_0600F644 = (Collision*) dorrie_seg6_collision_0600F644, + .exclamation_box_outline_seg8_collision_08025F78 = (Collision*) exclamation_box_outline_seg8_collision_08025F78, + .hmc_seg7_collision_controllable_platform = (Collision*) hmc_seg7_collision_controllable_platform, + .hmc_seg7_collision_controllable_platform_sub = (Collision*) hmc_seg7_collision_controllable_platform_sub, + .hmc_seg7_collision_elevator = (Collision*) hmc_seg7_collision_elevator, + .inside_castle_seg7_collision_floor_trap = (Collision*) inside_castle_seg7_collision_floor_trap, + .inside_castle_seg7_collision_star_door = (Collision*) inside_castle_seg7_collision_star_door, + .inside_castle_seg7_collision_water_level_pillar = (Collision*) inside_castle_seg7_collision_water_level_pillar, + .jrb_seg7_collision_floating_box = (Collision*) jrb_seg7_collision_floating_box, + .jrb_seg7_collision_floating_platform = (Collision*) jrb_seg7_collision_floating_platform, + .jrb_seg7_collision_in_sunken_ship_2 = (Collision*) jrb_seg7_collision_in_sunken_ship_2, + .jrb_seg7_collision_in_sunken_ship_3 = (Collision*) jrb_seg7_collision_in_sunken_ship_3, + .jrb_seg7_collision_in_sunken_ship = (Collision*) jrb_seg7_collision_in_sunken_ship, + .jrb_seg7_collision_pillar_base = (Collision*) jrb_seg7_collision_pillar_base, + .jrb_seg7_collision_rock_solid = (Collision*) jrb_seg7_collision_rock_solid, + .lll_hexagonal_mesh_seg3_collision_0301CECC = (Collision*) lll_hexagonal_mesh_seg3_collision_0301CECC, + .lll_seg7_collision_drawbridge = (Collision*) lll_seg7_collision_drawbridge, + .lll_seg7_collision_falling_wall = (Collision*) lll_seg7_collision_falling_wall, + .lll_seg7_collision_floating_block = (Collision*) lll_seg7_collision_floating_block, + .lll_seg7_collision_hexagonal_platform = (Collision*) lll_seg7_collision_hexagonal_platform, + .lll_seg7_collision_inverted_pyramid = (Collision*) lll_seg7_collision_inverted_pyramid, + .lll_seg7_collision_octagonal_moving_platform = (Collision*) lll_seg7_collision_octagonal_moving_platform, + .lll_seg7_collision_pitoune = (Collision*) lll_seg7_collision_pitoune, + .lll_seg7_collision_puzzle_piece = (Collision*) lll_seg7_collision_puzzle_piece, + .lll_seg7_collision_rotating_fire_bars = (Collision*) lll_seg7_collision_rotating_fire_bars, + .lll_seg7_collision_rotating_platform = (Collision*) lll_seg7_collision_rotating_platform, + .lll_seg7_collision_sinking_pyramids = (Collision*) lll_seg7_collision_sinking_pyramids, + .lll_seg7_collision_slow_tilting_platform = (Collision*) lll_seg7_collision_slow_tilting_platform, + .lll_seg7_collision_wood_piece = (Collision*) lll_seg7_collision_wood_piece, + .metal_box_seg8_collision_08024C28 = (Collision*) metal_box_seg8_collision_08024C28, + .penguin_seg5_collision_05008B88 = (Collision*) penguin_seg5_collision_05008B88, + .poundable_pole_collision_06002490 = (Collision*) poundable_pole_collision_06002490, + .purple_switch_seg8_collision_0800C7A8 = (Collision*) purple_switch_seg8_collision_0800C7A8, + .rr_seg7_collision_donut_platform = (Collision*) rr_seg7_collision_donut_platform, + .rr_seg7_collision_elevator_platform = (Collision*) rr_seg7_collision_elevator_platform, + .rr_seg7_collision_pendulum = (Collision*) rr_seg7_collision_pendulum, + .rr_seg7_collision_rotating_platform_with_fire = (Collision*) rr_seg7_collision_rotating_platform_with_fire, + .sl_seg7_collision_pound_explodes = (Collision*) sl_seg7_collision_pound_explodes, + .sl_seg7_collision_sliding_snow_mound = (Collision*) sl_seg7_collision_sliding_snow_mound, + .springboard_collision_05001A28 = (Collision*) springboard_collision_05001A28, + .ssl_seg7_collision_0702808C = (Collision*) ssl_seg7_collision_0702808C, + .ssl_seg7_collision_grindel = (Collision*) ssl_seg7_collision_grindel, + .ssl_seg7_collision_pyramid_elevator = (Collision*) ssl_seg7_collision_pyramid_elevator, + .ssl_seg7_collision_pyramid_top = (Collision*) ssl_seg7_collision_pyramid_top, + .ssl_seg7_collision_spindel = (Collision*) ssl_seg7_collision_spindel, + .ssl_seg7_collision_tox_box = (Collision*) ssl_seg7_collision_tox_box, + .thi_seg7_collision_top_trap = (Collision*) thi_seg7_collision_top_trap, + .thwomp_seg5_collision_0500B7D0 = (Collision*) thwomp_seg5_collision_0500B7D0, + .thwomp_seg5_collision_0500B92C = (Collision*) thwomp_seg5_collision_0500B92C, + .ttc_seg7_collision_clock_main_rotation = (Collision*) ttc_seg7_collision_clock_main_rotation, + .ttc_seg7_collision_clock_pendulum = (Collision*) ttc_seg7_collision_clock_pendulum, + .ttc_seg7_collision_clock_platform = (Collision*) ttc_seg7_collision_clock_platform, + .ttc_seg7_collision_rotating_clock_platform2 = (Collision*) ttc_seg7_collision_rotating_clock_platform2, + .ttc_seg7_collision_sliding_surface = (Collision*) ttc_seg7_collision_sliding_surface, + .ttm_seg7_collision_pitoune_2 = (Collision*) ttm_seg7_collision_pitoune_2, + .ttm_seg7_collision_podium_warp = (Collision*) ttm_seg7_collision_podium_warp, + .ttm_seg7_collision_ukiki_cage = (Collision*) ttm_seg7_collision_ukiki_cage, + .warp_pipe_seg3_collision_03009AC8 = (Collision*) warp_pipe_seg3_collision_03009AC8, + .wdw_seg7_collision_arrow_lift = (Collision*) wdw_seg7_collision_arrow_lift, + .wdw_seg7_collision_express_elevator_platform = (Collision*) wdw_seg7_collision_express_elevator_platform, + .wdw_seg7_collision_rect_floating_platform = (Collision*) wdw_seg7_collision_rect_floating_platform, + .wdw_seg7_collision_square_floating_platform = (Collision*) wdw_seg7_collision_square_floating_platform, + .wf_seg7_collision_breakable_wall_2 = (Collision*) wf_seg7_collision_breakable_wall_2, + .wf_seg7_collision_breakable_wall = (Collision*) wf_seg7_collision_breakable_wall, + .wf_seg7_collision_bullet_bill_cannon = (Collision*) wf_seg7_collision_bullet_bill_cannon, + .wf_seg7_collision_clocklike_rotation = (Collision*) wf_seg7_collision_clocklike_rotation, + .wf_seg7_collision_kickable_board = (Collision*) wf_seg7_collision_kickable_board, + .wf_seg7_collision_large_bomp = (Collision*) wf_seg7_collision_large_bomp, + .wf_seg7_collision_platform = (Collision*) wf_seg7_collision_platform, + .wf_seg7_collision_sliding_brick_platform = (Collision*) wf_seg7_collision_sliding_brick_platform, + .wf_seg7_collision_small_bomp = (Collision*) wf_seg7_collision_small_bomp, + .wf_seg7_collision_tower = (Collision*) wf_seg7_collision_tower, + .wf_seg7_collision_tower_door = (Collision*) wf_seg7_collision_tower_door, + .whomp_seg6_collision_06020A0C = (Collision*) whomp_seg6_collision_06020A0C, + .wooden_signpost_seg3_collision_0302DD80 = (Collision*) wooden_signpost_seg3_collision_0302DD80, +}; + +struct RayIntersectionInfo* collision_find_surface_on_ray(f32 startX, f32 startY, f32 startZ, f32 endX, f32 endY, f32 endZ) { + static struct RayIntersectionInfo info = { 0 }; + Vec3f orig = { startX, startY, startZ }; + Vec3f end = { endX, endY, endZ }; + find_surface_on_ray(orig, end, &info.surface, info.hitPos); + return &info; +} diff --git a/src/pc/lua/smlua_collision_utils.h b/src/pc/lua/smlua_collision_utils.h new file mode 100644 index 00000000..39c0dda5 --- /dev/null +++ b/src/pc/lua/smlua_collision_utils.h @@ -0,0 +1,115 @@ +#ifndef SMLUA_COLLISION_UTILS_H +#define SMLUA_COLLISION_UTILS_H + +struct RayIntersectionInfo { + struct Surface* surface; + Vec3f hitPos; +}; + +struct GlobalObjectCollisionData { + Collision* bbh_seg7_collision_coffin; + Collision* bbh_seg7_collision_haunted_bookshelf; + Collision* bbh_seg7_collision_merry_go_round; + Collision* bbh_seg7_collision_mesh_elevator; + Collision* bbh_seg7_collision_staircase_step; + Collision* bbh_seg7_collision_tilt_floor_platform; + Collision* bitdw_seg7_collision_moving_pyramid; + Collision* bitfs_seg7_collision_inverted_pyramid; + Collision* bitfs_seg7_collision_sinking_cage_platform; + Collision* bitfs_seg7_collision_sinking_platform; + Collision* bitfs_seg7_collision_squishable_platform; + Collision* blue_coin_switch_seg8_collision_08000E98; + Collision* bob_seg7_collision_chain_chomp_gate; + Collision* bowser_2_seg7_collision_tilting_platform; + Collision* breakable_box_seg8_collision_08012D70; + Collision* cannon_lid_seg8_collision_08004950; + Collision* capswitch_collision_050033D0; + Collision* capswitch_collision_05003448; + Collision* castle_grounds_seg7_collision_cannon_grill; + Collision* castle_grounds_seg7_collision_moat_grills; + Collision* checkerboard_platform_seg8_collision_0800D710; + Collision* ddd_seg7_collision_bowser_sub_door; + Collision* ddd_seg7_collision_submarine; + Collision* door_seg3_collision_0301CE78; + Collision* dorrie_seg6_collision_0600F644; + Collision* exclamation_box_outline_seg8_collision_08025F78; + Collision* hmc_seg7_collision_controllable_platform; + Collision* hmc_seg7_collision_controllable_platform_sub; + Collision* hmc_seg7_collision_elevator; + Collision* inside_castle_seg7_collision_floor_trap; + Collision* inside_castle_seg7_collision_star_door; + Collision* inside_castle_seg7_collision_water_level_pillar; + Collision* jrb_seg7_collision_floating_box; + Collision* jrb_seg7_collision_floating_platform; + Collision* jrb_seg7_collision_in_sunken_ship; + Collision* jrb_seg7_collision_in_sunken_ship_2; + Collision* jrb_seg7_collision_in_sunken_ship_3; + Collision* jrb_seg7_collision_pillar_base; + Collision* jrb_seg7_collision_rock_solid; + Collision* lll_hexagonal_mesh_seg3_collision_0301CECC; + Collision* lll_seg7_collision_drawbridge; + Collision* lll_seg7_collision_falling_wall; + Collision* lll_seg7_collision_floating_block; + Collision* lll_seg7_collision_hexagonal_platform; + Collision* lll_seg7_collision_inverted_pyramid; + Collision* lll_seg7_collision_octagonal_moving_platform; + Collision* lll_seg7_collision_pitoune; + Collision* lll_seg7_collision_puzzle_piece; + Collision* lll_seg7_collision_rotating_fire_bars; + Collision* lll_seg7_collision_rotating_platform; + Collision* lll_seg7_collision_sinking_pyramids; + Collision* lll_seg7_collision_slow_tilting_platform; + Collision* lll_seg7_collision_wood_piece; + Collision* metal_box_seg8_collision_08024C28; + Collision* penguin_seg5_collision_05008B88; + Collision* poundable_pole_collision_06002490; + Collision* purple_switch_seg8_collision_0800C7A8; + Collision* rr_seg7_collision_donut_platform; + Collision* rr_seg7_collision_elevator_platform; + Collision* rr_seg7_collision_pendulum; + Collision* rr_seg7_collision_rotating_platform_with_fire; + Collision* sl_seg7_collision_pound_explodes; + Collision* sl_seg7_collision_sliding_snow_mound; + Collision* springboard_collision_05001A28; + Collision* ssl_seg7_collision_0702808C; + Collision* ssl_seg7_collision_grindel; + Collision* ssl_seg7_collision_pyramid_elevator; + Collision* ssl_seg7_collision_pyramid_top; + Collision* ssl_seg7_collision_spindel; + Collision* ssl_seg7_collision_tox_box; + Collision* thi_seg7_collision_top_trap; + Collision* thwomp_seg5_collision_0500B7D0; + Collision* thwomp_seg5_collision_0500B92C; + Collision* ttc_seg7_collision_clock_main_rotation; + Collision* ttc_seg7_collision_clock_pendulum; + Collision* ttc_seg7_collision_clock_platform; + Collision* ttc_seg7_collision_rotating_clock_platform2; + Collision* ttc_seg7_collision_sliding_surface; + Collision* ttm_seg7_collision_pitoune_2; + Collision* ttm_seg7_collision_podium_warp; + Collision* ttm_seg7_collision_ukiki_cage; + Collision* warp_pipe_seg3_collision_03009AC8; + Collision* wdw_seg7_collision_arrow_lift; + Collision* wdw_seg7_collision_express_elevator_platform; + Collision* wdw_seg7_collision_rect_floating_platform; + Collision* wdw_seg7_collision_square_floating_platform; + Collision* wf_seg7_collision_breakable_wall; + Collision* wf_seg7_collision_breakable_wall_2; + Collision* wf_seg7_collision_bullet_bill_cannon; + Collision* wf_seg7_collision_clocklike_rotation; + Collision* wf_seg7_collision_kickable_board; + Collision* wf_seg7_collision_large_bomp; + Collision* wf_seg7_collision_platform; + Collision* wf_seg7_collision_sliding_brick_platform; + Collision* wf_seg7_collision_small_bomp; + Collision* wf_seg7_collision_tower; + Collision* wf_seg7_collision_tower_door; + Collision* whomp_seg6_collision_06020A0C; + Collision* wooden_signpost_seg3_collision_0302DD80; +}; + +extern struct GlobalObjectCollisionData gGlobalObjectCollisionData; + +struct RayIntersectionInfo* collision_find_surface_on_ray(f32 startX, f32 startY, f32 startZ, f32 endX, f32 endY, f32 endZ); + +#endif diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 0608b543..258fdce4 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -21,6 +21,8 @@ #include "include/behavior_table.h" #include "src/pc/lua/smlua_obj_utils.h" #include "src/pc/lua/smlua_misc_utils.h" +#include "src/pc/lua/smlua_collision_utils.h" +#include "src/engine/surface_load.h" ////////////////////// @@ -7264,9 +7266,9 @@ int smlua_func_save_file_get_total_star_count(lua_State* L) { return 1; } - //////////////////////// - // smlua_misc_utils.h // -//////////////////////// + ///////////////////////////// + // smlua_collision_utils.h // +///////////////////////////// int smlua_func_collision_find_surface_on_ray(lua_State* L) { if(!smlua_functions_valid_param_count(L, 6)) { return 0; } @@ -7289,6 +7291,10 @@ int smlua_func_collision_find_surface_on_ray(lua_State* L) { return 1; } + //////////////////////// + // smlua_misc_utils.h // +//////////////////////// + int smlua_func_get_network_area_timer(UNUSED lua_State* L) { if(!smlua_functions_valid_param_count(L, 0)) { return 0; } @@ -7916,6 +7922,65 @@ int smlua_func_find_water_level(lua_State* L) { return 1; } + //////////////////// + // surface_load.h // +//////////////////// + +int smlua_func_alloc_surface_pools(UNUSED lua_State* L) { + if(!smlua_functions_valid_param_count(L, 0)) { return 0; } + + + alloc_surface_pools(); + + return 1; +} + +int smlua_func_clear_dynamic_surfaces(UNUSED lua_State* L) { + if(!smlua_functions_valid_param_count(L, 0)) { return 0; } + + + clear_dynamic_surfaces(); + + return 1; +} + +int smlua_func_get_area_terrain_size(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 1)) { return 0; } + + s16 * data = (s16 *)smlua_to_cpointer(L, 1, LVT_S16_P); + if (!gSmLuaConvertSuccess) { return 0; } + + lua_pushinteger(L, get_area_terrain_size(data)); + + return 1; +} + +int smlua_func_load_area_terrain(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 4)) { return 0; } + + s16 index = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + s16 * data = (s16 *)smlua_to_cpointer(L, 2, LVT_S16_P); + if (!gSmLuaConvertSuccess) { return 0; } + s8 * surfaceRooms = (s8 *)smlua_to_cpointer(L, 3, LVT_S8_P); + if (!gSmLuaConvertSuccess) { return 0; } + s16 * macroObjects = (s16 *)smlua_to_cpointer(L, 4, LVT_S16_P); + if (!gSmLuaConvertSuccess) { return 0; } + + load_area_terrain(index, data, surfaceRooms, macroObjects); + + return 1; +} + +int smlua_func_load_object_collision_model(UNUSED lua_State* L) { + if(!smlua_functions_valid_param_count(L, 0)) { return 0; } + + + load_object_collision_model(); + + return 1; +} + /////////////// // thread6.c // /////////////// @@ -8548,8 +8613,10 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "save_file_get_star_flags", smlua_func_save_file_get_star_flags); smlua_bind_function(L, "save_file_get_total_star_count", smlua_func_save_file_get_total_star_count); - // smlua_misc_utils.h + // smlua_collision_utils.h smlua_bind_function(L, "collision_find_surface_on_ray", smlua_func_collision_find_surface_on_ray); + + // smlua_misc_utils.h smlua_bind_function(L, "get_network_area_timer", smlua_func_get_network_area_timer); // smlua_obj_utils.h @@ -8605,6 +8672,13 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "find_wall_collisions", smlua_func_find_wall_collisions); smlua_bind_function(L, "find_water_level", smlua_func_find_water_level); + // surface_load.h + smlua_bind_function(L, "alloc_surface_pools", smlua_func_alloc_surface_pools); + smlua_bind_function(L, "clear_dynamic_surfaces", smlua_func_clear_dynamic_surfaces); + smlua_bind_function(L, "get_area_terrain_size", smlua_func_get_area_terrain_size); + smlua_bind_function(L, "load_area_terrain", smlua_func_load_area_terrain); + smlua_bind_function(L, "load_object_collision_model", smlua_func_load_object_collision_model); + // thread6.c smlua_bind_function(L, "queue_rumble_data", smlua_func_queue_rumble_data); smlua_bind_function(L, "queue_rumble_data_mario", smlua_func_queue_rumble_data_mario); diff --git a/src/pc/lua/smlua_misc_utils.c b/src/pc/lua/smlua_misc_utils.c index ac62fbec..576b298f 100644 --- a/src/pc/lua/smlua_misc_utils.c +++ b/src/pc/lua/smlua_misc_utils.c @@ -2,17 +2,8 @@ #include "smlua.h" #include "smlua_misc_utils.h" -#include "src/engine/surface_collision.h" #include "pc/debuglog.h" -struct RayIntersectionInfo* collision_find_surface_on_ray(f32 startX, f32 startY, f32 startZ, f32 endX, f32 endY, f32 endZ) { - static struct RayIntersectionInfo info = { 0 }; - Vec3f orig = { startX, startY, startZ }; - Vec3f end = { endX, endY, endZ }; - find_surface_on_ray(orig, end, &info.surface, info.hitPos); - return &info; -} - u32 get_network_area_timer(void) { return gNetworkAreaTimer; } \ No newline at end of file diff --git a/src/pc/lua/smlua_misc_utils.h b/src/pc/lua/smlua_misc_utils.h index 6c9ebdad..53363d33 100644 --- a/src/pc/lua/smlua_misc_utils.h +++ b/src/pc/lua/smlua_misc_utils.h @@ -1,12 +1,6 @@ #ifndef SMLUA_MISC_UTILS_H #define SMLUA_MISC_UTILS_H -struct RayIntersectionInfo { - struct Surface* surface; - Vec3f hitPos; -}; - -struct RayIntersectionInfo* collision_find_surface_on_ray(f32 startX, f32 startY, f32 startZ, f32 endX, f32 endY, f32 endZ); u32 get_network_area_timer(void); #endif