2025-10-30 - Project Fragmentation
- Backstage now caches a list of maps by their prefix (‘map_’, ’test_’, etc)
- Added Change Map button to the pause menu. Shows a dropdown list of all maps, separated by prefix. Allows swapping between maps without using the console
- Added
UiAudioCollectionresource. Serves as a grouping of several common sound effects (button hover, button click, slider click, etc) combined with their desired gain offsets and pitches. Like an audio version of a Theme. Pause menu and options menu widgets have now been moved to refer to these instead of referencing their sounds directly to improve consistency. There’s a main audio collection and one specific to the pause menu button (where the hover and interact sounds are different) - Switched to Jolt physics. This makes the ledge grab bug easier to reproduce but fixes the weird slide jitter for free, so its worth it.
- Fixed a bug where calling
DebugLogStream.setup()twice with the same name in different locations wouldn’t return the same log both times as expected. - Added
r_show_debug_info_group <name> <enabled>command. Used withregister_debug_visualisation(name, callable). Currently used to control whether the ledge grab detection will show raytraces with DebugDraw3D using “ledgegrab_detection” - Replaced previous LedgeGrabRaycast Shapecast3D with new
LedgeGrabDetectionClusterwhich, similar toEdgeDetectionClustercontains raycasts and logic specific to detecting ledge grab conditions on its own.- Grabbable surfaces are no longer detected with a vertical sphere shapecast. Instead we’re now using a slanted Raycast3D that starts slightly behind the player’s radius and extends down 1m and forward 0.2m. This ensures that a raycast can never start within a solid face.
- This fixed the bug where you could grab the seam between two flush concave collision shapes.
- Ledge grabs now require that the surface struck by the raycast have a normal that faces at least 80% vertical.
- Added “ledgegrab_vectors” debug info group to show the nudge vector and collision vectors considered during a ledgegrab
- Fixed the bug where ledge grabbing the corner between a ledge and a wall would sometimes get you stuck.
get_wall_normal()only returns the normal of one of the touching surfaces and thus the nudge direction would push into the wall instead of the ledge.PlayerLedgeGrabStatenow iterates through all collisions and picks the normal that closest matches the camera direction. - Added “interior” property to
env_lightmapgi. Maps 1:1 onto the interior option of godot’s builtin LightmapGI but also sets Environment Mode do DISABLED when turned on. - Fixed a bug in
MapLightmapHelperwhere light blockers would be hidden prior to a “bake all” instead of shown - Fixed a bug where the HeadCollisionShapecast on the player controller extended slightly above the StandingCollisionShape, leading to being unable to stand up in places you could fit after crouching.
- Added a bit more to
map_tutorial










