New Moves

Yet another new main menu, AnimGraph 2 arrives with new skeleton and clip editors, alongside built-in voice chat, more realistic world audio and faster loading.

We’ve rewritten the whole menu system as part of our move to a Workshop-driven platform, closer to how Garry’s Mod works.

When you launch, you’ll either land in Sandbox’s main menu or go straight into the main menu of the last game you played. Developers can take over that whole screen and make it their own.
The Steam Workshop takes control of discovery. You can favourite and subscribe to games, and switch between them easily.
This is a preview and not the default yet. We’re aiming to switch it on in our next major update. To try it now, go to Settings → Game → “New” Menu.
DEVELOPERS: Discovery will be through Steam Workshop. Your games and maps will not be discoverable if you have not published to the workshop by the time this new UI system is the default.
The avatar menu has been completely reimagined, and integrated with the shop so it's easier to try stuff on, so you know exactly what you're gonna get.
The console has been turned into a window, is a bit more simpler, and more useful now.
Back in October, Garry announced we'd be making s&box free-to-play before the end of the year. We now have a date: s&box will be going free-to-play on December 10.

If you've already bought s&box, thank you. You took a chance on us early, and we haven't forgotten. Everyone who owns the game before the switch will get exclusive Steam inventory items that won't be available after Dec 10, we'll announce exactly what this is soon.

When "Hide Body in First Person" is disabled, your body will now be shown without the head and arms (with an option to include the arms as well if you want, which is useful for seats or vehicles).
You can also choose to draw the shadows even when the body is hidden
 The PlayerController now has options for Air Strafing, which allows for Bunny Hopping and Surfing
The player's Air Friction now defaults to 0 to allow for bhopping/surfing by default when Air Strafing is enabled
Loading is now faster and stutters less.

The loading screen fades in properly and has one progress bar covering the whole load. Switching between games also reuses more of what's already loaded.

 
We've improved our acoustic simulation:
  • Moving sounds now have a Doppler effect.
  • Sound travels around corners and through doorways more reliably.
  • Walls muffle sound more realistically.
  • Reverb better matches the room you're in.
  • Sounds fade more naturally with distance.
We've also fixed several causes of clipping, crackling, and audio cutting out, both during loading and while playing.
Voice chat is now built into the platform, just like text chat. Multiplayer games get it by default, including games that were published without Voice components. If a game already has Voice components, those are still used.

A new voice chat overlay sits on the right of the screen and shows up to eight people talking at once. Games can turn the overlay off, or configure voice chat, in the new Voice Chat section of the project's platform settings.
The Incoming Voice Volume slider has moved to the Voice section in the settings, and we've added a Game Volume slider so you can lower it when you find voices hard to hear. We've also now got a toggle that turns voice sending, receiving and the overlay off in one click.

We've also added automatic gain control, so everyone's voice is sent at roughly the same level. Quiet microphones get boosted and loud ones get turned down. It tries not to amplify background noise, and the voice gate now high-pass filters at 100Hz. You can turn it off in the settings if you prefer.

Finally, we've added a Streamlined Push to Talk option to keep your microphone open between presses (but not transmitting). This should help for devices that take a while to spin up, particularly Bluetooth headsets.
AnimGraph 2 is a brand new animation system built on Esoterica, with a native runtime and a completely new authoring toolchain.

The graph editor supports blend trees, nested state machines, transitions, 1D and 2D blend spaces, layers, bone masks, IK and root motion. You can debug graphs live, watching parameters and node activity as they change, record and play back, and hot reload while you edit.
Skeletons and animation clips are now standalone assets with their own editors, sharing the same preview and undo history. They support bone mask authoring, import settings, additive animation, motion extraction and event timelines. You can create a skeleton straight from the asset browser or from a source file, and ModelDoc weight lists export as bone masks.

