14,166 Commits over 1,583 Days - 0.37cph!
Enable vulkan 1.2 features (scalarBlockLayout, bda, descriptor indexing, etc.) instead of using all the extensions
Revert "Catch null typedescriptor when cloning"
This reverts commit 04c9f070c908428fd86eea9cbe8355e15aa069c5.
Revert "Reduce JSON usage in GameObject.Clone (#1781)"
This reverts commit 3975bc70bb23755766f1767725aab376864a5260.
Catch null typedescriptor when cloning
Reduce JSON usage in GameObject.Clone (#1781)
We no longer converts the complete GameObject to and from JSON for cloning.
JSON is only used as a last resort for complex properties we cannot clone directly.
Should result in 1.5 to 3 times faster clones (depends on object size).
Vulkan 1.2 is minimum requirement, device support remains the same. We already required several extensions that are core in 1.2 such as descriptor indexing
Shaders compiler uses scalar layout instead of std140/std430 layout (VK_EXT_scalar_block_layout is core in 1.2)
This is a much less confusing layout for structures in HLSL, allowing for
tighter packing and generally matching their C++/C# counter parts.
e.g:
```hlsl
struct T {
float a_float;
float3 b_float3;
}
```
The size of struct T was previously 32 bytes with GL layout and is now 16 bytes.
The offset of b_float3 was previously 16 bytes and is now 4 bytes with scalar layout.
More info on rules (previously GL, new Scalar)
microsoft/DirectXShaderCompiler/blob/main/docs/SPIR-V.rst#memory-layout-rules
https://maraneshi.github.io/HLSL-ConstantBufferLayoutVisualizer/
Added SoundscapeTrigger.Volume so you can control the volume of a Soundscape from the component
Added more property/enum docs to SoundscapeTrigger and gave TriggerType entries [Icon]
In VR, menu defaults to having VR tag enabled
Move VRSceneSwitcher + add warning and move back to OnAwake, recompile main menu
Stop "Create Sound Event" pranking people by opening to the wrong directory, resolves Facepunch/sbox-issues#7421
Force add compiled VR menu scene
Fixed an issue where FromHost sync vars could get stomped. Optimized delta snapshot updates - we no longer need to even try to process networked objects we don't own. Fixes Facepunch/sbox-issues#7261
Optimze Pixmap.FromTexture (don't swizzle the format 3 times)
4096x4096 339ms -> 115ms
2048x2048 90ms -> 50ms
1024x1024 20ms -> 10ms
Bottleneck is going to be the data read from GPU -> CPU, not much else to do
Overlay is considered a game layer since it draws to color, fixes depth prepass for overlays, remove overlay prepass from renderpipeline_standard
CommandList.GetRenderTarget with SizeFactor, don't allocate DepthTexture for it since it's not being used anywhere yet
New Clothing - Headphones
https://files.facepunch.com/daniel/1b2011b1/0OyFzoEgI6.png
LODs and Human aswell
Fixed a bug where calling GameObject.GetPrefab could network spawn game objects. Never network spawn game objects if its scene is a PrefabScene.
Merge branch 'master' of sbox
Add support for custom specialised asset pickers per-resource type via AssetPickerAttribute
Add SimplePicker, use for shaders until we get something better so that's not awful to use
https://files.facepunch.com/solw/2025/January/20_13-12-GentlePinkriverdolphin.png
Move VR scene switcher logic into OnStart
Restore old TypeLibrary at end of SerializeTest
Possible fix for fragile tests
Refactor GameObject serialization tests a little
A couple of object cloning edge case tests
CloneActionGraphProperty test
Add CloneActionGraphSceneReference test
Humans: small tweak to Sprint_N + export the copy of the graph assigned to Humans
Humans/animgraph: added Sprint_N (+ temp derived NE/NW)
Push time scope when calling pending starts
Fix crash in unit test when creating SoundStream
Run pending component starts at the end of loading, before host joins game
Revert "Widget.Parent checks for valid"
This reverts commit 0da86010868490ff4bbe0b0cb524e5a5fcbb0bf7.
Scene loading only happens once
KeyValuesToJson
Add Material.Shader
Add TypeLibrary.CreateProperty, Obsolete SerializedProperty.Create
TypeLibrary.CreateProperty takes attributes - allowing further customization
Make ParseToJsonObject public
Add Asset.SetInMemoryReplacement, ClearInMemoryReplacement
Pass on description, title, source info to property
Widget.Parent checks for valid
Fix warnings
Delete ResourceConverterFactory, ResourceJsonConvert
safe to pick to main
Add TypeLibrary.Current
Add TypeLibrary.Current
Remove hacky Scene.IsWaitingForLoad
Give NavMesh a proper place to generate during loading (after everything is loaded)
Don't try to auto-switch hosts if LobbyConfig.DestroyWhenHostLeaves is true. If that's true, we should only ever have the same host..
Materials store the shader version they were compiled against, added Source( ShaderVersion ) for shaders to query what the current material was compiled against for backwards compatability
Blendable: Use hemi octahedron encoded normals same as complex for better quality, remove a redundant texture lookup per layer, remove the 5th unused blend layer because wtf
https://files.facepunch.com/matt/1b1811b1/mspaint_qIv6MYpn8Y.png
Amend MoveMode.IsStandableSurace typo, though I can't Obsolete the old one without an error
Don't "step down" when on a dynamic physics object (let physics work)
Stomp z velocity when stepping down
Stomp z velocity when stepping up
Editor: Launch dedicated server option (we probably want some way to join it from editor?)
Rebuild content
Rebuild shaders
Don't reset the menu environment when you quit a game, so you're on the same page
Allow TryJoinLobby to be called only once at a time
Disable play button when joining a game, so we can't keep pressing it
Fix disconnect message showing "Unknown Player"
Automatically hotload user permissions if users.json is edited while the server is running - can change or add permissions without restarting the server
User perms config
Allow Json comments
Add default users.json file and change structure of config
Don't ignore game/config/users.json because we want to keep the default with comments
Return true in Connection.HasPermission if the connection is the host. We'll check user permissions from the config file for connections to a dedicated server.
Remove some test logs and make HasPermission available
LobbyConfig.HideInServerList would let you hide a lobby from appearing in any server lists in s&box but still queryable with QueryLobbies
Fix IsHidden support
Filter in the query
HideInServerList -> Hidden
Fixed p2p lobby clients not being able to connect to lobbies
When publishing an asset with IncludeSourceFiles, seek the asset and its dependencies for input dependencies (should include animgraph animations, texture source files)
Disable PathWidget "Copy Relative Path" if the path is not within the Project's Assets folder, just like files/assets.
Fixed connecting/connect rejection messages not using correct Name/SteamId
Fix Asset Browser Forward Button enabling/disabling based on the Back Button instead of itself.
Add Context Menu to Asset Browser Path Segments. Resolves Facepunch/sbox-issues#7391
https://files.facepunch.com/CarsonKompon/2025/January/16_10-33-GreedyQuahog.png
When loading ShaderGraphs and a connected property cannot be found, check for [Alias] attributes. This will resolve issues where loading old ShaderGraphs would look for old variable names. Facepunch/sbox-issues#5822
Added [Alias] to Combine node since its output was renamed at some point
VR: More stuttering-related fixes, don't alloc joint data every frame
VR: Improved main menu scene
VR: Only create debug callback if `-vrdebug` is specified as a launch parameter
Do the same when setting var