diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py
index 2a89108fa..dc60dcbb0 100644
--- a/autogen/convert_functions.py
+++ b/autogen/convert_functions.py
@@ -28,6 +28,11 @@ in_files = [
"src/pc/djui/djui_popup.h",
"src/pc/network/network_utils.h",
"src/pc/djui/djui_chat_message.h",
+ #"src/game/print.h",
+ "src/game/interaction.h",
+ "src/game/level_info.h",
+ "src/game/save_file.h",
+ "src/game/sound_init.h",
]
override_allowed_functions = {
@@ -35,6 +40,7 @@ override_allowed_functions = {
"src/game/camera.h": [ "set_.*camera_.*shake" ],
"src/game/thread6.c": [ "queue_rumble_"],
"src/pc/djui/djui_popup.h" : [ "create" ],
+ "src/game/save_file.h": [ "save_file_get_" ],
}
override_disallowed_functions = {
@@ -50,6 +56,9 @@ override_disallowed_functions = {
"src/game/mario_step.h": [ " stub_mario_step", "transfer_bully_speed"],
"src/game/mario.h": [ " init_mario" ],
"src/pc/djui/djui_chat_message.h": [ "create_from" ],
+ #"src/game/print.h": [ "_fmt_", "render_" ],
+ "src/game/interaction.h": [ "process_interactions", "_handle_" ],
+ "src/game/sound_init.h": [ "_loop_", "thread4_", "set_sound_mode" ],
}
###########################################################
@@ -70,6 +79,11 @@ template = """/* THIS FILE IS AUTOGENERATED */
#include "engine/surface_collision.h"
#include "pc/network/network_utils.h"
#include "src/pc/djui/djui_popup.h"
+#include "src/game/print.h"
+#include "src/game/interaction.h"
+#include "src/game/level_info.h"
+#include "src/game/save_file.h"
+#include "src/game/sound_init.h"
$[FUNCTIONS]
@@ -204,6 +218,8 @@ def build_call(function):
lfunc = 'lua_pushboolean'
elif ftype == 'char*':
lfunc = 'lua_pushstring'
+ elif ftype == 'const char*':
+ lfunc = 'lua_pushstring'
elif '???' not in flot and flot != 'LOT_NONE':
return ' smlua_push_object(L, %s, %s);\n' % (flot, ccall)
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 1c6a3249d..0cfc3eb86 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -51,6 +51,28 @@
+- interaction.h
+ - [does_mario_have_hat](#does_mario_have_hat)
+ - [get_door_save_file_flag](#get_door_save_file_flag)
+ - [mario_blow_off_cap](#mario_blow_off_cap)
+ - [mario_check_object_grab](#mario_check_object_grab)
+ - [mario_drop_held_object](#mario_drop_held_object)
+ - [mario_get_collided_object](#mario_get_collided_object)
+ - [mario_grab_used_object](#mario_grab_used_object)
+ - [mario_lose_cap_to_enemy](#mario_lose_cap_to_enemy)
+ - [mario_obj_angle_to_object](#mario_obj_angle_to_object)
+ - [mario_retrieve_cap](#mario_retrieve_cap)
+ - [mario_stop_riding_and_holding](#mario_stop_riding_and_holding)
+ - [mario_stop_riding_object](#mario_stop_riding_object)
+ - [mario_throw_held_object](#mario_throw_held_object)
+
+
+
+- level_info.h
+ - [get_level_name](#get_level_name)
+
+
+
- mario.h
- [adjust_sound_for_speed](#adjust_sound_for_speed)
- [check_common_action_exits](#check_common_action_exits)
@@ -248,6 +270,39 @@
+- save_file.h
+ - [save_file_get_cap_pos](#save_file_get_cap_pos)
+ - [save_file_get_course_coin_score](#save_file_get_course_coin_score)
+ - [save_file_get_course_star_count](#save_file_get_course_star_count)
+ - [save_file_get_flags](#save_file_get_flags)
+ - [save_file_get_max_coin_score](#save_file_get_max_coin_score)
+ - [save_file_get_sound_mode](#save_file_get_sound_mode)
+ - [save_file_get_star_flags](#save_file_get_star_flags)
+ - [save_file_get_total_star_count](#save_file_get_total_star_count)
+
+
+
+- sound_init.h
+ - [disable_background_sound](#disable_background_sound)
+ - [enable_background_sound](#enable_background_sound)
+ - [fadeout_cap_music](#fadeout_cap_music)
+ - [fadeout_level_music](#fadeout_level_music)
+ - [fadeout_music](#fadeout_music)
+ - [lower_background_noise](#lower_background_noise)
+ - [play_cap_music](#play_cap_music)
+ - [play_cutscene_music](#play_cutscene_music)
+ - [play_infinite_stairs_music](#play_infinite_stairs_music)
+ - [play_menu_sounds](#play_menu_sounds)
+ - [play_painting_eject_sound](#play_painting_eject_sound)
+ - [play_shell_music](#play_shell_music)
+ - [raise_background_noise](#raise_background_noise)
+ - [reset_volume](#reset_volume)
+ - [set_background_music](#set_background_music)
+ - [stop_cap_music](#stop_cap_music)
+ - [stop_shell_music](#stop_shell_music)
+
+
+
- surface_collision.h
- [find_floor_height](#find_floor_height)
- [find_poison_gas_level](#find_poison_gas_level)
@@ -910,6 +965,304 @@
+---
+# functions from interaction.h
+
+
+
+
+## [does_mario_have_hat](#does_mario_have_hat)
+
+### Lua Example
+`local integerValue = does_mario_have_hat(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 does_mario_have_hat(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [get_door_save_file_flag](#get_door_save_file_flag)
+
+### Lua Example
+`local integerValue = get_door_save_file_flag(door)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| door | [Object](structs.md#Object) |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 get_door_save_file_flag(struct Object *door);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_blow_off_cap](#mario_blow_off_cap)
+
+### Lua Example
+`mario_blow_off_cap(m, capSpeed)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+| capSpeed | number |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_blow_off_cap(struct MarioState *m, f32 capSpeed);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_check_object_grab](#mario_check_object_grab)
+
+### Lua Example
+`local integerValue = mario_check_object_grab(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 mario_check_object_grab(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_drop_held_object](#mario_drop_held_object)
+
+### Lua Example
+`mario_drop_held_object(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_drop_held_object(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_get_collided_object](#mario_get_collided_object)
+
+### Lua Example
+`local ObjectValue = mario_get_collided_object(m, interactType)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+| interactType | integer |
+
+### Returns
+[Object](structs.md#Object)
+
+### C Prototype
+`struct Object *mario_get_collided_object(struct MarioState *m, u32 interactType);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_grab_used_object](#mario_grab_used_object)
+
+### Lua Example
+`mario_grab_used_object(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_grab_used_object(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_lose_cap_to_enemy](#mario_lose_cap_to_enemy)
+
+### Lua Example
+`local integerValue = mario_lose_cap_to_enemy(m, arg)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+| arg | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 mario_lose_cap_to_enemy(struct MarioState* m, u32 arg);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_obj_angle_to_object](#mario_obj_angle_to_object)
+
+### Lua Example
+`local integerValue = mario_obj_angle_to_object(m, o)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+| o | [Object](structs.md#Object) |
+
+### Returns
+- integer
+
+### C Prototype
+`s16 mario_obj_angle_to_object(struct MarioState *m, struct Object *o);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_retrieve_cap](#mario_retrieve_cap)
+
+### Lua Example
+`mario_retrieve_cap(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_retrieve_cap(struct MarioState* m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_stop_riding_and_holding](#mario_stop_riding_and_holding)
+
+### Lua Example
+`mario_stop_riding_and_holding(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_stop_riding_and_holding(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_stop_riding_object](#mario_stop_riding_object)
+
+### Lua Example
+`mario_stop_riding_object(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_stop_riding_object(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+## [mario_throw_held_object](#mario_throw_held_object)
+
+### Lua Example
+`mario_throw_held_object(m)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| m | [MarioState](structs.md#MarioState) |
+
+### Returns
+- None
+
+### C Prototype
+`void mario_throw_held_object(struct MarioState *m);`
+
+[:arrow_up_small:](#)
+
+
+
+---
+# functions from level_info.h
+
+
+
+
+## [get_level_name](#get_level_name)
+
+### Lua Example
+`local stringValue = get_level_name(courseNum, levelNum, areaIndex)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| courseNum | integer |
+| levelNum | integer |
+| areaIndex | integer |
+
+### Returns
+- string
+
+### C Prototype
+`const char* get_level_name(s16 courseNum, s16 levelNum, s16 areaIndex);`
+
+[:arrow_up_small:](#)
+
+
+
---
# functions from mario.h
@@ -4222,6 +4575,503 @@
+---
+# functions from save_file.h
+
+
+
+
+## [save_file_get_cap_pos](#save_file_get_cap_pos)
+
+### Lua Example
+`local integerValue = save_file_get_cap_pos(capPos)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| capPos | [Vec3s](structs.md#Vec3s) |
+
+### Returns
+- integer
+
+### C Prototype
+`s32 save_file_get_cap_pos(Vec3s capPos);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_course_coin_score](#save_file_get_course_coin_score)
+
+### Lua Example
+`local integerValue = save_file_get_course_coin_score(fileIndex, courseIndex)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fileIndex | integer |
+| courseIndex | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`s32 save_file_get_course_coin_score(s32 fileIndex, s32 courseIndex);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_course_star_count](#save_file_get_course_star_count)
+
+### Lua Example
+`local integerValue = save_file_get_course_star_count(fileIndex, courseIndex)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fileIndex | integer |
+| courseIndex | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`s32 save_file_get_course_star_count(s32 fileIndex, s32 courseIndex);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_flags](#save_file_get_flags)
+
+### Lua Example
+`local integerValue = save_file_get_flags()`
+
+### Parameters
+- None
+
+### Returns
+- integer
+
+### C Prototype
+`u32 save_file_get_flags(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_max_coin_score](#save_file_get_max_coin_score)
+
+### Lua Example
+`local integerValue = save_file_get_max_coin_score(courseIndex)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| courseIndex | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 save_file_get_max_coin_score(s32 courseIndex);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_sound_mode](#save_file_get_sound_mode)
+
+### Lua Example
+`local integerValue = save_file_get_sound_mode()`
+
+### Parameters
+- None
+
+### Returns
+- integer
+
+### C Prototype
+`u16 save_file_get_sound_mode(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_star_flags](#save_file_get_star_flags)
+
+### Lua Example
+`local integerValue = save_file_get_star_flags(fileIndex, courseIndex)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fileIndex | integer |
+| courseIndex | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`u32 save_file_get_star_flags(s32 fileIndex, s32 courseIndex);`
+
+[:arrow_up_small:](#)
+
+
+
+## [save_file_get_total_star_count](#save_file_get_total_star_count)
+
+### Lua Example
+`local integerValue = save_file_get_total_star_count(fileIndex, minCourse, maxCourse)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fileIndex | integer |
+| minCourse | integer |
+| maxCourse | integer |
+
+### Returns
+- integer
+
+### C Prototype
+`s32 save_file_get_total_star_count(s32 fileIndex, s32 minCourse, s32 maxCourse);`
+
+[:arrow_up_small:](#)
+
+
+
+---
+# functions from sound_init.h
+
+
+
+
+## [disable_background_sound](#disable_background_sound)
+
+### Lua Example
+`disable_background_sound()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void disable_background_sound(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [enable_background_sound](#enable_background_sound)
+
+### Lua Example
+`enable_background_sound()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void enable_background_sound(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [fadeout_cap_music](#fadeout_cap_music)
+
+### Lua Example
+`fadeout_cap_music()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void fadeout_cap_music(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [fadeout_level_music](#fadeout_level_music)
+
+### Lua Example
+`fadeout_level_music(fadeTimer)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fadeTimer | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void fadeout_level_music(s16 fadeTimer);`
+
+[:arrow_up_small:](#)
+
+
+
+## [fadeout_music](#fadeout_music)
+
+### Lua Example
+`fadeout_music(fadeOutTime)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| fadeOutTime | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void fadeout_music(s16 fadeOutTime);`
+
+[:arrow_up_small:](#)
+
+
+
+## [lower_background_noise](#lower_background_noise)
+
+### Lua Example
+`lower_background_noise(a)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| a | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void lower_background_noise(s32 a);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_cap_music](#play_cap_music)
+
+### Lua Example
+`play_cap_music(seqArgs)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| seqArgs | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void play_cap_music(u16 seqArgs);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_cutscene_music](#play_cutscene_music)
+
+### Lua Example
+`play_cutscene_music(seqArgs)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| seqArgs | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void play_cutscene_music(u16 seqArgs);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_infinite_stairs_music](#play_infinite_stairs_music)
+
+### Lua Example
+`play_infinite_stairs_music()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void play_infinite_stairs_music(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_menu_sounds](#play_menu_sounds)
+
+### Lua Example
+`play_menu_sounds(soundMenuFlags)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| soundMenuFlags | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void play_menu_sounds(s16 soundMenuFlags);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_painting_eject_sound](#play_painting_eject_sound)
+
+### Lua Example
+`play_painting_eject_sound()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void play_painting_eject_sound(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [play_shell_music](#play_shell_music)
+
+### Lua Example
+`play_shell_music()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void play_shell_music(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [raise_background_noise](#raise_background_noise)
+
+### Lua Example
+`raise_background_noise(a)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| a | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void raise_background_noise(s32 a);`
+
+[:arrow_up_small:](#)
+
+
+
+## [reset_volume](#reset_volume)
+
+### Lua Example
+`reset_volume()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void reset_volume(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [set_background_music](#set_background_music)
+
+### Lua Example
+`set_background_music(a, seqArgs, fadeTimer)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| a | integer |
+| seqArgs | integer |
+| fadeTimer | integer |
+
+### Returns
+- None
+
+### C Prototype
+`void set_background_music(u16 a, u16 seqArgs, s16 fadeTimer);`
+
+[:arrow_up_small:](#)
+
+
+
+## [stop_cap_music](#stop_cap_music)
+
+### Lua Example
+`stop_cap_music()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void stop_cap_music(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [stop_shell_music](#stop_shell_music)
+
+### Lua Example
+`stop_shell_music()`
+
+### Parameters
+- None
+
+### Returns
+- None
+
+### C Prototype
+`void stop_shell_music(void);`
+
+[:arrow_up_small:](#)
+
+
+
---
# functions from surface_collision.h
diff --git a/docs/lua/lua.md b/docs/lua/lua.md
index 99c736e26..4ce285046 100644
--- a/docs/lua/lua.md
+++ b/docs/lua/lua.md
@@ -11,6 +11,12 @@ Lua scripts you make can be placed either the `mods` folder in the base director
+## Tips
+- When developing Lua mods, run the game from a console. Lua errors and logs will appear there.
+- You can use the `print()` command when debugging. Your logs will show up in the console.
+
+
+
## Sections
- [Globals](globals.md)
- [Hooks](hooks.md)
@@ -25,3 +31,4 @@ Lua scripts you make can be placed either the `mods` folder in the base director
- [Character Movesets](../../mods/character-movesets.lua)
- [Low Gravity](../../mods/low-gravity.lua)
- [Faster Swimming](../../mods/faster-swimming.lua)
+- [Hide and Seek](../../mods/hide-and-seek.lua)
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index eb5e81b35..4c9d439f2 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -14,6 +14,11 @@
#include "engine/surface_collision.h"
#include "pc/network/network_utils.h"
#include "src/pc/djui/djui_popup.h"
+#include "src/game/print.h"
+#include "src/game/interaction.h"
+#include "src/game/level_info.h"
+#include "src/game/save_file.h"
+#include "src/game/sound_init.h"
//////////////
// camera.h //
@@ -429,6 +434,180 @@ int smlua_func_sequence_player_unlower(lua_State* L) {
return 1;
}
+ ///////////////////
+ // interaction.h //
+///////////////////
+
+int smlua_func_does_mario_have_hat(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; }
+
+ lua_pushinteger(L, does_mario_have_hat(m));
+
+ return 1;
+}
+
+int smlua_func_get_door_save_file_flag(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ struct Object* door = (struct Object*)smlua_to_cobject(L, 1, LOT_OBJECT);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, get_door_save_file_flag(door));
+
+ return 1;
+}
+
+int smlua_func_mario_blow_off_cap(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ f32 capSpeed = smlua_to_number(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ mario_blow_off_cap(m, capSpeed);
+
+ return 1;
+}
+
+int smlua_func_mario_check_object_grab(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; }
+
+ lua_pushinteger(L, mario_check_object_grab(m));
+
+ return 1;
+}
+
+int smlua_func_mario_drop_held_object(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; }
+
+ mario_drop_held_object(m);
+
+ return 1;
+}
+
+int smlua_func_mario_get_collided_object(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ u32 interactType = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ smlua_push_object(L, LOT_OBJECT, mario_get_collided_object(m, interactType));
+
+ return 1;
+}
+
+int smlua_func_mario_grab_used_object(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; }
+
+ mario_grab_used_object(m);
+
+ return 1;
+}
+
+int smlua_func_mario_lose_cap_to_enemy(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ u32 arg = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, mario_lose_cap_to_enemy(m, arg));
+
+ return 1;
+}
+
+int smlua_func_mario_obj_angle_to_object(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ struct Object* o = (struct Object*)smlua_to_cobject(L, 2, LOT_OBJECT);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, mario_obj_angle_to_object(m, o));
+
+ return 1;
+}
+
+int smlua_func_mario_retrieve_cap(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; }
+
+ mario_retrieve_cap(m);
+
+ return 1;
+}
+
+int smlua_func_mario_stop_riding_and_holding(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; }
+
+ mario_stop_riding_and_holding(m);
+
+ return 1;
+}
+
+int smlua_func_mario_stop_riding_object(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; }
+
+ mario_stop_riding_object(m);
+
+ return 1;
+}
+
+int smlua_func_mario_throw_held_object(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; }
+
+ mario_throw_held_object(m);
+
+ return 1;
+}
+
+ //////////////////
+ // level_info.h //
+//////////////////
+
+int smlua_func_get_level_name(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 3)) { return 0; }
+
+ s16 courseNum = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s16 levelNum = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s16 areaIndex = smlua_to_integer(L, 3);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushstring(L, get_level_name(courseNum, levelNum, areaIndex));
+
+ return 1;
+}
+
/////////////
// mario.h //
/////////////
@@ -2685,6 +2864,291 @@ int smlua_func_network_local_index_from_global(lua_State* L) {
return 1;
}
+ /////////////////
+ // save_file.h //
+/////////////////
+
+int smlua_func_save_file_get_cap_pos(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+
+ s16* capPos = smlua_get_vec3s_from_buffer();
+ capPos[0] = smlua_get_integer_field(1, "x");
+ if (!gSmLuaConvertSuccess) { return 0; }
+ capPos[1] = smlua_get_integer_field(1, "y");
+ if (!gSmLuaConvertSuccess) { return 0; }
+ capPos[2] = smlua_get_integer_field(1, "z");
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_cap_pos(capPos));
+
+ smlua_push_integer_field(1, "x", capPos[0]);
+ smlua_push_integer_field(1, "y", capPos[1]);
+ smlua_push_integer_field(1, "z", capPos[2]);
+
+ return 1;
+}
+
+int smlua_func_save_file_get_course_coin_score(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ s32 fileIndex = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s32 courseIndex = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_course_coin_score(fileIndex, courseIndex));
+
+ return 1;
+}
+
+int smlua_func_save_file_get_course_star_count(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ s32 fileIndex = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s32 courseIndex = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_course_star_count(fileIndex, courseIndex));
+
+ return 1;
+}
+
+int smlua_func_save_file_get_flags(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, save_file_get_flags());
+
+ return 1;
+}
+
+int smlua_func_save_file_get_max_coin_score(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s32 courseIndex = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_max_coin_score(courseIndex));
+
+ return 1;
+}
+
+int smlua_func_save_file_get_sound_mode(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, save_file_get_sound_mode());
+
+ return 1;
+}
+
+int smlua_func_save_file_get_star_flags(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 2)) { return 0; }
+
+ s32 fileIndex = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s32 courseIndex = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_star_flags(fileIndex, courseIndex));
+
+ return 1;
+}
+
+int smlua_func_save_file_get_total_star_count(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 3)) { return 0; }
+
+ s32 fileIndex = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s32 minCourse = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s32 maxCourse = smlua_to_integer(L, 3);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lua_pushinteger(L, save_file_get_total_star_count(fileIndex, minCourse, maxCourse));
+
+ return 1;
+}
+
+ //////////////////
+ // sound_init.h //
+//////////////////
+
+int smlua_func_disable_background_sound(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ disable_background_sound();
+
+ return 1;
+}
+
+int smlua_func_enable_background_sound(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ enable_background_sound();
+
+ return 1;
+}
+
+int smlua_func_fadeout_cap_music(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ fadeout_cap_music();
+
+ return 1;
+}
+
+int smlua_func_fadeout_level_music(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s16 fadeTimer = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ fadeout_level_music(fadeTimer);
+
+ return 1;
+}
+
+int smlua_func_fadeout_music(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s16 fadeOutTime = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ fadeout_music(fadeOutTime);
+
+ return 1;
+}
+
+int smlua_func_lower_background_noise(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s32 a = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ lower_background_noise(a);
+
+ return 1;
+}
+
+int smlua_func_play_cap_music(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u16 seqArgs = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ play_cap_music(seqArgs);
+
+ return 1;
+}
+
+int smlua_func_play_cutscene_music(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u16 seqArgs = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ play_cutscene_music(seqArgs);
+
+ return 1;
+}
+
+int smlua_func_play_infinite_stairs_music(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ play_infinite_stairs_music();
+
+ return 1;
+}
+
+int smlua_func_play_menu_sounds(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s16 soundMenuFlags = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ play_menu_sounds(soundMenuFlags);
+
+ return 1;
+}
+
+int smlua_func_play_painting_eject_sound(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ play_painting_eject_sound();
+
+ return 1;
+}
+
+int smlua_func_play_shell_music(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ play_shell_music();
+
+ return 1;
+}
+
+int smlua_func_raise_background_noise(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ s32 a = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ raise_background_noise(a);
+
+ return 1;
+}
+
+int smlua_func_reset_volume(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ reset_volume();
+
+ return 1;
+}
+
+int smlua_func_set_background_music(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 3)) { return 0; }
+
+ u16 a = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ u16 seqArgs = smlua_to_integer(L, 2);
+ if (!gSmLuaConvertSuccess) { return 0; }
+ s16 fadeTimer = smlua_to_integer(L, 3);
+ if (!gSmLuaConvertSuccess) { return 0; }
+
+ set_background_music(a, seqArgs, fadeTimer);
+
+ return 1;
+}
+
+int smlua_func_stop_cap_music(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ stop_cap_music();
+
+ return 1;
+}
+
+int smlua_func_stop_shell_music(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ stop_shell_music();
+
+ return 1;
+}
+
/////////////////////////
// surface_collision.h //
/////////////////////////
@@ -2963,6 +3427,24 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "sequence_player_fade_out", smlua_func_sequence_player_fade_out);
smlua_bind_function(L, "sequence_player_unlower", smlua_func_sequence_player_unlower);
+ // interaction.h
+ smlua_bind_function(L, "does_mario_have_hat", smlua_func_does_mario_have_hat);
+ smlua_bind_function(L, "get_door_save_file_flag", smlua_func_get_door_save_file_flag);
+ smlua_bind_function(L, "mario_blow_off_cap", smlua_func_mario_blow_off_cap);
+ smlua_bind_function(L, "mario_check_object_grab", smlua_func_mario_check_object_grab);
+ smlua_bind_function(L, "mario_drop_held_object", smlua_func_mario_drop_held_object);
+ smlua_bind_function(L, "mario_get_collided_object", smlua_func_mario_get_collided_object);
+ smlua_bind_function(L, "mario_grab_used_object", smlua_func_mario_grab_used_object);
+ smlua_bind_function(L, "mario_lose_cap_to_enemy", smlua_func_mario_lose_cap_to_enemy);
+ smlua_bind_function(L, "mario_obj_angle_to_object", smlua_func_mario_obj_angle_to_object);
+ smlua_bind_function(L, "mario_retrieve_cap", smlua_func_mario_retrieve_cap);
+ smlua_bind_function(L, "mario_stop_riding_and_holding", smlua_func_mario_stop_riding_and_holding);
+ smlua_bind_function(L, "mario_stop_riding_object", smlua_func_mario_stop_riding_object);
+ smlua_bind_function(L, "mario_throw_held_object", smlua_func_mario_throw_held_object);
+
+ // level_info.h
+ smlua_bind_function(L, "get_level_name", smlua_func_get_level_name);
+
// mario.h
smlua_bind_function(L, "adjust_sound_for_speed", smlua_func_adjust_sound_for_speed);
smlua_bind_function(L, "check_common_action_exits", smlua_func_check_common_action_exits);
@@ -3145,6 +3627,35 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "network_is_server", smlua_func_network_is_server);
smlua_bind_function(L, "network_local_index_from_global", smlua_func_network_local_index_from_global);
+ // save_file.h
+ smlua_bind_function(L, "save_file_get_cap_pos", smlua_func_save_file_get_cap_pos);
+ smlua_bind_function(L, "save_file_get_course_coin_score", smlua_func_save_file_get_course_coin_score);
+ smlua_bind_function(L, "save_file_get_course_star_count", smlua_func_save_file_get_course_star_count);
+ smlua_bind_function(L, "save_file_get_flags", smlua_func_save_file_get_flags);
+ smlua_bind_function(L, "save_file_get_max_coin_score", smlua_func_save_file_get_max_coin_score);
+ smlua_bind_function(L, "save_file_get_sound_mode", smlua_func_save_file_get_sound_mode);
+ 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);
+
+ // sound_init.h
+ smlua_bind_function(L, "disable_background_sound", smlua_func_disable_background_sound);
+ smlua_bind_function(L, "enable_background_sound", smlua_func_enable_background_sound);
+ smlua_bind_function(L, "fadeout_cap_music", smlua_func_fadeout_cap_music);
+ smlua_bind_function(L, "fadeout_level_music", smlua_func_fadeout_level_music);
+ smlua_bind_function(L, "fadeout_music", smlua_func_fadeout_music);
+ smlua_bind_function(L, "lower_background_noise", smlua_func_lower_background_noise);
+ smlua_bind_function(L, "play_cap_music", smlua_func_play_cap_music);
+ smlua_bind_function(L, "play_cutscene_music", smlua_func_play_cutscene_music);
+ smlua_bind_function(L, "play_infinite_stairs_music", smlua_func_play_infinite_stairs_music);
+ smlua_bind_function(L, "play_menu_sounds", smlua_func_play_menu_sounds);
+ smlua_bind_function(L, "play_painting_eject_sound", smlua_func_play_painting_eject_sound);
+ smlua_bind_function(L, "play_shell_music", smlua_func_play_shell_music);
+ smlua_bind_function(L, "raise_background_noise", smlua_func_raise_background_noise);
+ smlua_bind_function(L, "reset_volume", smlua_func_reset_volume);
+ smlua_bind_function(L, "set_background_music", smlua_func_set_background_music);
+ smlua_bind_function(L, "stop_cap_music", smlua_func_stop_cap_music);
+ smlua_bind_function(L, "stop_shell_music", smlua_func_stop_shell_music);
+
// surface_collision.h
//smlua_bind_function(L, "f32_find_wall_collision", smlua_func_f32_find_wall_collision); <--- UNIMPLEMENTED
//smlua_bind_function(L, "find_ceil", smlua_func_find_ceil); <--- UNIMPLEMENTED