Graphs can also be swapped in at runtime. Add an External Graph node to your main graph, then connect another graph to it from code, which is handy for one-off actions like emotes or interactions:
Renderer.Animation.ExternalGraphs.Connect( "action", ActionGraph );
Existing AnimGraph 1 content keeps working. The old APIs are deprecated and the old graph editor is now read-only.
Animation events on AnimGraph 2 clips can now be typed C# classes with their own properties, instead of a name and a loose bag of parameters. Make a data-only class:
public sealed class ReloadEvent : AnimationEvent
{
	[Property] public int Ammo { get; set; } = 30;
}
Add an Animation Events track in the clip editor, place an event, pick ReloadEvent and edit its properties like any other inspector. Any enabled component on the renderer's GameObject, or on one of its parents, that implements Component.IAnimationEvent receives it automatically. You don't need a renderer reference or any subscribing:
public void OnAnimationEvent( AnimationEvent data )
{
	if ( data is ReloadEvent reload )
		Ammo += reload.Ammo;
}
On the F11 dev tools the rendering tab now has a proper timeline profiler. You can pause, zoom in and click around to see exactly what is eating up your frame time.

The idea would be that we can make this timeline view available for general CPU profiling too.
There's a new wall primitive for building maps. Place points around a path and it generates walls along it.
Opening a project and compiling assets is now faster, especially the first time when everything needs compiling. 

We've replaced the old content builder with a shared managed pipeline that avoids repeated work and compiles assets in parallel within a single process.
That means faster editor startup, less freezing during compilation, and lower memory use.

A clean build of our core assets went from 18 minutes to under 4 on my machine, with peak memory use down from roughly 30 GB to 10 GB.

 
Our lobbies use full-mesh P2P: every player can send updates directly to every other player. However, NAT, VPNs or provider restrictions can sometimes prevent a direct connection between two peers.

That meant things like client-side movement could fail to sync. You might see one player stuck at spawn while everyone else moved normally.

The host now relays updates between players who can't connect directly, so their movement and other updates still get through.

 

We've reduced idle per-frame engine allocations from several kilobytes to pretty much zero, giving the garbage collector less work to do. 

TextRenderer components are now batched through the sprite batcher instead of each label being drawn on its own. In a test scene full of world text, frame time went from 25ms to 3ms.

Labels with the default blend mode batch automatically. Labels with custom attributes or other blend modes are still drawn individually.
Games can capture keyboard input with Input.Keyboard.Capture. While capturing, key presses go to the game instead of triggering input actions, which is useful for things like rebinding controls.

Pressing Escape always ends the capture, and so does opening the menu, so a game can never trap your keyboard.
Our player animations have always had spring dampening enabled on just about every mouse input, which lead to pretty bad delays on animations, causing aiming to be lead by the held weapon instead of the player's arms. 

This was the most apparent when trying to turn around 180deg very quickly:
Now aiming is a bit more stiff, but much more accurate and no overlapping limbs or guns aiming at own head:
 Previously you would crouch instantly when pressing the duck button, instead of easing into or out of it. Now you can set time for ducking and un-ducking (and re-bind the crouch button).
You can choose to give the player an extra forward speed boost when jumping at a full sprint, as a multiplier of their top speed. So jumping while running forward can be faster than just running forward.

You can also enable Hold to Jump, which means you can just hold the Jump button to repeatedly jump instead of having to time each one as you land (great for bhopping) 

26.11.10

26.11.10
9 November 2026
Areas
197 changes in this update

Added

