More settings to the Camera settings menu (#555)
Some checks are pending
Build coop / build-ubuntu (push) Waiting to run
Build coop / build-windows (push) Waiting to run
Build coop / build-macos-arm (push) Waiting to run
Build coop / build-macos-intel (push) Waiting to run

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.
This commit is contained in:
Sunk 2025-03-13 23:01:51 -04:00 committed by GitHub
parent 3792f0aebb
commit edacdcc7e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 1997 additions and 460 deletions

View file

@ -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" ],

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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:](#)

View file

@ -1534,29 +1534,6 @@ Resolves collisions between the camera and level geometry. Adjusts the camera's
<br />
## [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:](#)
<br />
## [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
<br />
## [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:](#)
<br />
## [soft_reset_camera](#soft_reset_camera)
### Description

View file

@ -6838,6 +6838,52 @@ Overrides if Analog Camera is enabled
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [camera_config_enable_free_cam](#camera_config_enable_free_cam)
### Description
@ -6861,6 +6907,29 @@ Overrides if Free Camera is enabled
<br />
## [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:](#)
<br />
## [camera_config_enable_mouse_look](#camera_config_enable_mouse_look)
### Description
@ -6902,6 +6971,27 @@ Overrides if camera mouse look is enabled
<br />
## [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:](#)
<br />
## [camera_config_get_deceleration](#camera_config_get_deceleration)
### Lua Example
@ -7062,6 +7152,48 @@ Checks if Free Camera is enabled
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [camera_config_is_mouse_look_enabled](#camera_config_is_mouse_look_enabled)
### Description
@ -7261,6 +7393,27 @@ Freezes the camera by not updating it
<br />
## [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:](#)
<br />
## [camera_get_checking_surfaces](#camera_get_checking_surfaces)
### Description
@ -7282,6 +7435,27 @@ Checks if the camera should account for surfaces
<br />
## [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:](#)
<br />
## [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
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [camera_set_checking_surfaces](#camera_set_checking_surfaces)
### Description
@ -7437,6 +7873,29 @@ Unfreezes the camera
<br />
## [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:](#)
<br />
---
# functions from smlua_collision_utils.h
@ -8210,296 +8669,6 @@ Sets a value of the global vertex shading color
[:arrow_up_small:](#)
<br />
---
# functions from smlua_level_utils.h
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
---

View file

@ -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
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
## [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:](#)
<br />
---
# functions from smlua_math_utils.h

View file

@ -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)
<br />
@ -1726,18 +1747,18 @@
<br />
- 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)
<br />

View file

@ -92,6 +92,7 @@
- [PlayerGeometry](#PlayerGeometry)
- [PlayerPalette](#PlayerPalette)
- [RayIntersectionInfo](#RayIntersectionInfo)
- [RomhackCameraSettings](#RomhackCameraSettings)
- [SPTask](#SPTask)
- [ServerSettings](#ServerSettings)
- [SoundState](#SoundState)
@ -2971,6 +2972,25 @@
<br />
## [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:](#)
<br />
## [ServerSettings](#ServerSettings)
| Field | Type | Access |

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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方向のカメラ反転"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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

View file

@ -42,3 +42,6 @@ extern u16 newcam_intendedmode;
extern u16 newcam_mode;
extern s16 newcam_yaw;
extern u8 gFreeCameraUseDpad;
extern u8 gFreeCameraHasCollision;

View file

@ -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();
}

View file

@ -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];

View file

@ -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

View file

@ -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},

View file

@ -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;

View file

@ -7,24 +7,66 @@
#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);
}

View file

@ -1,4 +1,5 @@
#pragma once
#include "djui.h"
void djui_panel_free_camera_create(struct DjuiBase* caller);
void djui_panel_camera_create(struct DjuiBase* caller);

View file

@ -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 },

View file

@ -106,6 +106,7 @@ enum LuaObjectAutogenType {
LOT_PLAYERGEOMETRY,
LOT_PLAYERPALETTE,
LOT_RAYINTERSECTIONINFO,
LOT_ROMHACKCAMERASETTINGS,
LOT_SERVERSETTINGS,
LOT_SOUNDSTATE,
LOT_SPAWNINFO,

View file

@ -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"

View file

@ -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);

View file

@ -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;

View file

@ -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| */

View file

@ -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);