diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 959cb991d..6bd70d75a 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -7323,6 +7323,116 @@ function allocate_mario_action(actFlags)
-- ...
end
+--- @param enable boolean
+--- @return nil
+function camera_config_enable_analog_cam(enable)
+ -- ...
+end
+
+--- @param enable boolean
+--- @return nil
+function camera_config_enable_free_cam(enable)
+ -- ...
+end
+
+--- @param enable boolean
+--- @return nil
+function camera_config_enable_mouse_look(enable)
+ -- ...
+end
+
+--- @return integer
+function camera_config_get_aggression()
+ -- ...
+end
+
+--- @return integer
+function camera_config_get_deceleration()
+ -- ...
+end
+
+--- @return integer
+function camera_config_get_pan_level()
+ -- ...
+end
+
+--- @return integer
+function camera_config_get_x_sensitivity()
+ -- ...
+end
+
+--- @return integer
+function camera_config_get_y_sensitivity()
+ -- ...
+end
+
+--- @param invert boolean
+--- @return nil
+function camera_config_invert_x(invert)
+ -- ...
+end
+
+--- @param invert boolean
+--- @return nil
+function camera_config_invert_y(invert)
+ -- ...
+end
+
+--- @return boolean
+function camera_config_is_analog_cam_enabled()
+ -- ...
+end
+
+--- @return boolean
+function camera_config_is_free_cam_enabled()
+ -- ...
+end
+
+--- @return boolean
+function camera_config_is_mouse_look_enabled()
+ -- ...
+end
+
+--- @return boolean
+function camera_config_is_x_inverted()
+ -- ...
+end
+
+--- @return boolean
+function camera_config_is_y_inverted()
+ -- ...
+end
+
+--- @param value integer
+--- @return nil
+function camera_config_set_aggression(value)
+ -- ...
+end
+
+--- @param value integer
+--- @return nil
+function camera_config_set_deceleration(value)
+ -- ...
+end
+
+--- @param value integer
+--- @return nil
+function camera_config_set_pan_level(value)
+ -- ...
+end
+
+--- @param value integer
+--- @return nil
+function camera_config_set_x_sensitivity(value)
+ -- ...
+end
+
+--- @param value integer
+--- @return nil
+function camera_config_set_y_sensitivity(value)
+ -- ...
+end
+
--- @return nil
function camera_freeze()
-- ...
diff --git a/docs/lua/functions-4.md b/docs/lua/functions-4.md
index 6263d0970..06a86e9b0 100644
--- a/docs/lua/functions-4.md
+++ b/docs/lua/functions-4.md
@@ -5113,6 +5113,386 @@
+## [camera_config_enable_analog_cam](#camera_config_enable_analog_cam)
+
+### Lua Example
+`camera_config_enable_analog_cam(enable)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| enable | `boolean` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_enable_analog_cam(bool enable);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_enable_free_cam](#camera_config_enable_free_cam)
+
+### Lua Example
+`camera_config_enable_free_cam(enable)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| enable | `boolean` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_enable_free_cam(bool enable);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_enable_mouse_look](#camera_config_enable_mouse_look)
+
+### Lua Example
+`camera_config_enable_mouse_look(enable)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| enable | `boolean` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_enable_mouse_look(bool enable);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_get_aggression](#camera_config_get_aggression)
+
+### Lua Example
+`local integerValue = camera_config_get_aggression()`
+
+### Parameters
+- None
+
+### Returns
+- `integer`
+
+### C Prototype
+`u32 camera_config_get_aggression(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_get_deceleration](#camera_config_get_deceleration)
+
+### Lua Example
+`local integerValue = camera_config_get_deceleration()`
+
+### Parameters
+- None
+
+### Returns
+- `integer`
+
+### C Prototype
+`u32 camera_config_get_deceleration(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_get_pan_level](#camera_config_get_pan_level)
+
+### Lua Example
+`local integerValue = camera_config_get_pan_level()`
+
+### Parameters
+- None
+
+### Returns
+- `integer`
+
+### C Prototype
+`u32 camera_config_get_pan_level(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_get_x_sensitivity](#camera_config_get_x_sensitivity)
+
+### Lua Example
+`local integerValue = camera_config_get_x_sensitivity()`
+
+### Parameters
+- None
+
+### Returns
+- `integer`
+
+### C Prototype
+`u32 camera_config_get_x_sensitivity(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_get_y_sensitivity](#camera_config_get_y_sensitivity)
+
+### Lua Example
+`local integerValue = camera_config_get_y_sensitivity()`
+
+### Parameters
+- None
+
+### Returns
+- `integer`
+
+### C Prototype
+`u32 camera_config_get_y_sensitivity(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_invert_x](#camera_config_invert_x)
+
+### Lua Example
+`camera_config_invert_x(invert)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| invert | `boolean` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_invert_x(bool invert);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_invert_y](#camera_config_invert_y)
+
+### Lua Example
+`camera_config_invert_y(invert)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| invert | `boolean` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_invert_y(bool invert);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_is_analog_cam_enabled](#camera_config_is_analog_cam_enabled)
+
+### Lua Example
+`local booleanValue = camera_config_is_analog_cam_enabled()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool camera_config_is_analog_cam_enabled(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled)
+
+### Lua Example
+`local booleanValue = camera_config_is_free_cam_enabled()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool camera_config_is_free_cam_enabled(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_is_mouse_look_enabled](#camera_config_is_mouse_look_enabled)
+
+### Lua Example
+`local booleanValue = camera_config_is_mouse_look_enabled()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool camera_config_is_mouse_look_enabled(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_is_x_inverted](#camera_config_is_x_inverted)
+
+### Lua Example
+`local booleanValue = camera_config_is_x_inverted()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool camera_config_is_x_inverted(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_is_y_inverted](#camera_config_is_y_inverted)
+
+### Lua Example
+`local booleanValue = camera_config_is_y_inverted()`
+
+### Parameters
+- None
+
+### Returns
+- `boolean`
+
+### C Prototype
+`bool camera_config_is_y_inverted(void);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_set_aggression](#camera_config_set_aggression)
+
+### Lua Example
+`camera_config_set_aggression(value)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| value | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_set_aggression(u32 value);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_set_deceleration](#camera_config_set_deceleration)
+
+### Lua Example
+`camera_config_set_deceleration(value)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| value | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_set_deceleration(u32 value);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_set_pan_level](#camera_config_set_pan_level)
+
+### Lua Example
+`camera_config_set_pan_level(value)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| value | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_set_pan_level(u32 value);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_set_x_sensitivity](#camera_config_set_x_sensitivity)
+
+### Lua Example
+`camera_config_set_x_sensitivity(value)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| value | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_set_x_sensitivity(u32 value);`
+
+[:arrow_up_small:](#)
+
+
+
+## [camera_config_set_y_sensitivity](#camera_config_set_y_sensitivity)
+
+### Lua Example
+`camera_config_set_y_sensitivity(value)`
+
+### Parameters
+| Field | Type |
+| ----- | ---- |
+| value | `integer` |
+
+### Returns
+- None
+
+### C Prototype
+`void camera_config_set_y_sensitivity(u32 value);`
+
+[:arrow_up_small:](#)
+
+
+
## [camera_freeze](#camera_freeze)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 256e90c71..e9d11c00b 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1368,6 +1368,26 @@
- smlua_misc_utils.h
- [allocate_mario_action](functions-4.md#allocate_mario_action)
+ - [camera_config_enable_analog_cam](functions-4.md#camera_config_enable_analog_cam)
+ - [camera_config_enable_free_cam](functions-4.md#camera_config_enable_free_cam)
+ - [camera_config_enable_mouse_look](functions-4.md#camera_config_enable_mouse_look)
+ - [camera_config_get_aggression](functions-4.md#camera_config_get_aggression)
+ - [camera_config_get_deceleration](functions-4.md#camera_config_get_deceleration)
+ - [camera_config_get_pan_level](functions-4.md#camera_config_get_pan_level)
+ - [camera_config_get_x_sensitivity](functions-4.md#camera_config_get_x_sensitivity)
+ - [camera_config_get_y_sensitivity](functions-4.md#camera_config_get_y_sensitivity)
+ - [camera_config_invert_x](functions-4.md#camera_config_invert_x)
+ - [camera_config_invert_y](functions-4.md#camera_config_invert_y)
+ - [camera_config_is_analog_cam_enabled](functions-4.md#camera_config_is_analog_cam_enabled)
+ - [camera_config_is_free_cam_enabled](functions-4.md#camera_config_is_free_cam_enabled)
+ - [camera_config_is_mouse_look_enabled](functions-4.md#camera_config_is_mouse_look_enabled)
+ - [camera_config_is_x_inverted](functions-4.md#camera_config_is_x_inverted)
+ - [camera_config_is_y_inverted](functions-4.md#camera_config_is_y_inverted)
+ - [camera_config_set_aggression](functions-4.md#camera_config_set_aggression)
+ - [camera_config_set_deceleration](functions-4.md#camera_config_set_deceleration)
+ - [camera_config_set_pan_level](functions-4.md#camera_config_set_pan_level)
+ - [camera_config_set_x_sensitivity](functions-4.md#camera_config_set_x_sensitivity)
+ - [camera_config_set_y_sensitivity](functions-4.md#camera_config_set_y_sensitivity)
- [camera_freeze](functions-4.md#camera_freeze)
- [camera_unfreeze](functions-4.md#camera_unfreeze)
- [deref_s32_pointer](functions-4.md#deref_s32_pointer)
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index 3b6437a73..8de909d0a 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -15073,6 +15073,206 @@ int smlua_func_allocate_mario_action(lua_State* L) {
return 1;
}
+int smlua_func_camera_config_enable_analog_cam(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ bool enable = smlua_to_boolean(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_enable_analog_cam(enable);
+
+ return 1;
+}
+
+int smlua_func_camera_config_enable_free_cam(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ bool enable = smlua_to_boolean(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_enable_free_cam(enable);
+
+ return 1;
+}
+
+int smlua_func_camera_config_enable_mouse_look(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ bool enable = smlua_to_boolean(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_enable_mouse_look(enable);
+
+ return 1;
+}
+
+int smlua_func_camera_config_get_aggression(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, camera_config_get_aggression());
+
+ return 1;
+}
+
+int smlua_func_camera_config_get_deceleration(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, camera_config_get_deceleration());
+
+ return 1;
+}
+
+int smlua_func_camera_config_get_pan_level(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, camera_config_get_pan_level());
+
+ return 1;
+}
+
+int smlua_func_camera_config_get_x_sensitivity(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, camera_config_get_x_sensitivity());
+
+ return 1;
+}
+
+int smlua_func_camera_config_get_y_sensitivity(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushinteger(L, camera_config_get_y_sensitivity());
+
+ return 1;
+}
+
+int smlua_func_camera_config_invert_x(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ bool invert = smlua_to_boolean(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_invert_x(invert);
+
+ return 1;
+}
+
+int smlua_func_camera_config_invert_y(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ bool invert = smlua_to_boolean(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_invert_y(invert);
+
+ return 1;
+}
+
+int smlua_func_camera_config_is_analog_cam_enabled(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushboolean(L, camera_config_is_analog_cam_enabled());
+
+ return 1;
+}
+
+int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushboolean(L, camera_config_is_free_cam_enabled());
+
+ return 1;
+}
+
+int smlua_func_camera_config_is_mouse_look_enabled(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushboolean(L, camera_config_is_mouse_look_enabled());
+
+ return 1;
+}
+
+int smlua_func_camera_config_is_x_inverted(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushboolean(L, camera_config_is_x_inverted());
+
+ return 1;
+}
+
+int smlua_func_camera_config_is_y_inverted(UNUSED lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
+
+
+ lua_pushboolean(L, camera_config_is_y_inverted());
+
+ return 1;
+}
+
+int smlua_func_camera_config_set_aggression(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 value = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_set_aggression(value);
+
+ return 1;
+}
+
+int smlua_func_camera_config_set_deceleration(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 value = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_set_deceleration(value);
+
+ return 1;
+}
+
+int smlua_func_camera_config_set_pan_level(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 value = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_set_pan_level(value);
+
+ return 1;
+}
+
+int smlua_func_camera_config_set_x_sensitivity(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 value = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_set_x_sensitivity(value);
+
+ return 1;
+}
+
+int smlua_func_camera_config_set_y_sensitivity(lua_State* L) {
+ if(!smlua_functions_valid_param_count(L, 1)) { return 0; }
+
+ u32 value = smlua_to_integer(L, 1);
+ if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter 1"); return 0; }
+
+ camera_config_set_y_sensitivity(value);
+
+ return 1;
+}
+
int smlua_func_camera_freeze(UNUSED lua_State* L) {
if(!smlua_functions_valid_param_count(L, 0)) { return 0; }
@@ -17596,6 +17796,26 @@ 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, "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);
+ smlua_bind_function(L, "camera_config_get_aggression", smlua_func_camera_config_get_aggression);
+ smlua_bind_function(L, "camera_config_get_deceleration", smlua_func_camera_config_get_deceleration);
+ smlua_bind_function(L, "camera_config_get_pan_level", smlua_func_camera_config_get_pan_level);
+ smlua_bind_function(L, "camera_config_get_x_sensitivity", smlua_func_camera_config_get_x_sensitivity);
+ smlua_bind_function(L, "camera_config_get_y_sensitivity", smlua_func_camera_config_get_y_sensitivity);
+ smlua_bind_function(L, "camera_config_invert_x", smlua_func_camera_config_invert_x);
+ smlua_bind_function(L, "camera_config_invert_y", smlua_func_camera_config_invert_y);
+ smlua_bind_function(L, "camera_config_is_analog_cam_enabled", smlua_func_camera_config_is_analog_cam_enabled);
+ smlua_bind_function(L, "camera_config_is_free_cam_enabled", smlua_func_camera_config_is_free_cam_enabled);
+ smlua_bind_function(L, "camera_config_is_mouse_look_enabled", smlua_func_camera_config_is_mouse_look_enabled);
+ smlua_bind_function(L, "camera_config_is_x_inverted", smlua_func_camera_config_is_x_inverted);
+ smlua_bind_function(L, "camera_config_is_y_inverted", smlua_func_camera_config_is_y_inverted);
+ smlua_bind_function(L, "camera_config_set_aggression", smlua_func_camera_config_set_aggression);
+ smlua_bind_function(L, "camera_config_set_deceleration", smlua_func_camera_config_set_deceleration);
+ smlua_bind_function(L, "camera_config_set_pan_level", smlua_func_camera_config_set_pan_level);
+ smlua_bind_function(L, "camera_config_set_x_sensitivity", smlua_func_camera_config_set_x_sensitivity);
+ smlua_bind_function(L, "camera_config_set_y_sensitivity", smlua_func_camera_config_set_y_sensitivity);
smlua_bind_function(L, "camera_freeze", smlua_func_camera_freeze);
smlua_bind_function(L, "camera_unfreeze", smlua_func_camera_unfreeze);
smlua_bind_function(L, "deref_s32_pointer", smlua_func_deref_s32_pointer);
diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c
index 2a21ef0ca..491a055a2 100644
--- a/src/pc/lua/utils/smlua_misc_utils.c
+++ b/src/pc/lua/utils/smlua_misc_utils.c
@@ -2,6 +2,7 @@
#include "types.h"
#include "data/dynos.c.h"
+#include "game/bettercamera.h"
#include "game/camera.h"
#include "game/hud.h"
#include "pc/lua/smlua.h"
@@ -112,6 +113,156 @@ void camera_unfreeze(void) {
gOverrideFreezeCamera = FALSE;
}
+bool camera_config_is_free_cam_enabled(void) {
+#ifdef BETTERCAMERA
+ return configEnableCamera;
+#else
+ return false;
+#endif
+}
+
+bool camera_config_is_analog_cam_enabled(void) {
+#ifdef BETTERCAMERA
+ return configCameraAnalog;
+#else
+ return false;
+#endif
+}
+
+bool camera_config_is_mouse_look_enabled(void) {
+#ifdef BETTERCAMERA
+ return configCameraMouse;
+#else
+ return false;
+#endif
+}
+
+bool camera_config_is_x_inverted(void) {
+#ifdef BETTERCAMERA
+ return configCameraInvertX;
+#else
+ return false;
+#endif
+}
+
+bool camera_config_is_y_inverted(void) {
+#ifdef BETTERCAMERA
+ return configCameraInvertY;
+#else
+ return false;
+#endif
+}
+
+u32 camera_config_get_x_sensitivity(void) {
+#ifdef BETTERCAMERA
+ return configCameraXSens;
+#else
+ return 0;
+#endif
+}
+
+u32 camera_config_get_y_sensitivity(void) {
+#ifdef BETTERCAMERA
+ return configCameraYSens;
+#else
+ return 0;
+#endif
+}
+
+u32 camera_config_get_aggression(void) {
+#ifdef BETTERCAMERA
+ return configCameraAggr;
+#else
+ return 0;
+#endif
+}
+
+u32 camera_config_get_pan_level(void) {
+#ifdef BETTERCAMERA
+ return configCameraPan;
+#else
+ return 0;
+#endif
+}
+
+u32 camera_config_get_deceleration(void) {
+#ifdef BETTERCAMERA
+ return configCameraDegrade;
+#else
+ return 0;
+#endif
+}
+
+void camera_config_enable_free_cam(bool enable) {
+#ifdef BETTERCAMERA
+ configEnableCamera = enable;
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_enable_analog_cam(bool enable) {
+#ifdef BETTERCAMERA
+ configCameraAnalog = enable;
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_enable_mouse_look(bool enable) {
+#ifdef BETTERCAMERA
+ configCameraMouse = enable;
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_invert_x(bool invert) {
+#ifdef BETTERCAMERA
+ configCameraInvertX = invert;
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_invert_y(bool invert) {
+#ifdef BETTERCAMERA
+ configCameraInvertY = invert;
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_set_x_sensitivity(u32 value) {
+#ifdef BETTERCAMERA
+ configCameraXSens = MIN(MAX(value, 1), 100);
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_set_y_sensitivity(u32 value) {
+#ifdef BETTERCAMERA
+ configCameraYSens = MIN(MAX(value, 1), 100);
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_set_aggression(u32 value) {
+#ifdef BETTERCAMERA
+ configCameraAggr = MIN(MAX(value, 0), 100);
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_set_pan_level(u32 value) {
+#ifdef BETTERCAMERA
+ configCameraPan = MIN(MAX(value, 0), 100);
+ newcam_init_settings();
+#endif
+}
+
+void camera_config_set_deceleration(u32 value) {
+#ifdef BETTERCAMERA
+ configCameraDegrade = MIN(MAX(value, 0), 100);
+ newcam_init_settings();
+#endif
+}
+
///
extern s16 gMenuMode;
diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h
index 6a55e74d6..6f2f8a97d 100644
--- a/src/pc/lua/utils/smlua_misc_utils.h
+++ b/src/pc/lua/utils/smlua_misc_utils.h
@@ -39,6 +39,28 @@ void hud_render_power_meter(s32 health, f32 x, f32 y, f32 width, f32 height);
void camera_freeze(void);
void camera_unfreeze(void);
+bool camera_config_is_free_cam_enabled(void);
+bool camera_config_is_analog_cam_enabled(void);
+bool camera_config_is_mouse_look_enabled(void);
+bool camera_config_is_x_inverted(void);
+bool camera_config_is_y_inverted(void);
+u32 camera_config_get_x_sensitivity(void);
+u32 camera_config_get_y_sensitivity(void);
+u32 camera_config_get_aggression(void);
+u32 camera_config_get_pan_level(void);
+u32 camera_config_get_deceleration(void);
+
+void camera_config_enable_free_cam(bool enable);
+void camera_config_enable_analog_cam(bool enable);
+void camera_config_enable_mouse_look(bool enable);
+void camera_config_invert_x(bool invert);
+void camera_config_invert_y(bool invert);
+void camera_config_set_x_sensitivity(u32 value);
+void camera_config_set_y_sensitivity(u32 value);
+void camera_config_set_aggression(u32 value);
+void camera_config_set_pan_level(u32 value);
+void camera_config_set_deceleration(u32 value);
+
bool is_game_paused(void);
bool warp_to_level(s32 aLevel, s32 aArea, s32 aAct);