38 changes
Animation
  • AnimGraph 2 - new animation system built on Esoterica with a native runtime, graph editor (blend trees, nested state machines, 1D/2D blend spaces, layers, bone masks, IK, root motion), live preview/debugging, recording and hot reload; existing AnimGraph 1 content keeps workingPR #4805 by @aylaylay

  • Skeleton & clip editors - inspector and popout editing for skeletons and animation clips, sharing one document and undo history, with orbit/pan/zoom, bone focus and clip playbackPR #6531 by @aylaylay

  • Skeleton creation - create skeletons from the asset browser and from source filesPR #6535 by @aylaylay

  • Typed animation events - AnimationEvent subclasses with typed properties on AG2 clips, received through Component.IAnimationEventPR #6546 by @aylaylay

  • External graphs - connect and disconnect AG2 graphs at runtime through Animation.ExternalGraphs, with playback infoPR #6539 by @aylaylay

  • Stepped clips - Disable Interpolation option for stepped bone and morph sampling, including previewsPR #6543 by @aylaylay

  • Bone masks - ModelDoc weight lists export as AG2 bone masksPR #6528 by @aylaylay

  • Alignment reference take - pick which take clip alignment uses instead of always the firstPR #6612 by @aylaylay

  • Easing - Float Switch can use easing presets for bool-to-float blends , and AG2 easing curves show previewsPR #6613PR #6606 by @aylaylay

Water
  • WaterBody - water surface component with scene lighting, reflections and refraction, waves, an infinite ocean mode, underwater fog/grading/distortion/particles, caustics, rigidbody buoyancy, splashes and mesh-defined extents7866237 by @garrynewman

Menu
  • New main menu - an opt-in replacement for the whole menu (choose "New" in Game settings): Workshop-driven discovery, games load straight into their own main menu, Avatar and Shop combined into one panel, and a refreshed game modal, server list and party UIPR #6572 by @devultj

  • Custom game menus - a game's menu is its MenuScene; changing to another scene starts the game and changing back returns to the menu, with Game.IsOnMenu for startup codePR #6605 by @devultj

Mapping & Content
  • Wall editor - wall primitive that generates walls along a path of placed pointsPR #6524 by @bakscratch

  • Source map fog - view-depth distance fog, signed distance ranges, directional colour blending and independent 3D skybox fogPR #6257 by @aylaylay

  • Garry's Mod map thumbnails - map picker thumbnails loaded from game files, with skyboxes hidden from map selectPR #6537 by @solwllms

  • Fast texture tool grid - added a grid optiond0a6d10 by @polepie

  • Default Content addon - shared engine assets mounted alongside Citizen in the engine, menu, games and editor, starting with 102 props and 28 world materialsPR #6581 by @garrynewman

  • Floor & wall materials - block and tile floor and wall materialsPR #6594 by @bakscratch

Voice & Audio
  • Platform voice chat - built-in voice chat for multiplayer games, including games published without Voice components, with a voice chat overlay, a Voice settings section and project Voice Chat settingsPR #6213 by @metapyziks

  • Automatic gain control - sender-side voice levelling with background noise estimation, a 100Hz high-pass on the voice gate and a setting to turn it offPR #6547 by @metapyziks

  • Streamlined push to talk - optional setting that keeps the microphone open between presses so the start of speech isn't delayedPR #6523 by @metapyziks

  • Game volume - a Game volume control for every game, separate from voice chatPR #6412 by @devultj

  • Doppler - moving world sounds are Doppler shifted64d632e by @lolleko

  • Master limiter - lookahead limiter on the master output instead of hard clipping267dd32 by @lolleko

  • DSP listener targets - DspVolume can target specific listenersdd1c0b3 by @garrynewman

Game APIs
  • AI API - AiConfig queries and chats for games, backed by tools like web search, package search and API docs; currently limited to enabled accounts ; usage is shown in credits, roughly 1c each, with $1 a month for everyonePR #6503PR #6596 by @garrynewman

  • Keyboard capture - Input.Keyboard.Capture for event-based key capture, always escapable with Escape or by opening the menuPR #6394 by @devultj

  • Scene changes - added ChangeScene(SceneFile) and ChangeScene(string) overloads531afca by @matt9440

  • Tools render targets - SceneCamera.RenderToTexture exposed through Sandbox.ToolsPR #6538 by @metapyziks

  • First person body - PlayerController can show the body in first person without the head, chest and arms blocking the view, optionally with arms (for driving), and hides third person weapon effects and neck clothingPR #6144 by @carsonkompon

  • Ducking - PlayerController crouch and uncrouch durations are properties, and the crouch button can be changed or disabledPR #6435 by @carsonkompon

