diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index b0318f03..009c825c 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -8451,6 +8451,12 @@ function camera_reset_overrides() -- ... end +--- @param allow integer +--- @return nil +function camera_romhack_allow_centering(allow) + -- ... +end + --- @param rco RomhackCameraOverride --- @return nil function camera_set_romhack_override(rco) diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index a692682e..3b7dec61 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -488,6 +488,26 @@
+## [camera_romhack_allow_centering](#camera_romhack_allow_centering) + +### Lua Example +`camera_romhack_allow_centering(allow)` + +### Parameters +| Field | Type | +| ----- | ---- | +| allow | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_allow_centering(u8 allow);` + +[:arrow_up_small:](#) + +
+ ## [camera_set_romhack_override](#camera_set_romhack_override) ### Lua Example diff --git a/docs/lua/functions.md b/docs/lua/functions.md index e8c5cba8..e80e7129 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1578,6 +1578,7 @@ - [camera_freeze](functions-5.md#camera_freeze) - [camera_is_frozen](functions-5.md#camera_is_frozen) - [camera_reset_overrides](functions-5.md#camera_reset_overrides) + - [camera_romhack_allow_centering](functions-5.md#camera_romhack_allow_centering) - [camera_set_romhack_override](functions-5.md#camera_set_romhack_override) - [camera_unfreeze](functions-5.md#camera_unfreeze) - [course_is_main_course](functions-5.md#course_is_main_course) diff --git a/src/game/camera.c b/src/game/camera.c index bae10032..bcdeb8e5 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -41,6 +41,7 @@ static u8 sSoftResettingCamera = FALSE; u8 gCameraUseCourseSpecificSettings = TRUE; u8 gOverrideFreezeCamera = FALSE; enum RomhackCameraOverride gOverrideRomhackCamera = RCO_ALL; +u8 gRomhackCameraAllowCentering = TRUE; /** * @file camera.c @@ -12252,7 +12253,7 @@ void mode_rom_hack_camera(struct Camera *c) { } // center - if (gMarioStates[0].controller->buttonPressed & L_TRIG) { + if (gMarioStates[0].controller->buttonPressed & L_TRIG && gRomhackCameraAllowCentering) { center_rom_hack_camera(); } diff --git a/src/game/camera.h b/src/game/camera.h index 66f6ba81..21ccbb73 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -18,6 +18,7 @@ enum RomhackCameraOverride { extern u8 gOverrideFreezeCamera; extern enum RomhackCameraOverride gOverrideRomhackCamera; +extern u8 gRomhackCameraAllowCentering; /** * @file camera.h diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 72781d08..2a86df73 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -28045,6 +28045,23 @@ int smlua_func_camera_reset_overrides(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_romhack_allow_centering(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 1) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_allow_centering", 1, top); + return 0; + } + + u8 allow = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_allow_centering"); return 0; } + + camera_romhack_allow_centering(allow); + + return 1; +} + int smlua_func_camera_set_romhack_override(lua_State* L) { if (L == NULL) { return 0; } @@ -31969,6 +31986,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "camera_freeze", smlua_func_camera_freeze); smlua_bind_function(L, "camera_is_frozen", smlua_func_camera_is_frozen); smlua_bind_function(L, "camera_reset_overrides", smlua_func_camera_reset_overrides); + smlua_bind_function(L, "camera_romhack_allow_centering", smlua_func_camera_romhack_allow_centering); smlua_bind_function(L, "camera_set_romhack_override", smlua_func_camera_set_romhack_override); smlua_bind_function(L, "camera_unfreeze", smlua_func_camera_unfreeze); smlua_bind_function(L, "course_is_main_course", smlua_func_course_is_main_course); diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 72f9888d..de40e3f9 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -261,6 +261,10 @@ void camera_set_romhack_override(enum RomhackCameraOverride rco) { gOverrideRomhackCamera = rco; } +void camera_romhack_allow_centering(u8 allow) { + gRomhackCameraAllowCentering = allow; +} + bool camera_config_is_free_cam_enabled(void) { #ifdef BETTERCAMERA return sOverrideEnableCamera.override ? sOverrideEnableCamera.value : configEnableCamera; diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h index 3c937338..eb3f8291 100644 --- a/src/pc/lua/utils/smlua_misc_utils.h +++ b/src/pc/lua/utils/smlua_misc_utils.h @@ -47,6 +47,7 @@ void camera_freeze(void); void camera_unfreeze(void); bool camera_is_frozen(void); void camera_set_romhack_override(enum RomhackCameraOverride rco); +void camera_romhack_allow_centering(u8 allow); bool camera_config_is_free_cam_enabled(void); bool camera_config_is_analog_cam_enabled(void); diff --git a/src/pc/network/network.c b/src/pc/network/network.c index f2fc4bdd..245caace 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -640,6 +640,7 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect gOverrideBackground = -1; gOverrideEnvFx = -1; gDjuiRenderBehindHud = false; + gRomhackCameraAllowCentering = TRUE; camera_reset_overrides(); dynos_mod_shutdown(); mods_clear(&gActiveMods);