From f7dbd399358f7f3fc1fec62ad23521aa86bfe7da Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:09:38 -0500 Subject: [PATCH 01/13] Add new freecamera toggles --- autogen/lua_definitions/constants.lua | 2 + autogen/lua_definitions/functions.lua | 30 +++++++++ docs/lua/functions-3.md | 20 ++++++ docs/lua/functions-5.md | 88 +++++++++++++++++++++++++++ docs/lua/functions.md | 5 ++ lang/English.ini | 2 + src/game/bettercamera.h | 3 + src/game/bettercamera.inc.h | 66 ++++++++++++++------ src/game/camera.h | 1 + src/pc/configfile.c | 4 ++ src/pc/configfile.h | 2 + src/pc/djui/djui_panel_camera.c | 2 + src/pc/lua/smlua_constants_autogen.c | 2 + src/pc/lua/smlua_functions_autogen.c | 86 ++++++++++++++++++++++++++ src/pc/lua/utils/smlua_camera_utils.c | 44 +++++++++++--- src/pc/lua/utils/smlua_camera_utils.h | 8 +++ 16 files changed, 336 insertions(+), 29 deletions(-) diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index 923dd8df6..75a8ec1a6 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -333,6 +333,7 @@ COURSE_MIN = 1 --- @param np NetworkPlayer --- @param part PlayerPart --- @return Color +--- Gets the palette color of `part` on `np` function network_player_get_palette_color(np, part) local color = { r = network_player_get_palette_color_channel(np, part, 0), @@ -345,6 +346,7 @@ end --- @param np NetworkPlayer --- @param part PlayerPart --- @return Color +--- Gets the override palette color of `part` on `np` function network_player_get_override_palette_color(np, part) local color = { r = network_player_get_override_palette_color_channel(np, part, 0), diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 67a1e2171..ca84be4ff 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -3534,6 +3534,12 @@ function skip_camera_interpolation() -- ... end +--- @param angle integer +--- @return integer +function snap_to_45_degrees(angle) + -- ... +end + --- @param c Camera function soft_reset_camera(c) -- ... @@ -8487,12 +8493,24 @@ function camera_config_enable_analog_cam(enable) -- ... end +--- @param enable boolean +--- Overrides if Camera Collision is enabled +function camera_config_enable_camera_collisions(enable) + -- ... +end + --- @param enable boolean --- Overrides if Free Camera is enabled function camera_config_enable_free_cam(enable) -- ... end +--- @param enable boolean +--- Overrides if Freecam DPad Behavior is enabled +function camera_config_enable_freecam_dpad(enable) + -- ... +end + --- @param enable boolean --- Overrides if camera mouse look is enabled function camera_config_enable_mouse_look(enable) @@ -8542,12 +8560,24 @@ function camera_config_is_analog_cam_enabled() -- ... end +--- @return boolean +--- Checks if Camera Collision is enabled +function camera_config_is_camera_collision_enabled() + -- ... +end + --- @return boolean --- Checks if Free Camera is enabled function camera_config_is_free_cam_enabled() -- ... end +--- @return boolean +--- Checks if Freecam DPad Behavior is enabled +function camera_config_is_freecam_dpad_enabled() + -- ... +end + --- @return boolean --- Checks if Mouse Look is enabled function camera_config_is_mouse_look_enabled() diff --git a/docs/lua/functions-3.md b/docs/lua/functions-3.md index 32fc12682..f498c4352 100644 --- a/docs/lua/functions-3.md +++ b/docs/lua/functions-3.md @@ -2000,6 +2000,26 @@ Gets a behavior ID from only vanilla behavior scripts
+## [snap_to_45_degrees](#snap_to_45_degrees) + +### Lua Example +`local integerValue = snap_to_45_degrees(angle)` + +### Parameters +| Field | Type | +| ----- | ---- | +| angle | `integer` | + +### Returns +- `integer` + +### C Prototype +`s32 snap_to_45_degrees(s16 angle);` + +[:arrow_up_small:](#) + +
+ ## [soft_reset_camera](#soft_reset_camera) ### Lua Example diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 1f0b46850..8de43e524 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -5799,6 +5799,29 @@ Overrides if Analog Camera is enabled
+## [camera_config_enable_camera_collisions](#camera_config_enable_camera_collisions) + +### Description +Overrides if Camera Collision is enabled + +### Lua Example +`camera_config_enable_camera_collisions(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_camera_collisions(bool enable);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_enable_free_cam](#camera_config_enable_free_cam) ### Description @@ -5822,6 +5845,29 @@ Overrides if Free Camera is enabled
+## [camera_config_enable_freecam_dpad](#camera_config_enable_freecam_dpad) + +### Description +Overrides if Freecam DPad Behavior is enabled + +### Lua Example +`camera_config_enable_freecam_dpad(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_freecam_dpad(bool enable);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_enable_mouse_look](#camera_config_enable_mouse_look) ### Description @@ -6002,6 +6048,27 @@ Checks if Analog Camera is enabled
+## [camera_config_is_camera_collision_enabled](#camera_config_is_camera_collision_enabled) + +### Description +Checks if Camera Collision is enabled + +### Lua Example +`local booleanValue = camera_config_is_camera_collision_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_camera_collision_enabled(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled) ### Description @@ -6023,6 +6090,27 @@ Checks if Free Camera is enabled
+## [camera_config_is_freecam_dpad_enabled](#camera_config_is_freecam_dpad_enabled) + +### Description +Checks if Freecam DPad Behavior is enabled + +### Lua Example +`local booleanValue = camera_config_is_freecam_dpad_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_freecam_dpad_enabled(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_is_mouse_look_enabled](#camera_config_is_mouse_look_enabled) ### Description diff --git a/docs/lua/functions.md b/docs/lua/functions.md index fd6e9f6f8..7931ffaf1 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -711,6 +711,7 @@ - [shake_camera_roll](functions-3.md#shake_camera_roll) - [shake_camera_yaw](functions-3.md#shake_camera_yaw) - [skip_camera_interpolation](functions-3.md#skip_camera_interpolation) + - [snap_to_45_degrees](functions-3.md#snap_to_45_degrees) - [soft_reset_camera](functions-3.md#soft_reset_camera) - [start_cutscene](functions-3.md#start_cutscene) - [start_object_cutscene_without_focus](functions-3.md#start_object_cutscene_without_focus) @@ -1636,7 +1637,9 @@ - smlua_camera_utils.h - [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_camera_collisions](functions-5.md#camera_config_enable_camera_collisions) - [camera_config_enable_free_cam](functions-5.md#camera_config_enable_free_cam) + - [camera_config_enable_freecam_dpad](functions-5.md#camera_config_enable_freecam_dpad) - [camera_config_enable_mouse_look](functions-5.md#camera_config_enable_mouse_look) - [camera_config_get_aggression](functions-5.md#camera_config_get_aggression) - [camera_config_get_deceleration](functions-5.md#camera_config_get_deceleration) @@ -1646,7 +1649,9 @@ - [camera_config_invert_x](functions-5.md#camera_config_invert_x) - [camera_config_invert_y](functions-5.md#camera_config_invert_y) - [camera_config_is_analog_cam_enabled](functions-5.md#camera_config_is_analog_cam_enabled) + - [camera_config_is_camera_collision_enabled](functions-5.md#camera_config_is_camera_collision_enabled) - [camera_config_is_free_cam_enabled](functions-5.md#camera_config_is_free_cam_enabled) + - [camera_config_is_freecam_dpad_enabled](functions-5.md#camera_config_is_freecam_dpad_enabled) - [camera_config_is_mouse_look_enabled](functions-5.md#camera_config_is_mouse_look_enabled) - [camera_config_is_x_inverted](functions-5.md#camera_config_is_x_inverted) - [camera_config_is_y_inverted](functions-5.md#camera_config_is_y_inverted) diff --git a/lang/English.ini b/lang/English.ini index e1d7fa528..d0a709ef6 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -69,6 +69,8 @@ YES = "Yes" CAMERA = "CAMERA" FREE_CAMERA = "Free Camera" ANALOG_CAMERA = "Analog Camera" +FREE_CAMERA_USE_DPAD = "DPad Behavior" +FREE_CAMERA_COLLISION = "Camera Collisions" MOUSE_LOOK = "Mouse Look" INVERT_X = "Invert X" INVERT_Y = "Invert Y" diff --git a/src/game/bettercamera.h b/src/game/bettercamera.h index dc0db2a39..3b60453e9 100644 --- a/src/game/bettercamera.h +++ b/src/game/bettercamera.h @@ -42,3 +42,6 @@ extern u16 newcam_intendedmode; extern u16 newcam_mode; extern s16 newcam_yaw; + +extern u8 gFreeCameraUseDpad; +extern u8 gFreeCameraHasCollision; \ No newline at end of file diff --git a/src/game/bettercamera.inc.h b/src/game/bettercamera.inc.h index be50ca65c..4f72b1a84 100644 --- a/src/game/bettercamera.inc.h +++ b/src/game/bettercamera.inc.h @@ -119,6 +119,10 @@ u16 newcam_modeflags; s16 newcam_saved_mode = -1; s16 newcam_saved_defmode = -1; +u8 gFreeCameraUseDpad = FALSE; +u8 gFreeCameraHasCollision = TRUE; +u8 sFreeCameraDirectionLocked = FALSE; + extern bool gDjuiInMainMenu; ///This is called at every level initialisation. @@ -186,15 +190,17 @@ void newcam_toggle(bool enabled) { ///These are the default settings for Puppycam. You may change them to change how they'll be set for first timers. void newcam_init_settings(void) { - newcam_sensitivityX = newcam_clamp(camera_config_get_x_sensitivity(), 1, 100) * 5; - newcam_sensitivityY = newcam_clamp(camera_config_get_y_sensitivity(), 1, 100) * 5; - newcam_aggression = newcam_clamp(camera_config_get_aggression(), 0, 100); - newcam_panlevel = newcam_clamp(camera_config_get_pan_level(), 0, 100); - newcam_invertX = (s16)camera_config_is_x_inverted(); - newcam_invertY = (s16)camera_config_is_y_inverted(); - newcam_mouse = (u8)camera_config_is_mouse_look_enabled(); - newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); - newcam_degrade = (f32)camera_config_get_deceleration(); + newcam_sensitivityX = newcam_clamp(camera_config_get_x_sensitivity(), 1, 100) * 5; + newcam_sensitivityY = newcam_clamp(camera_config_get_y_sensitivity(), 1, 100) * 5; + newcam_aggression = newcam_clamp(camera_config_get_aggression(), 0, 100); + newcam_panlevel = newcam_clamp(camera_config_get_pan_level(), 0, 100); + newcam_invertX = (s16)camera_config_is_x_inverted(); + newcam_invertY = (s16)camera_config_is_y_inverted(); + newcam_mouse = (u8)camera_config_is_mouse_look_enabled(); + newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); + newcam_degrade = (f32)camera_config_get_deceleration(); + gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); + gFreeCameraHasCollision = (u8)camera_config_is_camera_collision_enabled(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -203,15 +209,17 @@ void newcam_init_settings(void) { } void newcam_init_settings_override(bool override) { - newcam_sensitivityX = newcam_clamp(camera_config_get_x_sensitivity(), 1, 100) * 5; - newcam_sensitivityY = newcam_clamp(camera_config_get_y_sensitivity(), 1, 100) * 5; - newcam_aggression = newcam_clamp(camera_config_get_aggression(), 0, 100); - newcam_panlevel = newcam_clamp(camera_config_get_pan_level(), 0, 100); - newcam_invertX = (s16)camera_config_is_x_inverted(); - newcam_invertY = (s16)camera_config_is_y_inverted(); - newcam_mouse = (u8)camera_config_is_mouse_look_enabled(); - newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); - newcam_degrade = (f32)camera_config_get_deceleration(); + newcam_sensitivityX = newcam_clamp(camera_config_get_x_sensitivity(), 1, 100) * 5; + newcam_sensitivityY = newcam_clamp(camera_config_get_y_sensitivity(), 1, 100) * 5; + newcam_aggression = newcam_clamp(camera_config_get_aggression(), 0, 100); + newcam_panlevel = newcam_clamp(camera_config_get_pan_level(), 0, 100); + newcam_invertX = (s16)camera_config_is_x_inverted(); + newcam_invertY = (s16)camera_config_is_y_inverted(); + newcam_mouse = (u8)camera_config_is_mouse_look_enabled(); + newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); + newcam_degrade = (f32)camera_config_get_deceleration(); + gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); + gFreeCameraHasCollision = (u8)camera_config_is_camera_collision_enabled(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -288,6 +296,7 @@ static int ivrt(u8 axis) { static void newcam_rotate_button(void) { f32 intendedXMag; f32 intendedYMag; + s16 prevNewcamYaw = newcam_yaw_acc; if ((newcam_modeflags & NC_FLAG_8D || newcam_modeflags & NC_FLAG_4D) && newcam_modeflags & NC_FLAG_XTURN) { //8 directional camera rotation input for buttons. @@ -405,6 +414,25 @@ static void newcam_rotate_button(void) { newcam_yaw += ivrt(0) * mouse_x * 16; newcam_tilt += ivrt(1) * mouse_y * 16; } + + // Dpad behaviors + if (gFreeCameraUseDpad) { + // Make dpad up head to the nearest cardinal direction + if (gPlayer1Controller->buttonPressed & U_JPAD) { + newcam_yaw = snap_to_45_degrees(newcam_yaw); + } + // Make dpad left/right increment 45 degrees + else if (gPlayer1Controller->buttonPressed & L_JPAD) { newcam_yaw += ivrt(0)*DEGREES(45); } + else if (gPlayer1Controller->buttonPressed & R_JPAD) { newcam_yaw -= ivrt(0)*DEGREES(45); } + // Make dpad down lock the current camera direction + else if (gPlayer1Controller->buttonPressed & D_JPAD) { + sFreeCameraDirectionLocked = !sFreeCameraDirectionLocked; + } + } + + if (gFreeCameraUseDpad && sFreeCameraDirectionLocked) { + newcam_yaw_acc = prevNewcamYaw; + } } static void newcam_zoom_button(void) { @@ -692,7 +720,7 @@ static void newcam_position_cam(void) { newcam_lookat[2] = newcam_pos_target[2]-newcam_pan_z; newcam_level_bounds(); - if (newcam_modeflags & NC_FLAG_COLLISION) { + if (gFreeCameraHasCollision && newcam_modeflags & NC_FLAG_COLLISION) { newcam_collision(); } diff --git a/src/game/camera.h b/src/game/camera.h index e69636762..08a356863 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -793,6 +793,7 @@ Gfx *geo_camera_fov(s32 callContext, struct GraphNode *g, UNUSED void *context); s32 set_camera_mode_fixed(struct Camera* c, s16 x, s16 y, s16 z); +s32 snap_to_45_degrees(s16 angle); void camera_set_use_course_specific_settings(u8 enable); void rom_hack_cam_set_collisions(u8 enable); void center_rom_hack_camera(void); diff --git a/src/pc/configfile.c b/src/pc/configfile.c index a0bf80037..ed2da206e 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -127,6 +127,8 @@ bool configUseStandardKeyBindingsChat = false; // free camera settings bool configEnableCamera = false; bool configCameraAnalog = false; +bool configCameraDpadBehavior = false; +bool configCameraHasCollision = true; bool configCameraMouse = false; bool configCameraInvertX = false; bool configCameraInvertY = true; @@ -253,6 +255,8 @@ static const struct ConfigOption options[] = { // free camera settings {.name = "bettercam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableCamera}, {.name = "bettercam_analog", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraAnalog}, + {.name = "bettercam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraDpadBehavior}, + {.name = "bettercam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraHasCollision}, {.name = "bettercam_mouse_look", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraMouse}, {.name = "bettercam_invertx", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertX}, {.name = "bettercam_inverty", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertY}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index 5d38f8d14..fdb985ea2 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -80,6 +80,8 @@ extern bool configUseStandardKeyBindingsChat; // free camera settings extern bool configEnableCamera; extern bool configCameraAnalog; +extern bool configCameraDpadBehavior; +extern bool configCameraHasCollision; extern bool configCameraMouse; extern bool configCameraInvertX; extern bool configCameraInvertY; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index 9cc35aa95..6ac3196fc 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -17,6 +17,8 @@ void djui_panel_camera_create(struct DjuiBase* caller) { { djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableCamera, djui_panel_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ANALOG_CAMERA), &configCameraAnalog, djui_panel_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_USE_DPAD), &configCameraDpadBehavior, djui_panel_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_COLLISION), &configCameraHasCollision, djui_panel_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, MOUSE_LOOK), &configCameraMouse, djui_panel_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, INVERT_X), &configCameraInvertX, djui_panel_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, INVERT_Y), &configCameraInvertY, djui_panel_camera_value_changed); diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index d29db2d41..39c475e0f 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -298,6 +298,7 @@ char gSmluaConstants[] = "" "--- @param np NetworkPlayer\n" "--- @param part PlayerPart\n" "--- @return Color\n" +"--- Gets the palette color of `part` on `np`\n" "function network_player_get_palette_color(np, part)\n" " local color = {\n" " r = network_player_get_palette_color_channel(np, part, 0),\n" @@ -309,6 +310,7 @@ char gSmluaConstants[] = "" "--- @param np NetworkPlayer\n" "--- @param part PlayerPart\n" "--- @return Color\n" +"--- Gets the override palette color of `part` on `np`\n" "function network_player_get_override_palette_color(np, part)\n" " local color = {\n" " r = network_player_get_override_palette_color_channel(np, part, 0),\n" diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 516da63d8..2b6d77984 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -11885,6 +11885,23 @@ int smlua_func_skip_camera_interpolation(UNUSED lua_State* L) { return 1; } +int smlua_func_snap_to_45_degrees(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", "snap_to_45_degrees", 1, top); + return 0; + } + + s16 angle = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "snap_to_45_degrees"); return 0; } + + lua_pushinteger(L, snap_to_45_degrees(angle)); + + return 1; +} + int smlua_func_soft_reset_camera(lua_State* L) { if (L == NULL) { return 0; } @@ -28888,6 +28905,23 @@ int smlua_func_camera_config_enable_analog_cam(lua_State* L) { return 1; } +int smlua_func_camera_config_enable_camera_collisions(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_config_enable_camera_collisions", 1, top); + return 0; + } + + bool enable = smlua_to_boolean(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_config_enable_camera_collisions"); return 0; } + + camera_config_enable_camera_collisions(enable); + + return 1; +} + int smlua_func_camera_config_enable_free_cam(lua_State* L) { if (L == NULL) { return 0; } @@ -28905,6 +28939,23 @@ int smlua_func_camera_config_enable_free_cam(lua_State* L) { return 1; } +int smlua_func_camera_config_enable_freecam_dpad(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_config_enable_freecam_dpad", 1, top); + return 0; + } + + bool enable = smlua_to_boolean(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_config_enable_freecam_dpad"); return 0; } + + camera_config_enable_freecam_dpad(enable); + + return 1; +} + int smlua_func_camera_config_enable_mouse_look(lua_State* L) { if (L == NULL) { return 0; } @@ -29046,6 +29097,21 @@ int smlua_func_camera_config_is_analog_cam_enabled(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_config_is_camera_collision_enabled(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_camera_collision_enabled", 0, top); + return 0; + } + + + lua_pushboolean(L, camera_config_is_camera_collision_enabled()); + + return 1; +} + int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -29061,6 +29127,21 @@ int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_config_is_freecam_dpad_enabled(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_freecam_dpad_enabled", 0, top); + return 0; + } + + + lua_pushboolean(L, camera_config_is_freecam_dpad_enabled()); + + return 1; +} + int smlua_func_camera_config_is_mouse_look_enabled(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -34119,6 +34200,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "shake_camera_roll", smlua_func_shake_camera_roll); smlua_bind_function(L, "shake_camera_yaw", smlua_func_shake_camera_yaw); smlua_bind_function(L, "skip_camera_interpolation", smlua_func_skip_camera_interpolation); + smlua_bind_function(L, "snap_to_45_degrees", smlua_func_snap_to_45_degrees); smlua_bind_function(L, "soft_reset_camera", smlua_func_soft_reset_camera); smlua_bind_function(L, "start_cutscene", smlua_func_start_cutscene); smlua_bind_function(L, "start_object_cutscene_without_focus", smlua_func_start_object_cutscene_without_focus); @@ -34983,7 +35065,9 @@ void smlua_bind_functions_autogen(void) { // smlua_camera_utils.h 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_camera_collisions", smlua_func_camera_config_enable_camera_collisions); smlua_bind_function(L, "camera_config_enable_free_cam", smlua_func_camera_config_enable_free_cam); + smlua_bind_function(L, "camera_config_enable_freecam_dpad", smlua_func_camera_config_enable_freecam_dpad); 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); @@ -34993,7 +35077,9 @@ void smlua_bind_functions_autogen(void) { 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_camera_collision_enabled", smlua_func_camera_config_is_camera_collision_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_freecam_dpad_enabled", smlua_func_camera_config_is_freecam_dpad_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); diff --git a/src/pc/lua/utils/smlua_camera_utils.c b/src/pc/lua/utils/smlua_camera_utils.c index 68e715861..5132934bc 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -2,16 +2,18 @@ #include "game/bettercamera.h" #include "game/object_list_processor.h" -static struct CameraOverride sOverrideCameraXSens = { 0 }; -static struct CameraOverride sOverrideCameraYSens = { 0 }; -static struct CameraOverride sOverrideCameraAggr = { 0 }; -static struct CameraOverride sOverrideCameraPan = { 0 }; -static struct CameraOverride sOverrideCameraDegrade = { 0 }; -static struct CameraOverride sOverrideCameraInvertX = { 0 }; -static struct CameraOverride sOverrideCameraInvertY = { 0 }; -static struct CameraOverride sOverrideEnableCamera = { 0 }; -static struct CameraOverride sOverrideCameraAnalog = { 0 }; -static struct CameraOverride sOverrideCameraMouse = { 0 }; +static struct CameraOverride sOverrideCameraXSens = { 0 }; +static struct CameraOverride sOverrideCameraYSens = { 0 }; +static struct CameraOverride sOverrideCameraAggr = { 0 }; +static struct CameraOverride sOverrideCameraPan = { 0 }; +static struct CameraOverride sOverrideCameraDegrade = { 0 }; +static struct CameraOverride sOverrideCameraInvertX = { 0 }; +static struct CameraOverride sOverrideCameraInvertY = { 0 }; +static struct CameraOverride sOverrideEnableCamera = { 0 }; +static struct CameraOverride sOverrideCameraAnalog = { 0 }; +static struct CameraOverride sOverrideCameraMouse = { 0 }; +static struct CameraOverride sOverrideCameraFreecamDpad = { 0 }; +static struct CameraOverride sOverrideCameraFreecamCollision = { 0 }; void camera_reset_overrides(void) { sOverrideCameraXSens.override = false; @@ -24,6 +26,8 @@ void camera_reset_overrides(void) { sOverrideEnableCamera.override = false; sOverrideCameraAnalog.override = false; sOverrideCameraMouse.override = false; + sOverrideCameraFreecamDpad.override = false; + sOverrideCameraFreecamCollision.override = false; } void camera_freeze(void) { @@ -62,6 +66,14 @@ bool camera_config_is_analog_cam_enabled(void) { return sOverrideCameraAnalog.override ? sOverrideCameraAnalog.value : configCameraAnalog; } +bool camera_config_is_freecam_dpad_enabled(void) { + return sOverrideCameraFreecamDpad.override ? sOverrideCameraFreecamDpad.value : configCameraDpadBehavior; +} + +bool camera_config_is_camera_collision_enabled(void) { + return sOverrideCameraFreecamCollision.override ? sOverrideCameraFreecamCollision.value : configCameraHasCollision; +} + bool camera_config_is_mouse_look_enabled(void) { return sOverrideCameraMouse.override ? sOverrideCameraMouse.value : configCameraMouse; } @@ -106,6 +118,18 @@ void camera_config_enable_analog_cam(bool enable) { newcam_init_settings(); } +void camera_config_enable_freecam_dpad(bool enable) { + sOverrideCameraFreecamDpad.value = enable; + sOverrideCameraFreecamDpad.override = true; + newcam_init_settings(); +} + +void camera_config_enable_camera_collisions(bool enable) { + sOverrideCameraFreecamCollision.value = enable; + sOverrideCameraFreecamCollision.override = true; + newcam_init_settings(); +} + void camera_config_enable_mouse_look(bool enable) { sOverrideCameraMouse.value = enable; sOverrideCameraMouse.override = true; diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index 286b32247..585bb8f1a 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -30,6 +30,10 @@ void camera_romhack_allow_dpad_usage(u8 allow); bool camera_config_is_free_cam_enabled(void); /* |description|Checks if Analog Camera is enabled|descriptionEnd| */ bool camera_config_is_analog_cam_enabled(void); +/* |description|Checks if Freecam DPad Behavior is enabled|descriptionEnd| */ +bool camera_config_is_freecam_dpad_enabled(void); +/* |description|Checks if Camera Collision is enabled|descriptionEnd| */ +bool camera_config_is_camera_collision_enabled(void); /* |description|Checks if Mouse Look is enabled|descriptionEnd| */ bool camera_config_is_mouse_look_enabled(void); /* |description|Checks if camera X is inverted|descriptionEnd| */ @@ -51,6 +55,10 @@ u32 camera_config_get_deceleration(void); void camera_config_enable_free_cam(bool enable); /* |description|Overrides if Analog Camera is enabled|descriptionEnd| */ void camera_config_enable_analog_cam(bool enable); +/* |description|Overrides if Freecam DPad Behavior is enabled|descriptionEnd| */ +void camera_config_enable_freecam_dpad(bool enable); +/* |description|Overrides if Camera Collision is enabled|descriptionEnd| */ +void camera_config_enable_camera_collisions(bool enable); /* |description|Overrides if camera mouse look is enabled|descriptionEnd| */ void camera_config_enable_mouse_look(bool enable); /* |description|Overrides if camera X is inverted|descriptionEnd| */ From 38e27edd385383ce6dc8daf9ec0315af6bf085ff Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:04:37 -0500 Subject: [PATCH 02/13] Make hide and seek force free camera collision Also update the PU prevention code to actually be good --- mods/hide-and-seek.lua | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/mods/hide-and-seek.lua b/mods/hide-and-seek.lua index 5711e7723..aba5db2b4 100644 --- a/mods/hide-and-seek.lua +++ b/mods/hide-and-seek.lua @@ -137,6 +137,9 @@ local function update() if network_is_server() then server_update() end + + -- Force free camera collisions + camera_config_enable_camera_collisions(true) end local function screen_transition(trans) @@ -227,17 +230,7 @@ local function mario_update(m) end -- pu prevention - if m.pos.x >= 0 then - puX = math_floor((8192 + m.pos.x) / 65536) - else - puX = math_ceil((-8192 + m.pos.x) / 65536) - end - if m.pos.z >= 0 then - puZ = math_floor((8192 + m.pos.z) / 65536) - else - puZ = math_ceil((-8192 + m.pos.z) / 65536) - end - if puX ~= 0 or puZ ~= 0 then + if m.playerIndex == 0 and (m.pos.x > 32767 or m.pos.x < -32768 or m.pos.z > 32767 or m.pos.z < 32768) then s.seeking = true warp_restart_level() end From a51c08c44cd5e39547b0c820d73de5308ff91b3b Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 11 Dec 2024 09:04:58 -0500 Subject: [PATCH 03/13] Fix --- mods/hide-and-seek.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mods/hide-and-seek.lua b/mods/hide-and-seek.lua index aba5db2b4..c608951bb 100644 --- a/mods/hide-and-seek.lua +++ b/mods/hide-and-seek.lua @@ -26,8 +26,6 @@ local sRoundEndTimeout = 3 * 60 * 30 -- three minutes local pauseExitTimer = 0 local canLeave = false local sFlashingIndex = 0 -local puX = 0 -local puZ = 0 local np = gNetworkPlayers[0] local cannonTimer = 0 @@ -230,7 +228,7 @@ local function mario_update(m) end -- pu prevention - if m.playerIndex == 0 and (m.pos.x > 32767 or m.pos.x < -32768 or m.pos.z > 32767 or m.pos.z < 32768) then + if m.playerIndex == 0 and (m.pos.x > 32767 or m.pos.x < -32768 or m.pos.z > 32767 or m.pos.z < -32768) then s.seeking = true warp_restart_level() end From 149bdaf1e898fa091fd50d6dfc887e114dae8146 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:32:17 -0500 Subject: [PATCH 04/13] Fix mouse camera --- src/game/bettercamera.inc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/game/bettercamera.inc.h b/src/game/bettercamera.inc.h index 4f72b1a84..c09b52bff 100644 --- a/src/game/bettercamera.inc.h +++ b/src/game/bettercamera.inc.h @@ -411,7 +411,9 @@ static void newcam_rotate_button(void) { } if ((newcam_mouse == 1) && !gDjuiInMainMenu && !gDjuiChatBoxFocus && !gDjuiConsoleFocus) { - newcam_yaw += ivrt(0) * mouse_x * 16; + if (!gFreeCameraUseDpad || !sFreeCameraDirectionLocked) { + newcam_yaw += ivrt(0) * mouse_x * 16; + } newcam_tilt += ivrt(1) * mouse_y * 16; } From 71386156a07b698796d456f420abc70310ff6a66 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Mon, 6 Jan 2025 23:36:14 -0500 Subject: [PATCH 05/13] Add romhack camera into camera settings --- autogen/convert_functions.py | 2 +- autogen/lua_definitions/constants.lua | 9 ++ autogen/lua_definitions/functions.lua | 53 ++++++++-- docs/lua/constants.md | 3 + docs/lua/functions-3.md | 26 +---- docs/lua/functions-5.md | 146 ++++++++++++++++++++++++-- docs/lua/functions.md | 9 +- lang/English.ini | 6 ++ src/game/bettercamera.inc.h | 4 +- src/game/camera.c | 34 ++++-- src/game/camera.h | 12 +-- src/pc/configfile.c | 30 ++++-- src/pc/configfile.h | 15 ++- src/pc/djui/djui_panel_camera.c | 62 ++++++++--- src/pc/djui/djui_panel_camera.h | 3 +- src/pc/lua/smlua_constants_autogen.c | 3 + src/pc/lua/smlua_functions_autogen.c | 130 ++++++++++++++++++----- src/pc/lua/utils/smlua_camera_utils.c | 34 +++++- src/pc/lua/utils/smlua_camera_utils.h | 21 +++- 19 files changed, 481 insertions(+), 121 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index a8c738930..a05137c1c 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -116,7 +116,7 @@ "src/game/obj_behaviors_2.c": [ "wiggler_jumped_on_attack_handler", "huge_goomba_weakly_attacked" ], "src/game/level_info.h": [ "_name_table" ], "src/pc/lua/utils/smlua_obj_utils.h": [ "spawn_object_remember_field" ], - "src/game/camera.h": [ "update_camera", "init_camera", "stub_camera", "^reset_camera", "move_point_along_spline" ], + "src/game/camera.h": [ "update_camera", "init_camera", "stub_camera", "^reset_camera", "move_point_along_spline", "romhack_camera_init_settings" ], "src/game/behavior_actions.h": [ "bhv_dust_smoke_loop", "bhv_init_room" ], "src/pc/lua/utils/smlua_audio_utils.h": [ "smlua_audio_utils_override", "audio_custom_shutdown", "smlua_audio_custom_deinit", "audio_sample_destroy_pending_copies", "audio_custom_update_volume" ], "src/pc/djui/djui_hud_utils.h": [ "djui_hud_render_texture", "djui_hud_render_texture_raw", "djui_hud_render_texture_tile", "djui_hud_render_texture_tile_raw" ], diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index e5a4cdcb1..f397d4c83 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -2527,6 +2527,15 @@ RCO_ALL_EXCEPT_BOWSER = 1 --- @type RomhackCameraOverride RCO_NONE = 2 +--- @type RomhackCameraOverride +RCO_ALL_INCLUDING_VANILLA = 3 + +--- @type RomhackCameraOverride +RCO_ALL_VANILLA_EXCEPT_BOWSER = 4 + +--- @type RomhackCameraOverride +RCO_DISABLE = 5 + --- @class CharacterSound --- @type CharacterSound diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index d91a6fd6a..5e30ac263 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -3392,12 +3392,6 @@ function resolve_geometry_collisions(pos, lastGood) -- ... end ---- @param enable integer ---- Toggles collision settings for the ROM hack camera. This enables or disables specific collision behaviors in modded levels -function rom_hack_cam_set_collisions(enable) - -- ... -end - --- @param c Camera --- @param cPos Vec3f --- @param avoidYaw Pointer_integer @@ -3616,6 +3610,7 @@ end --- @param angle integer --- @return integer +--- Takes in an SM64 angle unit and returns the nearest 45 degree angle, also in SM64 angle units. Useful when needing to align angles (camera, yaw, ect.) function snap_to_45_degrees(angle) -- ... end @@ -8961,14 +8956,14 @@ function camera_config_is_analog_cam_enabled() end --- @return boolean ---- Checks if Camera Collision is enabled -function camera_config_is_camera_collision_enabled() +--- Checks if Free Camera is enabled +function camera_config_is_free_cam_enabled() -- ... end --- @return boolean ---- Checks if Free Camera is enabled -function camera_config_is_free_cam_enabled() +--- Checks if Camera Collision is enabled +function camera_config_is_free_camera_collision_enabled() -- ... end @@ -9031,12 +9026,24 @@ function camera_freeze() -- ... end +--- @return integer +--- Gets if the romhack camera should fly above poison gas +function camera_get_allow_toxic_gas_camera() + -- ... +end + --- @return boolean --- Checks if the camera should account for surfaces function camera_get_checking_surfaces() -- ... end +--- @return RomhackCameraOverride +--- Gets the current romhack camera override status +function camera_get_romhack_override() + -- ... +end + --- @return boolean --- Checks if the camera is frozen function camera_is_frozen() @@ -9049,7 +9056,7 @@ function camera_reset_overrides() end --- @param allow integer ---- Sets if the romhack camera should allow centering +--- Sets if the romhack camera should allow centering, triggered with the L button function camera_romhack_allow_centering(allow) -- ... end @@ -9060,6 +9067,24 @@ function camera_romhack_allow_dpad_usage(allow) -- ... end +--- @return integer +--- Gets if the romhack camera should allow centering +function camera_romhack_get_allow_centering() + -- ... +end + +--- @return integer +--- Gets if the romhack camera should allow D-Pad movement +function camera_romhack_get_allow_dpad_usage() + -- ... +end + +--- @return integer +--- Gets if the romhack camera has surface collisions +function camera_romhack_get_collisions() + -- ... +end + --- @param value boolean --- Sets if the camera should account for surfaces function camera_set_checking_surfaces(value) @@ -9077,6 +9102,12 @@ function camera_unfreeze() -- ... end +--- @param enable integer +--- Toggles collision settings for the ROM hack camera. This enables or disables specific collision behaviors in modded levels +function rom_hack_cam_set_collisions(enable) + -- ... +end + --- @param x number --- @param y number --- @param z number diff --git a/docs/lua/constants.md b/docs/lua/constants.md index ca72a0d5d..7ac849da9 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -839,6 +839,9 @@ | RCO_ALL | 0 | | RCO_ALL_EXCEPT_BOWSER | 1 | | RCO_NONE | 2 | +| RCO_ALL_INCLUDING_VANILLA | 3 | +| RCO_ALL_VANILLA_EXCEPT_BOWSER | 4 | +| RCO_DISABLE | 5 | [:arrow_up_small:](#) diff --git a/docs/lua/functions-3.md b/docs/lua/functions-3.md index 90c277f3f..d32e6bd1b 100644 --- a/docs/lua/functions-3.md +++ b/docs/lua/functions-3.md @@ -1534,29 +1534,6 @@ Resolves collisions between the camera and level geometry. Adjusts the camera's
-## [rom_hack_cam_set_collisions](#rom_hack_cam_set_collisions) - -### Description -Toggles collision settings for the ROM hack camera. This enables or disables specific collision behaviors in modded levels - -### Lua Example -`rom_hack_cam_set_collisions(enable)` - -### Parameters -| Field | Type | -| ----- | ---- | -| enable | `integer` | - -### Returns -- None - -### C Prototype -`void rom_hack_cam_set_collisions(u8 enable);` - -[:arrow_up_small:](#) - -
- ## [rotate_camera_around_walls](#rotate_camera_around_walls) ### Description @@ -2242,6 +2219,9 @@ Skips camera interpolation for a frame, locking the camera instantly to the targ ## [snap_to_45_degrees](#snap_to_45_degrees) +### Description +Takes in an SM64 angle unit and returns the nearest 45 degree angle, also in SM64 angle units. Useful when needing to align angles (camera, yaw, ect.) + ### Lua Example `local integerValue = snap_to_45_degrees(angle)` diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 38b544c8d..278427d04 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -7109,13 +7109,13 @@ Checks if Analog Camera is enabled
-## [camera_config_is_camera_collision_enabled](#camera_config_is_camera_collision_enabled) +## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled) ### Description -Checks if Camera Collision is enabled +Checks if Free Camera is enabled ### Lua Example -`local booleanValue = camera_config_is_camera_collision_enabled()` +`local booleanValue = camera_config_is_free_cam_enabled()` ### Parameters - None @@ -7124,19 +7124,19 @@ Checks if Camera Collision is enabled - `boolean` ### C Prototype -`bool camera_config_is_camera_collision_enabled(void);` +`bool camera_config_is_free_cam_enabled(void);` [:arrow_up_small:](#)
-## [camera_config_is_free_cam_enabled](#camera_config_is_free_cam_enabled) +## [camera_config_is_free_camera_collision_enabled](#camera_config_is_free_camera_collision_enabled) ### Description -Checks if Free Camera is enabled +Checks if Camera Collision is enabled ### Lua Example -`local booleanValue = camera_config_is_free_cam_enabled()` +`local booleanValue = camera_config_is_free_camera_collision_enabled()` ### Parameters - None @@ -7145,7 +7145,7 @@ Checks if Free Camera is enabled - `boolean` ### C Prototype -`bool camera_config_is_free_cam_enabled(void);` +`bool camera_config_is_free_camera_collision_enabled(void);` [:arrow_up_small:](#) @@ -7371,6 +7371,27 @@ Freezes the camera by not updating it
+## [camera_get_allow_toxic_gas_camera](#camera_get_allow_toxic_gas_camera) + +### Description +Gets if the romhack camera should fly above poison gas + +### Lua Example +`local integerValue = camera_get_allow_toxic_gas_camera()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 camera_get_allow_toxic_gas_camera(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_get_checking_surfaces](#camera_get_checking_surfaces) ### Description @@ -7392,6 +7413,27 @@ Checks if the camera should account for surfaces
+## [camera_get_romhack_override](#camera_get_romhack_override) + +### Description +Gets the current romhack camera override status + +### Lua Example +`local enumValue = camera_get_romhack_override()` + +### Parameters +- None + +### Returns +[enum RomhackCameraOverride](constants.md#enum-RomhackCameraOverride) + +### C Prototype +`enum RomhackCameraOverride camera_get_romhack_override(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_is_frozen](#camera_is_frozen) ### Description @@ -7437,7 +7479,7 @@ Resets camera config overrides ## [camera_romhack_allow_centering](#camera_romhack_allow_centering) ### Description -Sets if the romhack camera should allow centering +Sets if the romhack camera should allow centering, triggered with the L button ### Lua Example `camera_romhack_allow_centering(allow)` @@ -7480,6 +7522,69 @@ Sets if the romhack camera should allow D-Pad movement
+## [camera_romhack_get_allow_centering](#camera_romhack_get_allow_centering) + +### Description +Gets if the romhack camera should allow centering + +### Lua Example +`local integerValue = camera_romhack_get_allow_centering()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 camera_romhack_get_allow_centering(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_get_allow_dpad_usage](#camera_romhack_get_allow_dpad_usage) + +### Description +Gets if the romhack camera should allow D-Pad movement + +### Lua Example +`local integerValue = camera_romhack_get_allow_dpad_usage()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 camera_romhack_get_allow_dpad_usage(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_get_collisions](#camera_romhack_get_collisions) + +### Description +Gets if the romhack camera has surface collisions + +### Lua Example +`local integerValue = camera_romhack_get_collisions()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u8 camera_romhack_get_collisions(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_set_checking_surfaces](#camera_set_checking_surfaces) ### Description @@ -7547,6 +7652,29 @@ Unfreezes the camera
+## [rom_hack_cam_set_collisions](#rom_hack_cam_set_collisions) + +### Description +Toggles collision settings for the ROM hack camera. This enables or disables specific collision behaviors in modded levels + +### Lua Example +`rom_hack_cam_set_collisions(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `integer` | + +### Returns +- None + +### C Prototype +`void rom_hack_cam_set_collisions(u8 enable);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_collision_utils.h diff --git a/docs/lua/functions.md b/docs/lua/functions.md index f291114eb..8cac726ff 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -683,7 +683,6 @@ - [random_vec3s](functions-3.md#random_vec3s) - [reset_camera](functions-3.md#reset_camera) - [resolve_geometry_collisions](functions-3.md#resolve_geometry_collisions) - - [rom_hack_cam_set_collisions](functions-3.md#rom_hack_cam_set_collisions) - [rotate_camera_around_walls](functions-3.md#rotate_camera_around_walls) - [rotate_in_xz](functions-3.md#rotate_in_xz) - [rotate_in_yz](functions-3.md#rotate_in_yz) @@ -1661,8 +1660,8 @@ - [camera_config_invert_x](functions-5.md#camera_config_invert_x) - [camera_config_invert_y](functions-5.md#camera_config_invert_y) - [camera_config_is_analog_cam_enabled](functions-5.md#camera_config_is_analog_cam_enabled) - - [camera_config_is_camera_collision_enabled](functions-5.md#camera_config_is_camera_collision_enabled) - [camera_config_is_free_cam_enabled](functions-5.md#camera_config_is_free_cam_enabled) + - [camera_config_is_free_camera_collision_enabled](functions-5.md#camera_config_is_free_camera_collision_enabled) - [camera_config_is_freecam_dpad_enabled](functions-5.md#camera_config_is_freecam_dpad_enabled) - [camera_config_is_mouse_look_enabled](functions-5.md#camera_config_is_mouse_look_enabled) - [camera_config_is_x_inverted](functions-5.md#camera_config_is_x_inverted) @@ -1673,14 +1672,20 @@ - [camera_config_set_x_sensitivity](functions-5.md#camera_config_set_x_sensitivity) - [camera_config_set_y_sensitivity](functions-5.md#camera_config_set_y_sensitivity) - [camera_freeze](functions-5.md#camera_freeze) + - [camera_get_allow_toxic_gas_camera](functions-5.md#camera_get_allow_toxic_gas_camera) - [camera_get_checking_surfaces](functions-5.md#camera_get_checking_surfaces) + - [camera_get_romhack_override](functions-5.md#camera_get_romhack_override) - [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_romhack_allow_dpad_usage](functions-5.md#camera_romhack_allow_dpad_usage) + - [camera_romhack_get_allow_centering](functions-5.md#camera_romhack_get_allow_centering) + - [camera_romhack_get_allow_dpad_usage](functions-5.md#camera_romhack_get_allow_dpad_usage) + - [camera_romhack_get_collisions](functions-5.md#camera_romhack_get_collisions) - [camera_set_checking_surfaces](functions-5.md#camera_set_checking_surfaces) - [camera_set_romhack_override](functions-5.md#camera_set_romhack_override) - [camera_unfreeze](functions-5.md#camera_unfreeze) + - [rom_hack_cam_set_collisions](functions-5.md#rom_hack_cam_set_collisions)
diff --git a/lang/English.ini b/lang/English.ini index 765f90caa..01a45cc76 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -71,6 +71,12 @@ FREE_CAMERA = "Free Camera" ANALOG_CAMERA = "Analog Camera" FREE_CAMERA_USE_DPAD = "DPad Behavior" FREE_CAMERA_COLLISION = "Camera Collisions" +ROMHACK_CAMERA = "Romhack Camera" +ROMHACK_CAMERA_IN_BOWSER = "Use in Bowser fights" +ROMHACK_CAMERA_COLLISION = "Camera Collisions" +ROMHACK_CAMERA_L_CENTERING = "L Centering" +ROMHACK_CAMERA_USE_DPAD = "DPad Behavior" +CAMERA_TOXIC_GAS = "Adjust for toxic gas" MOUSE_LOOK = "Mouse Look" INVERT_X = "Invert X" INVERT_Y = "Invert Y" diff --git a/src/game/bettercamera.inc.h b/src/game/bettercamera.inc.h index c7247bbbb..37d9ddff1 100644 --- a/src/game/bettercamera.inc.h +++ b/src/game/bettercamera.inc.h @@ -200,7 +200,7 @@ void newcam_init_settings(void) { newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); newcam_degrade = (f32)camera_config_get_deceleration(); gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); - gFreeCameraHasCollision = (u8)camera_config_is_camera_collision_enabled(); + gFreeCameraHasCollision = (u8)camera_config_is_free_camera_collision_enabled(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -219,7 +219,7 @@ void newcam_init_settings_override(bool override) { newcam_analogue = (s16)camera_config_is_analog_cam_enabled(); newcam_degrade = (f32)camera_config_get_deceleration(); gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); - gFreeCameraHasCollision = (u8)camera_config_is_camera_collision_enabled(); + gFreeCameraHasCollision = (u8)camera_config_is_free_camera_collision_enabled(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } diff --git a/src/game/camera.c b/src/game/camera.c index a1e00873d..458ea6d38 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -3109,17 +3109,27 @@ void update_lakitu(struct Camera *c) { extern bool gIsDemoActive; static void update_romhack_camera_override(struct Camera *c) { if (gOverrideRomhackCamera == RCO_NONE) { return; } - if (c->mode == CAMERA_MODE_ROM_HACK) { return; } - if (dynos_level_is_vanilla_level(gCurrLevelNum)) { return; } + else if (gOverrideRomhackCamera == RCO_DISABLE) { + c->mode = c->defMode; + set_camera_mode(c, c->defMode, 0); + gOverrideRomhackCamera = RCO_NONE; + return; + } if (gIsDemoActive) { return; } - if (gOverrideRomhackCamera == RCO_ALL_EXCEPT_BOWSER) { - if (gCurrLevelNum == LEVEL_BOWSER_1 || gCurrLevelNum == LEVEL_BOWSER_2 || gCurrLevelNum == LEVEL_BOWSER_3) { - return; + if ((!(gOverrideRomhackCamera == RCO_ALL_INCLUDING_VANILLA || gOverrideRomhackCamera == RCO_ALL_VANILLA_EXCEPT_BOWSER)) && + dynos_level_is_vanilla_level(gCurrLevelNum)) { + return; + } else if ((gOverrideRomhackCamera == RCO_ALL_EXCEPT_BOWSER || gOverrideRomhackCamera == RCO_ALL_VANILLA_EXCEPT_BOWSER) && + (gCurrLevelNum == LEVEL_BOWSER_1 || gCurrLevelNum == LEVEL_BOWSER_2 || gCurrLevelNum == LEVEL_BOWSER_3)) { + if (c->mode == CAMERA_MODE_ROM_HACK) { + c->mode = c->defMode; + set_camera_mode(c, c->defMode, 0); } + return; } - if (!allow_romhack_camera_override_mode(c->mode)) { return; } + if (c->mode == CAMERA_MODE_ROM_HACK || !allow_romhack_camera_override_mode(c->mode)) { return; } set_camera_mode(c, CAMERA_MODE_ROM_HACK, 0); } @@ -3632,6 +3642,7 @@ void init_camera(struct Camera *c) { newcam_init(c, sSoftResettingCamera); newcam_init_settings(); + romhack_camera_init_settings(); sSoftResettingCamera = FALSE; } @@ -12159,8 +12170,15 @@ s32 snap_to_45_degrees(s16 angle) { return angle; } -void rom_hack_cam_set_collisions(u8 enable) { - gRomHackCamSetCollisions = enable; +void romhack_camera_init_settings(void) { + enum RomhackCameraOverride override = configEnableRomhackCamera ? + (configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER) : RCO_DISABLE; + camera_set_romhack_override(override); + camera_set_use_course_specific_settings(dynos_level_is_vanilla_level(gCurrLevelNum) ? 1 : 0); + rom_hack_cam_set_collisions(configRomhackCameraHasCollision); + camera_romhack_allow_centering(configRomhackCameraHasCentering); + camera_romhack_allow_dpad_usage(configRomhackCameraDpadBehavior); + camera_allow_toxic_gas_camera(configCameraToxicGas); } static u8 rom_hack_cam_can_see_mario(Vec3f desiredPos) { diff --git a/src/game/camera.h b/src/game/camera.h index 13a129c3d..c44bb070a 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -14,6 +14,9 @@ enum RomhackCameraOverride { RCO_ALL, RCO_ALL_EXCEPT_BOWSER, RCO_NONE, + RCO_ALL_INCLUDING_VANILLA, + RCO_ALL_VANILLA_EXCEPT_BOWSER, + RCO_DISABLE }; extern u8 gOverrideFreezeCamera; @@ -21,6 +24,7 @@ extern enum RomhackCameraOverride gOverrideRomhackCamera; extern u8 gRomhackCameraAllowCentering; extern u8 gOverrideAllowToxicGasCamera; extern u8 gRomhackCameraAllowDpad; +extern u8 gRomHackCamSetCollisions; /** * @file camera.h @@ -1246,16 +1250,12 @@ This is useful for enabling or disabling custom behaviors in specific courses or |descriptionEnd| */ void camera_set_use_course_specific_settings(u8 enable); -/* |description| -Toggles collision settings for the ROM hack camera. -This enables or disables specific collision behaviors in modded levels -|descriptionEnd| */ -void rom_hack_cam_set_collisions(u8 enable); - /* |description| Centers the ROM hack camera. This function is designed for non-standard level layouts and modded game environments |descriptionEnd| */ void center_rom_hack_camera(void); +void romhack_camera_init_settings(void); + #endif // CAMERA_H diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 21300beaf..42f5bc8cd 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -125,10 +125,10 @@ bool configBackgroundGamepad = true; bool configDisableGamepads = false; bool configUseStandardKeyBindingsChat = false; // free camera settings -bool configEnableCamera = false; -bool configCameraAnalog = false; -bool configCameraDpadBehavior = false; -bool configCameraHasCollision = true; +bool configEnableFreeCamera = false; +bool configFreeCameraAnalog = false; +bool configFreeCameraDpadBehavior = false; +bool configFreeCameraHasCollision = true; bool configCameraMouse = false; bool configCameraInvertX = false; bool configCameraInvertY = true; @@ -137,6 +137,13 @@ unsigned int configCameraYSens = 50; unsigned int configCameraAggr = 0; unsigned int configCameraPan = 0; unsigned int configCameraDegrade = 50; // 0 - 100% +// romhack camera settings +bool configEnableRomhackCamera = false; +bool configRomhackCameraBowserFights = false; +bool configRomhackCameraHasCollision = false; +bool configRomhackCameraHasCentering = false; +bool configRomhackCameraDpadBehavior = false; +bool configCameraToxicGas = true; // debug bool configLuaProfiler = false; bool configDebugPrint = false; @@ -253,10 +260,10 @@ static const struct ConfigOption options[] = { #endif {.name = "use_standard_key_bindings_chat", .type = CONFIG_TYPE_BOOL, .boolValue = &configUseStandardKeyBindingsChat}, // free camera settings - {.name = "bettercam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableCamera}, - {.name = "bettercam_analog", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraAnalog}, - {.name = "bettercam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraDpadBehavior}, - {.name = "bettercam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraHasCollision}, + {.name = "bettercam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableFreeCamera}, + {.name = "bettercam_analog", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraAnalog}, + {.name = "bettercam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraDpadBehavior}, + {.name = "bettercam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraHasCollision}, {.name = "bettercam_mouse_look", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraMouse}, {.name = "bettercam_invertx", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertX}, {.name = "bettercam_inverty", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertY}, @@ -265,6 +272,13 @@ static const struct ConfigOption options[] = { {.name = "bettercam_aggression", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraAggr}, {.name = "bettercam_pan_level", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraPan}, {.name = "bettercam_degrade", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraDegrade}, + // romhack camera settings + {.name = "romhackcam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableRomhackCamera}, + {.name = "romhackcam_bowser", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraBowserFights}, + {.name = "romhackcam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCollision}, + {.name = "romhackcam_centering", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCentering}, + {.name = "romhackcam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraDpadBehavior}, + {.name = "romhackcam_toxic_gas", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraToxicGas}, // debug {.name = "debug_offset", .type = CONFIG_TYPE_U64, .u64Value = &gPcDebug.bhvOffset}, {.name = "debug_tags", .type = CONFIG_TYPE_U64, .u64Value = gPcDebug.tags}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index b77c2a501..e784f69a5 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -78,10 +78,10 @@ extern bool configBackgroundGamepad; extern bool configDisableGamepads; extern bool configUseStandardKeyBindingsChat; // free camera settings -extern bool configEnableCamera; -extern bool configCameraAnalog; -extern bool configCameraDpadBehavior; -extern bool configCameraHasCollision; +extern bool configEnableFreeCamera; +extern bool configFreeCameraAnalog; +extern bool configFreeCameraDpadBehavior; +extern bool configFreeCameraHasCollision; extern bool configCameraMouse; extern bool configCameraInvertX; extern bool configCameraInvertY; @@ -90,6 +90,13 @@ extern unsigned int configCameraYSens; extern unsigned int configCameraAggr; extern unsigned int configCameraPan; extern unsigned int configCameraDegrade; +// romhack camera settings +extern bool configEnableRomhackCamera; +extern bool configRomhackCameraBowserFights; +extern bool configRomhackCameraHasCollision; +extern bool configRomhackCameraHasCentering; +extern bool configRomhackCameraDpadBehavior; +extern bool configCameraToxicGas; // debug extern bool configLuaProfiler; extern bool configDebugPrint; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index 6ac3196fc..c2a14d6c4 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -7,29 +7,63 @@ #include "game/first_person_cam.h" #include "pc/lua/utils/smlua_misc_utils.h" -static void djui_panel_camera_value_changed(UNUSED struct DjuiBase* caller) { +static void djui_panel_free_camera_value_changed(UNUSED struct DjuiBase* caller) { newcam_init_settings(); } +static void djui_panel_romhack_camera_value_changed(UNUSED struct DjuiBase* caller) { + romhack_camera_init_settings(); +} + +void djui_panel_free_camera_create(struct DjuiBase* caller) { + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, FREE_CAMERA), false); + struct DjuiBase* body = djui_three_panel_get_body(panel); + { + djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableFreeCamera, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ANALOG_CAMERA), &configFreeCameraAnalog, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_USE_DPAD), &configFreeCameraDpadBehavior, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_COLLISION), &configFreeCameraHasCollision, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, MOUSE_LOOK), &configCameraMouse, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, X_SENSITIVITY), &configCameraXSens, 1, 100, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, Y_SENSITIVITY), &configCameraYSens, 1, 100, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, AGGRESSION), &configCameraAggr, 0, 100, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, PAN_LEVEL), &configCameraPan, 0, 100, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, DECELERATION), &configCameraDegrade, 0, 100, djui_panel_free_camera_value_changed); + + djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); + } + + djui_panel_add(caller, panel, NULL); +} + +void djui_panel_romhack_camera_create(struct DjuiBase* caller) { + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, ROMHACK_CAMERA), false); + struct DjuiBase* body = djui_three_panel_get_body(panel); + { + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA), &configEnableRomhackCamera, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_IN_BOWSER), &configRomhackCameraBowserFights, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_COLLISION), &configRomhackCameraHasCollision, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configRomhackCameraHasCentering, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_USE_DPAD), &configRomhackCameraDpadBehavior, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, CAMERA_TOXIC_GAS), &configCameraToxicGas, djui_panel_romhack_camera_value_changed); + + djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); + } + + djui_panel_add(caller, panel, NULL); +} + void djui_panel_camera_create(struct DjuiBase* caller) { struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, CAMERA), false); struct DjuiBase* body = djui_three_panel_get_body(panel); { - djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableCamera, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, ANALOG_CAMERA), &configCameraAnalog, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_USE_DPAD), &configCameraDpadBehavior, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_COLLISION), &configCameraHasCollision, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, MOUSE_LOOK), &configCameraMouse, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, INVERT_X), &configCameraInvertX, djui_panel_camera_value_changed); - djui_checkbox_create(body, DLANG(CAMERA, INVERT_Y), &configCameraInvertY, djui_panel_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, X_SENSITIVITY), &configCameraXSens, 1, 100, djui_panel_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, Y_SENSITIVITY), &configCameraYSens, 1, 100, djui_panel_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, AGGRESSION), &configCameraAggr, 0, 100, djui_panel_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, PAN_LEVEL), &configCameraPan, 0, 100, djui_panel_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, DECELERATION), &configCameraDegrade, 0, 100, djui_panel_camera_value_changed); + djui_button_create(body, DLANG(CAMERA, FREE_CAMERA), DJUI_BUTTON_STYLE_NORMAL, djui_panel_free_camera_create); + djui_button_create(body, DLANG(CAMERA, ROMHACK_CAMERA), DJUI_BUTTON_STYLE_NORMAL, djui_panel_romhack_camera_create); + djui_checkbox_create(body, DLANG(CAMERA, INVERT_X), &configCameraInvertX, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, INVERT_Y), &configCameraInvertY, djui_panel_free_camera_value_changed); djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } djui_panel_add(caller, panel, NULL); -} +} \ No newline at end of file diff --git a/src/pc/djui/djui_panel_camera.h b/src/pc/djui/djui_panel_camera.h index 134361e0d..b9a130410 100644 --- a/src/pc/djui/djui_panel_camera.h +++ b/src/pc/djui/djui_panel_camera.h @@ -1,4 +1,5 @@ #pragma once #include "djui.h" -void djui_panel_camera_create(struct DjuiBase* caller); +void djui_panel_free_camera_create(struct DjuiBase* caller); +void djui_panel_camera_create(struct DjuiBase* caller); \ No newline at end of file diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index 32f94e76d..d93eb625f 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -835,6 +835,9 @@ char gSmluaConstants[] = "" "RCO_ALL = 0\n" "RCO_ALL_EXCEPT_BOWSER = 1\n" "RCO_NONE = 2\n" +"RCO_ALL_INCLUDING_VANILLA = 3\n" +"RCO_ALL_VANILLA_EXCEPT_BOWSER = 4\n" +"RCO_DISABLE = 5\n" "CAM_MODE_MARIO_ACTIVE = 0x01\n" "CAM_MODE_LAKITU_WAS_ZOOMED_OUT = 0x02\n" "CAM_MODE_MARIO_SELECTED = 0x04\n" diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 9ab30e332..8a054b5f3 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -11071,23 +11071,6 @@ int smlua_func_resolve_geometry_collisions(lua_State* L) { return 1; } -int smlua_func_rom_hack_cam_set_collisions(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", "rom_hack_cam_set_collisions", 1, top); - return 0; - } - - u8 enable = smlua_to_integer(L, 1); - if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "rom_hack_cam_set_collisions"); return 0; } - - rom_hack_cam_set_collisions(enable); - - return 1; -} - int smlua_func_rotate_camera_around_walls(lua_State* L) { if (L == NULL) { return 0; } @@ -27666,32 +27649,32 @@ int smlua_func_camera_config_is_analog_cam_enabled(UNUSED lua_State* L) { return 1; } -int smlua_func_camera_config_is_camera_collision_enabled(UNUSED lua_State* L) { +int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) { if (L == NULL) { return 0; } int top = lua_gettop(L); if (top != 0) { - LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_camera_collision_enabled", 0, top); + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_free_cam_enabled", 0, top); return 0; } - lua_pushboolean(L, camera_config_is_camera_collision_enabled()); + lua_pushboolean(L, camera_config_is_free_cam_enabled()); return 1; } -int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) { +int smlua_func_camera_config_is_free_camera_collision_enabled(UNUSED lua_State* L) { if (L == NULL) { return 0; } int top = lua_gettop(L); if (top != 0) { - LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_free_cam_enabled", 0, top); + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_is_free_camera_collision_enabled", 0, top); return 0; } - lua_pushboolean(L, camera_config_is_free_cam_enabled()); + lua_pushboolean(L, camera_config_is_free_camera_collision_enabled()); return 1; } @@ -27856,6 +27839,21 @@ int smlua_func_camera_freeze(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_get_allow_toxic_gas_camera(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_get_allow_toxic_gas_camera", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_get_allow_toxic_gas_camera()); + + return 1; +} + int smlua_func_camera_get_checking_surfaces(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -27871,6 +27869,21 @@ int smlua_func_camera_get_checking_surfaces(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_get_romhack_override(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_get_romhack_override", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_get_romhack_override()); + + return 1; +} + int smlua_func_camera_is_frozen(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -27935,6 +27948,51 @@ int smlua_func_camera_romhack_allow_dpad_usage(lua_State* L) { return 1; } +int smlua_func_camera_romhack_get_allow_centering(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_allow_centering", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_allow_centering()); + + return 1; +} + +int smlua_func_camera_romhack_get_allow_dpad_usage(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_allow_dpad_usage", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_allow_dpad_usage()); + + return 1; +} + +int smlua_func_camera_romhack_get_collisions(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_collisions", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_collisions()); + + return 1; +} + int smlua_func_camera_set_checking_surfaces(lua_State* L) { if (L == NULL) { return 0; } @@ -27984,6 +28042,23 @@ int smlua_func_camera_unfreeze(UNUSED lua_State* L) { return 1; } +int smlua_func_rom_hack_cam_set_collisions(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", "rom_hack_cam_set_collisions", 1, top); + return 0; + } + + u8 enable = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "rom_hack_cam_set_collisions"); return 0; } + + rom_hack_cam_set_collisions(enable); + + return 1; +} + ///////////////////////////// // smlua_collision_utils.h // ///////////////////////////// @@ -32732,7 +32807,6 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "random_vec3s", smlua_func_random_vec3s); smlua_bind_function(L, "reset_camera", smlua_func_reset_camera); smlua_bind_function(L, "resolve_geometry_collisions", smlua_func_resolve_geometry_collisions); - smlua_bind_function(L, "rom_hack_cam_set_collisions", smlua_func_rom_hack_cam_set_collisions); smlua_bind_function(L, "rotate_camera_around_walls", smlua_func_rotate_camera_around_walls); smlua_bind_function(L, "rotate_in_xz", smlua_func_rotate_in_xz); smlua_bind_function(L, "rotate_in_yz", smlua_func_rotate_in_yz); @@ -33649,8 +33723,8 @@ void smlua_bind_functions_autogen(void) { 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_camera_collision_enabled", smlua_func_camera_config_is_camera_collision_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_free_camera_collision_enabled", smlua_func_camera_config_is_free_camera_collision_enabled); smlua_bind_function(L, "camera_config_is_freecam_dpad_enabled", smlua_func_camera_config_is_freecam_dpad_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); @@ -33661,14 +33735,20 @@ void smlua_bind_functions_autogen(void) { 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_get_allow_toxic_gas_camera", smlua_func_camera_get_allow_toxic_gas_camera); smlua_bind_function(L, "camera_get_checking_surfaces", smlua_func_camera_get_checking_surfaces); + smlua_bind_function(L, "camera_get_romhack_override", smlua_func_camera_get_romhack_override); 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_romhack_allow_dpad_usage", smlua_func_camera_romhack_allow_dpad_usage); + smlua_bind_function(L, "camera_romhack_get_allow_centering", smlua_func_camera_romhack_get_allow_centering); + smlua_bind_function(L, "camera_romhack_get_allow_dpad_usage", smlua_func_camera_romhack_get_allow_dpad_usage); + smlua_bind_function(L, "camera_romhack_get_collisions", smlua_func_camera_romhack_get_collisions); smlua_bind_function(L, "camera_set_checking_surfaces", smlua_func_camera_set_checking_surfaces); 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, "rom_hack_cam_set_collisions", smlua_func_rom_hack_cam_set_collisions); // smlua_collision_utils.h smlua_bind_function(L, "collision_find_ceil", smlua_func_collision_find_ceil); diff --git a/src/pc/lua/utils/smlua_camera_utils.c b/src/pc/lua/utils/smlua_camera_utils.c index 5132934bc..4cdbb0aab 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -58,20 +58,44 @@ void camera_romhack_allow_dpad_usage(u8 allow) { gRomhackCameraAllowDpad = allow; } +void rom_hack_cam_set_collisions(u8 enable) { + gRomHackCamSetCollisions = enable; +} + +enum RomhackCameraOverride camera_get_romhack_override(void) { + return gOverrideRomhackCamera; +} + +u8 camera_romhack_get_allow_centering(void) { + return gRomhackCameraAllowCentering; +} + +u8 camera_get_allow_toxic_gas_camera(void) { + return gOverrideAllowToxicGasCamera; +} + +u8 camera_romhack_get_allow_dpad_usage(void) { + return gRomhackCameraAllowDpad; +} + +u8 camera_romhack_get_collisions(void) { + return gRomHackCamSetCollisions; +} + bool camera_config_is_free_cam_enabled(void) { - return sOverrideEnableCamera.override ? sOverrideEnableCamera.value : configEnableCamera; + return sOverrideEnableCamera.override ? sOverrideEnableCamera.value : configEnableFreeCamera; } bool camera_config_is_analog_cam_enabled(void) { - return sOverrideCameraAnalog.override ? sOverrideCameraAnalog.value : configCameraAnalog; + return sOverrideCameraAnalog.override ? sOverrideCameraAnalog.value : configFreeCameraAnalog; } bool camera_config_is_freecam_dpad_enabled(void) { - return sOverrideCameraFreecamDpad.override ? sOverrideCameraFreecamDpad.value : configCameraDpadBehavior; + return sOverrideCameraFreecamDpad.override ? sOverrideCameraFreecamDpad.value : configFreeCameraDpadBehavior; } -bool camera_config_is_camera_collision_enabled(void) { - return sOverrideCameraFreecamCollision.override ? sOverrideCameraFreecamCollision.value : configCameraHasCollision; +bool camera_config_is_free_camera_collision_enabled(void) { + return sOverrideCameraFreecamCollision.override ? sOverrideCameraFreecamCollision.value : configFreeCameraHasCollision; } bool camera_config_is_mouse_look_enabled(void) { diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index 585bb8f1a..410abef89 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -17,14 +17,31 @@ void camera_freeze(void); void camera_unfreeze(void); /* |description|Checks if the camera is frozen|descriptionEnd| */ bool camera_is_frozen(void); + /* |description|Sets the romhack camera override status|descriptionEnd| */ void camera_set_romhack_override(enum RomhackCameraOverride rco); -/* |description|Sets if the romhack camera should allow centering|descriptionEnd| */ +/* |description|Sets if the romhack camera should allow centering, triggered with the L button|descriptionEnd| */ void camera_romhack_allow_centering(u8 allow); /* |description|Sets if the romhack camera should fly above poison gas|descriptionEnd| */ void camera_allow_toxic_gas_camera(u8 allow); /* |description|Sets if the romhack camera should allow D-Pad movement|descriptionEnd| */ void camera_romhack_allow_dpad_usage(u8 allow); +/* |description| +Toggles collision settings for the ROM hack camera. +This enables or disables specific collision behaviors in modded levels +|descriptionEnd| */ +void rom_hack_cam_set_collisions(u8 enable); + +/* |description|Gets the current romhack camera override status|descriptionEnd| */ +enum RomhackCameraOverride camera_get_romhack_override(void); +/* |description|Gets if the romhack camera should allow centering|descriptionEnd| */ +u8 camera_romhack_get_allow_centering(void); +/* |description|Gets if the romhack camera should fly above poison gas|descriptionEnd| */ +u8 camera_get_allow_toxic_gas_camera(void); +/* |description|Gets if the romhack camera should allow D-Pad movement|descriptionEnd| */ +u8 camera_romhack_get_allow_dpad_usage(void); +/* |description|Gets if the romhack camera has surface collisions|descriptionEnd| */ +u8 camera_romhack_get_collisions(void); /* |description|Checks if Free Camera is enabled|descriptionEnd| */ bool camera_config_is_free_cam_enabled(void); @@ -33,7 +50,7 @@ bool camera_config_is_analog_cam_enabled(void); /* |description|Checks if Freecam DPad Behavior is enabled|descriptionEnd| */ bool camera_config_is_freecam_dpad_enabled(void); /* |description|Checks if Camera Collision is enabled|descriptionEnd| */ -bool camera_config_is_camera_collision_enabled(void); +bool camera_config_is_free_camera_collision_enabled(void); /* |description|Checks if Mouse Look is enabled|descriptionEnd| */ bool camera_config_is_mouse_look_enabled(void); /* |description|Checks if camera X is inverted|descriptionEnd| */ From 4ebb8bf09e323bb665e77ac721b90f427076fd97 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:09:42 -0500 Subject: [PATCH 06/13] Add slow fall into the options This shouldn't affect mods at all so no functions for mods --- lang/English.ini | 1 + src/game/camera.c | 16 ++++++++++------ src/game/camera.h | 1 + src/pc/configfile.c | 14 ++++++++------ src/pc/configfile.h | 1 + src/pc/djui/djui_panel_camera.c | 1 + 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lang/English.ini b/lang/English.ini index 01a45cc76..0b5df1705 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -76,6 +76,7 @@ ROMHACK_CAMERA_IN_BOWSER = "Use in Bowser fights" ROMHACK_CAMERA_COLLISION = "Camera Collisions" ROMHACK_CAMERA_L_CENTERING = "L Centering" ROMHACK_CAMERA_USE_DPAD = "DPad Behavior" +ROMHACK_CAMERA_SLOW_FALL = "Slow Fall" CAMERA_TOXIC_GAS = "Adjust for toxic gas" MOUSE_LOOK = "Mouse Look" INVERT_X = "Invert X" diff --git a/src/game/camera.c b/src/game/camera.c index 458ea6d38..d11327d2d 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -47,6 +47,7 @@ enum RomhackCameraOverride gOverrideRomhackCamera = RCO_ALL; u8 gRomhackCameraAllowCentering = TRUE; u8 gOverrideAllowToxicGasCamera = FALSE; u8 gRomhackCameraAllowDpad = FALSE; +u8 gRomhackCameraSlowFall = TRUE; /** * @file camera.c @@ -12174,11 +12175,12 @@ void romhack_camera_init_settings(void) { enum RomhackCameraOverride override = configEnableRomhackCamera ? (configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER) : RCO_DISABLE; camera_set_romhack_override(override); - camera_set_use_course_specific_settings(dynos_level_is_vanilla_level(gCurrLevelNum) ? 1 : 0); - rom_hack_cam_set_collisions(configRomhackCameraHasCollision); - camera_romhack_allow_centering(configRomhackCameraHasCentering); - camera_romhack_allow_dpad_usage(configRomhackCameraDpadBehavior); - camera_allow_toxic_gas_camera(configCameraToxicGas); + gCameraUseCourseSpecificSettings = dynos_level_is_vanilla_level(gCurrLevelNum) ? 1 : 0; + gRomHackCamSetCollisions = configRomhackCameraHasCollision; + gRomhackCameraAllowCentering = configRomhackCameraHasCentering; + gRomhackCameraAllowDpad = configRomhackCameraDpadBehavior; + gOverrideAllowToxicGasCamera = configCameraToxicGas; + gRomhackCameraSlowFall = configRomhackCameraSlowFall; } static u8 rom_hack_cam_can_see_mario(Vec3f desiredPos) { @@ -12399,12 +12401,14 @@ void mode_rom_hack_camera(struct Camera *c) { // tween c->pos[0] = c->pos[0] * 0.6 + oldPos[0] * 0.4; - { + if (gRomhackCameraSlowFall) { f32 approachRate = 20.0f; f32 goalHeight = c->pos[1]; approachRate += ABS(oldPos[1] - goalHeight) / 20; c->pos[1] = oldPos[1]; approach_camera_height(c, goalHeight, approachRate); + } else { + c->pos[1] = c->pos[1] * 0.6 + oldPos[1] * 0.4; } c->pos[2] = c->pos[2] * 0.6 + oldPos[2] * 0.4; diff --git a/src/game/camera.h b/src/game/camera.h index c44bb070a..7e70fc391 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -25,6 +25,7 @@ extern u8 gRomhackCameraAllowCentering; extern u8 gOverrideAllowToxicGasCamera; extern u8 gRomhackCameraAllowDpad; extern u8 gRomHackCamSetCollisions; +extern u8 gRomhackCameraSlowFall; /** * @file camera.h diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 42f5bc8cd..876bc5390 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -143,6 +143,7 @@ bool configRomhackCameraBowserFights = false; bool configRomhackCameraHasCollision = false; bool configRomhackCameraHasCentering = false; bool configRomhackCameraDpadBehavior = false; +bool configRomhackCameraSlowFall = true; bool configCameraToxicGas = true; // debug bool configLuaProfiler = false; @@ -273,12 +274,13 @@ static const struct ConfigOption options[] = { {.name = "bettercam_pan_level", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraPan}, {.name = "bettercam_degrade", .type = CONFIG_TYPE_UINT, .uintValue = &configCameraDegrade}, // romhack camera settings - {.name = "romhackcam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableRomhackCamera}, - {.name = "romhackcam_bowser", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraBowserFights}, - {.name = "romhackcam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCollision}, - {.name = "romhackcam_centering", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCentering}, - {.name = "romhackcam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraDpadBehavior}, - {.name = "romhackcam_toxic_gas", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraToxicGas}, + {.name = "romhackcam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableRomhackCamera}, + {.name = "romhackcam_bowser", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraBowserFights}, + {.name = "romhackcam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCollision}, + {.name = "romhackcam_centering", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraHasCentering}, + {.name = "romhackcam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraDpadBehavior}, + {.name = "romhackcam_slowfall", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraSlowFall}, + {.name = "romhackcam_toxic_gas", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraToxicGas}, // debug {.name = "debug_offset", .type = CONFIG_TYPE_U64, .u64Value = &gPcDebug.bhvOffset}, {.name = "debug_tags", .type = CONFIG_TYPE_U64, .u64Value = gPcDebug.tags}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index e784f69a5..05f151eae 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -96,6 +96,7 @@ extern bool configRomhackCameraBowserFights; extern bool configRomhackCameraHasCollision; extern bool configRomhackCameraHasCentering; extern bool configRomhackCameraDpadBehavior; +extern bool configRomhackCameraSlowFall; extern bool configCameraToxicGas; // debug extern bool configLuaProfiler; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index c2a14d6c4..a13de3df9 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -45,6 +45,7 @@ void djui_panel_romhack_camera_create(struct DjuiBase* caller) { djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_COLLISION), &configRomhackCameraHasCollision, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configRomhackCameraHasCentering, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_USE_DPAD), &configRomhackCameraDpadBehavior, djui_panel_romhack_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_SLOW_FALL), &configRomhackCameraSlowFall, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, CAMERA_TOXIC_GAS), &configCameraToxicGas, djui_panel_romhack_camera_value_changed); djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); From 787c6e8d41df814b8b69965a6ec95f622ff53b7a Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:28:51 -0500 Subject: [PATCH 07/13] Fix bowser fight camera swap --- src/game/camera.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index d11327d2d..639af95b2 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -3128,6 +3128,11 @@ static void update_romhack_camera_override(struct Camera *c) { set_camera_mode(c, c->defMode, 0); } return; + } else { + if (c->mode == CAMERA_MODE_BOSS_FIGHT) { + set_camera_mode(c, CAMERA_MODE_ROM_HACK, 0); + return; + } } if (c->mode == CAMERA_MODE_ROM_HACK || !allow_romhack_camera_override_mode(c->mode)) { return; } @@ -12174,8 +12179,8 @@ s32 snap_to_45_degrees(s16 angle) { void romhack_camera_init_settings(void) { enum RomhackCameraOverride override = configEnableRomhackCamera ? (configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER) : RCO_DISABLE; - camera_set_romhack_override(override); - gCameraUseCourseSpecificSettings = dynos_level_is_vanilla_level(gCurrLevelNum) ? 1 : 0; + gOverrideRomhackCamera = override; + gCameraUseCourseSpecificSettings = (override == RCO_DISABLE && dynos_level_is_vanilla_level(gCurrLevelNum)); gRomHackCamSetCollisions = configRomhackCameraHasCollision; gRomhackCameraAllowCentering = configRomhackCameraHasCentering; gRomhackCameraAllowDpad = configRomhackCameraDpadBehavior; From 0095580e2839f51388e4337906de80abbef446f1 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 8 Jan 2025 02:02:35 -0500 Subject: [PATCH 08/13] Add zoomed in/out distance/height as options --- autogen/lua_definitions/functions.lua | 48 +++ docs/lua/functions-5.md | 466 ++++++++++---------------- docs/lua/functions-6.md | 290 ++++++++++++++++ docs/lua/functions.md | 32 +- lang/English.ini | 4 + src/game/camera.c | 4 +- src/pc/configfile.c | 8 + src/pc/configfile.h | 4 + src/pc/djui/djui_panel_camera.c | 4 + src/pc/lua/smlua_functions_autogen.c | 136 ++++++++ src/pc/lua/utils/smlua_camera_utils.c | 52 +++ src/pc/lua/utils/smlua_camera_utils.h | 18 + 12 files changed, 762 insertions(+), 304 deletions(-) diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 5e30ac263..ecbe40404 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -9085,6 +9085,54 @@ function camera_romhack_get_collisions() -- ... end +--- @return integer +--- Gets the romhack camera's zoomed in distance +function camera_romhack_get_zoomed_in_dist() + -- ... +end + +--- @return integer +--- Gets the romhack camera's zoomed in height +function camera_romhack_get_zoomed_in_height() + -- ... +end + +--- @return integer +--- Gets the romhack camera's additional zoomed out distance +function camera_romhack_get_zoomed_out_dist() + -- ... +end + +--- @return integer +--- Gets the romhack camera's additional zoomed out height +function camera_romhack_get_zoomed_out_height() + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed in distance, between 600 and 1600 +function camera_romhack_set_zoomed_in_dist(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed in height, between 200 and 600 +function camera_romhack_set_zoomed_in_height(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed out additional distance, between 400 and 1000 +function camera_romhack_set_zoomed_out_dist(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed out additional height, between 200 and 600 +function camera_romhack_set_zoomed_out_height(val) + -- ... +end + --- @param value boolean --- Sets if the camera should account for surfaces function camera_set_checking_surfaces(value) diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 278427d04..9665fd64e 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -7585,6 +7585,182 @@ Gets if the romhack camera has surface collisions
+## [camera_romhack_get_zoomed_in_dist](#camera_romhack_get_zoomed_in_dist) + +### Description +Gets the romhack camera's zoomed in distance + +### Lua Example +`local integerValue = camera_romhack_get_zoomed_in_dist()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_romhack_get_zoomed_in_dist(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_get_zoomed_in_height](#camera_romhack_get_zoomed_in_height) + +### Description +Gets the romhack camera's zoomed in height + +### Lua Example +`local integerValue = camera_romhack_get_zoomed_in_height()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_romhack_get_zoomed_in_height(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_get_zoomed_out_dist](#camera_romhack_get_zoomed_out_dist) + +### Description +Gets the romhack camera's additional zoomed out distance + +### Lua Example +`local integerValue = camera_romhack_get_zoomed_out_dist()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_romhack_get_zoomed_out_dist(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_get_zoomed_out_height](#camera_romhack_get_zoomed_out_height) + +### Description +Gets the romhack camera's additional zoomed out height + +### Lua Example +`local integerValue = camera_romhack_get_zoomed_out_height()` + +### Parameters +- None + +### Returns +- `integer` + +### C Prototype +`u32 camera_romhack_get_zoomed_out_height(void);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_set_zoomed_in_dist](#camera_romhack_set_zoomed_in_dist) + +### Description +Sets the romhack camera's zoomed in distance, between 600 and 1600 + +### Lua Example +`camera_romhack_set_zoomed_in_dist(val)` + +### Parameters +| Field | Type | +| ----- | ---- | +| val | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_set_zoomed_in_dist(u32 val);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_set_zoomed_in_height](#camera_romhack_set_zoomed_in_height) + +### Description +Sets the romhack camera's zoomed in height, between 200 and 600 + +### Lua Example +`camera_romhack_set_zoomed_in_height(val)` + +### Parameters +| Field | Type | +| ----- | ---- | +| val | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_set_zoomed_in_height(u32 val);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_set_zoomed_out_dist](#camera_romhack_set_zoomed_out_dist) + +### Description +Sets the romhack camera's zoomed out additional distance, between 400 and 1000 + +### Lua Example +`camera_romhack_set_zoomed_out_dist(val)` + +### Parameters +| Field | Type | +| ----- | ---- | +| val | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_set_zoomed_out_dist(u32 val);` + +[:arrow_up_small:](#) + +
+ +## [camera_romhack_set_zoomed_out_height](#camera_romhack_set_zoomed_out_height) + +### Description +Sets the romhack camera's zoomed out additional height, between 200 and 600 + +### Lua Example +`camera_romhack_set_zoomed_out_height(val)` + +### Parameters +| Field | Type | +| ----- | ---- | +| val | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_set_zoomed_out_height(u32 val);` + +[:arrow_up_small:](#) + +
+ ## [camera_set_checking_surfaces](#camera_set_checking_surfaces) ### Description @@ -8334,296 +8510,6 @@ Sets a value of the global vertex shading color [:arrow_up_small:](#) -
- ---- -# functions from smlua_level_utils.h - -
- - -## [level_is_vanilla_level](#level_is_vanilla_level) - -### Description -Checks if `levelNum` is a vanilla level - -### Lua Example -`local booleanValue = level_is_vanilla_level(levelNum)` - -### Parameters -| Field | Type | -| ----- | ---- | -| levelNum | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool level_is_vanilla_level(s16 levelNum);` - -[:arrow_up_small:](#) - -
- -## [level_register](#level_register) - -### Description -Registers a fully custom level. Level ID begins at 50 - -### Lua Example -`local integerValue = level_register(scriptEntryName, courseNum, fullName, shortName, acousticReach, echoLevel1, echoLevel2, echoLevel3)` - -### Parameters -| Field | Type | -| ----- | ---- | -| scriptEntryName | `string` | -| courseNum | `integer` | -| fullName | `string` | -| shortName | `string` | -| acousticReach | `integer` | -| echoLevel1 | `integer` | -| echoLevel2 | `integer` | -| echoLevel3 | `integer` | - -### Returns -- `integer` - -### C Prototype -`s16 level_register(const char* scriptEntryName, s16 courseNum, const char* fullName, const char* shortName, u32 acousticReach, u32 echoLevel1, u32 echoLevel2, u32 echoLevel3);` - -[:arrow_up_small:](#) - -
- -## [smlua_level_util_change_area](#smlua_level_util_change_area) - -### Description -Instantly changes the current area to `areaIndex` - -### Lua Example -`smlua_level_util_change_area(areaIndex)` - -### Parameters -| Field | Type | -| ----- | ---- | -| areaIndex | `integer` | - -### Returns -- None - -### C Prototype -`void smlua_level_util_change_area(s32 areaIndex);` - -[:arrow_up_small:](#) - -
- -## [smlua_level_util_get_info](#smlua_level_util_get_info) - -### Description -Gets information on a custom level from `levelNum` - -### Lua Example -`local CustomLevelInfoValue = smlua_level_util_get_info(levelNum)` - -### Parameters -| Field | Type | -| ----- | ---- | -| levelNum | `integer` | - -### Returns -[CustomLevelInfo](structs.md#CustomLevelInfo) - -### C Prototype -`struct CustomLevelInfo* smlua_level_util_get_info(s16 levelNum);` - -[:arrow_up_small:](#) - -
- -## [smlua_level_util_get_info_from_course_num](#smlua_level_util_get_info_from_course_num) - -### Description -Gets information on a custom level from `courseNum` - -### Lua Example -`local CustomLevelInfoValue = smlua_level_util_get_info_from_course_num(courseNum)` - -### Parameters -| Field | Type | -| ----- | ---- | -| courseNum | `integer` | - -### Returns -[CustomLevelInfo](structs.md#CustomLevelInfo) - -### C Prototype -`struct CustomLevelInfo* smlua_level_util_get_info_from_course_num(u8 courseNum);` - -[:arrow_up_small:](#) - -
- -## [smlua_level_util_get_info_from_short_name](#smlua_level_util_get_info_from_short_name) - -### Description -Gets information on a custom level from `shortName` - -### Lua Example -`local CustomLevelInfoValue = smlua_level_util_get_info_from_short_name(shortName)` - -### Parameters -| Field | Type | -| ----- | ---- | -| shortName | `string` | - -### Returns -[CustomLevelInfo](structs.md#CustomLevelInfo) - -### C Prototype -`struct CustomLevelInfo* smlua_level_util_get_info_from_short_name(const char* shortName);` - -[:arrow_up_small:](#) - -
- -## [warp_exit_level](#warp_exit_level) - -### Description -Exits the current level after `aDelay` - -### Lua Example -`local booleanValue = warp_exit_level(aDelay)` - -### Parameters -| Field | Type | -| ----- | ---- | -| aDelay | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool warp_exit_level(s32 aDelay);` - -[:arrow_up_small:](#) - -
- -## [warp_restart_level](#warp_restart_level) - -### Description -Restarts the current level - -### Lua Example -`local booleanValue = warp_restart_level()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool warp_restart_level(void);` - -[:arrow_up_small:](#) - -
- -## [warp_to_castle](#warp_to_castle) - -### Description -Warps back to the castle from `aLevel` - -### Lua Example -`local booleanValue = warp_to_castle(aLevel)` - -### Parameters -| Field | Type | -| ----- | ---- | -| aLevel | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool warp_to_castle(s32 aLevel);` - -[:arrow_up_small:](#) - -
- -## [warp_to_level](#warp_to_level) - -### Description -Warps to `aArea` of `aLevel` in `aAct` - -### Lua Example -`local booleanValue = warp_to_level(aLevel, aArea, aAct)` - -### Parameters -| Field | Type | -| ----- | ---- | -| aLevel | `integer` | -| aArea | `integer` | -| aAct | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool warp_to_level(s32 aLevel, s32 aArea, s32 aAct);` - -[:arrow_up_small:](#) - -
- -## [warp_to_start_level](#warp_to_start_level) - -### Description -Warps to the start level (Castle Grounds by default) - -### Lua Example -`local booleanValue = warp_to_start_level()` - -### Parameters -- None - -### Returns -- `boolean` - -### C Prototype -`bool warp_to_start_level(void);` - -[:arrow_up_small:](#) - -
- -## [warp_to_warpnode](#warp_to_warpnode) - -### Description -Warps to `aWarpId` of `aArea` in `aLevel` during `aAct` - -### Lua Example -`local booleanValue = warp_to_warpnode(aLevel, aArea, aAct, aWarpId)` - -### Parameters -| Field | Type | -| ----- | ---- | -| aLevel | `integer` | -| aArea | `integer` | -| aAct | `integer` | -| aWarpId | `integer` | - -### Returns -- `boolean` - -### C Prototype -`bool warp_to_warpnode(s32 aLevel, s32 aArea, s32 aAct, s32 aWarpId);` - -[:arrow_up_small:](#) -
--- diff --git a/docs/lua/functions-6.md b/docs/lua/functions-6.md index ffb769811..4b52b3ddd 100644 --- a/docs/lua/functions-6.md +++ b/docs/lua/functions-6.md @@ -5,6 +5,296 @@ [< prev](functions-5.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | 6] +--- +# functions from smlua_level_utils.h + +
+ + +## [level_is_vanilla_level](#level_is_vanilla_level) + +### Description +Checks if `levelNum` is a vanilla level + +### Lua Example +`local booleanValue = level_is_vanilla_level(levelNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| levelNum | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool level_is_vanilla_level(s16 levelNum);` + +[:arrow_up_small:](#) + +
+ +## [level_register](#level_register) + +### Description +Registers a fully custom level. Level ID begins at 50 + +### Lua Example +`local integerValue = level_register(scriptEntryName, courseNum, fullName, shortName, acousticReach, echoLevel1, echoLevel2, echoLevel3)` + +### Parameters +| Field | Type | +| ----- | ---- | +| scriptEntryName | `string` | +| courseNum | `integer` | +| fullName | `string` | +| shortName | `string` | +| acousticReach | `integer` | +| echoLevel1 | `integer` | +| echoLevel2 | `integer` | +| echoLevel3 | `integer` | + +### Returns +- `integer` + +### C Prototype +`s16 level_register(const char* scriptEntryName, s16 courseNum, const char* fullName, const char* shortName, u32 acousticReach, u32 echoLevel1, u32 echoLevel2, u32 echoLevel3);` + +[:arrow_up_small:](#) + +
+ +## [smlua_level_util_change_area](#smlua_level_util_change_area) + +### Description +Instantly changes the current area to `areaIndex` + +### Lua Example +`smlua_level_util_change_area(areaIndex)` + +### Parameters +| Field | Type | +| ----- | ---- | +| areaIndex | `integer` | + +### Returns +- None + +### C Prototype +`void smlua_level_util_change_area(s32 areaIndex);` + +[:arrow_up_small:](#) + +
+ +## [smlua_level_util_get_info](#smlua_level_util_get_info) + +### Description +Gets information on a custom level from `levelNum` + +### Lua Example +`local CustomLevelInfoValue = smlua_level_util_get_info(levelNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| levelNum | `integer` | + +### Returns +[CustomLevelInfo](structs.md#CustomLevelInfo) + +### C Prototype +`struct CustomLevelInfo* smlua_level_util_get_info(s16 levelNum);` + +[:arrow_up_small:](#) + +
+ +## [smlua_level_util_get_info_from_course_num](#smlua_level_util_get_info_from_course_num) + +### Description +Gets information on a custom level from `courseNum` + +### Lua Example +`local CustomLevelInfoValue = smlua_level_util_get_info_from_course_num(courseNum)` + +### Parameters +| Field | Type | +| ----- | ---- | +| courseNum | `integer` | + +### Returns +[CustomLevelInfo](structs.md#CustomLevelInfo) + +### C Prototype +`struct CustomLevelInfo* smlua_level_util_get_info_from_course_num(u8 courseNum);` + +[:arrow_up_small:](#) + +
+ +## [smlua_level_util_get_info_from_short_name](#smlua_level_util_get_info_from_short_name) + +### Description +Gets information on a custom level from `shortName` + +### Lua Example +`local CustomLevelInfoValue = smlua_level_util_get_info_from_short_name(shortName)` + +### Parameters +| Field | Type | +| ----- | ---- | +| shortName | `string` | + +### Returns +[CustomLevelInfo](structs.md#CustomLevelInfo) + +### C Prototype +`struct CustomLevelInfo* smlua_level_util_get_info_from_short_name(const char* shortName);` + +[:arrow_up_small:](#) + +
+ +## [warp_exit_level](#warp_exit_level) + +### Description +Exits the current level after `aDelay` + +### Lua Example +`local booleanValue = warp_exit_level(aDelay)` + +### Parameters +| Field | Type | +| ----- | ---- | +| aDelay | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool warp_exit_level(s32 aDelay);` + +[:arrow_up_small:](#) + +
+ +## [warp_restart_level](#warp_restart_level) + +### Description +Restarts the current level + +### Lua Example +`local booleanValue = warp_restart_level()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool warp_restart_level(void);` + +[:arrow_up_small:](#) + +
+ +## [warp_to_castle](#warp_to_castle) + +### Description +Warps back to the castle from `aLevel` + +### Lua Example +`local booleanValue = warp_to_castle(aLevel)` + +### Parameters +| Field | Type | +| ----- | ---- | +| aLevel | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool warp_to_castle(s32 aLevel);` + +[:arrow_up_small:](#) + +
+ +## [warp_to_level](#warp_to_level) + +### Description +Warps to `aArea` of `aLevel` in `aAct` + +### Lua Example +`local booleanValue = warp_to_level(aLevel, aArea, aAct)` + +### Parameters +| Field | Type | +| ----- | ---- | +| aLevel | `integer` | +| aArea | `integer` | +| aAct | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool warp_to_level(s32 aLevel, s32 aArea, s32 aAct);` + +[:arrow_up_small:](#) + +
+ +## [warp_to_start_level](#warp_to_start_level) + +### Description +Warps to the start level (Castle Grounds by default) + +### Lua Example +`local booleanValue = warp_to_start_level()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool warp_to_start_level(void);` + +[:arrow_up_small:](#) + +
+ +## [warp_to_warpnode](#warp_to_warpnode) + +### Description +Warps to `aWarpId` of `aArea` in `aLevel` during `aAct` + +### Lua Example +`local booleanValue = warp_to_warpnode(aLevel, aArea, aAct, aWarpId)` + +### Parameters +| Field | Type | +| ----- | ---- | +| aLevel | `integer` | +| aArea | `integer` | +| aAct | `integer` | +| aWarpId | `integer` | + +### Returns +- `boolean` + +### C Prototype +`bool warp_to_warpnode(s32 aLevel, s32 aArea, s32 aAct, s32 aWarpId);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_math_utils.h diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 8cac726ff..03c44e407 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1682,6 +1682,14 @@ - [camera_romhack_get_allow_centering](functions-5.md#camera_romhack_get_allow_centering) - [camera_romhack_get_allow_dpad_usage](functions-5.md#camera_romhack_get_allow_dpad_usage) - [camera_romhack_get_collisions](functions-5.md#camera_romhack_get_collisions) + - [camera_romhack_get_zoomed_in_dist](functions-5.md#camera_romhack_get_zoomed_in_dist) + - [camera_romhack_get_zoomed_in_height](functions-5.md#camera_romhack_get_zoomed_in_height) + - [camera_romhack_get_zoomed_out_dist](functions-5.md#camera_romhack_get_zoomed_out_dist) + - [camera_romhack_get_zoomed_out_height](functions-5.md#camera_romhack_get_zoomed_out_height) + - [camera_romhack_set_zoomed_in_dist](functions-5.md#camera_romhack_set_zoomed_in_dist) + - [camera_romhack_set_zoomed_in_height](functions-5.md#camera_romhack_set_zoomed_in_height) + - [camera_romhack_set_zoomed_out_dist](functions-5.md#camera_romhack_set_zoomed_out_dist) + - [camera_romhack_set_zoomed_out_height](functions-5.md#camera_romhack_set_zoomed_out_height) - [camera_set_checking_surfaces](functions-5.md#camera_set_checking_surfaces) - [camera_set_romhack_override](functions-5.md#camera_set_romhack_override) - [camera_unfreeze](functions-5.md#camera_unfreeze) @@ -1730,18 +1738,18 @@
- smlua_level_utils.h - - [level_is_vanilla_level](functions-5.md#level_is_vanilla_level) - - [level_register](functions-5.md#level_register) - - [smlua_level_util_change_area](functions-5.md#smlua_level_util_change_area) - - [smlua_level_util_get_info](functions-5.md#smlua_level_util_get_info) - - [smlua_level_util_get_info_from_course_num](functions-5.md#smlua_level_util_get_info_from_course_num) - - [smlua_level_util_get_info_from_short_name](functions-5.md#smlua_level_util_get_info_from_short_name) - - [warp_exit_level](functions-5.md#warp_exit_level) - - [warp_restart_level](functions-5.md#warp_restart_level) - - [warp_to_castle](functions-5.md#warp_to_castle) - - [warp_to_level](functions-5.md#warp_to_level) - - [warp_to_start_level](functions-5.md#warp_to_start_level) - - [warp_to_warpnode](functions-5.md#warp_to_warpnode) + - [level_is_vanilla_level](functions-6.md#level_is_vanilla_level) + - [level_register](functions-6.md#level_register) + - [smlua_level_util_change_area](functions-6.md#smlua_level_util_change_area) + - [smlua_level_util_get_info](functions-6.md#smlua_level_util_get_info) + - [smlua_level_util_get_info_from_course_num](functions-6.md#smlua_level_util_get_info_from_course_num) + - [smlua_level_util_get_info_from_short_name](functions-6.md#smlua_level_util_get_info_from_short_name) + - [warp_exit_level](functions-6.md#warp_exit_level) + - [warp_restart_level](functions-6.md#warp_restart_level) + - [warp_to_castle](functions-6.md#warp_to_castle) + - [warp_to_level](functions-6.md#warp_to_level) + - [warp_to_start_level](functions-6.md#warp_to_start_level) + - [warp_to_warpnode](functions-6.md#warp_to_warpnode)
diff --git a/lang/English.ini b/lang/English.ini index 0b5df1705..f0ba50f74 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -77,6 +77,10 @@ ROMHACK_CAMERA_COLLISION = "Camera Collisions" ROMHACK_CAMERA_L_CENTERING = "L Centering" ROMHACK_CAMERA_USE_DPAD = "DPad Behavior" ROMHACK_CAMERA_SLOW_FALL = "Slow Fall" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Zoomed In Distance" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Zoomed Out Distance" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Zoomed In Height" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Zoomed Out Height" CAMERA_TOXIC_GAS = "Adjust for toxic gas" MOUSE_LOOK = "Mouse Look" INVERT_X = "Invert X" diff --git a/src/game/camera.c b/src/game/camera.c index 639af95b2..7685d4077 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -12360,8 +12360,8 @@ void mode_rom_hack_camera(struct Camera *c) { sRomHackIsUpdate = 0; // figure out desired position - f32 desiredDist = sRomHackZoom ? 900 : 1400; - f32 desiredHeight = sRomHackZoom ? 300 : 450; + f32 desiredDist = sRomHackZoom ? configRomhackCameraZoomedInDist : configRomhackCameraZoomedInDist + configRomhackCameraZoomedOutDist; + f32 desiredHeight = sRomHackZoom ? configRomhackCameraZoomedInHeight : configRomhackCameraZoomedInHeight + configRomhackCameraZoomedOutHeight; f32* mPos = &gMarioStates[0].pos[0]; pos[0] = mPos[0] + coss(sRomHackYaw) * desiredDist; pos[1] = mPos[1] + desiredHeight; diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 876bc5390..8f864cccb 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -145,6 +145,10 @@ bool configRomhackCameraHasCentering = false; bool configRomhackCameraDpadBehavior = false; bool configRomhackCameraSlowFall = true; bool configCameraToxicGas = true; +unsigned int configRomhackCameraZoomedInDist = 900; +unsigned int configRomhackCameraZoomedOutDist = 1400; +unsigned int configRomhackCameraZoomedInHeight = 300; +unsigned int configRomhackCameraZoomedOutHeight = 450; // debug bool configLuaProfiler = false; bool configDebugPrint = false; @@ -281,6 +285,10 @@ static const struct ConfigOption options[] = { {.name = "romhackcam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraDpadBehavior}, {.name = "romhackcam_slowfall", .type = CONFIG_TYPE_BOOL, .boolValue = &configRomhackCameraSlowFall}, {.name = "romhackcam_toxic_gas", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraToxicGas}, + {.name = "romhackcam_zi_dist", .type = CONFIG_TYPE_UINT, .uintValue = &configRomhackCameraZoomedInDist}, + {.name = "romhackcam_zo_dist", .type = CONFIG_TYPE_UINT, .uintValue = &configRomhackCameraZoomedOutDist}, + {.name = "romhackcam_zi_height", .type = CONFIG_TYPE_UINT, .uintValue = &configRomhackCameraZoomedInHeight}, + {.name = "romhackcam_zo_height", .type = CONFIG_TYPE_UINT, .uintValue = &configRomhackCameraZoomedOutHeight}, // debug {.name = "debug_offset", .type = CONFIG_TYPE_U64, .u64Value = &gPcDebug.bhvOffset}, {.name = "debug_tags", .type = CONFIG_TYPE_U64, .u64Value = gPcDebug.tags}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index 05f151eae..b4bdfe9e0 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -98,6 +98,10 @@ extern bool configRomhackCameraHasCentering; extern bool configRomhackCameraDpadBehavior; extern bool configRomhackCameraSlowFall; extern bool configCameraToxicGas; +extern unsigned int configRomhackCameraZoomedInDist; +extern unsigned int configRomhackCameraZoomedOutDist; +extern unsigned int configRomhackCameraZoomedInHeight; +extern unsigned int configRomhackCameraZoomedOutHeight; // debug extern bool configLuaProfiler; extern bool configDebugPrint; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index a13de3df9..e5d8d045d 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -46,6 +46,10 @@ void djui_panel_romhack_camera_create(struct DjuiBase* caller) { djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configRomhackCameraHasCentering, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_USE_DPAD), &configRomhackCameraDpadBehavior, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_SLOW_FALL), &configRomhackCameraSlowFall, djui_panel_romhack_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_DIST), &configRomhackCameraZoomedInDist, 700, 1600, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_DIST), &configRomhackCameraZoomedOutDist, 400, 1000, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_HEIGHT), &configRomhackCameraZoomedInHeight, 200, 600, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT), &configRomhackCameraZoomedOutHeight, 200, 600, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, CAMERA_TOXIC_GAS), &configCameraToxicGas, djui_panel_romhack_camera_value_changed); djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index 8a054b5f3..edb431514 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -27993,6 +27993,134 @@ int smlua_func_camera_romhack_get_collisions(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_romhack_get_zoomed_in_dist(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_zoomed_in_dist", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_zoomed_in_dist()); + + return 1; +} + +int smlua_func_camera_romhack_get_zoomed_in_height(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_zoomed_in_height", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_zoomed_in_height()); + + return 1; +} + +int smlua_func_camera_romhack_get_zoomed_out_dist(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_zoomed_out_dist", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_zoomed_out_dist()); + + return 1; +} + +int smlua_func_camera_romhack_get_zoomed_out_height(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_get_zoomed_out_height", 0, top); + return 0; + } + + + lua_pushinteger(L, camera_romhack_get_zoomed_out_height()); + + return 1; +} + +int smlua_func_camera_romhack_set_zoomed_in_dist(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_set_zoomed_in_dist", 1, top); + return 0; + } + + u32 val = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_set_zoomed_in_dist"); return 0; } + + camera_romhack_set_zoomed_in_dist(val); + + return 1; +} + +int smlua_func_camera_romhack_set_zoomed_in_height(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_set_zoomed_in_height", 1, top); + return 0; + } + + u32 val = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_set_zoomed_in_height"); return 0; } + + camera_romhack_set_zoomed_in_height(val); + + return 1; +} + +int smlua_func_camera_romhack_set_zoomed_out_dist(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_set_zoomed_out_dist", 1, top); + return 0; + } + + u32 val = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_set_zoomed_out_dist"); return 0; } + + camera_romhack_set_zoomed_out_dist(val); + + return 1; +} + +int smlua_func_camera_romhack_set_zoomed_out_height(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_set_zoomed_out_height", 1, top); + return 0; + } + + u32 val = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_set_zoomed_out_height"); return 0; } + + camera_romhack_set_zoomed_out_height(val); + + return 1; +} + int smlua_func_camera_set_checking_surfaces(lua_State* L) { if (L == NULL) { return 0; } @@ -33745,6 +33873,14 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "camera_romhack_get_allow_centering", smlua_func_camera_romhack_get_allow_centering); smlua_bind_function(L, "camera_romhack_get_allow_dpad_usage", smlua_func_camera_romhack_get_allow_dpad_usage); smlua_bind_function(L, "camera_romhack_get_collisions", smlua_func_camera_romhack_get_collisions); + smlua_bind_function(L, "camera_romhack_get_zoomed_in_dist", smlua_func_camera_romhack_get_zoomed_in_dist); + smlua_bind_function(L, "camera_romhack_get_zoomed_in_height", smlua_func_camera_romhack_get_zoomed_in_height); + smlua_bind_function(L, "camera_romhack_get_zoomed_out_dist", smlua_func_camera_romhack_get_zoomed_out_dist); + smlua_bind_function(L, "camera_romhack_get_zoomed_out_height", smlua_func_camera_romhack_get_zoomed_out_height); + smlua_bind_function(L, "camera_romhack_set_zoomed_in_dist", smlua_func_camera_romhack_set_zoomed_in_dist); + smlua_bind_function(L, "camera_romhack_set_zoomed_in_height", smlua_func_camera_romhack_set_zoomed_in_height); + smlua_bind_function(L, "camera_romhack_set_zoomed_out_dist", smlua_func_camera_romhack_set_zoomed_out_dist); + smlua_bind_function(L, "camera_romhack_set_zoomed_out_height", smlua_func_camera_romhack_set_zoomed_out_height); smlua_bind_function(L, "camera_set_checking_surfaces", smlua_func_camera_set_checking_surfaces); smlua_bind_function(L, "camera_set_romhack_override", smlua_func_camera_set_romhack_override); smlua_bind_function(L, "camera_unfreeze", smlua_func_camera_unfreeze); diff --git a/src/pc/lua/utils/smlua_camera_utils.c b/src/pc/lua/utils/smlua_camera_utils.c index 4cdbb0aab..4d152b177 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -14,6 +14,10 @@ static struct CameraOverride sOverrideCameraAnalog = { 0 }; static struct CameraOverride sOverrideCameraMouse = { 0 }; static struct CameraOverride sOverrideCameraFreecamDpad = { 0 }; static struct CameraOverride sOverrideCameraFreecamCollision = { 0 }; +static struct CameraOverride sOverrideCameraRomhackZoomedInDist = { 0 }; +static struct CameraOverride sOverrideCameraRomhackZoomedOutDist = { 0 }; +static struct CameraOverride sOverrideCameraRomhackZoomedInHeight = { 0 }; +static struct CameraOverride sOverrideCameraRomhackZoomedOutHeight = { 0 }; void camera_reset_overrides(void) { sOverrideCameraXSens.override = false; @@ -28,6 +32,10 @@ void camera_reset_overrides(void) { sOverrideCameraMouse.override = false; sOverrideCameraFreecamDpad.override = false; sOverrideCameraFreecamCollision.override = false; + sOverrideCameraRomhackZoomedInDist.override = false; + sOverrideCameraRomhackZoomedOutDist.override = false; + sOverrideCameraRomhackZoomedInHeight.override = false; + sOverrideCameraRomhackZoomedOutHeight.override = false; } void camera_freeze(void) { @@ -62,6 +70,50 @@ void rom_hack_cam_set_collisions(u8 enable) { gRomHackCamSetCollisions = enable; } +void camera_romhack_set_zoomed_in_dist(u32 val) { + if (val < 700) { val = 700; } + else if (val > 1600) { val = 1600; } + sOverrideCameraRomhackZoomedInDist.value = val; + sOverrideCameraRomhackZoomedInDist.override = true; +} + +void camera_romhack_set_zoomed_out_dist(u32 val) { + if (val < 400) { val = 400; } + else if (val > 1000) { val = 1000; } + sOverrideCameraRomhackZoomedOutDist.value = val; + sOverrideCameraRomhackZoomedOutDist.override = true; +} + +void camera_romhack_set_zoomed_in_height(u32 val) { + if (val < 200) { val = 200; } + else if (val > 600) { val = 600; } + sOverrideCameraRomhackZoomedInHeight.value = val; + sOverrideCameraRomhackZoomedInHeight.override = true; +} + +void camera_romhack_set_zoomed_out_height(u32 val) { + if (val < 200) { val = 200; } + else if (val > 600) { val = 600; } + sOverrideCameraRomhackZoomedOutHeight.value = val; + sOverrideCameraRomhackZoomedOutHeight.override = true; +} + +u32 camera_romhack_get_zoomed_in_dist(void) { + return sOverrideCameraRomhackZoomedInDist.override ? sOverrideCameraRomhackZoomedInDist.value : configRomhackCameraZoomedInDist; +} + +u32 camera_romhack_get_zoomed_out_dist(void) { + return sOverrideCameraRomhackZoomedOutDist.override ? sOverrideCameraRomhackZoomedOutDist.value : configRomhackCameraZoomedOutDist; +} + +u32 camera_romhack_get_zoomed_in_height(void) { + return sOverrideCameraRomhackZoomedInHeight.override ? sOverrideCameraRomhackZoomedInHeight.value : configRomhackCameraZoomedInHeight; +} + +u32 camera_romhack_get_zoomed_out_height(void) { + return sOverrideCameraRomhackZoomedOutHeight.override ? sOverrideCameraRomhackZoomedOutHeight.value : configRomhackCameraZoomedOutHeight; +} + enum RomhackCameraOverride camera_get_romhack_override(void) { return gOverrideRomhackCamera; } diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index 410abef89..c557499a5 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -32,6 +32,24 @@ This enables or disables specific collision behaviors in modded levels |descriptionEnd| */ void rom_hack_cam_set_collisions(u8 enable); +/* |description|Sets the romhack camera's zoomed in distance, between 600 and 1600|descriptionEnd| */ +void camera_romhack_set_zoomed_in_dist(u32 val); +/* |description|Sets the romhack camera's zoomed out additional distance, between 400 and 1000|descriptionEnd| */ +void camera_romhack_set_zoomed_out_dist(u32 val); +/* |description|Sets the romhack camera's zoomed in height, between 200 and 600|descriptionEnd| */ +void camera_romhack_set_zoomed_in_height(u32 val); +/* |description|Sets the romhack camera's zoomed out additional height, between 200 and 600|descriptionEnd| */ +void camera_romhack_set_zoomed_out_height(u32 val); + +/* |description|Gets the romhack camera's zoomed in distance|descriptionEnd| */ +u32 camera_romhack_get_zoomed_in_dist(void); +/* |description|Gets the romhack camera's additional zoomed out distance|descriptionEnd| */ +u32 camera_romhack_get_zoomed_out_dist(void); +/* |description|Gets the romhack camera's zoomed in height|descriptionEnd| */ +u32 camera_romhack_get_zoomed_in_height(void); +/* |description|Gets the romhack camera's additional zoomed out height|descriptionEnd| */ +u32 camera_romhack_get_zoomed_out_height(void); + /* |description|Gets the current romhack camera override status|descriptionEnd| */ enum RomhackCameraOverride camera_get_romhack_override(void); /* |description|Gets if the romhack camera should allow centering|descriptionEnd| */ From 08ad9f282cb53d68359a7bcf78f4fead5a3731cb Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 8 Jan 2025 03:09:21 -0500 Subject: [PATCH 09/13] Fix camera not looking down slopes Suggestion by Fearl This most likely affects more than I could think --- src/game/camera.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/game/camera.c b/src/game/camera.c index 7685d4077..6008dd22f 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -12431,6 +12431,8 @@ void mode_rom_hack_camera(struct Camera *c) { // update area yaw sAreaYaw = sRomHackYaw; sAreaYawChange = sAreaYaw - oldAreaYaw; + + set_camera_height(c, c->pos[1]); } s32 update_rom_hack_camera(struct Camera *c, Vec3f focus, Vec3f pos) { @@ -12457,9 +12459,6 @@ s32 update_rom_hack_camera(struct Camera *c, Vec3f focus, Vec3f pos) { calc_y_to_curr_floor(&posY, 1.f, 200.f, &focusY, 0.9f, 200.f); focus_on_mario(focus, pos, posY + yOff, focusY + yOff, sLakituDist + baseDist, pitch, sAreaYaw); pan_ahead_of_player(c); - if (gCameraUseCourseSpecificSettings && c->mode != CAMERA_MODE_ROM_HACK && gCurrLevelArea == AREA_DDD_SUB) { - camYaw = clamp_positions_and_find_yaw(pos, focus, 6839.f, 995.f, 5994.f, -3945.f); - } // adjust focus when under water struct MarioState* m = &gMarioStates[0]; From c925781350d210a007d714f59cbaa5191b4d30fd Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Wed, 8 Jan 2025 03:38:39 -0500 Subject: [PATCH 10/13] Adjust slider ranges --- autogen/lua_definitions/functions.lua | 8 ++++---- docs/lua/functions-5.md | 8 ++++---- src/pc/djui/djui_panel_camera.c | 8 ++++---- src/pc/lua/utils/smlua_camera_utils.c | 16 ++++------------ src/pc/lua/utils/smlua_camera_utils.h | 8 ++++---- 5 files changed, 20 insertions(+), 28 deletions(-) diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index ecbe40404..44b95ae8b 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -9110,25 +9110,25 @@ function camera_romhack_get_zoomed_out_height() end --- @param val integer ---- Sets the romhack camera's zoomed in distance, between 600 and 1600 +--- Sets the romhack camera's zoomed in distance, between 700 and 1200 units function camera_romhack_set_zoomed_in_dist(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed in height, between 200 and 600 +--- Sets the romhack camera's zoomed in height, between 150 and 500 units function camera_romhack_set_zoomed_in_height(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed out additional distance, between 400 and 1000 +--- Sets the romhack camera's zoomed out additional distance, between 100 and 600 units function camera_romhack_set_zoomed_out_dist(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed out additional height, between 200 and 600 +--- Sets the romhack camera's zoomed out additional height, between 100 and 500 units function camera_romhack_set_zoomed_out_height(val) -- ... end diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 9665fd64e..b33f9a691 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -7672,7 +7672,7 @@ Gets the romhack camera's additional zoomed out height ## [camera_romhack_set_zoomed_in_dist](#camera_romhack_set_zoomed_in_dist) ### Description -Sets the romhack camera's zoomed in distance, between 600 and 1600 +Sets the romhack camera's zoomed in distance, between 700 and 1200 units ### Lua Example `camera_romhack_set_zoomed_in_dist(val)` @@ -7695,7 +7695,7 @@ Sets the romhack camera's zoomed in distance, between 600 and 1600 ## [camera_romhack_set_zoomed_in_height](#camera_romhack_set_zoomed_in_height) ### Description -Sets the romhack camera's zoomed in height, between 200 and 600 +Sets the romhack camera's zoomed in height, between 150 and 500 units ### Lua Example `camera_romhack_set_zoomed_in_height(val)` @@ -7718,7 +7718,7 @@ Sets the romhack camera's zoomed in height, between 200 and 600 ## [camera_romhack_set_zoomed_out_dist](#camera_romhack_set_zoomed_out_dist) ### Description -Sets the romhack camera's zoomed out additional distance, between 400 and 1000 +Sets the romhack camera's zoomed out additional distance, between 100 and 600 units ### Lua Example `camera_romhack_set_zoomed_out_dist(val)` @@ -7741,7 +7741,7 @@ Sets the romhack camera's zoomed out additional distance, between 400 and 1000 ## [camera_romhack_set_zoomed_out_height](#camera_romhack_set_zoomed_out_height) ### Description -Sets the romhack camera's zoomed out additional height, between 200 and 600 +Sets the romhack camera's zoomed out additional height, between 100 and 500 units ### Lua Example `camera_romhack_set_zoomed_out_height(val)` diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index e5d8d045d..0da06e763 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -46,10 +46,10 @@ void djui_panel_romhack_camera_create(struct DjuiBase* caller) { djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configRomhackCameraHasCentering, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_USE_DPAD), &configRomhackCameraDpadBehavior, djui_panel_romhack_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_SLOW_FALL), &configRomhackCameraSlowFall, djui_panel_romhack_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_DIST), &configRomhackCameraZoomedInDist, 700, 1600, djui_panel_free_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_DIST), &configRomhackCameraZoomedOutDist, 400, 1000, djui_panel_free_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_HEIGHT), &configRomhackCameraZoomedInHeight, 200, 600, djui_panel_free_camera_value_changed); - djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT), &configRomhackCameraZoomedOutHeight, 200, 600, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_DIST), &configRomhackCameraZoomedInDist, 700, 1200, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_DIST), &configRomhackCameraZoomedOutDist, 100, 600, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_HEIGHT), &configRomhackCameraZoomedInHeight, 150, 500, djui_panel_free_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT), &configRomhackCameraZoomedOutHeight, 100, 500, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, CAMERA_TOXIC_GAS), &configCameraToxicGas, djui_panel_romhack_camera_value_changed); djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); diff --git a/src/pc/lua/utils/smlua_camera_utils.c b/src/pc/lua/utils/smlua_camera_utils.c index 4d152b177..81f208405 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -71,30 +71,22 @@ void rom_hack_cam_set_collisions(u8 enable) { } void camera_romhack_set_zoomed_in_dist(u32 val) { - if (val < 700) { val = 700; } - else if (val > 1600) { val = 1600; } - sOverrideCameraRomhackZoomedInDist.value = val; + sOverrideCameraRomhackZoomedInDist.value = MIN(MAX(val, 700), 1200); sOverrideCameraRomhackZoomedInDist.override = true; } void camera_romhack_set_zoomed_out_dist(u32 val) { - if (val < 400) { val = 400; } - else if (val > 1000) { val = 1000; } - sOverrideCameraRomhackZoomedOutDist.value = val; + sOverrideCameraRomhackZoomedOutDist.value = MIN(MAX(val, 100), 600); sOverrideCameraRomhackZoomedOutDist.override = true; } void camera_romhack_set_zoomed_in_height(u32 val) { - if (val < 200) { val = 200; } - else if (val > 600) { val = 600; } - sOverrideCameraRomhackZoomedInHeight.value = val; + sOverrideCameraRomhackZoomedInHeight.value = MIN(MAX(val, 150), 500); sOverrideCameraRomhackZoomedInHeight.override = true; } void camera_romhack_set_zoomed_out_height(u32 val) { - if (val < 200) { val = 200; } - else if (val > 600) { val = 600; } - sOverrideCameraRomhackZoomedOutHeight.value = val; + sOverrideCameraRomhackZoomedOutHeight.value = MIN(MAX(val, 100), 500); sOverrideCameraRomhackZoomedOutHeight.override = true; } diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index c557499a5..2e0baead5 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -32,13 +32,13 @@ This enables or disables specific collision behaviors in modded levels |descriptionEnd| */ void rom_hack_cam_set_collisions(u8 enable); -/* |description|Sets the romhack camera's zoomed in distance, between 600 and 1600|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed in distance, between 700 and 1200 units|descriptionEnd| */ void camera_romhack_set_zoomed_in_dist(u32 val); -/* |description|Sets the romhack camera's zoomed out additional distance, between 400 and 1000|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed out additional distance, between 100 and 600 units|descriptionEnd| */ void camera_romhack_set_zoomed_out_dist(u32 val); -/* |description|Sets the romhack camera's zoomed in height, between 200 and 600|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed in height, between 150 and 500 units|descriptionEnd| */ void camera_romhack_set_zoomed_in_height(u32 val); -/* |description|Sets the romhack camera's zoomed out additional height, between 200 and 600|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed out additional height, between 100 and 500 units|descriptionEnd| */ void camera_romhack_set_zoomed_out_height(u32 val); /* |description|Gets the romhack camera's zoomed in distance|descriptionEnd| */ From 4079859f86c6729a26d3476fa8f454f1c07729ea Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:30:31 -0500 Subject: [PATCH 11/13] Fix titles Thanks Sherbie --- lang/English.ini | 2 ++ src/pc/djui/djui_panel_camera.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lang/English.ini b/lang/English.ini index f0ba50f74..33514e7d8 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -67,10 +67,12 @@ YES = "Yes" [CAMERA] CAMERA = "CAMERA" +FREE_CAMERA_TITLE = "FREE CAMERA" FREE_CAMERA = "Free Camera" ANALOG_CAMERA = "Analog Camera" FREE_CAMERA_USE_DPAD = "DPad Behavior" FREE_CAMERA_COLLISION = "Camera Collisions" +ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" ROMHACK_CAMERA = "Romhack Camera" ROMHACK_CAMERA_IN_BOWSER = "Use in Bowser fights" ROMHACK_CAMERA_COLLISION = "Camera Collisions" diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index 0da06e763..b279c3db0 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -16,7 +16,7 @@ static void djui_panel_romhack_camera_value_changed(UNUSED struct DjuiBase* call } void djui_panel_free_camera_create(struct DjuiBase* caller) { - struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, FREE_CAMERA), false); + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, FREE_CAMERA_TITLE), false); struct DjuiBase* body = djui_three_panel_get_body(panel); { djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableFreeCamera, djui_panel_free_camera_value_changed); @@ -37,7 +37,7 @@ void djui_panel_free_camera_create(struct DjuiBase* caller) { } void djui_panel_romhack_camera_create(struct DjuiBase* caller) { - struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, ROMHACK_CAMERA), false); + struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, ROMHACK_CAMERA_TITLE), false); struct DjuiBase* body = djui_three_panel_get_body(panel); { djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA), &configEnableRomhackCamera, djui_panel_romhack_camera_value_changed); From 53205e1187c1070320a348be855ad947457b0f0a Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:47:57 -0500 Subject: [PATCH 12/13] Option to toggle free camera centering Suggestion by Sherbie --- autogen/lua_definitions/functions.lua | 12 ++++++++ docs/lua/functions-5.md | 44 +++++++++++++++++++++++++++ docs/lua/functions.md | 2 ++ lang/English.ini | 1 + src/game/bettercamera.inc.h | 5 ++- src/pc/configfile.c | 7 +++-- src/pc/configfile.h | 6 ++-- src/pc/djui/djui_panel_camera.c | 1 + src/pc/lua/smlua_functions_autogen.c | 34 +++++++++++++++++++++ src/pc/lua/utils/smlua_camera_utils.c | 12 ++++++++ src/pc/lua/utils/smlua_camera_utils.h | 4 +++ 11 files changed, 123 insertions(+), 5 deletions(-) diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 44b95ae8b..2a65ef7f8 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -8894,6 +8894,12 @@ function camera_config_enable_camera_collisions(enable) -- ... end +--- @param enable boolean +--- Overrides if the L button will center the camera +function camera_config_enable_centering(enable) + -- ... +end + --- @param enable boolean --- Overrides if Free Camera is enabled function camera_config_enable_free_cam(enable) @@ -8917,6 +8923,12 @@ function camera_config_get_aggression() -- ... end +--- @return boolean +--- Gets if the L button will center the camera +function camera_config_get_centering() + -- ... +end + --- @return integer function camera_config_get_deceleration() -- ... diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index b33f9a691..9b5563092 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -6883,6 +6883,29 @@ Overrides if Camera Collision is enabled
+## [camera_config_enable_centering](#camera_config_enable_centering) + +### Description +Overrides if the L button will center the camera + +### Lua Example +`camera_config_enable_centering(enable)` + +### Parameters +| Field | Type | +| ----- | ---- | +| enable | `boolean` | + +### Returns +- None + +### C Prototype +`void camera_config_enable_centering(bool enable);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_enable_free_cam](#camera_config_enable_free_cam) ### Description @@ -6970,6 +6993,27 @@ Overrides if camera mouse look is enabled
+## [camera_config_get_centering](#camera_config_get_centering) + +### Description +Gets if the L button will center the camera + +### Lua Example +`local booleanValue = camera_config_get_centering()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_get_centering(void);` + +[:arrow_up_small:](#) + +
+ ## [camera_config_get_deceleration](#camera_config_get_deceleration) ### Lua Example diff --git a/docs/lua/functions.md b/docs/lua/functions.md index 03c44e407..36179fb1b 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1649,10 +1649,12 @@ - [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_camera_collisions](functions-5.md#camera_config_enable_camera_collisions) + - [camera_config_enable_centering](functions-5.md#camera_config_enable_centering) - [camera_config_enable_free_cam](functions-5.md#camera_config_enable_free_cam) - [camera_config_enable_freecam_dpad](functions-5.md#camera_config_enable_freecam_dpad) - [camera_config_enable_mouse_look](functions-5.md#camera_config_enable_mouse_look) - [camera_config_get_aggression](functions-5.md#camera_config_get_aggression) + - [camera_config_get_centering](functions-5.md#camera_config_get_centering) - [camera_config_get_deceleration](functions-5.md#camera_config_get_deceleration) - [camera_config_get_pan_level](functions-5.md#camera_config_get_pan_level) - [camera_config_get_x_sensitivity](functions-5.md#camera_config_get_x_sensitivity) diff --git a/lang/English.ini b/lang/English.ini index 33514e7d8..ce44367bf 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -70,6 +70,7 @@ CAMERA = "CAMERA" FREE_CAMERA_TITLE = "FREE CAMERA" FREE_CAMERA = "Free Camera" ANALOG_CAMERA = "Analog Camera" +FREE_CAMERA_L_CENTERING = "L Centering" FREE_CAMERA_USE_DPAD = "DPad Behavior" FREE_CAMERA_COLLISION = "Camera Collisions" ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" diff --git a/src/game/bettercamera.inc.h b/src/game/bettercamera.inc.h index 37d9ddff1..563ac0be6 100644 --- a/src/game/bettercamera.inc.h +++ b/src/game/bettercamera.inc.h @@ -122,6 +122,7 @@ s16 newcam_saved_defmode = -1; u8 gFreeCameraUseDpad = FALSE; u8 gFreeCameraHasCollision = TRUE; u8 sFreeCameraDirectionLocked = FALSE; +u8 sFreeCameraLCentering = TRUE; extern bool gDjuiInMainMenu; @@ -201,6 +202,7 @@ void newcam_init_settings(void) { newcam_degrade = (f32)camera_config_get_deceleration(); gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); gFreeCameraHasCollision = (u8)camera_config_is_free_camera_collision_enabled(); + sFreeCameraLCentering = (u8)camera_config_get_centering(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -220,6 +222,7 @@ void newcam_init_settings_override(bool override) { newcam_degrade = (f32)camera_config_get_deceleration(); gFreeCameraUseDpad = (u8)camera_config_is_freecam_dpad_enabled(); gFreeCameraHasCollision = (u8)camera_config_is_free_camera_collision_enabled(); + sFreeCameraLCentering = configFreeCameraLCentering; // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -456,7 +459,7 @@ static void newcam_zoom_button(void) { newcam_distance = newcam_distance_target; } - if ((gPlayer1Controller->buttonDown & L_TRIG) && (newcam_modeflags & NC_FLAG_ZOOM)) { + if (sFreeCameraLCentering && (gPlayer1Controller->buttonDown & L_TRIG) && (newcam_modeflags & NC_FLAG_ZOOM)) { //When you press L, set the flag for centering the camera. Afterwards, start setting the yaw to the Player's yaw at the time. newcam_yaw_target = -gMarioStates[0].faceAngle[1]-0x4000; newcam_centering = 1; diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 8f864cccb..365dfb536 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -127,11 +127,10 @@ bool configUseStandardKeyBindingsChat = false; // free camera settings bool configEnableFreeCamera = false; bool configFreeCameraAnalog = false; +bool configFreeCameraLCentering = false; bool configFreeCameraDpadBehavior = false; bool configFreeCameraHasCollision = true; bool configCameraMouse = false; -bool configCameraInvertX = false; -bool configCameraInvertY = true; unsigned int configCameraXSens = 50; unsigned int configCameraYSens = 50; unsigned int configCameraAggr = 0; @@ -149,6 +148,9 @@ unsigned int configRomhackCameraZoomedInDist = 900; unsigned int configRomhackCameraZoomedOutDist = 1400; unsigned int configRomhackCameraZoomedInHeight = 300; unsigned int configRomhackCameraZoomedOutHeight = 450; +// common camera settings +bool configCameraInvertX = false; +bool configCameraInvertY = true; // debug bool configLuaProfiler = false; bool configDebugPrint = false; @@ -267,6 +269,7 @@ static const struct ConfigOption options[] = { // free camera settings {.name = "bettercam_enable", .type = CONFIG_TYPE_BOOL, .boolValue = &configEnableFreeCamera}, {.name = "bettercam_analog", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraAnalog}, + {.name = "bettercam_centering", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraLCentering}, {.name = "bettercam_dpad", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraDpadBehavior}, {.name = "bettercam_collision", .type = CONFIG_TYPE_BOOL, .boolValue = &configFreeCameraHasCollision}, {.name = "bettercam_mouse_look", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraMouse}, diff --git a/src/pc/configfile.h b/src/pc/configfile.h index b4bdfe9e0..22cf0c404 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -80,11 +80,10 @@ extern bool configUseStandardKeyBindingsChat; // free camera settings extern bool configEnableFreeCamera; extern bool configFreeCameraAnalog; +extern bool configFreeCameraLCentering; extern bool configFreeCameraDpadBehavior; extern bool configFreeCameraHasCollision; extern bool configCameraMouse; -extern bool configCameraInvertX; -extern bool configCameraInvertY; extern unsigned int configCameraXSens; extern unsigned int configCameraYSens; extern unsigned int configCameraAggr; @@ -102,6 +101,9 @@ extern unsigned int configRomhackCameraZoomedInDist; extern unsigned int configRomhackCameraZoomedOutDist; extern unsigned int configRomhackCameraZoomedInHeight; extern unsigned int configRomhackCameraZoomedOutHeight; +// common camera settings +extern bool configCameraInvertX; +extern bool configCameraInvertY; // debug extern bool configLuaProfiler; extern bool configDebugPrint; diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index b279c3db0..3dfe96c5d 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -21,6 +21,7 @@ void djui_panel_free_camera_create(struct DjuiBase* caller) { { djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA), &configEnableFreeCamera, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, ANALOG_CAMERA), &configFreeCameraAnalog, djui_panel_free_camera_value_changed); + djui_checkbox_create(body, DLANG(CAMERA, ROMHACK_CAMERA_L_CENTERING), &configFreeCameraLCentering, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_USE_DPAD), &configFreeCameraDpadBehavior, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, FREE_CAMERA_COLLISION), &configFreeCameraHasCollision, djui_panel_free_camera_value_changed); djui_checkbox_create(body, DLANG(CAMERA, MOUSE_LOOK), &configCameraMouse, djui_panel_free_camera_value_changed); diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index edb431514..38763d726 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -27474,6 +27474,23 @@ int smlua_func_camera_config_enable_camera_collisions(lua_State* L) { return 1; } +int smlua_func_camera_config_enable_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_config_enable_centering", 1, top); + return 0; + } + + bool enable = smlua_to_boolean(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_config_enable_centering"); return 0; } + + camera_config_enable_centering(enable); + + return 1; +} + int smlua_func_camera_config_enable_free_cam(lua_State* L) { if (L == NULL) { return 0; } @@ -27540,6 +27557,21 @@ int smlua_func_camera_config_get_aggression(UNUSED lua_State* L) { return 1; } +int smlua_func_camera_config_get_centering(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_config_get_centering", 0, top); + return 0; + } + + + lua_pushboolean(L, camera_config_get_centering()); + + return 1; +} + int smlua_func_camera_config_get_deceleration(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -33840,10 +33872,12 @@ void smlua_bind_functions_autogen(void) { 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_camera_collisions", smlua_func_camera_config_enable_camera_collisions); + smlua_bind_function(L, "camera_config_enable_centering", smlua_func_camera_config_enable_centering); smlua_bind_function(L, "camera_config_enable_free_cam", smlua_func_camera_config_enable_free_cam); smlua_bind_function(L, "camera_config_enable_freecam_dpad", smlua_func_camera_config_enable_freecam_dpad); 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_centering", smlua_func_camera_config_get_centering); 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); diff --git a/src/pc/lua/utils/smlua_camera_utils.c b/src/pc/lua/utils/smlua_camera_utils.c index 81f208405..0b05b510f 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -12,6 +12,7 @@ static struct CameraOverride sOverrideCameraInvertY = { 0 }; static struct CameraOverride sOverrideEnableCamera = { 0 }; static struct CameraOverride sOverrideCameraAnalog = { 0 }; static struct CameraOverride sOverrideCameraMouse = { 0 }; +static struct CameraOverride sOverrideCameraLCentering = { 0 }; static struct CameraOverride sOverrideCameraFreecamDpad = { 0 }; static struct CameraOverride sOverrideCameraFreecamCollision = { 0 }; static struct CameraOverride sOverrideCameraRomhackZoomedInDist = { 0 }; @@ -30,6 +31,7 @@ void camera_reset_overrides(void) { sOverrideEnableCamera.override = false; sOverrideCameraAnalog.override = false; sOverrideCameraMouse.override = false; + sOverrideCameraLCentering.override = false; sOverrideCameraFreecamDpad.override = false; sOverrideCameraFreecamCollision.override = false; sOverrideCameraRomhackZoomedInDist.override = false; @@ -174,6 +176,10 @@ u32 camera_config_get_deceleration(void) { return sOverrideCameraDegrade.override ? sOverrideCameraDegrade.value : configCameraDegrade; } +bool camera_config_get_centering(void) { + return sOverrideCameraLCentering.override ? sOverrideCameraLCentering.value : configCameraDegrade; +} + void camera_config_enable_free_cam(bool enable) { sOverrideEnableCamera.value = enable; sOverrideEnableCamera.override = true; @@ -186,6 +192,12 @@ void camera_config_enable_analog_cam(bool enable) { newcam_init_settings(); } +void camera_config_enable_centering(bool enable) { + sOverrideCameraLCentering.value = enable; + sOverrideCameraLCentering.override = true; + newcam_init_settings(); +} + void camera_config_enable_freecam_dpad(bool enable) { sOverrideCameraFreecamDpad.value = enable; sOverrideCameraFreecamDpad.override = true; diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index 2e0baead5..f6274a3f0 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -85,11 +85,15 @@ u32 camera_config_get_aggression(void); u32 camera_config_get_pan_level(void); /* |description|Gets camera deceleration|descriptionEnd| */ u32 camera_config_get_deceleration(void); +/* |description|Gets if the L button will center the camera|descriptionEnd| */ +bool camera_config_get_centering(void); /* |description|Overrides if Free Camera is enabled|descriptionEnd| */ void camera_config_enable_free_cam(bool enable); /* |description|Overrides if Analog Camera is enabled|descriptionEnd| */ void camera_config_enable_analog_cam(bool enable); +/* |description|Overrides if the L button will center the camera|descriptionEnd| */ +void camera_config_enable_centering(bool enable); /* |description|Overrides if Freecam DPad Behavior is enabled|descriptionEnd| */ void camera_config_enable_freecam_dpad(bool enable); /* |description|Overrides if Camera Collision is enabled|descriptionEnd| */ From f84aade46f204ba7d6ee9d60aad895df99f3741e Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:45:46 -0500 Subject: [PATCH 13/13] Isaac's suggestions --- autogen/lua_definitions/functions.lua | 8 ++++---- docs/lua/functions-5.md | 8 ++++---- mods/hide-and-seek.lua | 9 +++++++-- src/game/camera.c | 6 +++--- src/pc/lua/utils/smlua_camera_utils.h | 8 ++++---- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index f3321230f..18884ed3b 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -9122,25 +9122,25 @@ function camera_romhack_get_zoomed_out_height() end --- @param val integer ---- Sets the romhack camera's zoomed in distance, between 700 and 1200 units +--- Sets the romhack camera's zoomed in distance, between 700 and 1200 units (Default: 900) function camera_romhack_set_zoomed_in_dist(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed in height, between 150 and 500 units +--- Sets the romhack camera's zoomed in height, between 150 and 500 units (Default: 300) function camera_romhack_set_zoomed_in_height(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed out additional distance, between 100 and 600 units +--- Sets the romhack camera's zoomed out additional distance, between 100 and 600 units (Default: 500) function camera_romhack_set_zoomed_out_dist(val) -- ... end --- @param val integer ---- Sets the romhack camera's zoomed out additional height, between 100 and 500 units +--- Sets the romhack camera's zoomed out additional height, between 100 and 500 units (Default: 150) function camera_romhack_set_zoomed_out_height(val) -- ... end diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 9b5563092..102e0fd25 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -7716,7 +7716,7 @@ Gets the romhack camera's additional zoomed out height ## [camera_romhack_set_zoomed_in_dist](#camera_romhack_set_zoomed_in_dist) ### Description -Sets the romhack camera's zoomed in distance, between 700 and 1200 units +Sets the romhack camera's zoomed in distance, between 700 and 1200 units (Default: 900) ### Lua Example `camera_romhack_set_zoomed_in_dist(val)` @@ -7739,7 +7739,7 @@ Sets the romhack camera's zoomed in distance, between 700 and 1200 units ## [camera_romhack_set_zoomed_in_height](#camera_romhack_set_zoomed_in_height) ### Description -Sets the romhack camera's zoomed in height, between 150 and 500 units +Sets the romhack camera's zoomed in height, between 150 and 500 units (Default: 300) ### Lua Example `camera_romhack_set_zoomed_in_height(val)` @@ -7762,7 +7762,7 @@ Sets the romhack camera's zoomed in height, between 150 and 500 units ## [camera_romhack_set_zoomed_out_dist](#camera_romhack_set_zoomed_out_dist) ### Description -Sets the romhack camera's zoomed out additional distance, between 100 and 600 units +Sets the romhack camera's zoomed out additional distance, between 100 and 600 units (Default: 500) ### Lua Example `camera_romhack_set_zoomed_out_dist(val)` @@ -7785,7 +7785,7 @@ Sets the romhack camera's zoomed out additional distance, between 100 and 600 un ## [camera_romhack_set_zoomed_out_height](#camera_romhack_set_zoomed_out_height) ### Description -Sets the romhack camera's zoomed out additional height, between 100 and 500 units +Sets the romhack camera's zoomed out additional height, between 100 and 500 units (Default: 150) ### Lua Example `camera_romhack_set_zoomed_out_height(val)` diff --git a/mods/hide-and-seek.lua b/mods/hide-and-seek.lua index 7d9bb8779..e5e3959c6 100644 --- a/mods/hide-and-seek.lua +++ b/mods/hide-and-seek.lua @@ -137,8 +137,13 @@ local function update() server_update() end - -- Force free camera collisions + -- Force several camera configs camera_config_enable_camera_collisions(true) + rom_hack_cam_set_collisions(1) + camera_romhack_set_zoomed_in_dist(900) + camera_romhack_set_zoomed_out_dist(1400) + camera_romhack_set_zoomed_in_height(300) + camera_romhack_set_zoomed_out_height(450) end local function screen_transition(trans) @@ -229,7 +234,7 @@ local function mario_update(m) end -- pu prevention - if m.playerIndex == 0 and (m.pos.x > 32767 or m.pos.x < -32768 or m.pos.z > 32767 or m.pos.z < -32768) then + if m.playerIndex == 0 and (m.pos.x > 0x7FFF or m.pos.x < -0x8000 or m.pos.z > 0x7FFF or m.pos.z < -0x8000) then s.seeking = true warp_restart_level() end diff --git a/src/game/camera.c b/src/game/camera.c index 6008dd22f..37b5155e4 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -3118,11 +3118,11 @@ static void update_romhack_camera_override(struct Camera *c) { } if (gIsDemoActive) { return; } - if ((!(gOverrideRomhackCamera == RCO_ALL_INCLUDING_VANILLA || gOverrideRomhackCamera == RCO_ALL_VANILLA_EXCEPT_BOWSER)) && - dynos_level_is_vanilla_level(gCurrLevelNum)) { + if ((gOverrideRomhackCamera != RCO_ALL_INCLUDING_VANILLA && gOverrideRomhackCamera != RCO_ALL_VANILLA_EXCEPT_BOWSER) && + dynos_level_is_vanilla_level(gCurrLevelNum)) { return; } else if ((gOverrideRomhackCamera == RCO_ALL_EXCEPT_BOWSER || gOverrideRomhackCamera == RCO_ALL_VANILLA_EXCEPT_BOWSER) && - (gCurrLevelNum == LEVEL_BOWSER_1 || gCurrLevelNum == LEVEL_BOWSER_2 || gCurrLevelNum == LEVEL_BOWSER_3)) { + (gCurrLevelNum == LEVEL_BOWSER_1 || gCurrLevelNum == LEVEL_BOWSER_2 || gCurrLevelNum == LEVEL_BOWSER_3)) { if (c->mode == CAMERA_MODE_ROM_HACK) { c->mode = c->defMode; set_camera_mode(c, c->defMode, 0); diff --git a/src/pc/lua/utils/smlua_camera_utils.h b/src/pc/lua/utils/smlua_camera_utils.h index f6274a3f0..88c28b604 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -32,13 +32,13 @@ This enables or disables specific collision behaviors in modded levels |descriptionEnd| */ void rom_hack_cam_set_collisions(u8 enable); -/* |description|Sets the romhack camera's zoomed in distance, between 700 and 1200 units|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed in distance, between 700 and 1200 units (Default: 900)|descriptionEnd| */ void camera_romhack_set_zoomed_in_dist(u32 val); -/* |description|Sets the romhack camera's zoomed out additional distance, between 100 and 600 units|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed out additional distance, between 100 and 600 units (Default: 500)|descriptionEnd| */ void camera_romhack_set_zoomed_out_dist(u32 val); -/* |description|Sets the romhack camera's zoomed in height, between 150 and 500 units|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed in height, between 150 and 500 units (Default: 300)|descriptionEnd| */ void camera_romhack_set_zoomed_in_height(u32 val); -/* |description|Sets the romhack camera's zoomed out additional height, between 100 and 500 units|descriptionEnd| */ +/* |description|Sets the romhack camera's zoomed out additional height, between 100 and 500 units (Default: 150)|descriptionEnd| */ void camera_romhack_set_zoomed_out_height(u32 val); /* |description|Gets the romhack camera's zoomed in distance|descriptionEnd| */