Rendering & APIs
  • Seeded effects - particle and volumetric fog randomness can be seededaed3456 by @handsomematt

  • Adapter name - added RenderDeviceManager.GetAdapterName1edd4de by @handsomematt

  • Light probe override - added NEEDS_LIGHT_PROBE shader override3f1cfe3 by @garrynewman

  • Specialization constants - shader attributes can be Vulkan specialization constants, starting with ToolsVisPR #6153 by @sampavlovic

  • Material icons - IconAttribute supports a material icon hint0446139 by @nixxquality

  • UI selectors - added missing CSS selectorsPR #6502 by @garrynewman

  • Compute shaders - added a ComputeShader(Shader) constructor, so existing and runtime-compiled shaders can be used directlyPR #6599 by @garrynewman

Improved

71 changes
Menu
  • Console - now a window like Garry's Mod's, with a cleaner stack layout, copyable stacks and multi-line ranges, and cut/copy/paste in the context menu; debug features moved to Dev ToolsPR #6609 by @devultj

  • Change Map - updated map picker, and the pause screen has a Change Map option againPR #6608 by @devultj

  • Game switching - switch games from the library while already in a gamePR #6611 by @devultj

  • Workshop - more of the new menu uses Workshop instead of sbox.game packagesPR #6614 by @devultj

Audio
  • Occlusion & diffraction - cached diffraction paths of up to four bends that search blocking geometry and chain through doorways, gain from the path detour, and less smoothing lag32293fb by @lolleko

  • Room reverb - one shared reverb per room and listener, new sounds start from an already measured room, and leaner voice mixingf0c6ac4 by @lolleko

  • Reverb occlusion - reverb send is filtered by occlusion9b7e845 by @lolleko

  • Distance rolloff - physical distance rolloff and a diffuse reverb sendb1fcd5b by @lolleko

  • Acoustic materials - based on measured absorption, with less transmission through walls2012743 by @lolleko

  • Audio mixing - mix ahead of the device so hitches and loading GCs don't starve it9ca45e4 by @lolleko

Loading & Startup
  • Loading bar - one bar across the whole load, with cached downloads no longer holding itbb61ece by @lolleko

  • Loading screen - shows before the load starts blockinge1708e0 by @lolleko

  • Assembly verification - verify a game's assemblies on a worker as they download5ecf9ce by @lolleko

  • GC pauses - shorter garbage collection pauses while loading375e199 by @lolleko

  • Switching games - keep the engine type library and menu resources when starting right after a close3e781ed by @lolleko

  • Workshop checks - reuse an up-to-date check answer for up to 30 seconds704ae44 by @lolleko

  • Cloud downloads - check CRCs rather than size alone to decide whether to download, cache verified CRCs and hash asynchronously5686d7c by @polepie, @lolleko

  • Splash screen - waits for the menu before fading in, animates its progress bar and never shows a blank white windowPR #6398 by @xezno

  • Startup steam callbacks - pump Steam callbacks while blocking on startup tasksPR #6418 by @devultj

  • Game loading - skip the environment reset when no game is loaded, don't prefetch Workshop games or size up downloads first, and check for updates against a minute-old Workshop answer; over a second off loadingPR #6572 by @devultj

Player
  • Aiming - major player animation inputs are no longer spring-dampened, so the body follows your aim instead of trailing the held weapon, and feet shuffle correctly when turningPR #6550 by @carsonkompon

  • Short hair - every short hairstyle updated with new textures, caps and modelsPR #6583 by @danduwfp

Networking
  • Lobby relay - relay lobby traffic when direct peer connections faildad3cda by @lolleko

  • Display names - cache filtered Connection.DisplayName until the name or Steam id changesPR #12228 by @deadmonstor

  • Dedicated servers - startup message, real MaxPlayers and Offline state in the overlay, up/down command history, and SteamID/public IP printed on startupPR #6401 by @solwllms

