From 746dd50c5cd73d7e179713034f57dacbb78d7f65 Mon Sep 17 00:00:00 2001 From: Agent-11 / Agent X <44549182+Agent-11@users.noreply.github.com> Date: Tue, 5 Apr 2022 18:53:16 -0400 Subject: [PATCH] Add get/set_environment_region (#56) Set the water height with a function. Also added an example for it in the documentation. --- autogen/lua_definitions/functions.lua | 13 ++++++ .../{Instant_Clip.lua => instant-clip.lua} | 22 +++++----- docs/lua/examples/water-level.lua | 28 ++++++++++++ docs/lua/functions.md | 43 +++++++++++++++++++ docs/lua/lua.md | 5 ++- src/pc/lua/smlua_functions_autogen.c | 26 +++++++++++ src/pc/lua/utils/smlua_misc_utils.c | 15 +++++++ src/pc/lua/utils/smlua_misc_utils.h | 3 ++ 8 files changed, 142 insertions(+), 13 deletions(-) rename docs/lua/examples/{Instant_Clip.lua => instant-clip.lua} (85%) create mode 100644 docs/lua/examples/water-level.lua diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 45459311..0875975c 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -4135,6 +4135,12 @@ function allocate_mario_action(actFlags) -- ... end +--- @param index integer +--- @return number +function get_environment_region(index) + -- ... +end + --- @param m MarioState --- @param index integer --- @return number @@ -4171,6 +4177,13 @@ function hud_show() -- ... end +--- @param index integer +--- @param value integer +--- @return nil +function set_environment_region(index, value) + -- ... +end + --- @param aDelay integer --- @return boolean function warp_exit_level(aDelay) diff --git a/docs/lua/examples/Instant_Clip.lua b/docs/lua/examples/instant-clip.lua similarity index 85% rename from docs/lua/examples/Instant_Clip.lua rename to docs/lua/examples/instant-clip.lua index 1a735362..d578fcad 100644 --- a/docs/lua/examples/Instant_Clip.lua +++ b/docs/lua/examples/instant-clip.lua @@ -1,12 +1,12 @@ --- name: Instant Clip --- description: Press L trigger, profit! - -function mario_update(m) - if (m.controller.buttonDown & L_TRIG) ~= 0 then -- If L pressed - set_mario_action(m, ACT_WALKING, 0) --set mario to walking so his vel is used - m.forwardVel = 400 --set Velocity to clip speed - end -end - --- hooks -- +-- name: Instant Clip +-- description: Press L trigger, profit! + +function mario_update(m) + if (m.controller.buttonDown & L_TRIG) ~= 0 then -- If L pressed + set_mario_action(m, ACT_WALKING, 0) --set mario to walking so his vel is used + m.forwardVel = 400 --set Velocity to clip speed + end +end + +-- hooks -- hook_event(HOOK_MARIO_UPDATE, mario_update) \ No newline at end of file diff --git a/docs/lua/examples/water-level.lua b/docs/lua/examples/water-level.lua new file mode 100644 index 00000000..6a221bb9 --- /dev/null +++ b/docs/lua/examples/water-level.lua @@ -0,0 +1,28 @@ +-- name: Water Height Changer +-- description: Use /waterset and /waterget to manipulate water height. + +function on_get_command(msg) + if not network_is_server() then + djui_chat_message_create("You need to be the host!") + return true + end + + djui_chat_message_create(tostring(get_environment_region(1))) + djui_chat_message_create(tostring(get_environment_region(2))) + return false +end + +function on_set_command(msg) + if not network_is_server() then + djui_chat_message_create("You need to be the host!") + return true + end + + local num = tonumber(msg) + set_environment_region(1, num) + set_environment_region(2, num) + return false +end + +hook_chat_command("waterset", "to set the first two water levels", on_set_command) +hook_chat_command("waterget", "to get the first two water levels", on_get_command) \ No newline at end of file diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 2e827466..36ae0ca7 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -727,12 +727,14 @@ - smlua_misc_utils.h - [allocate_mario_action](#allocate_mario_action) + - [get_environment_region](#get_environment_region) - [get_hand_foot_pos_x](#get_hand_foot_pos_x) - [get_hand_foot_pos_y](#get_hand_foot_pos_y) - [get_hand_foot_pos_z](#get_hand_foot_pos_z) - [get_network_area_timer](#get_network_area_timer) - [hud_hide](#hud_hide) - [hud_show](#hud_show) + - [set_environment_region](#set_environment_region) - [warp_exit_level](#warp_exit_level) - [warp_restart_level](#warp_restart_level) - [warp_to_castle](#warp_to_castle) @@ -13658,6 +13660,26 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+## [get_environment_region](#get_environment_region) + +### Lua Example +`local numberValue = get_environment_region(index)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | + +### Returns +- `number` + +### C Prototype +`f32 get_environment_region(u8 index);` + +[:arrow_up_small:](#) + +
+ ## [get_hand_foot_pos_x](#get_hand_foot_pos_x) ### Lua Example @@ -13775,6 +13797,27 @@ The `reliable` field will ensure that the packet arrives, but should be used spa
+## [set_environment_region](#set_environment_region) + +### Lua Example +`set_environment_region(index, value)` + +### Parameters +| Field | Type | +| ----- | ---- | +| index | `integer` | +| value | `integer` | + +### Returns +- None + +### C Prototype +`void set_environment_region(u8 index, s32 value);` + +[:arrow_up_small:](#) + +
+ ## [warp_exit_level](#warp_exit_level) ### Lua Example diff --git a/docs/lua/lua.md b/docs/lua/lua.md index ebd30980..aad3a0e3 100644 --- a/docs/lua/lua.md +++ b/docs/lua/lua.md @@ -54,8 +54,9 @@ All of this is a holdover from when there were only two players. It was a reason - [Custom Surface Collisions](examples/big-paddle) - [Custom Box Model](examples/custom-box-model) - [Custom Player Model](examples/koopa-player-model) -- [Moonjump](examples/Moonjump.lua) -- [Instant Clip](examples/Instant_Clip.lua) +- [Moonjump](examples/moonjump.lua) +- [Instant Clip](examples/instant-clip.lua) +- [Water Height Changer](examples/water-level.lua) ## Example Lua mods (large) - [Extended Moveset](../../mods/extended-moveset.lua) diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 5d1e6702..e0f73c66 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -9200,6 +9200,17 @@ int smlua_func_allocate_mario_action(lua_State* L) { return 1; } +int smlua_func_get_environment_region(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 1)) { return 0; } + + u8 index = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + + lua_pushnumber(L, get_environment_region(index)); + + return 1; +} + int smlua_func_get_hand_foot_pos_x(lua_State* L) { if(!smlua_functions_valid_param_count(L, 2)) { return 0; } @@ -9266,6 +9277,19 @@ int smlua_func_hud_show(UNUSED lua_State* L) { return 1; } +int smlua_func_set_environment_region(lua_State* L) { + if(!smlua_functions_valid_param_count(L, 2)) { return 0; } + + u8 index = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { return 0; } + s32 value = smlua_to_integer(L, 2); + if (!gSmLuaConvertSuccess) { return 0; } + + set_environment_region(index, value); + + return 1; +} + int smlua_func_warp_exit_level(lua_State* L) { if(!smlua_functions_valid_param_count(L, 1)) { return 0; } @@ -10703,12 +10727,14 @@ void smlua_bind_functions_autogen(void) { // smlua_misc_utils.h smlua_bind_function(L, "allocate_mario_action", smlua_func_allocate_mario_action); + smlua_bind_function(L, "get_environment_region", smlua_func_get_environment_region); smlua_bind_function(L, "get_hand_foot_pos_x", smlua_func_get_hand_foot_pos_x); smlua_bind_function(L, "get_hand_foot_pos_y", smlua_func_get_hand_foot_pos_y); smlua_bind_function(L, "get_hand_foot_pos_z", smlua_func_get_hand_foot_pos_z); smlua_bind_function(L, "get_network_area_timer", smlua_func_get_network_area_timer); smlua_bind_function(L, "hud_hide", smlua_func_hud_hide); smlua_bind_function(L, "hud_show", smlua_func_hud_show); + smlua_bind_function(L, "set_environment_region", smlua_func_set_environment_region); smlua_bind_function(L, "warp_exit_level", smlua_func_warp_exit_level); smlua_bind_function(L, "warp_restart_level", smlua_func_warp_restart_level); smlua_bind_function(L, "warp_to_castle", smlua_func_warp_to_castle); diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 462fb922..12dd8941 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -7,6 +7,8 @@ #include "smlua_misc_utils.h" #include "pc/debuglog.h" +#include "game/object_list_processor.h" + u32 get_network_area_timer(void) { return gNetworkAreaTimer; } @@ -54,3 +56,16 @@ f32 get_hand_foot_pos_z(struct MarioState* m, u8 index) { if (index >= 4) { index = 0; } return m->marioBodyState->handFootPos[index][2]; } + +f32 get_environment_region(u8 index) { + if (gEnvironmentRegions != NULL && index <= gEnvironmentRegions[0]) { + return gEnvironmentRegions[6 * (int)index]; + } + return -11000; +} + +void set_environment_region(u8 index, s32 value) { + if (gEnvironmentRegions != NULL && index <= gEnvironmentRegions[0]) { + gEnvironmentRegions[6 * (int)index] = value; + } +} \ No newline at end of file diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h index a44064f1..2698eee0 100644 --- a/src/pc/lua/utils/smlua_misc_utils.h +++ b/src/pc/lua/utils/smlua_misc_utils.h @@ -17,4 +17,7 @@ f32 get_hand_foot_pos_x(struct MarioState* m, u8 index); f32 get_hand_foot_pos_y(struct MarioState* m, u8 index); f32 get_hand_foot_pos_z(struct MarioState* m, u8 index); +f32 get_environment_region(u8 index); +void set_environment_region(u8 index, s32 value); + #endif