With everything I'm doing with Sandbox Mode I'm trying to innovate in some way. I've been trying to re-imagine hydraulics this week. Trying to add something more controllable and more useful.
When a game publishes to workshop now, they can specify a bunch of categories for the user to select from. We're using this in the dupes in Sandbox Mode to allow them to categorize the published workshop item. To achieve this you just call the AddCategory method on the Modals.WorkshopPublishOptions struct.
The Slang Shading Language VSCode Extension has been updated supporting s&box shaders, this extension provides a strong intellisense for HLSL shaders with highlighting, error checking and code completion - making creating shaders much much easier.To further support this, projects auto generate a VSCode workspace that suggests the extension, configures search paths and sets it to recognize s&box shaders by default. Additionally many shader includes have also been made public.
Some issues with modelphysics were fixed that allows people to extend the usability of them. Mainly, when the component is disabled, all the components it creates are disabled instead of destroyed so they can be toggled on and off without remaking them.
I've made various changes to improve changing a scene over the network.
Previously, when networking a scene change, it'd accidentally send a destroy message for every networked object in the scene. This could add up in a large scene with lots of networked objects, now it skips that entirely because the scene will be destroyed locally by each client anyway.
In addition, we'll wait for the host to fully finish loading the scene before we package it up and send it to each client. This makes sure we don't send any other useless messages, too. For example, loading a MapInstance in a scene could take some time, we want to make sure the host has it ready first.
I've also added support for INetworkSnapshot to GameObjectSystem so you can serialize and deserialize arbitrary data when the scene changes or the client joins for the first time.
The .NET 10 field contextual keyword was causing errors when used in the setter or getter of a [Sync] property. I've now fully updated our CodeGenerator to support this keyword. This means you can also use it with any of your custom attributes using our CodeGenerator.
In addition to that, I've added support for generic arguments with methods to CodeGenerator. This means you can now wrap methods LikeThis<T, R>(). By extension, this means you can now call RPC methods with generic arguments.
So, why don't we just fix them? For most crashes we lack a way to reproduce them, which makes fixing them nearly impossible. The crash reports we have on Sentry right now aren't much help either, they just say "GPU crash" without any actual details about what caused it.
To tackle this, we've enabled Nvidia Aftermath, a GPU crash analyzer that tells us exactly where things are going wrong in the GPU pipeline: which shader, what stage... These reports get uploaded to Sentry automatically, which should help us a lot in when debugging GPU crashes.
There might be a small performance hit for Nvidia users with Aftermath enabled, but it's necessary to get everything stable for release.
If needed, we will expand on the GPU crash reporting system and look into similar tools for other GPU vendors or vendor-independent solutions.
There is a neat hidden tool in hammer where pressing F does a quick single bevel, I've made it less hidden away and gave it another feature of picking the amount of cuts.