Rendering & Performance
  • Text batching - TextRenderer components batch through the sprite batcher; 25ms to 3ms frame time in a world-text test scenePR #6548 by @antopilo

  • Shadow filtering - weighted bilinear tents for spot and sun shadows and fewer spiral taps for points; about 22% faster with many shadows6349d2f by @handsomematt

  • Shadow filter quality - now a specialization constant, with taps generated on a spiral and unrolled per tap countb04f04d by @handsomematt

  • Light loops - one forward light loop instead of two copies (complex.shader ~30MB smaller), baked lights walked wave-uniform, and emissive and the cluster index kept out of light loops773edb6 by @handsomematt

  • DDGI - compiled out of scenes without DDGI volumes, and probes looped over4463b07 by @handsomematt

  • SSR - screen-space reflections are a core part of the renderer, on by default and gated by the quality settingaf8d05d by @handsomematt

  • UI blur - blur filters use a cached mip chain instead of 225 taps per frame; around 70% cheaper on the launcherPR #5818 by @sampavlovic

  • Pipeline libraries - SpecializedConstant() shaders draw with pipeline libraries and specialize in the backgroundb7d7d93 by @lolleko

  • Pipeline cache - Vulkan link-time optimization enabled, lock-free lookups of built libraries, and the cache saves in the background, including during play , only once it has grown51b5f76PR #6582 by @lolleko

  • Managed renderer - draw and occlusion-cull map aggregates, cut material binds in mesh draws, and draw the normals G-buffer when SSR is on2a41fe6 by @handsomematt

  • Terrain - cull terrain meshlets against a terrain-space frustum , lazy-load terrain storage , build the collider once when enabled , recompute collider edge flags only around editsPR #12178PR #11998PR #119742f4c2f9 by @deadmonstor, @polepie, @handsomematt

  • Heightfields - generate tiles on the thread poolPR #6402 by @solwllms

  • Particles - skip zero and constant evaluations, sweep dead particles in one pass, allocate collections on first use and shrink ParticleFloat to 24 bytes783dc05 by @polepie

  • Allocations - remove per-frame allocations in rendering, tags, traces, PlayerController, engine systems, widgets, GPU profiling, GpuFontText and the idle menu, and reuse post process layers and blit command listsf5c1e0f by @lolleko, @polepie

  • Job system - engine parallel work uses JobDispatcher instead of Parallel.For, and particle processing is no longer split one item per batchbd5947f by @handsomematt

  • Texture work - texture mips are compressed with zstd level 17, texture compression is faster, GGX sky prefiltering is faster and sprite sheet images decode oncec5dbe8f by @lolleko

  • Transforms - faster Transform.Lerp, Transform.ToLocal and constructore8fcc23 by @boxrocket6803

  • UI layout - skip re-zeroing unchanged display: none subtrees on every layout passPR #12200 by @deadmonstor

  • Reference equality - GameObjectReference and ComponentReference have real equality, so hash sets of them aren't quadratic48cd5bf by @deadmonstor

  • Scene trees - remove missing tree children in one pass1738b48 by @deadmonstor

  • AG2 performance - cheaper graph evaluation and pose processing with fewer allocations; parallel animation time is 16-30% lower than AG1 across matched graphs at 1,000 charactersPR #6604 by @aylaylay

  • Physics triggers - entering and leaving triggers no longer allocates, contacts resolve each side once, and resting colliders without a rigidbody cost nothing until they move; worst case 5.0ms to 0.8ms per tick with 17k triggersPR #6592 by @lolleko

  • Idle allocations - idle frames down from 3.1KB to about 80 bytes of allocationsPR #6584 by @lolleko, @handsomematt

