diff --git a/autogen/common.py b/autogen/common.py index bab74293b..a72688fa8 100644 --- a/autogen/common.py +++ b/autogen/common.py @@ -15,8 +15,10 @@ def get_path(p): return os.path.dirname(os.path.realpath(__file__)) + '/../' + p def translate_type_to_lvt(ptype): - if ptype == 'char*' or ('char' in ptype and '[' in ptype): + if ('char' in ptype and '[' in ptype): return 'LVT_STRING' + if ptype == 'char*': + return 'LVT_STRING_P' if '[' in ptype or '{' in ptype: return 'LOT_???' diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index 412b1a9e3..fdfb814e1 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -193,6 +193,8 @@ def build_call(function): if ftype == 'void': return ' %s;\n' % ccall + flot = translate_type_to_lot(ftype) + lfunc = 'UNIMPLEMENTED -->' if ftype in integer_types: lfunc = 'lua_pushinteger' @@ -200,6 +202,8 @@ def build_call(function): lfunc = 'lua_pushnumber' elif ftype == 'bool': lfunc = 'lua_pushboolean' + elif '???' not in flot: + return ' smlua_push_object(L, %s, %s);\n' % (flot, ccall) return ' %s(L, %s);\n' % (lfunc, ccall) diff --git a/autogen/convert_structs.py b/autogen/convert_structs.py index f9e5d2db3..64cd6feb7 100644 --- a/autogen/convert_structs.py +++ b/autogen/convert_structs.py @@ -185,7 +185,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 lvt == 'LVT_COBJECT_P' or lvt == 'LVT_STRING').lower() + fimmutable = str(lvt == 'LVT_COBJECT' or lvt == 'LVT_COBJECT_P' or lvt == 'LVT_STRING' or lvt == 'LVT_STRING_P').lower() if sid in override_field_immutable: if fid in override_field_immutable[sid] or '*' in override_field_immutable[sid]: @@ -317,7 +317,7 @@ def doc_struct(struct): def doc_structs(structs): structs.extend(parse_structs(sLuaManuallyDefinedStructs)) - structs = sorted(structs, key=lambda d: d['identifier']) + structs = sorted(structs, key=lambda d: d['identifier']) s = '## [:rewind: Lua Reference](lua.md)\n\n' s += doc_struct_index(structs) @@ -338,7 +338,7 @@ def build_files(): extracted.extend(extract_structs(path)) parsed = parse_structs(extracted) - parsed = sorted(parsed, key=lambda d: d['identifier']) + parsed = sorted(parsed, key=lambda d: d['identifier']) built_body = build_body(parsed) built_enum = build_lot_enum() diff --git a/docs/lua/functions.md b/docs/lua/functions.md index b0aa48ec1..0a355a9b3 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -12,6 +12,7 @@
- characters.h + - [get_character](#get_character) - [get_character_anim_offset](#get_character_anim_offset) - [play_character_sound](#play_character_sound) - [play_character_sound_if_no_flag](#play_character_sound_if_no_flag) @@ -81,6 +82,7 @@ - [play_mario_sound](#play_mario_sound) - [play_sound_and_spawn_particles](#play_sound_and_spawn_particles) - [play_sound_if_no_flag](#play_sound_if_no_flag) + - [resolve_and_return_wall_collisions](#resolve_and_return_wall_collisions) - [return_mario_anim_y_translation](#return_mario_anim_y_translation) - [set_anim_to_frame](#set_anim_to_frame) - [set_jump_from_landing](#set_jump_from_landing) @@ -402,6 +404,26 @@
+## [get_character](#get_character) + +### Lua Example +`local CharacterValue = get_character(m)` + +### Parameters +| Field | Type | +| ----- | ---- | +| m | [MarioState](structs.md#MarioState) | + +### Returns +[Character](structs.md#Character) + +### C Prototype +`struct Character* get_character(struct MarioState* m);` + +[:arrow_up_small:](#) + +
+ ## [get_character_anim_offset](#get_character_anim_offset) ### Lua Example @@ -1518,6 +1540,28 @@
+## [resolve_and_return_wall_collisions](#resolve_and_return_wall_collisions) + +### Lua Example +`local SurfaceValue = resolve_and_return_wall_collisions(pos, offset, radius)` + +### Parameters +| Field | Type | +| ----- | ---- | +| pos | [Vec3f](structs.md#Vec3f) | +| offset | number | +| radius | number | + +### Returns +[Surface](structs.md#Surface) + +### C Prototype +`struct Surface *resolve_and_return_wall_collisions(Vec3f pos, f32 offset, f32 radius);` + +[:arrow_up_small:](#) + +
+ ## [return_mario_anim_y_translation](#return_mario_anim_y_translation) ### Lua Example diff --git a/docs/lua/hooks.md b/docs/lua/hooks.md index 9a1ab796a..5d81bccaa 100644 --- a/docs/lua/hooks.md +++ b/docs/lua/hooks.md @@ -9,10 +9,14 @@ Hooks are a way for SM64 to trigger Lua code, whereas the functions listed in [f | Type | Description | Parameters | | :--- | :---------- | :--------- | | HOOK_UPDATE | Called once per frame | None | -| HOOK_MARIO_UPDATE | Called once per player per frame at the end of a mario update | [MarioState](structs.md#MarioState) | -| HOOK_BEFORE_MARIO_UPDATE | Called once per player per frame at the beginning of a mario update | [MarioState](structs.md#MarioState) | -| HOOK_ON_SET_MARIO_ACTION | Called every time a player's current action is changed | [MarioState](structs.md#MarioState) | -| HOOK_BEFORE_PHYS_STEP | Called once per player per frame before physics code is run | [MarioState](structs.md#MarioState) | +| HOOK_MARIO_UPDATE | Called once per player per frame at the end of a mario update | [MarioState](structs.md#MarioState) mario | +| HOOK_BEFORE_MARIO_UPDATE | Called once per player per frame at the beginning of a mario update | [MarioState](structs.md#MarioState) mario | +| HOOK_ON_SET_MARIO_ACTION | Called every time a player's current action is changed | [MarioState](structs.md#MarioState) mario | +| HOOK_BEFORE_PHYS_STEP | Called once per player per frame before physics code is run | [MarioState](structs.md#MarioState) mario | +| HOOK_ON_PVP_ATTACK | Called when one player attacks another | [MarioState](structs.md#MarioState) attacker, [MarioState](structs.md#MarioState) victim | +| HOOK_ON_PLAYER_CONNECTED | Called when a player connects | [MarioState](structs.md#MarioState) connector | +| HOOK_ON_PLAYER_DISCONNECTED | Called when a player disconnects | [MarioState](structs.md#MarioState) disconnector | +| HOOK_ON_CHAT_COMMAND | Called when a player types a chat message starting with '/' | `string` message -> `return` `true` on valid command |
diff --git a/src/pc/lua/smlua_cobject.c b/src/pc/lua/smlua_cobject.c index 47ae8e1a6..5fe6a60fc 100644 --- a/src/pc/lua/smlua_cobject.c +++ b/src/pc/lua/smlua_cobject.c @@ -92,7 +92,8 @@ static int smlua__get_field(lua_State* L) { case LVT_F32: lua_pushnumber( L, *(f32*)p); break; case LVT_COBJECT: smlua_push_object(L, data->lot, p); break; case LVT_COBJECT_P: smlua_push_object(L, data->lot, *(u8**)p); break; - case LVT_STRING: lua_pushstring(L, (char*)p); break; + case LVT_STRING: lua_pushstring(L, (char*)p); break; + case LVT_STRING_P: lua_pushstring(L, *(char**)p); break; default: LOG_LUA("_get_field on unimplemented type '%d', key '%s'", data->valueType, key); return 0; diff --git a/src/pc/lua/smlua_cobject.h b/src/pc/lua/smlua_cobject.h index 16ae3cbca..18ead31b3 100644 --- a/src/pc/lua/smlua_cobject.h +++ b/src/pc/lua/smlua_cobject.h @@ -13,6 +13,7 @@ enum LuaValueType { LVT_COBJECT, LVT_COBJECT_P, LVT_STRING, + LVT_STRING_P, }; enum LuaObjectType { diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index d474de196..c473732e8 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -97,66 +97,66 @@ static struct LuaObjectField sCameraTriggerFields[LUA_CAMERA_TRIGGER_FIELD_COUNT #define LUA_CHARACTER_FIELD_COUNT 56 static struct LuaObjectField sCharacterFields[LUA_CHARACTER_FIELD_COUNT] = { - { "animOffsetEnabled", LVT_U8, offsetof(struct Character, animOffsetEnabled), true, LOT_NONE }, - { "animOffsetFeet", LVT_F32, offsetof(struct Character, animOffsetFeet), true, LOT_NONE }, - { "animOffsetHand", LVT_F32, offsetof(struct Character, animOffsetHand), true, LOT_NONE }, - { "animOffsetLowYPoint", LVT_F32, offsetof(struct Character, animOffsetLowYPoint), true, LOT_NONE }, - { "cameraHudHead", LVT_U32, offsetof(struct Character, cameraHudHead), true, LOT_NONE }, -// { "capEnemyDecalGfx", LVT_???, offsetof(struct Character, capEnemyDecalGfx), true, LOT_??? }, <--- UNIMPLEMENTED -// { "capEnemyGfx", LVT_???, offsetof(struct Character, capEnemyGfx), true, LOT_??? }, <--- UNIMPLEMENTED - { "capEnemyLayer", LVT_U8, offsetof(struct Character, capEnemyLayer), true, LOT_NONE }, - { "capMetalModelId", LVT_U32, offsetof(struct Character, capMetalModelId), true, LOT_NONE }, - { "capMetalWingModelId", LVT_U32, offsetof(struct Character, capMetalWingModelId), true, LOT_NONE }, - { "capModelId", LVT_U32, offsetof(struct Character, capModelId), true, LOT_NONE }, - { "capWingModelId", LVT_U32, offsetof(struct Character, capWingModelId), true, LOT_NONE }, -// { "hudHead", LVT_???, offsetof(struct Character, hudHead), true, LOT_??? }, <--- UNIMPLEMENTED -// { "hudHeadTexture", LVT_???, offsetof(struct Character, hudHeadTexture), true, LOT_??? }, <--- UNIMPLEMENTED - { "modelId", LVT_U32, offsetof(struct Character, modelId), true, LOT_NONE }, - { "name", LVT_STRING, offsetof(struct Character, name), true, LOT_NONE }, - { "soundAttacked", LVT_S32, offsetof(struct Character, soundAttacked), true, LOT_NONE }, - { "soundCoughing1", LVT_S32, offsetof(struct Character, soundCoughing1), true, LOT_NONE }, - { "soundCoughing2", LVT_S32, offsetof(struct Character, soundCoughing2), true, LOT_NONE }, - { "soundCoughing3", LVT_S32, offsetof(struct Character, soundCoughing3), true, LOT_NONE }, - { "soundDoh", LVT_S32, offsetof(struct Character, soundDoh), true, LOT_NONE }, - { "soundDrowning", LVT_S32, offsetof(struct Character, soundDrowning), true, LOT_NONE }, - { "soundDying", LVT_S32, offsetof(struct Character, soundDying), true, LOT_NONE }, - { "soundEeuh", LVT_S32, offsetof(struct Character, soundEeuh), true, LOT_NONE }, - { "soundFreqScale", LVT_F32, offsetof(struct Character, soundFreqScale), true, LOT_NONE }, - { "soundGameOver", LVT_S32, offsetof(struct Character, soundGameOver), true, LOT_NONE }, - { "soundGroundPoundWah", LVT_S32, offsetof(struct Character, soundGroundPoundWah), true, LOT_NONE }, - { "soundHaha", LVT_S32, offsetof(struct Character, soundHaha), true, LOT_NONE }, - { "soundHaha_2", LVT_S32, offsetof(struct Character, soundHaha_2), true, LOT_NONE }, - { "soundHello", LVT_S32, offsetof(struct Character, soundHello), true, LOT_NONE }, - { "soundHereWeGo", LVT_S32, offsetof(struct Character, soundHereWeGo), true, LOT_NONE }, - { "soundHoohoo", LVT_S32, offsetof(struct Character, soundHoohoo), true, LOT_NONE }, - { "soundHrmm", LVT_S32, offsetof(struct Character, soundHrmm), true, LOT_NONE }, - { "soundImaTired", LVT_S32, offsetof(struct Character, soundImaTired), true, LOT_NONE }, - { "soundMamaMia", LVT_S32, offsetof(struct Character, soundMamaMia), true, LOT_NONE }, - { "soundOnFire", LVT_S32, offsetof(struct Character, soundOnFire), true, LOT_NONE }, - { "soundOoof", LVT_S32, offsetof(struct Character, soundOoof), true, LOT_NONE }, - { "soundOoof2", LVT_S32, offsetof(struct Character, soundOoof2), true, LOT_NONE }, - { "soundPanting", LVT_S32, offsetof(struct Character, soundPanting), true, LOT_NONE }, - { "soundPantingCold", LVT_S32, offsetof(struct Character, soundPantingCold), true, LOT_NONE }, - { "soundPressStartToPlay", LVT_S32, offsetof(struct Character, soundPressStartToPlay), true, LOT_NONE }, - { "soundPunchHoo", LVT_S32, offsetof(struct Character, soundPunchHoo), true, LOT_NONE }, - { "soundPunchWah", LVT_S32, offsetof(struct Character, soundPunchWah), true, LOT_NONE }, - { "soundPunchYah", LVT_S32, offsetof(struct Character, soundPunchYah), true, LOT_NONE }, - { "soundSnoring1", LVT_S32, offsetof(struct Character, soundSnoring1), true, LOT_NONE }, - { "soundSnoring2", LVT_S32, offsetof(struct Character, soundSnoring2), true, LOT_NONE }, - { "soundSnoring3", LVT_S32, offsetof(struct Character, soundSnoring3), true, LOT_NONE }, - { "soundSoLongaBowser", LVT_S32, offsetof(struct Character, soundSoLongaBowser), true, LOT_NONE }, - { "soundTwirlBounce", LVT_S32, offsetof(struct Character, soundTwirlBounce), true, LOT_NONE }, - { "soundUh", LVT_S32, offsetof(struct Character, soundUh), true, LOT_NONE }, - { "soundUh2", LVT_S32, offsetof(struct Character, soundUh2), true, LOT_NONE }, - { "soundUh2_2", LVT_S32, offsetof(struct Character, soundUh2_2), true, LOT_NONE }, - { "soundWaaaooow", LVT_S32, offsetof(struct Character, soundWaaaooow), true, LOT_NONE }, - { "soundWah2", LVT_S32, offsetof(struct Character, soundWah2), true, LOT_NONE }, - { "soundWhoa", LVT_S32, offsetof(struct Character, soundWhoa), true, LOT_NONE }, - { "soundYahWahHoo", LVT_S32, offsetof(struct Character, soundYahWahHoo), true, LOT_NONE }, - { "soundYahoo", LVT_S32, offsetof(struct Character, soundYahoo), true, LOT_NONE }, - { "soundYahooWahaYippee", LVT_S32, offsetof(struct Character, soundYahooWahaYippee), true, LOT_NONE }, - { "soundYawning", LVT_S32, offsetof(struct Character, soundYawning), true, LOT_NONE }, - { "type", LVT_S32, offsetof(struct Character, type), true, LOT_NONE }, + { "animOffsetEnabled", LVT_U8, offsetof(struct Character, animOffsetEnabled), true, LOT_NONE }, + { "animOffsetFeet", LVT_F32, offsetof(struct Character, animOffsetFeet), true, LOT_NONE }, + { "animOffsetHand", LVT_F32, offsetof(struct Character, animOffsetHand), true, LOT_NONE }, + { "animOffsetLowYPoint", LVT_F32, offsetof(struct Character, animOffsetLowYPoint), true, LOT_NONE }, + { "cameraHudHead", LVT_U32, offsetof(struct Character, cameraHudHead), true, LOT_NONE }, +// { "capEnemyDecalGfx", LVT_???, offsetof(struct Character, capEnemyDecalGfx), true, LOT_??? }, <--- UNIMPLEMENTED +// { "capEnemyGfx", LVT_???, offsetof(struct Character, capEnemyGfx), true, LOT_??? }, <--- UNIMPLEMENTED + { "capEnemyLayer", LVT_U8, offsetof(struct Character, capEnemyLayer), true, LOT_NONE }, + { "capMetalModelId", LVT_U32, offsetof(struct Character, capMetalModelId), true, LOT_NONE }, + { "capMetalWingModelId", LVT_U32, offsetof(struct Character, capMetalWingModelId), true, LOT_NONE }, + { "capModelId", LVT_U32, offsetof(struct Character, capModelId), true, LOT_NONE }, + { "capWingModelId", LVT_U32, offsetof(struct Character, capWingModelId), true, LOT_NONE }, +// { "hudHead", LVT_???, offsetof(struct Character, hudHead), true, LOT_??? }, <--- UNIMPLEMENTED +// { "hudHeadTexture", LVT_???, offsetof(struct Character, hudHeadTexture), true, LOT_??? }, <--- UNIMPLEMENTED + { "modelId", LVT_U32, offsetof(struct Character, modelId), true, LOT_NONE }, + { "name", LVT_STRING_P, offsetof(struct Character, name), true, LOT_NONE }, + { "soundAttacked", LVT_S32, offsetof(struct Character, soundAttacked), true, LOT_NONE }, + { "soundCoughing1", LVT_S32, offsetof(struct Character, soundCoughing1), true, LOT_NONE }, + { "soundCoughing2", LVT_S32, offsetof(struct Character, soundCoughing2), true, LOT_NONE }, + { "soundCoughing3", LVT_S32, offsetof(struct Character, soundCoughing3), true, LOT_NONE }, + { "soundDoh", LVT_S32, offsetof(struct Character, soundDoh), true, LOT_NONE }, + { "soundDrowning", LVT_S32, offsetof(struct Character, soundDrowning), true, LOT_NONE }, + { "soundDying", LVT_S32, offsetof(struct Character, soundDying), true, LOT_NONE }, + { "soundEeuh", LVT_S32, offsetof(struct Character, soundEeuh), true, LOT_NONE }, + { "soundFreqScale", LVT_F32, offsetof(struct Character, soundFreqScale), true, LOT_NONE }, + { "soundGameOver", LVT_S32, offsetof(struct Character, soundGameOver), true, LOT_NONE }, + { "soundGroundPoundWah", LVT_S32, offsetof(struct Character, soundGroundPoundWah), true, LOT_NONE }, + { "soundHaha", LVT_S32, offsetof(struct Character, soundHaha), true, LOT_NONE }, + { "soundHaha_2", LVT_S32, offsetof(struct Character, soundHaha_2), true, LOT_NONE }, + { "soundHello", LVT_S32, offsetof(struct Character, soundHello), true, LOT_NONE }, + { "soundHereWeGo", LVT_S32, offsetof(struct Character, soundHereWeGo), true, LOT_NONE }, + { "soundHoohoo", LVT_S32, offsetof(struct Character, soundHoohoo), true, LOT_NONE }, + { "soundHrmm", LVT_S32, offsetof(struct Character, soundHrmm), true, LOT_NONE }, + { "soundImaTired", LVT_S32, offsetof(struct Character, soundImaTired), true, LOT_NONE }, + { "soundMamaMia", LVT_S32, offsetof(struct Character, soundMamaMia), true, LOT_NONE }, + { "soundOnFire", LVT_S32, offsetof(struct Character, soundOnFire), true, LOT_NONE }, + { "soundOoof", LVT_S32, offsetof(struct Character, soundOoof), true, LOT_NONE }, + { "soundOoof2", LVT_S32, offsetof(struct Character, soundOoof2), true, LOT_NONE }, + { "soundPanting", LVT_S32, offsetof(struct Character, soundPanting), true, LOT_NONE }, + { "soundPantingCold", LVT_S32, offsetof(struct Character, soundPantingCold), true, LOT_NONE }, + { "soundPressStartToPlay", LVT_S32, offsetof(struct Character, soundPressStartToPlay), true, LOT_NONE }, + { "soundPunchHoo", LVT_S32, offsetof(struct Character, soundPunchHoo), true, LOT_NONE }, + { "soundPunchWah", LVT_S32, offsetof(struct Character, soundPunchWah), true, LOT_NONE }, + { "soundPunchYah", LVT_S32, offsetof(struct Character, soundPunchYah), true, LOT_NONE }, + { "soundSnoring1", LVT_S32, offsetof(struct Character, soundSnoring1), true, LOT_NONE }, + { "soundSnoring2", LVT_S32, offsetof(struct Character, soundSnoring2), true, LOT_NONE }, + { "soundSnoring3", LVT_S32, offsetof(struct Character, soundSnoring3), true, LOT_NONE }, + { "soundSoLongaBowser", LVT_S32, offsetof(struct Character, soundSoLongaBowser), true, LOT_NONE }, + { "soundTwirlBounce", LVT_S32, offsetof(struct Character, soundTwirlBounce), true, LOT_NONE }, + { "soundUh", LVT_S32, offsetof(struct Character, soundUh), true, LOT_NONE }, + { "soundUh2", LVT_S32, offsetof(struct Character, soundUh2), true, LOT_NONE }, + { "soundUh2_2", LVT_S32, offsetof(struct Character, soundUh2_2), true, LOT_NONE }, + { "soundWaaaooow", LVT_S32, offsetof(struct Character, soundWaaaooow), true, LOT_NONE }, + { "soundWah2", LVT_S32, offsetof(struct Character, soundWah2), true, LOT_NONE }, + { "soundWhoa", LVT_S32, offsetof(struct Character, soundWhoa), true, LOT_NONE }, + { "soundYahWahHoo", LVT_S32, offsetof(struct Character, soundYahWahHoo), true, LOT_NONE }, + { "soundYahoo", LVT_S32, offsetof(struct Character, soundYahoo), true, LOT_NONE }, + { "soundYahooWahaYippee", LVT_S32, offsetof(struct Character, soundYahooWahaYippee), true, LOT_NONE }, + { "soundYawning", LVT_S32, offsetof(struct Character, soundYawning), true, LOT_NONE }, + { "type", LVT_S32, offsetof(struct Character, type), true, LOT_NONE }, }; #define LUA_CONTROLLER_FIELD_COUNT 10 diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 4b89ebeed..9cec71770 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -107,18 +107,16 @@ int smlua_func_set_environmental_camera_shake(lua_State* L) { // characters.h // ////////////////// -/* int smlua_func_get_character(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE); if (!gSmLuaConvertSuccess) { return 0; } - UNIMPLEMENTED -->(L, get_character(m)); + smlua_push_object(L, LOT_CHARACTER, get_character(m)); return 1; } -*/ int smlua_func_get_character_anim_offset(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } @@ -825,7 +823,6 @@ int smlua_func_play_sound_if_no_flag(lua_State* L) { return 1; } -/* int smlua_func_resolve_and_return_wall_collisions(lua_State* L) { if(!smlua_functions_valid_param_count(L, 3)) { return 0; } @@ -842,7 +839,7 @@ int smlua_func_resolve_and_return_wall_collisions(lua_State* L) { f32 radius = smlua_to_number(L, 3); if (!gSmLuaConvertSuccess) { return 0; } - UNIMPLEMENTED -->(L, resolve_and_return_wall_collisions(pos, offset, radius)); + smlua_push_object(L, LOT_SURFACE, resolve_and_return_wall_collisions(pos, offset, radius)); smlua_push_number_field(1, "x", pos[0]); smlua_push_number_field(1, "y", pos[1]); @@ -850,7 +847,6 @@ int smlua_func_resolve_and_return_wall_collisions(lua_State* L) { return 1; } -*/ int smlua_func_return_mario_anim_y_translation(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } @@ -1677,7 +1673,7 @@ int smlua_func_spawn_obj_at_mario_rel_yaw(lua_State* L) { if (!gSmLuaConvertSuccess) { return 0; } extern struct Object *spawn_obj_at_mario_rel_yaw(struct MarioState *m, s32 model, const BehaviorScript *behavior, s16 relYaw); - UNIMPLEMENTED -->(L, spawn_obj_at_mario_rel_yaw(m, model, behavior, relYaw)); + smlua_push_object(L, LOT_OBJECT, spawn_obj_at_mario_rel_yaw(m, model, behavior, relYaw)); return 1; } @@ -2912,7 +2908,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "set_environmental_camera_shake", smlua_func_set_environmental_camera_shake); // characters.h - //smlua_bind_function(L, "get_character", smlua_func_get_character); <--- UNIMPLEMENTED + smlua_bind_function(L, "get_character", smlua_func_get_character); smlua_bind_function(L, "get_character_anim_offset", smlua_func_get_character_anim_offset); smlua_bind_function(L, "play_character_sound", smlua_func_play_character_sound); smlua_bind_function(L, "play_character_sound_if_no_flag", smlua_func_play_character_sound_if_no_flag); @@ -2974,7 +2970,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "play_mario_sound", smlua_func_play_mario_sound); smlua_bind_function(L, "play_sound_and_spawn_particles", smlua_func_play_sound_and_spawn_particles); smlua_bind_function(L, "play_sound_if_no_flag", smlua_func_play_sound_if_no_flag); - //smlua_bind_function(L, "resolve_and_return_wall_collisions", smlua_func_resolve_and_return_wall_collisions); <--- UNIMPLEMENTED + smlua_bind_function(L, "resolve_and_return_wall_collisions", smlua_func_resolve_and_return_wall_collisions); smlua_bind_function(L, "return_mario_anim_y_translation", smlua_func_return_mario_anim_y_translation); smlua_bind_function(L, "set_anim_to_frame", smlua_func_set_anim_to_frame); smlua_bind_function(L, "set_jump_from_landing", smlua_func_set_jump_from_landing);