From 302b9b71fab8f94e53751627e402347f9a7df2a1 Mon Sep 17 00:00:00 2001
From: Sunk <69110309+Sunketchupm@users.noreply.github.com>
Date: Wed, 20 Sep 2023 13:12:08 -0400
Subject: [PATCH] Patch out toxic gas camera from romhacks (#462)
* Patch out toxic gas camera from romhacks
* Allow toxic gas camera in romhacks to be disabled with camera_allow_toxic_gas_camera()
In romhacks only. Toxic gas camera in vanilla levels will always remain active.
Passing in 0 means enable toxic gas camera.
* Reset gOverrideAllowToxicGasCamera to network_shutdown()
* Swap order
I too have a hard time reading my own code
---
autogen/lua_definitions/functions.lua | 6 ++++++
docs/lua/functions-5.md | 20 ++++++++++++++++++++
docs/lua/functions.md | 1 +
src/game/camera.c | 11 +++++++----
src/game/camera.h | 1 +
src/pc/lua/smlua_functions_autogen.c | 18 ++++++++++++++++++
src/pc/lua/utils/smlua_misc_utils.c | 4 ++++
src/pc/lua/utils/smlua_misc_utils.h | 1 +
src/pc/network/network.c | 1 +
9 files changed, 59 insertions(+), 4 deletions(-)
diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 1fa36fd9..8ae4e10c 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -8359,6 +8359,12 @@ function allocate_mario_action(actFlags)
-- ...
end
+--- @param allow integer
+--- @return nil
+function camera_allow_toxic_gas_camera(allow)
+ -- ...
+end
+
--- @param enable boolean
--- @return nil
function camera_config_enable_analog_cam(enable)
diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md
index 539b170a..c1af7501 100644
--- a/docs/lua/functions-5.md
+++ b/docs/lua/functions-5.md
@@ -54,6 +54,26 @@
+## [camera_allow_toxic_gas_camera](#camera_allow_toxic_gas_camera)
+
+### Lua Example
+`camera_allow_toxic_gas_camera(allow)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| allow | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_allow_toxic_gas_camera(u8 allow);`
+
+[:arrow_up_small:](#)
+
+
+
## [camera_config_enable_analog_cam](#camera_config_enable_analog_cam)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 186d33d5..a45471db 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1560,6 +1560,7 @@
- smlua_misc_utils.h
- [add_scroll_target](functions-5.md#add_scroll_target)
- [allocate_mario_action](functions-5.md#allocate_mario_action)
+ - [camera_allow_toxic_gas_camera](functions-5.md#camera_allow_toxic_gas_camera)
- [camera_config_enable_analog_cam](functions-5.md#camera_config_enable_analog_cam)
- [camera_config_enable_free_cam](functions-5.md#camera_config_enable_free_cam)
- [camera_config_enable_mouse_look](functions-5.md#camera_config_enable_mouse_look)
diff --git a/src/game/camera.c b/src/game/camera.c
index bcdeb8e5..b96fb212 100644
--- a/src/game/camera.c
+++ b/src/game/camera.c
@@ -42,6 +42,7 @@ u8 gCameraUseCourseSpecificSettings = TRUE;
u8 gOverrideFreezeCamera = FALSE;
enum RomhackCameraOverride gOverrideRomhackCamera = RCO_ALL;
u8 gRomhackCameraAllowCentering = TRUE;
+u8 gOverrideAllowToxicGasCamera = FALSE;
/**
* @file camera.c
@@ -2366,10 +2367,12 @@ s16 update_default_camera(struct Camera *c) {
}
// Make Lakitu fly above the gas
- gasHeight = find_poison_gas_level(cPos[0], cPos[2]);
- if (gasHeight != gLevelValues.floorLowerLimit) {
- if ((gasHeight += 130.f) > c->pos[1]) {
- c->pos[1] = gasHeight;
+ if (gOverrideAllowToxicGasCamera || dynos_level_is_vanilla_level(gCurrLevelNum)) {
+ gasHeight = find_poison_gas_level(cPos[0], cPos[2]);
+ if (gasHeight != gLevelValues.floorLowerLimit) {
+ if ((gasHeight += 130.f) > c->pos[1]) {
+ c->pos[1] = gasHeight;
+ }
}
}
diff --git a/src/game/camera.h b/src/game/camera.h
index 21ccbb73..07d1fd7f 100644
--- a/src/game/camera.h
+++ b/src/game/camera.h
@@ -19,6 +19,7 @@ enum RomhackCameraOverride {
extern u8 gOverrideFreezeCamera;
extern enum RomhackCameraOverride gOverrideRomhackCamera;
extern u8 gRomhackCameraAllowCentering;
+extern u8 gOverrideAllowToxicGasCamera;
/**
* @file camera.h
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index a97eaa5f..ef5c0031 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -27767,6 +27767,23 @@ int smlua_func_allocate_mario_action(lua_State* L) {
return 1;
}
+int smlua_func_camera_allow_toxic_gas_camera(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_allow_toxic_gas_camera", 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_allow_toxic_gas_camera"); return 0; }
+
+ camera_allow_toxic_gas_camera(allow);
+
+ return 1;
+}
+
int smlua_func_camera_config_enable_analog_cam(lua_State* L) {
if (L == NULL) { return 0; }
@@ -32070,6 +32087,7 @@ void smlua_bind_functions_autogen(void) {
// smlua_misc_utils.h
smlua_bind_function(L, "add_scroll_target", smlua_func_add_scroll_target);
smlua_bind_function(L, "allocate_mario_action", smlua_func_allocate_mario_action);
+ smlua_bind_function(L, "camera_allow_toxic_gas_camera", smlua_func_camera_allow_toxic_gas_camera);
smlua_bind_function(L, "camera_config_enable_analog_cam", smlua_func_camera_config_enable_analog_cam);
smlua_bind_function(L, "camera_config_enable_free_cam", smlua_func_camera_config_enable_free_cam);
smlua_bind_function(L, "camera_config_enable_mouse_look", smlua_func_camera_config_enable_mouse_look);
diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c
index 000f129b..9bb2bb00 100644
--- a/src/pc/lua/utils/smlua_misc_utils.c
+++ b/src/pc/lua/utils/smlua_misc_utils.c
@@ -265,6 +265,10 @@ void camera_romhack_allow_centering(u8 allow) {
gRomhackCameraAllowCentering = allow;
}
+void camera_allow_toxic_gas_camera(u8 allow) {
+ gOverrideAllowToxicGasCamera = 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 9d475d42..d59d0d16 100644
--- a/src/pc/lua/utils/smlua_misc_utils.h
+++ b/src/pc/lua/utils/smlua_misc_utils.h
@@ -48,6 +48,7 @@ void camera_unfreeze(void);
bool camera_is_frozen(void);
void camera_set_romhack_override(enum RomhackCameraOverride rco);
void camera_romhack_allow_centering(u8 allow);
+void camera_allow_toxic_gas_camera(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 245caace..751b7f2d 100644
--- a/src/pc/network/network.c
+++ b/src/pc/network/network.c
@@ -660,6 +660,7 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect
gOverrideDialogPos = 0;
gOverrideDialogColor = 0;
gDialogMinWidth = 0;
+ gOverrideAllowToxicGasCamera = FALSE;
struct Controller* cnt = gMarioStates[0].controller;
cnt->rawStickX = 0;