Editor & Tools
  • Rendering profiler - dev tools GPU and Rendering tabs merged with GPU history, a zoomable frame timeline, pass tree and counters; Overview shows what bounds the frame rate; Memory baselines and copy-as-text9a663f5 by @handsomematt

  • Profiler timeline - the dev tools CPU timeline lines up with its GPU frame9451be7 by @handsomematt

  • Dev console - cap the number of kept log entriesbc688e6 by @polepie

  • Scene saving - cache CloudAsset references, making scene saves about 49% fasterPR #11964 by @polepie

  • Model compiles - removed ModelPhysicsCollectionFix, which added over 300ms to every model compilePR #6557 by @devultj

  • Material edits - models no longer recompile on every material edit38bba6f by @lolleko

  • Asset thumbnails - dropped when the asset changes and rebuilt when next drawn28ee892 by @polepie

  • Publish settings - missing publish settings are remembered until the asset updates66be40f by @polepie

  • Publishing - only games need to compile on the backend, and only when publishingPR #6429 by @devultj, @handsomematt

  • Animation graph editor - lower undo latency and a UI cleanupPR #6561 by @aylaylay

  • Game & map modals - polished the game modal and map selectorPR #6416 by @devultj

  • Prefabs - dragging multiple GameObjects into the Asset Browser creates multiple prefabs42aeac4 by @elmartalibzade

  • Scene browser - collapses objects without relevant components7849035 by @boxrocket6803

  • Inspector - colour properties show as a full-width swatch, float drags clamp to the slider range, and the panel ControlSheet matches the editor27cdeca by @handsomematt, @ghilliexyz, @polepie

  • Library references - newly installed libraries are referenced by open game and addon compilers28ef7a4 by @deadmonstor

  • Default sphere - uses high quality tangentsc5be4dd by @boxrocket6803

  • Debug drawing - views can turn off debug drawing completely7dbdfbb by @handsomematt

  • Crash reports - attach the crashing process's own log and tag Vulkan driver and allocation failures with more context85d4f30 by @lolleko

  • Content builds - assets compile on threads in one process, using about a third of the memory and finishing faster; the editor compiles assets itself instead of starting worker processes, and more assets build deterministicallyPR #6578 by @lolleko

  • Transition rules - state machine arrows show a clickable rule count and list their rules; clicking one selects that exact transitionPR #6577 by @aylaylay

  • Skills - skills can be installed and updated through symbolic links and directory junctionsPR #6597 by @garrynewman

Security
  • Code access - access checks unified into one analyzer run during compilation, with a package assembly resolverd633bee by @lolleko

  • Hardening - bound sizes passed to native code, image/audio decoders and GPU buffers, and tighten menu and game boundariese2a17e7 by @lolleko

Fixed

78 changes
Animation
  • 2D blend spaces - fix playback jumping at full weightPR #6573 by @aylaylay

  • Graph secondary view - fix stale nodesPR #6562 by @aylaylay

  • Animation previews - stop game systems running in previewsPR #6534 by @aylaylay

  • Skeleton compiles - compile errors no longer terminate the workerPR #6526 by @aylaylay

  • Reroutes - restore AG2 reroute nodesPR #6529 by @aylaylay

  • Pose parameters - grow the pose recipe parameter buffer instead of writing past itb269044 by @lolleko

  • Seated feet - the feet shuffle no longer lingers when sitting, and AG2 feet IK blends on and off smoothly againPR #6607 by @carsonkompon

  • Default skin - new player models get the correct default skin materialsPR #6589 by @danduwfp

Menu
  • New menu - Game.Close() is blocked in the menu, game menu UI stays clear of the platform dock, singleplayer games with bad metadata no longer show game setup, and the loading bar no longer starts fullPR #6591 by @devultj

