From edacdcc7e42cb9d015e002053268454add8b94c6 Mon Sep 17 00:00:00 2001 From: Sunk <69110309+Sunketchupm@users.noreply.github.com> Date: Thu, 13 Mar 2025 23:01:51 -0400 Subject: [PATCH] More settings to the Camera settings menu (#555) Sherbie's suggestions from #497 and #538, as well as suggestions from others on discord. Add 2 new camera settings to free camera, being camera collision and dpad usage. Add an entire new camera submenu for romhack camera, which are now no longer exclusive to romhacks. --- autogen/convert_functions.py | 2 +- autogen/lua_definitions/constants.lua | 9 + autogen/lua_definitions/functions.lua | 141 ++++- autogen/lua_definitions/structs.lua | 12 + docs/lua/constants.md | 3 + docs/lua/functions-3.md | 46 +- docs/lua/functions-5.md | 751 ++++++++++++++++---------- docs/lua/functions-6.md | 290 ++++++++++ docs/lua/functions.md | 47 +- docs/lua/structs.md | 20 + lang/Czech.ini | 16 + lang/Dutch.ini | 16 + lang/English.ini | 16 + lang/French.ini | 16 + lang/German.ini | 16 + lang/Italian.ini | 16 + lang/Japanese.ini | 16 + lang/Polish.ini | 16 + lang/Portuguese.ini | 16 + lang/Russian.ini | 16 + lang/Spanish.ini | 16 + mods/hide-and-seek.lua | 22 +- src/game/bettercamera.h | 3 + src/game/bettercamera.inc.h | 75 ++- src/game/camera.c | 96 +++- src/game/camera.h | 35 +- src/pc/configfile.c | 43 +- src/pc/configfile.h | 24 +- src/pc/djui/djui_panel_camera.c | 68 ++- src/pc/djui/djui_panel_camera.h | 3 +- src/pc/lua/smlua_cobject_autogen.c | 15 + src/pc/lua/smlua_cobject_autogen.h | 1 + src/pc/lua/smlua_constants_autogen.c | 3 + src/pc/lua/smlua_functions_autogen.c | 390 ++++++++++++- src/pc/lua/utils/smlua_camera_utils.c | 126 ++++- src/pc/lua/utils/smlua_camera_utils.h | 51 +- src/pc/network/network.c | 5 +- 37 files changed, 1997 insertions(+), 460 deletions(-) diff --git a/autogen/convert_functions.py b/autogen/convert_functions.py index ef252cfb6..e545b8618 100644 --- a/autogen/convert_functions.py +++ b/autogen/convert_functions.py @@ -116,7 +116,7 @@ override_disallowed_functions = { "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", "romhack_camera_reset_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 8fa368ae2..e7a840861 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -2530,6 +2530,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 63dd1f7e5..ed9a7f276 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 @@ -3614,6 +3608,13 @@ function skip_camera_interpolation() -- ... 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, etc.) +function snap_to_45_degrees(angle) + -- ... +end + --- @param c Camera --- Resets the camera's state while retaining some settings, such as position or mode. This is often used when soft-resetting gameplay without reinitialization function soft_reset_camera(c) @@ -8884,12 +8885,30 @@ 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 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) -- ... 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) @@ -8901,6 +8920,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() -- ... @@ -8945,6 +8970,18 @@ function camera_config_is_free_cam_enabled() -- ... end +--- @return boolean +--- Checks if Camera Collision is enabled +function camera_config_is_free_camera_collision_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() @@ -8998,12 +9035,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() @@ -9016,7 +9065,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 @@ -9027,6 +9076,78 @@ function camera_romhack_allow_dpad_usage(allow) -- ... end +--- @param allow integer +--- Sets if only mods are allowed to modify the camera (Enabling prevents the player from modifying the camera through the settings) +function camera_romhack_allow_only_mods(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 + +--- @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 (Default: 900) +function camera_romhack_set_zoomed_in_dist(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed in height (Default: 300) +function camera_romhack_set_zoomed_in_height(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed out additional distance (Default: 500) +function camera_romhack_set_zoomed_out_dist(val) + -- ... +end + +--- @param val integer +--- Sets the romhack camera's zoomed out additional height (Default: 150) +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) @@ -9044,6 +9165,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/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua index d5c730bcb..d61b72bc7 100644 --- a/autogen/lua_definitions/structs.lua +++ b/autogen/lua_definitions/structs.lua @@ -2197,6 +2197,18 @@ --- @field public hitPos Vec3f --- @field public surface Surface +--- @class RomhackCameraSettings +--- @field public centering integer +--- @field public collisions integer +--- @field public dpad integer +--- @field public enable RomhackCameraOverride +--- @field public modsOnly integer +--- @field public slowFall integer +--- @field public zoomedInDist integer +--- @field public zoomedInHeight integer +--- @field public zoomedOutDist integer +--- @field public zoomedOutHeight integer + --- @class ServerSettings --- @field public bouncyLevelBounds BouncyLevelBounds --- @field public bubbleDeath integer diff --git a/docs/lua/constants.md b/docs/lua/constants.md index a31d1ca01..91480a8a1 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -843,6 +843,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 8f270e70e..260c58bbe 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 @@ -2240,6 +2217,29 @@ 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, etc.) + +### 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) ### Description diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 6d91f0674..579739aca 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -6838,6 +6838,52 @@ 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_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 @@ -6861,6 +6907,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 @@ -6902,6 +6971,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 @@ -7062,6 +7152,48 @@ Checks if Free Camera is enabled
+## [camera_config_is_free_camera_collision_enabled](#camera_config_is_free_camera_collision_enabled) + +### Description +Checks if Camera Collision is enabled + +### Lua Example +`local booleanValue = camera_config_is_free_camera_collision_enabled()` + +### Parameters +- None + +### Returns +- `boolean` + +### C Prototype +`bool camera_config_is_free_camera_collision_enabled(void);` + +[:arrow_up_small:](#) + +
+ +## [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 @@ -7261,6 +7393,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 @@ -7282,6 +7435,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 @@ -7327,7 +7501,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)` @@ -7370,6 +7544,268 @@ Sets if the romhack camera should allow D-Pad movement
+## [camera_romhack_allow_only_mods](#camera_romhack_allow_only_mods) + +### Description +Sets if only mods are allowed to modify the camera (Enabling prevents the player from modifying the camera through the settings) + +### Lua Example +`camera_romhack_allow_only_mods(allow)` + +### Parameters +| Field | Type | +| ----- | ---- | +| allow | `integer` | + +### Returns +- None + +### C Prototype +`void camera_romhack_allow_only_mods(u8 allow);` + +[:arrow_up_small:](#) + +
+ +## [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_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 (Default: 900) + +### 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 (Default: 300) + +### 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 (Default: 500) + +### 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 (Default: 150) + +### 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 @@ -7437,6 +7873,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 @@ -8210,296 +8669,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 bb3316d36..ce79dab48 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 b1c49c509..a0ecb56fc 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -685,7 +685,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) @@ -714,6 +713,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) @@ -1650,9 +1650,13 @@ - 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_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) @@ -1661,6 +1665,8 @@ - [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_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) - [camera_config_is_y_inverted](functions-5.md#camera_config_is_y_inverted) @@ -1670,14 +1676,29 @@ - [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_allow_only_mods](functions-5.md#camera_romhack_allow_only_mods) + - [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) + - [rom_hack_cam_set_collisions](functions-5.md#rom_hack_cam_set_collisions)
@@ -1726,18 +1747,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/docs/lua/structs.md b/docs/lua/structs.md index 40ede289e..a85b3feff 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -92,6 +92,7 @@ - [PlayerGeometry](#PlayerGeometry) - [PlayerPalette](#PlayerPalette) - [RayIntersectionInfo](#RayIntersectionInfo) +- [RomhackCameraSettings](#RomhackCameraSettings) - [SPTask](#SPTask) - [ServerSettings](#ServerSettings) - [SoundState](#SoundState) @@ -2971,6 +2972,25 @@
+## [RomhackCameraSettings](#RomhackCameraSettings) + +| Field | Type | Access | +| ----- | ---- | ------ | +| centering | `integer` | | +| collisions | `integer` | | +| dpad | `integer` | | +| enable | [enum RomhackCameraOverride](constants.md#enum-RomhackCameraOverride) | | +| modsOnly | `integer` | | +| slowFall | `integer` | | +| zoomedInDist | `integer` | | +| zoomedInHeight | `integer` | | +| zoomedOutDist | `integer` | | +| zoomedOutHeight | `integer` | | + +[:arrow_up_small:](#) + +
+ ## [ServerSettings](#ServerSettings) | Field | Type | Access | diff --git a/lang/Czech.ini b/lang/Czech.ini index 9ba4a2a65..ecb291b78 100644 --- a/lang/Czech.ini +++ b/lang/Czech.ini @@ -69,6 +69,22 @@ YES = "Ano" CAMERA = "KAMERA" FREE_CAMERA = "Volná kamera" ANALOG_CAMERA = "Analogová kamera" +FREE_CAMERA_TITLE = "KAMERA ZDARMA" +FREE_CAMERA_L_CENTERING = "L Centrování" +FREE_CAMERA_USE_DPAD = "Chování DPad" +FREE_CAMERA_COLLISION = "Kolize kamery" +ROMHACK_CAMERA_TITLE = "ROMHACK\KAMERA" +ROMHACK_CAMERA = "Romhack kamera" +ROMHACK_CAMERA_IN_BOWSER = "Použít v soubojích s Bowserem" +ROMHACK_CAMERA_COLLISION = "Kolize kamery" +ROMHACK_CAMERA_L_CENTERING = "L Centrování" +ROMHACK_CAMERA_USE_DPAD = "Chování DPadu" +ROMHACK_CAMERA_SLOW_FALL = "Pomalý pád" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Přiblížená vzdálenost" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Zvětšená vzdálenost“" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Přiblížená výška" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Zvětšená výška" +CAMERA_TOXIC_GAS = "Nastavení pro toxický plyn" MOUSE_LOOK = "Myš pro ovládání kamery" INVERT_X = "Převrátit X" INVERT_Y = "Převrátit Y" diff --git a/lang/Dutch.ini b/lang/Dutch.ini index 34e5388a9..7612dbaa6 100644 --- a/lang/Dutch.ini +++ b/lang/Dutch.ini @@ -69,6 +69,22 @@ YES = "Ja" CAMERA = "CAMERA" FREE_CAMERA = "Vrije Camera" ANALOG_CAMERA = "Analoge Camera" +FREE_CAMERA_TITLE = "GRATIS CAMERA" +FREE_CAMERA_L_CENTERING = "L Centreren" +FREE_CAMERA_USE_DPAD = "DPad-gedrag" +FREE_CAMERA_COLLISION = "Camera-botsingen" +ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" +ROMHACK_CAMERA = "Romhack Camera" +ROMHACK_CAMERA_IN_BOWSER = "Gebruik in Bowser-gevechten" +ROMHACK_CAMERA_COLLISION = "Camera botsingen" +ROMHACK_CAMERA_L_CENTERING = "L-centrering" +ROMHACK_CAMERA_USE_DPAD = "DPad gedrag" +ROMHACK_CAMERA_SLOW_FALL = "Langzame val" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Ingezoomde afstand" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Uitzoom afstand" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Ingezoomde hoogte" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Uitzoomhoogte" +CAMERA_TOXIC_GAS = "Aanpassen voor giftig gas" MOUSE_LOOK = "Muis Camera" INVERT_X = "Keer X om" INVERT_Y = "Keer Y om" diff --git a/lang/English.ini b/lang/English.ini index 596aba37c..fbe4e04e0 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -69,6 +69,22 @@ YES = "Yes" CAMERA = "CAMERA" FREE_CAMERA = "Free Camera" ANALOG_CAMERA = "Analog Camera" +FREE_CAMERA_TITLE = "FREE CAMERA" +FREE_CAMERA_L_CENTERING = "L Centering" +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" +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" INVERT_Y = "Invert Y" diff --git a/lang/French.ini b/lang/French.ini index e47bc1204..e6aa72c8d 100644 --- a/lang/French.ini +++ b/lang/French.ini @@ -69,6 +69,22 @@ YES = "Oui" CAMERA = "CAMÉRA" FREE_CAMERA = "Caméra Libre" ANALOG_CAMERA = "Caméra Analogique" +FREE_CAMERA_TITLE = "CAMÉRA LIBRE" +FREE_CAMERA_L_CENTERING = "Centrage en L" +FREE_CAMERA_USE_DPAD = "Comportement du DPAD" +FREE_CAMERA_COLLISION = "Collisions de la caméra" +ROMHACK_CAMERA_TITLE = "CAMÉRA\nROMHACK" +ROMHACK_CAMERA = "Caméra Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Utiliser dans les combats contre Bowser" +ROMHACK_CAMERA_COLLISION = "Collisions de caméra" +ROMHACK_CAMERA_L_CENTERING = "Centrage en L" +ROMHACK_CAMERA_USE_DPAD = "Comportement du DPAD" +ROMHACK_CAMERA_SLOW_FALL = "Chute lente" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Distance zoomée" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Distance zoomée" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Hauteur du zoom avant" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Hauteur du zoom arrière" +CAMERA_TOXIC_GAS = "Ajustement pour les gaz toxiques" MOUSE_LOOK = "Souris comme Caméra" INVERT_X = "Inverser l'axe X" INVERT_Y = "Inverser l'axe Y" diff --git a/lang/German.ini b/lang/German.ini index 0323a78d2..ea612a579 100644 --- a/lang/German.ini +++ b/lang/German.ini @@ -69,6 +69,22 @@ YES = "Ja" CAMERA = "KAMERA" FREE_CAMERA = "Freie Kamera" ANALOG_CAMERA = "Analoge Kamera" +FREE_CAMERA_TITLE = "FREIE KAMERA" +FREE_CAMERA_L_CENTERING = "L-Zentrierung" +FREE_CAMERA_USE_DPAD = "DPad-Verhalten" +FREE_CAMERA_COLLISION = "Kamerakollisionen" +ROMHACK_CAMERA_TITLE = "ROMHACK\nKAMERA" +ROMHACK_CAMERA = "Romhack-Kamera" +ROMHACK_CAMERA_IN_BOWSER = "In Bowser-Kämpfen verwenden" +ROMHACK_CAMERA_COLLISION = "Kamerakollisionen" +ROMHACK_CAMERA_L_CENTERING = "L-Zentrierung" +ROMHACK_CAMERA_USE_DPAD = "DPad-Verhalten" +ROMHACK_CAMERA_SLOW_FALL = "Langsamer Fall" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Vergrößerter Abstand" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Herausgezoomte Entfernung" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Vergrößerte Höhe" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Herausgezoomte Höhe" +CAMERA_TOXIC_GAS = "Einstellung für giftige Gase" MOUSE_LOOK = "Mausansicht" INVERT_X = "X invertieren" INVERT_Y = "Y invertieren" diff --git a/lang/Italian.ini b/lang/Italian.ini index 4e774cf59..08f2551f0 100644 --- a/lang/Italian.ini +++ b/lang/Italian.ini @@ -69,6 +69,22 @@ YES = "Si" CAMERA = "TELECAMERA" FREE_CAMERA = "Telecamera libera" ANALOG_CAMERA = "Telecamera analogica" +FREE_CAMERA_TITLE = "FOTOCAMERA\nLIBERA" +FREE_CAMERA_L_CENTERING = "Centratura a L" +FREE_CAMERA_USE_DPAD = "Comportamento del DPad" +FREE_CAMERA_COLLISION = "Collisioni della telecamera" +ROMHACK_CAMERA_TITLE = "TELECAMERA\nROMHACK" +ROMHACK_CAMERA = "Telecamera Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Da usare nei combattimenti con Bowser" +ROMHACK_CAMERA_COLLISION = "Collisioni della telecamera" +ROMHACK_CAMERA_L_CENTERING = "Centratura a L" +ROMHACK_CAMERA_USE_DPAD = "Comportamento del DPad" +ROMHACK_CAMERA_SLOW_FALL = "Caduta lenta" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Distanza zoomata" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Distanza ingrandita" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Altezza ingrandita" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Altezza ingrandimento" +CAMERA_TOXIC_GAS = "Regola per i gas tossici" MOUSE_LOOK = "Telecamera con mouse" INVERT_X = "Inverti X" INVERT_Y = "Inverti Y" diff --git a/lang/Japanese.ini b/lang/Japanese.ini index e02d567ee..3395bfd2e 100644 --- a/lang/Japanese.ini +++ b/lang/Japanese.ini @@ -69,6 +69,22 @@ YES = "はい" CAMERA = "CAMERA" FREE_CAMERA = "フリーカメラ" ANALOG_CAMERA = "アナログカメラ" +FREE_CAMERA_TITLE = "FREE CAMERA" +FREE_CAMERA_L_CENTERING = "Lセンタリング" +FREE_CAMERA_USE_DPAD = "DPad の動作" +FREE_CAMERA_COLLISION = "カメラの衝突" +ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" +ROMHACK_CAMERA = "ロムハックカメラ" +ROMHACK_CAMERA_IN_BOWSER = "クッパ戦で使用" +ROMHACK_CAMERA_COLLISION = "カメラの衝突" +ROMHACK_CAMERA_L_CENTERING = "Lセンタリング" +ROMHACK_CAMERA_USE_DPAD = "DPad の動作" +ROMHACK_CAMERA_SLOW_FALL = "スローフォール" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "ズームイン距離" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "ズームアウトした距離" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "ズームした高さ" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "ズームアウトした高さ" +CAMERA_TOXIC_GAS = "有毒ガスの調整" MOUSE_LOOK = "マウスでの操作" INVERT_X = "X方向のカメラ反転" INVERT_Y = "Y方向のカメラ反転" diff --git a/lang/Polish.ini b/lang/Polish.ini index 80478d812..26141e4a6 100644 --- a/lang/Polish.ini +++ b/lang/Polish.ini @@ -69,6 +69,22 @@ YES = "Tak" CAMERA = "KAMERA" FREE_CAMERA = "Wolna Kamera" ANALOG_CAMERA = "Analogowa Kamera" +FREE_CAMERA_TITLE = "DARMOWA\nKAMERA" +FREE_CAMERA_L_CENTERING = "Wyśrodkowanie L" +FREE_CAMERA_USE_DPAD = "Zachowanie DPada" +FREE_CAMERA_COLLISION = "Kolizje kamery" +ROMHACK_CAMERA_TITLE = "KAMERA\nROMHACK" +ROMHACK_CAMERA = "Kamera Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Używaj w walkach z Bowserem" +ROMHACK_CAMERA_COLLISION = "Kolizje kamery" +ROMHACK_CAMERA_L_CENTERING = "Wyśrodkowanie L" +ROMHACK_CAMERA_USE_DPAD = "Zachowanie DPada" +ROMHACK_CAMERA_SLOW_FALL = "Powolne opadanie" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Powiększona odległość" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Powiększona odległość" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Powiększona wysokość" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Powiększona wysokość" +CAMERA_TOXIC_GAS = "Dostosuj dla toksycznego gazu" MOUSE_LOOK = "Patrzenie Myszą" INVERT_X = "Odwróć Oś X" INVERT_Y = "Odwróć Oś Y" diff --git a/lang/Portuguese.ini b/lang/Portuguese.ini index 1b2e16179..0b22b5e6d 100644 --- a/lang/Portuguese.ini +++ b/lang/Portuguese.ini @@ -69,6 +69,22 @@ YES = "Sim" CAMERA = "CÂMERA" FREE_CAMERA = "Câmera livre" ANALOG_CAMERA = "Câmera analógica" +FREE_CAMERA_TITLE = "CÂMARA LIVRE" +FREE_CAMERA_L_CENTERING = "Centragem em L" +FREE_CAMERA_USE_DPAD = "Comportamento do DPad" +FREE_CAMERA_COLLISION = "Colisões de Câmara" +ROMHACK_CAMERA_TITLE = "CÂMERA\nROMHACK" +ROMHACK_CAMERA = "Câmera Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Usar em combates com o Bowser" +ROMHACK_CAMERA_COLLISION = "Colisões de Câmara" +ROMHACK_CAMERA_L_CENTERING = "Centragem em L" +ROMHACK_CAMERA_USE_DPAD = "Comportamento do DPad" +ROMHACK_CAMERA_SLOW_FALL = "Queda lenta" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Distância de Ampliação" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Distância de zoom reduzido" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Altura da ampliação" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Altura da ampliação" +CAMERA_TOXIC_GAS = "Ajustar para gás tóxico" MOUSE_LOOK = "Movimento com mouse" INVERT_X = "Inverter eixo X" INVERT_Y = "Inverter eixo Y" diff --git a/lang/Russian.ini b/lang/Russian.ini index 8aa608004..a1dd39eea 100644 --- a/lang/Russian.ini +++ b/lang/Russian.ini @@ -69,6 +69,22 @@ YES = "Да" CAMERA = "CAMERA" FREE_CAMERA = "Свободная камера" ANALOG_CAMERA = "Аналоговая камера" +FREE_CAMERA_TITLE = "FREE CAMERA" +FREE_CAMERA_L_CENTERING = "Центрирование L" +FREE_CAMERA_USE_DPAD = "Поведение DPad" +FREE_CAMERA_COLLISION = "Коллизии камеры" +ROMHACK_CAMERA_TITLE = "ROMHACK\nCAMERA" +ROMHACK_CAMERA = "Камера Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Использовать в боях с Боузером" +ROMHACK_CAMERA_COLLISION = "Коллизии камеры" +ROMHACK_CAMERA_L_CENTERING = "Центрирование L" +ROMHACK_CAMERA_USE_DPAD = "Поведение DPad" +ROMHACK_CAMERA_SLOW_FALL = "Медленное падение" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Расстояние приближения" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Увеличенное расстояние" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Увеличенная высота" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Высота уменьшенного изображения" +CAMERA_TOXIC_GAS = "Настроить на токсичный газ" MOUSE_LOOK = "Использовать мышь" INVERT_X = "Инвертировать X" INVERT_Y = "Инвертировать Y" diff --git a/lang/Spanish.ini b/lang/Spanish.ini index 555eaad91..074c8bf44 100644 --- a/lang/Spanish.ini +++ b/lang/Spanish.ini @@ -69,6 +69,22 @@ YES = "Sí" CAMERA = "CÁMARA" FREE_CAMERA = "Cámara libre" ANALOG_CAMERA = "Cámara analógica" +FREE_CAMERA_TITLE = "CÁMARA LIBRE" +FREE_CAMERA_L_CENTERING = "Centrado L" +FREE_CAMERA_USE_DPAD = "Comportamiento del DPad" +FREE_CAMERA_COLLISION = "Colisiones de la cámara" +ROMHACK_CAMERA_TITLE = "CÁMARA\nROMHACK" +ROMHACK_CAMERA = "Cámara Romhack" +ROMHACK_CAMERA_IN_BOWSER = "Usar en peleas con Bowser" +ROMHACK_CAMERA_COLLISION = "Colisiones de cámara" +ROMHACK_CAMERA_L_CENTERING = "Centrado L" +ROMHACK_CAMERA_USE_DPAD = "Comportamiento del DPad" +ROMHACK_CAMERA_SLOW_FALL = "Caída lenta" +ROMHACK_CAMERA_ZOOMED_IN_DIST = "Distancia ampliada" +ROMHACK_CAMERA_ZOOMED_OUT_DIST = "Distancia de alejamiento" +ROMHACK_CAMERA_ZOOMED_IN_HEIGHT = "Altura ampliada" +ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT = "Altura de reducción" +CAMERA_TOXIC_GAS = "Ajuste para gases tóxicos" MOUSE_LOOK = "Movimiento con mouse" INVERT_X = "Invertir eje X" INVERT_Y = "Invertir eje Y" diff --git a/mods/hide-and-seek.lua b/mods/hide-and-seek.lua index 121a53f7c..e5e3959c6 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 @@ -138,6 +136,14 @@ local function update() if network_is_server() then server_update() end + + -- 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) @@ -228,17 +234,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 > 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/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 673fc8de8..ddd672e63 100644 --- a/src/game/bettercamera.inc.h +++ b/src/game/bettercamera.inc.h @@ -119,6 +119,11 @@ u16 newcam_modeflags; s16 newcam_saved_mode = -1; s16 newcam_saved_defmode = -1; +u8 gFreeCameraUseDpad = FALSE; +u8 gFreeCameraHasCollision = TRUE; +u8 sFreeCameraDirectionLocked = FALSE; +u8 sFreeCameraLCentering = TRUE; + extern bool gDjuiInMainMenu; ///This is called at every level initialisation. @@ -186,15 +191,18 @@ 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_free_camera_collision_enabled(); + sFreeCameraLCentering = (u8)camera_config_get_centering(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -203,15 +211,18 @@ 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_free_camera_collision_enabled(); + sFreeCameraLCentering = (u8)camera_config_get_centering(); // setup main menu camera if (gDjuiInMainMenu) { newcam_tilt = 5; } @@ -288,6 +299,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. @@ -402,9 +414,30 @@ 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; } + + // 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) { @@ -426,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; @@ -692,7 +725,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.c b/src/game/camera.c index 384014880..3a8046607 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -43,10 +43,33 @@ static u8 sSoftResettingCamera = FALSE; u8 gCameraUseCourseSpecificSettings = TRUE; u8 gOverrideFreezeCamera = FALSE; -enum RomhackCameraOverride gOverrideRomhackCamera = RCO_ALL; -u8 gRomhackCameraAllowCentering = TRUE; u8 gOverrideAllowToxicGasCamera = FALSE; -u8 gRomhackCameraAllowDpad = FALSE; + +struct RomhackCameraSettings gRomhackCameraSettings = { + .enable = RCO_ALL, + .centering = FALSE, + .collisions = FALSE, + .dpad = FALSE, + .slowFall = TRUE, + .zoomedInDist = 900, + .zoomedOutDist = 1400, + .zoomedInHeight = 300, + .zoomedOutHeight = 450, + .modsOnly = FALSE +}; + +void romhack_camera_reset_settings(void) { + gRomhackCameraSettings.enable = RCO_ALL; + gRomhackCameraSettings.centering = FALSE; + gRomhackCameraSettings.collisions = FALSE; + gRomhackCameraSettings.dpad = FALSE; + gRomhackCameraSettings.slowFall = TRUE; + gRomhackCameraSettings.zoomedInDist = 900; + gRomhackCameraSettings.zoomedOutDist = 1400; + gRomhackCameraSettings.zoomedInHeight = 300; + gRomhackCameraSettings.zoomedOutHeight = 450; + gRomhackCameraSettings.modsOnly = FALSE; +} /** * @file camera.c @@ -3108,18 +3131,33 @@ 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; } + if (gRomhackCameraSettings.enable == RCO_NONE) { return; } + else if (gRomhackCameraSettings.enable == RCO_DISABLE) { + c->mode = c->defMode; + set_camera_mode(c, c->defMode, 0); + gRomhackCameraSettings.enable = 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) { + if ((gRomhackCameraSettings.enable != RCO_ALL_INCLUDING_VANILLA && gRomhackCameraSettings.enable != RCO_ALL_VANILLA_EXCEPT_BOWSER) && + dynos_level_is_vanilla_level(gCurrLevelNum)) { + return; + } else if ((gRomhackCameraSettings.enable == RCO_ALL_EXCEPT_BOWSER || gRomhackCameraSettings.enable == 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; + } else { + if (c->mode == CAMERA_MODE_BOSS_FIGHT) { + set_camera_mode(c, CAMERA_MODE_ROM_HACK, 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 +3670,7 @@ void init_camera(struct Camera *c) { newcam_init(c, sSoftResettingCamera); newcam_init_settings(); + romhack_camera_init_settings(); sSoftResettingCamera = FALSE; } @@ -12142,7 +12181,6 @@ static u8 sRomHackZoom = 1; static s8 sRomHackIsUpdate = 0; static f32 sRomHackWaterFocus = 0; static f32 sRomHackWaterPitchOffset = 0; -u8 gRomHackCamSetCollisions = TRUE; s32 snap_to_45_degrees(s16 angle) { if (angle % DEGREES(45)) { @@ -12159,14 +12197,27 @@ 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) { + if (gRomhackCameraSettings.modsOnly) { return; } + enum RomhackCameraOverride override = configEnableRomhackCamera ? + (configRomhackCameraBowserFights ? RCO_ALL_INCLUDING_VANILLA : RCO_ALL_VANILLA_EXCEPT_BOWSER) : RCO_DISABLE; + gRomhackCameraSettings.enable = override; + gCameraUseCourseSpecificSettings = (override == RCO_DISABLE && dynos_level_is_vanilla_level(gCurrLevelNum)); + gRomhackCameraSettings.collisions = configRomhackCameraHasCollision; + gRomhackCameraSettings.centering = configRomhackCameraHasCentering; + gRomhackCameraSettings.dpad = configRomhackCameraDpadBehavior; + gOverrideAllowToxicGasCamera = configCameraToxicGas; + gRomhackCameraSettings.slowFall = configRomhackCameraSlowFall; + gRomhackCameraSettings.zoomedInDist = configRomhackCameraZoomedInDist; + gRomhackCameraSettings.zoomedOutDist = configRomhackCameraZoomedOutDist; + gRomhackCameraSettings.zoomedInHeight = configRomhackCameraZoomedInHeight; + gRomhackCameraSettings.zoomedOutHeight = configRomhackCameraZoomedOutHeight; } static u8 rom_hack_cam_can_see_mario(Vec3f desiredPos) { // do collision checking struct Surface *surf = NULL; - if (!gRomHackCamSetCollisions) { + if (!gRomhackCameraSettings.collisions) { return true; } @@ -12306,7 +12357,7 @@ void mode_rom_hack_camera(struct Camera *c) { } // Thank you hackersm64 - if (gRomhackCameraAllowDpad) { + if (gRomhackCameraSettings.dpad) { if (gMarioStates[0].controller->buttonPressed & U_JPAD) { sRomHackYaw = DEGREES(180 + 90) - gMarioStates[0].faceAngle[1]; } else if (gMarioStates[0].controller->buttonDown & L_JPAD) { @@ -12319,12 +12370,12 @@ void mode_rom_hack_camera(struct Camera *c) { } // center - if (gMarioStates[0].controller->buttonPressed & L_TRIG && gRomhackCameraAllowCentering) { + if (gMarioStates[0].controller->buttonPressed & L_TRIG && gRomhackCameraSettings.centering) { center_rom_hack_camera(); } // clamp yaw - if (!gRomhackCameraAllowDpad) { + if (!gRomhackCameraSettings.dpad) { sRomHackYaw = (sRomHackYaw / DEGREES(45)) * DEGREES(45); } @@ -12335,8 +12386,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 ? gRomhackCameraSettings.zoomedInDist : gRomhackCameraSettings.zoomedInDist + gRomhackCameraSettings.zoomedOutDist; + f32 desiredHeight = sRomHackZoom ? gRomhackCameraSettings.zoomedInHeight : gRomhackCameraSettings.zoomedInHeight + gRomhackCameraSettings.zoomedOutHeight; f32* mPos = &gMarioStates[0].pos[0]; pos[0] = mPos[0] + coss(sRomHackYaw) * desiredDist; pos[1] = mPos[1] + desiredHeight; @@ -12381,12 +12432,14 @@ void mode_rom_hack_camera(struct Camera *c) { // tween c->pos[0] = c->pos[0] * 0.6 + oldPos[0] * 0.4; - { + if (gRomhackCameraSettings.slowFall) { 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; @@ -12404,6 +12457,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) { @@ -12430,9 +12485,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]; diff --git a/src/game/camera.h b/src/game/camera.h index 8918aa091..ffda0647a 100644 --- a/src/game/camera.h +++ b/src/game/camera.h @@ -14,13 +14,27 @@ enum RomhackCameraOverride { RCO_ALL, RCO_ALL_EXCEPT_BOWSER, RCO_NONE, + RCO_ALL_INCLUDING_VANILLA, + RCO_ALL_VANILLA_EXCEPT_BOWSER, + RCO_DISABLE }; +struct RomhackCameraSettings { + enum RomhackCameraOverride enable; + u8 centering; + u8 dpad; + u8 collisions; + u8 slowFall; + u32 zoomedInDist; + u32 zoomedOutDist; + u32 zoomedInHeight; + u32 zoomedOutHeight; + u8 modsOnly; +}; +extern struct RomhackCameraSettings gRomhackCameraSettings; + extern u8 gOverrideFreezeCamera; -extern enum RomhackCameraOverride gOverrideRomhackCamera; -extern u8 gRomhackCameraAllowCentering; extern u8 gOverrideAllowToxicGasCamera; -extern u8 gRomhackCameraAllowDpad; /** * @file camera.h @@ -1234,22 +1248,25 @@ This is useful for predefined static views in specific areas |descriptionEnd| */ s32 set_camera_mode_fixed(struct Camera* c, s16 x, s16 y, s16 z); +/* |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, etc.) +|descriptionEnd| */ +s32 snap_to_45_degrees(s16 angle); + /* |description| Toggles whether the camera uses course-specific settings. This is useful for enabling or disabling custom behaviors in specific courses or areas |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); +void romhack_camera_reset_settings(void); + #endif // CAMERA_H diff --git a/src/pc/configfile.c b/src/pc/configfile.c index 3acd300f2..440b6160b 100644 --- a/src/pc/configfile.c +++ b/src/pc/configfile.c @@ -126,16 +126,32 @@ bool configBackgroundGamepad = true; bool configDisableGamepads = false; bool configUseStandardKeyBindingsChat = false; // free camera settings -bool configEnableCamera = false; -bool configCameraAnalog = false; +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; 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 configRomhackCameraSlowFall = true; +bool configCameraToxicGas = true; +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; @@ -253,8 +269,11 @@ 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_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}, {.name = "bettercam_invertx", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertX}, {.name = "bettercam_inverty", .type = CONFIG_TYPE_BOOL, .boolValue = &configCameraInvertY}, @@ -263,6 +282,18 @@ 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_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 cbefa1f39..cf88e88b7 100644 --- a/src/pc/configfile.h +++ b/src/pc/configfile.h @@ -78,16 +78,32 @@ extern bool configBackgroundGamepad; extern bool configDisableGamepads; extern bool configUseStandardKeyBindingsChat; // free camera settings -extern bool configEnableCamera; -extern bool configCameraAnalog; +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; 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 configRomhackCameraSlowFall; +extern bool configCameraToxicGas; +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 9cc35aa95..b89906631 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -7,27 +7,69 @@ #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(); } -void djui_panel_camera_create(struct DjuiBase* caller) { - struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CAMERA, CAMERA), false); +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_TITLE), 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, 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_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); + 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_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); + 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, ROMHACK_CAMERA_SLOW_FALL), &configRomhackCameraSlowFall, djui_panel_romhack_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_DIST), &configRomhackCameraZoomedInDist, 700, 1200, djui_panel_romhack_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_DIST), &configRomhackCameraZoomedOutDist, 100, 600, djui_panel_romhack_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_IN_HEIGHT), &configRomhackCameraZoomedInHeight, 150, 500, djui_panel_romhack_camera_value_changed); + djui_slider_create(body, DLANG(CAMERA, ROMHACK_CAMERA_ZOOMED_OUT_HEIGHT), &configRomhackCameraZoomedOutHeight, 100, 500, 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_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_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index b727936ab..0a0f09049 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -2545,6 +2545,20 @@ static struct LuaObjectField sRayIntersectionInfoFields[LUA_RAY_INTERSECTION_INF { "surface", LVT_COBJECT_P, offsetof(struct RayIntersectionInfo, surface), false, LOT_SURFACE, 1, sizeof(struct Surface*) }, }; +#define LUA_ROMHACK_CAMERA_SETTINGS_FIELD_COUNT 10 +static struct LuaObjectField sRomhackCameraSettingsFields[LUA_ROMHACK_CAMERA_SETTINGS_FIELD_COUNT] = { + { "centering", LVT_U8, offsetof(struct RomhackCameraSettings, centering), false, LOT_NONE, 1, sizeof(u8) }, + { "collisions", LVT_U8, offsetof(struct RomhackCameraSettings, collisions), false, LOT_NONE, 1, sizeof(u8) }, + { "dpad", LVT_U8, offsetof(struct RomhackCameraSettings, dpad), false, LOT_NONE, 1, sizeof(u8) }, + { "enable", LVT_S32, offsetof(struct RomhackCameraSettings, enable), false, LOT_NONE, 1, sizeof(enum RomhackCameraOverride) }, + { "modsOnly", LVT_U8, offsetof(struct RomhackCameraSettings, modsOnly), false, LOT_NONE, 1, sizeof(u8) }, + { "slowFall", LVT_U8, offsetof(struct RomhackCameraSettings, slowFall), false, LOT_NONE, 1, sizeof(u8) }, + { "zoomedInDist", LVT_U32, offsetof(struct RomhackCameraSettings, zoomedInDist), false, LOT_NONE, 1, sizeof(u32) }, + { "zoomedInHeight", LVT_U32, offsetof(struct RomhackCameraSettings, zoomedInHeight), false, LOT_NONE, 1, sizeof(u32) }, + { "zoomedOutDist", LVT_U32, offsetof(struct RomhackCameraSettings, zoomedOutDist), false, LOT_NONE, 1, sizeof(u32) }, + { "zoomedOutHeight", LVT_U32, offsetof(struct RomhackCameraSettings, zoomedOutHeight), false, LOT_NONE, 1, sizeof(u32) }, +}; + #define LUA_SERVER_SETTINGS_FIELD_COUNT 13 static struct LuaObjectField sServerSettingsFields[LUA_SERVER_SETTINGS_FIELD_COUNT] = { { "bouncyLevelBounds", LVT_S32, offsetof(struct ServerSettings, bouncyLevelBounds), false, LOT_NONE, 1, sizeof(enum BouncyLevelBounds) }, @@ -2867,6 +2881,7 @@ struct LuaObjectTable sLuaObjectAutogenTable[LOT_AUTOGEN_MAX - LOT_AUTOGEN_MIN] { LOT_PLAYERGEOMETRY, sPlayerGeometryFields, LUA_PLAYER_GEOMETRY_FIELD_COUNT }, { LOT_PLAYERPALETTE, sPlayerPaletteFields, LUA_PLAYER_PALETTE_FIELD_COUNT }, { LOT_RAYINTERSECTIONINFO, sRayIntersectionInfoFields, LUA_RAY_INTERSECTION_INFO_FIELD_COUNT }, + { LOT_ROMHACKCAMERASETTINGS, sRomhackCameraSettingsFields, LUA_ROMHACK_CAMERA_SETTINGS_FIELD_COUNT }, { LOT_SERVERSETTINGS, sServerSettingsFields, LUA_SERVER_SETTINGS_FIELD_COUNT }, { LOT_SOUNDSTATE, sSoundStateFields, LUA_SOUND_STATE_FIELD_COUNT }, { LOT_SPAWNINFO, sSpawnInfoFields, LUA_SPAWN_INFO_FIELD_COUNT }, diff --git a/src/pc/lua/smlua_cobject_autogen.h b/src/pc/lua/smlua_cobject_autogen.h index 980ac0736..3a2cd4bd2 100644 --- a/src/pc/lua/smlua_cobject_autogen.h +++ b/src/pc/lua/smlua_cobject_autogen.h @@ -106,6 +106,7 @@ enum LuaObjectAutogenType { LOT_PLAYERGEOMETRY, LOT_PLAYERPALETTE, LOT_RAYINTERSECTIONINFO, + LOT_ROMHACKCAMERASETTINGS, LOT_SERVERSETTINGS, LOT_SOUNDSTATE, LOT_SPAWNINFO, diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index 250bef1e8..ff8753821 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -837,6 +837,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 5a8a59b4d..9984421fc 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; } @@ -11716,6 +11699,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; } @@ -27476,6 +27476,40 @@ 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_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; } @@ -27493,6 +27527,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; } @@ -27525,6 +27576,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; } @@ -27649,6 +27715,36 @@ int smlua_func_camera_config_is_free_cam_enabled(UNUSED lua_State* L) { return 1; } +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_camera_collision_enabled", 0, top); + return 0; + } + + + lua_pushboolean(L, camera_config_is_free_camera_collision_enabled()); + + 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; } @@ -27794,6 +27890,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; } @@ -27809,6 +27920,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; } @@ -27873,6 +27999,196 @@ int smlua_func_camera_romhack_allow_dpad_usage(lua_State* L) { return 1; } +int smlua_func_camera_romhack_allow_only_mods(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 1) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "camera_romhack_allow_only_mods", 1, top); + return 0; + } + + u8 allow = smlua_to_integer(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "camera_romhack_allow_only_mods"); return 0; } + + camera_romhack_allow_only_mods(allow); + + 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_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; } @@ -27922,6 +28238,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 // ///////////////////////////// @@ -32805,7 +33138,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); @@ -32834,6 +33166,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); @@ -33710,9 +34043,13 @@ 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_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); @@ -33721,6 +34058,8 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "camera_config_invert_y", smlua_func_camera_config_invert_y); smlua_bind_function(L, "camera_config_is_analog_cam_enabled", smlua_func_camera_config_is_analog_cam_enabled); smlua_bind_function(L, "camera_config_is_free_cam_enabled", smlua_func_camera_config_is_free_cam_enabled); + smlua_bind_function(L, "camera_config_is_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); smlua_bind_function(L, "camera_config_is_y_inverted", smlua_func_camera_config_is_y_inverted); @@ -33730,14 +34069,29 @@ 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_allow_only_mods", smlua_func_camera_romhack_allow_only_mods); + 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); + 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 68e715861..88cdb30c7 100644 --- a/src/pc/lua/utils/smlua_camera_utils.c +++ b/src/pc/lua/utils/smlua_camera_utils.c @@ -2,16 +2,19 @@ #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 sOverrideCameraLCentering = { 0 }; +static struct CameraOverride sOverrideCameraFreecamDpad = { 0 }; +static struct CameraOverride sOverrideCameraFreecamCollision = { 0 }; void camera_reset_overrides(void) { sOverrideCameraXSens.override = false; @@ -24,6 +27,9 @@ void camera_reset_overrides(void) { sOverrideEnableCamera.override = false; sOverrideCameraAnalog.override = false; sOverrideCameraMouse.override = false; + sOverrideCameraLCentering.override = false; + sOverrideCameraFreecamDpad.override = false; + sOverrideCameraFreecamCollision.override = false; } void camera_freeze(void) { @@ -38,12 +44,16 @@ bool camera_is_frozen(void) { return gOverrideFreezeCamera; } +void camera_romhack_allow_only_mods(u8 allow) { + gRomhackCameraSettings.modsOnly = allow; +} + void camera_set_romhack_override(enum RomhackCameraOverride rco) { - gOverrideRomhackCamera = rco; + gRomhackCameraSettings.enable = rco; } void camera_romhack_allow_centering(u8 allow) { - gRomhackCameraAllowCentering = allow; + gRomhackCameraSettings.centering = allow; } void camera_allow_toxic_gas_camera(u8 allow) { @@ -51,15 +61,79 @@ void camera_allow_toxic_gas_camera(u8 allow) { } void camera_romhack_allow_dpad_usage(u8 allow) { - gRomhackCameraAllowDpad = allow; + gRomhackCameraSettings.dpad = allow; +} + +void rom_hack_cam_set_collisions(u8 enable) { + gRomhackCameraSettings.collisions = enable; +} + +void camera_romhack_set_zoomed_in_dist(u32 val) { + gRomhackCameraSettings.zoomedInDist = val; +} + +void camera_romhack_set_zoomed_out_dist(u32 val) { + gRomhackCameraSettings.zoomedOutDist = val; +} + +void camera_romhack_set_zoomed_in_height(u32 val) { + gRomhackCameraSettings.zoomedInHeight = val; +} + +void camera_romhack_set_zoomed_out_height(u32 val) { + gRomhackCameraSettings.zoomedOutHeight = val; +} + +u32 camera_romhack_get_zoomed_in_dist(void) { + return gRomhackCameraSettings.zoomedInDist; +} + +u32 camera_romhack_get_zoomed_out_dist(void) { + return gRomhackCameraSettings.zoomedOutDist; +} + +u32 camera_romhack_get_zoomed_in_height(void) { + return gRomhackCameraSettings.zoomedInHeight; +} + +u32 camera_romhack_get_zoomed_out_height(void) { + return gRomhackCameraSettings.zoomedOutHeight; +} + +enum RomhackCameraOverride camera_get_romhack_override(void) { + return gRomhackCameraSettings.enable; +} + +u8 camera_romhack_get_allow_centering(void) { + return gRomhackCameraSettings.centering; +} + +u8 camera_get_allow_toxic_gas_camera(void) { + return gOverrideAllowToxicGasCamera; +} + +u8 camera_romhack_get_allow_dpad_usage(void) { + return gRomhackCameraSettings.dpad; +} + +u8 camera_romhack_get_collisions(void) { + return gRomhackCameraSettings.collisions; } 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 : configFreeCameraDpadBehavior; +} + +bool camera_config_is_free_camera_collision_enabled(void) { + return sOverrideCameraFreecamCollision.override ? sOverrideCameraFreecamCollision.value : configFreeCameraHasCollision; } bool camera_config_is_mouse_look_enabled(void) { @@ -94,6 +168,10 @@ u32 camera_config_get_deceleration(void) { return sOverrideCameraDegrade.override ? sOverrideCameraDegrade.value : configCameraDegrade; } +bool camera_config_get_centering(void) { + return sOverrideCameraLCentering.override ? sOverrideCameraLCentering.value : configFreeCameraLCentering; +} + void camera_config_enable_free_cam(bool enable) { sOverrideEnableCamera.value = enable; sOverrideEnableCamera.override = true; @@ -106,6 +184,24 @@ 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; + 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..eb0a3a3e8 100644 --- a/src/pc/lua/utils/smlua_camera_utils.h +++ b/src/pc/lua/utils/smlua_camera_utils.h @@ -17,19 +17,60 @@ void camera_freeze(void); void camera_unfreeze(void); /* |description|Checks if the camera is frozen|descriptionEnd| */ bool camera_is_frozen(void); + +/* |description|Sets if only mods are allowed to modify the camera (Enabling prevents the player from modifying the camera through the settings)|descriptionEnd| */ +void camera_romhack_allow_only_mods(u8 allow); /* |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|Sets the romhack camera's zoomed in distance (Default: 900)|descriptionEnd| */ +void camera_romhack_set_zoomed_in_dist(u32 val); +/* |description|Sets the romhack camera's zoomed out additional distance (Default: 500)|descriptionEnd| */ +void camera_romhack_set_zoomed_out_dist(u32 val); +/* |description|Sets the romhack camera's zoomed in height (Default: 300)|descriptionEnd| */ +void camera_romhack_set_zoomed_in_height(u32 val); +/* |description|Sets the romhack camera's zoomed out additional height (Default: 150)|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| */ +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); /* |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_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| */ @@ -46,11 +87,19 @@ 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| */ +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| */ diff --git a/src/pc/network/network.c b/src/pc/network/network.c index 70f571537..b27297c8e 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -689,10 +689,11 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect gFogIntensity = 1.0f; gOverrideBackground = -1; gOverrideEnvFx = ENVFX_MODE_NO_OVERRIDE; - gRomhackCameraAllowCentering = TRUE; + gRomhackCameraSettings.centering = FALSE; gOverrideAllowToxicGasCamera = FALSE; - gRomhackCameraAllowDpad = FALSE; + gRomhackCameraSettings.dpad = FALSE; camera_reset_overrides(); + romhack_camera_reset_settings(); free_vtx_scroll_targets(); dynos_mod_shutdown(); mods_clear(&gActiveMods);