Rendering & Stability
  • AMD occlusion culling - fix native occlusion culling hanging the GPU on AMDPR #6413 by @sampavlovic

  • Depth prepass stencil - the prepass no longer ignores stencilPR #6277 by @sampavlovic

  • Sun shadow blur - fix filter quality 3 smearing in one directionPR #6406 by @sampavlovic

  • Spot light shadows - fix striped self-shadowingPR #12164 by @corentarts

  • Shadow cascades - fit cascades when the projection has no far planePR #12136 by @gamah

  • Negative scale - fix negative-scale models rendering inside outb5a7b4a by @handsomematt

  • Cubemap reflections - fix stretching near probe boundaries, and realtime probes sample the right hemisphere757c290 by @handsomematt

  • Orthographic cameras - fix screen projection96e1fe5 by @deadmonstor

  • Empty camera views - fix clearing0fbcf49 by @garrynewman

  • Light probe volumes - skip volumes whose texture failed to load, and stop networking map volumes since clients load them from the map595490e by @handsomematt

  • DDGI cube faces - don't share a cached depth texture wrapper across parallel faces7d71390 by @lolleko

  • ModelBuilder textures - fix textures getting stuck on the 32x32 stand-in9327413 by @handsomematt

  • ShaderGraph - fix a crash saving a ShaderGraph during playddb93db by @handsomematt

  • Shader compiler - fix a Slang shader compiler memory leak and an editor boot error in CompileAllShaders653e686 by @handsomematt

  • Shader includes - expand root-relative shader includes into embedded sourcea217727 by @handsomematt

  • Physics stability - disable bodies the solver turns non-finite and reject bad body positions1ce0d18 by @lolleko

  • GPU crashes - skip camera renders started while the previous frame is still rendering, fail transform slot and query pool allocations cleanly, and reject short texture streaming reads0bacf99 by @lolleko

  • Shutdown - free renderer resources that were never released, release GPU resources on destruction rather than finalizers, tear down map worlds in order, and fix a prefab cache crash on quitPR #6504 by @sampavlovic, @lolleko

  • Vulkan validation - fix more validation errorsPR #6506 by @sampavlovic

  • Pipeline library builds - stop waiting on failed specialized pipeline library buildsd8a41f7 by @lolleko

  • Linked pipelines - allocate dynamic sets with their storage buffersbb5f8d8 by @handsomematt

  • WebSurface - dispose properlybba3af2 by @handsomematt

  • Crash fixes - Garry's Mod maps no longer crash NVIDIA GPUs on lower texture quality, plus fixes for views rendering in parallel, physics running out of memory on huge contact clusters and several tools crashes; crash reports say more about GPU faults, stale resources and VRAMPR #6586 by @lolleko

  • Tangents - fix tangents flipping 180 degrees when packed along the negative basis axisPR #6595 by @lolleko

  • Filesystem - fix deadlocks when disposing filesystemsPR #6600 by @garrynewman

  • No Steam - fix NullReferenceExceptions and RichPresence/Avatar warning spam under -nosteamPR #12316 by @saimo

Networking & Physics
  • Snapshots - keep snapshots flowing after a refresh the receiver can't applyb6733c2 by @deadmonstor

  • Scene changes - mount the new scene's maps before reading its snapshot5f5d946 by @handsomematt

  • Sync properties - fix stale sync properties during component destructionPR #6509 by @aylaylay

  • Physics sub-steps - apply SubSteps once when stepping a 3D physics world without a world time6a2ee77 by @deadmonstor

  • Physics worlds - recreate empty physics worlds on scene reloadPR #6527 by @aylaylay

  • Rolling resistance - static hulls no longer inflate rolling resistancePR #6496 by @aylaylay

  • Terrain collisions - fix dense terrain collisions and locked platform supportPR #6533 by @aylaylay

  • Components - re-enabled components no longer linger in the pending start setf4282df by @deadmonstor

  • TriggerHurt - fix the damage timerPR #11050 by @deotexh

  • Host migration - joining clients keep the game identity after host migrationPR #6601 by @garrynewman

Editor & Publishing
  • Workshop overlay - stop showing a bogus 70000 days left when a download stalls at the endPR #6560 by @devultj

  • Mouse capture - fix mouse capturing not always working in the editorPR #6536 by @metapyziks

  • macOS hotload - fix the editor hanging after hotload on macOSPR #6487 by @amedinafp

  • Hotload - release fast hotload detours when a full hotload replaces the assembly, remove types left behind by a failed registration, and skip hotload for the RPC invoker cachePR #12211 by @deadmonstor, @handsomematt

  • Standalone export - fix exports failing when a startup image is set, and missing Mapping Tools geometrydb66186 by @lebofly, @handsomematt

  • Publishing - preserve explicitly included standalone files, exclude editor metadata from runtime publishes, and remove scenes from the publish previewb8f4e17 by @lolleko

  • Hammer decals - fix decal publishingdca00bf by @lolleko

  • Game mounts - ship game mount DLLs to Steam3fb4462 by @handsomematt

  • External changes - the external changes dialog now shows for scenesab5cd82 by @clemixo

  • Asset dependencies - JSON type metadata is no longer registered as an asset dependency49150e5 by @polepie

  • Cloud assets - fix orphaned cloud asset deletion using the normalized path24f8833 by @polepie

  • Asset folders - fix rename hierarchy1e03a6b by @apple-ram

  • Engine references - make EngineReferenceProvider.Lookup thread-safe3fe9a46 by @polepie

  • Scale tool - fix global space scaling stretching rotated objects along the wrong axis1f7ffbb by @corentarts

  • Mesh editing - remove the temporary face in MergeVertices if CollapseEdge failsbd41d0f by @angel-foxxo

  • Curve editor - clamp dragged handles immediately, relative to drag start0c952a5 by @ledernierpoisson

  • Painter curves - CurveSegments takes scale into accountPR #12155 by @polepie

  • Particles - lifetime stop supports live edit on emitted particles497b4e4 by @polepie

  • Graph nodes - only mark nodes as moved when their position actually changed, and use TitleAttribute/DescriptionAttribute for node titlesba4312e by @quackcola

  • Viewport options - mouse input no longer closes the viewport optionb91ba80 by @polepie

  • Hierarchy - don't select the parent when the parent is the scenecc6104c by @766974616c79

  • Item widgets - better clearing of hovered state in BaseItemWidget, and recover from a missing theme.jsonb7792a2 by @boxrocket6803

  • Virtual lists - newly visible rows build in the same frame200a5be by @deadmonstor

  • Avatar editor - fix the necklace pendant subcategory title60d0876 by @gmod4phun

  • Startup timing - include all of startup in the measurementPR #6490 by @xezno

  • Exported games - standalone exports launch againPR #6588 by @lolleko

  • Hotload delegates - fix hotload breaking delegates to generated helper methodsPR #6602 by @garrynewman

  • Bone gizmos - no longer steal clicks from nearby move and scale handlesPR #6348 by @handsomematt

UI

Removed

8 changes
Animation
  • AnimGraph 1 editor - the old graph editor is read-only and legacy animation APIs are deprecatedPR #4805 by @aylaylay

Water
Menu
  • Organization modal - removed, as nothing used it; the public API method is an obsolete stubPR #6416 by @devultj

  • Game.StartGame - removed; games start by changing from their MenuScene to another scene, and the MenuResources setting is gonePR #6605 by @devultj

  • Jam - removed the in-game Jam UI now the jam is overPR #6572 by @devultj

Engine Development
  • Sandbox.Access - removed runtime access verification, replaced by the unified analyzer at compile time17d7639 by @lolleko

  • Mobile code - removed Android and iOS code paths by @lolleko

  • Dead native code - removed unused tier0 memory, string, threading, platform and debug code and dead KeyValues/symbol code, fixing job and thread bugs and speeding up CUtlBuffer along the way by @lolleko

Known Issues

2 changes
  • Occlusion culling - r_occlusion_culling is off by default for nowab64886 by @handsomematt

  • Short hair - depth of field hides the translucent hair cards when there's blur behind themPR #6583 by @danduwfp

people
Log in to reply
You can't reply if you're not logged in. That would be crazy.