Citizen 2.0 - refreshed the default face, added shader-based eyes with editable color, and added neck, head, chest, waist, nose and chin adjustmentsPR #5909 by @garrynewman
Model Deformer - added volume-masked inflate, squash/stretch, transform, pull and project operations with ordered stacking and inspector controlsPR #5894 by @garrynewman
Scene compile reports - added Make All Static on non-static exclusion groups, marking the affected objects static in one undoable editf83dad0 by @aylaylay
Game settings - edit recommended player counts, co-op/versus modes and map settings in Project Settings; the publish wizard now includes a Players step with a game-card preview38113fd by @lolleko
Scene compilation - explicitly bake eligible static meshes and props into aggregate geometry and collision with Scene > Compile Scene, retaining the scene path, GUID and editable sourcePR #5590 by @aylaylay
Component eyedropper - choose from a dropdown when the picked object has multiple matching componentsPR #5921 by @bakscratch
Edge cuts - create a single vertex with a single-point edge cutPR #5923 by @bakscratch
Depth-of-field focus picker - click a scene target to set the focal distance, with expanded distance and range controlsPR #5874 by @antopilo
Managed scene renderer - added the opt-in C# scene renderer through r_managed_scene 1; disabled by default37baa6c by @handsomematt
Renderer comparisons - added SceneLab parity/benchmark tooling and r_managed_scene_compare for comparing managed and native rendering37baa6c by @handsomematt
Command-list profiling - added nested GPU scopes through CommandList.ProfileScope, visible in overlay_gpu and external profiling toolsPR #5807 by @wheatleymf
ViewSetup controls - added RenderTags, ExcludeTags, EnableUI and EnableDebugOverlaysPR #5891 by @garrynewman
Menu music volume - added a separate setting for the main-menu music level7554054 by @garrynewman
Microphone settings - added in-game input-device selection and a live voice-activation threshold meter using SDL capture and OpusPR #5915 by @devultj
Voice playback - added SoundStream.WriteVoiceData with a separate decoder per streamPR #5915 by @devultj
Friend cards - view citizen avatars, achievement scores and current/recent games from the refreshed friends railPR #5927 by @devultj
Game jam voting - added live voting bars, finalists and standings screens for the next jam phasePR #5903PR #5899 by @garrynewman
Database service - added Sandbox.Services.Database for package-scoped, player-owned cloud records, with public/private visibility, groups, pagination and revision-checked updates95bc339 by @garrynewman
Citizen eyes - reduced the size of the new eyeballs1873c45 by @garrynewman
Scene compile snapshots - build from an isolated copy of the saved scene so later editor changes do not alter the captured job72cb1d1 by @aylaylay
Scene compile work - build models, collision and aggregate data in single passes and avoid repeated mesh scanning9f476466835ca111af099d582fba by @aylaylay
Compile status - show when edits need compiling and use the editable scene for editor play until it is compiled againdef6fb263be38e by @aylaylay
Scene publication - publish compiled scenes and their runtime dependencies through ordinary resource handling87df9c7 by @aylaylay
Terrain clipping - cut holes and heightmap boundaries before pixel shading, restoring early depth rejection and MSAA on cut edgesPR #5930 by @sampavlovic
Clutter - reduced scatterer allocations, batch rebuild work and GPU batch upload timePR #5887 by @antopilo
Terrain culling - reuse meshlet culling results across passes of the same view1d77bb4 by @handsomematt
Camera hooks - reuse the render-stage delegate instead of allocating one per camera per frame980dc78 by @handsomematt
VRAM budget - shrink the texture pool by the full budget overshoot, including in toolsb23702c by @lolleko
GPU diagnostics - tag crashes with GPU vendor, failing call, fault type, shader and VRAM-budget information5ba7ed5e95bd0c by @lolleko
Menu soundtrack - replaced the menu music with a new track from Carson7554054 by @garrynewman, @carsonkompon
Loading status - display Loading Scene before the synchronous scene load beginsd424788 by @lolleko
Startup screen - added a coloured Facepunch logo, blue background and loading progress barPR #5935 by @garrynewman
Party dock - replaced the footer party deck with a floating party/join-status overlay that stays accessible in modal viewsPR #5927 by @devultj
Jam browsing - show live nomination counts on game cards, entry counts on filter tabs and active-player sortingPR #5899 by @garrynewman
Menu suspension - preserve the menu scene, navigation and scroll state while pausing its updates, rendering and spatial audio during gamesPR #5904 by @garrynewman
Frame-rate defaults - game and main-menu frame-rate caps now default to uncappedbc2e016 by @garrynewman
Map prefetching - fetch the selected map and its dependencies alongside the game package so later mounting can use cached files4381b9f by @lolleko
Assembly caching - reuse package DLLs from the asset download cache after validating their checksum5d7ca72 by @lolleko
Shared downloads - reuse in-flight package-info requests and manifest downloads across concurrent callerse5ac631 by @lolleko
Cached asset mounting - resolve cached package files off the main thread and update mounted-symlink resource mappings in a parallel batch1f65e0e7f393d7 by @lolleko
Achievement loading - start games without waiting for the achievement list and queue early manual unlocks until it arrives64dfc02 by @lolleko
Load-step pacing - yield a frame between loading steps instead of adding fixed delays34a1d7d by @lolleko
Package transfers - download files off the main thread and mount completed files on the main threade9ac2ef by @lolleko
Dependency downloads - prefetch package dependencies in parallel9f2077f by @lolleko
Party preloading - cache the game and its dependencies without mounting them until joining2e462b8 by @lolleko
Download handling - retry stalled downloads and accept compressed responsesbadce7f by @lolleko
Network files - avoid redundant filesystem lookups when preparing files for transfercb9298f by @handsomematt
Painter - reduce CPU submission work and temporary allocations for paths, lines, curves, polygons and aligned strokes, with reusable batch storage and shared contoursPR #5866 by @garrynewman
Deleted scene output - recreate missing compiled scene files from an existing bake, or fall back to editable source when generated bake data is missing505742d by @aylaylay
Scene compile reports - keep reports available while there are unsaved changes so multiple exclusion groups can be fixed before saving9d09054 by @aylaylay
Source-less scene status - handle scenes without local source files when checking compile status7d49ad5 by @aylaylay
Prefab compile settings - only read scene bake settings from local scene assets, avoiding prefab compile errors5823f8f by @aylaylay
Camera piloting - correct framing guides when desktop scaling is not 1PR #5883 by @metapyziks
Multi-object editing - stop copying embedded-resource values from the first selected object into the othersPR #5898 by @carsonkompon
Undo - preserve bone identity when undoing object changesPR #5892 by @aylaylay
Scene compilation - support cloud assets without requiring their source filesPR #5924 by @aylaylay
Edge tools - correct open-edge indicator alignment and scalingPR #5922 by @bakscratch
Terrain ambient occlusion - write correct normals and roughness in the terrain prepass instead of invalid G-buffer dataPR #5930 by @sampavlovic
Editor environment maps - apply the isolated cubemap view-rendering scope in the editor as well as in gamePR #5929 by @sampavlovic
Camera rendering - avoid holding the camera lock during RenderToTexture and fix CameraComponent command-list racesPR #5889 by @garrynewman
Depth of field - scale blur size relative to 1080p so its apparent size stays consistent across resolutionsPR #5882 by @sampavlovic
Depth-of-field highlights - fix bright HDR pixels leaking through rejected samplesPR #5876 by @sampavlovic
AMD depth normals - fixed crashes affecting SSR and other effects using depth normals on some AMD GPUsPR #5901 by @sampavlovic
Sprites and text - correct bounds for non-billboard sprites and sorting between TextRenderer and SpriteRendererPR #5897 by @carsonkompon
Material cache - evict destroyed materials and replace dead wrappers instead of returning them for reused native addressesf1b2fd8 by @handsomematt
SceneObject model lookup - avoid crashing when an object has no mesh data070ab3a by @handsomematt
SceneObject transforms - read transforms of native-created objects correctly and update child transforms when their parent moves4e43b77cafd5d5 by @handsomematt
Dynamic input layouts - synchronize first-use layout construction so render jobs cannot use partially built layouts142f9fc by @handsomematt
Cubemap filter initialization - create the filter shader before rendering rather than inside a render-stage callback0fc2e3e by @handsomematt
Cubemap rendering - isolate cubemap view rendering and fix filtering GPU crashes by avoiding scratch memory and reducing thread-group sizesPR #5911 by @sampavlovic
Async compute synchronization - graphics-queue semaphore waits now cover every stage that can read compute resultsd204677 by @handsomematt
Input-layout collisions - fixed heap corruption when input layouts collide173ac32 by @wheatleymf
Vulkan UAV slots - correctly size UAV bookkeeping so slot 8 cannot overwrite the push-constant bufferc6cd590 by @lolleko
DLSS replacement - reference-count NGX initialization so retiring an upscaler cannot shut it down beneath its replacement06439d1 by @lolleko
FSR3 stability - initialize scratch memory and prevent dispatch through uninitialized or concurrently used temporal upscalers4fc5380 by @lolleko
Map unload - clear lighting references before deleting world objects that may render for one final framePR #5932 by @sampavlovic
Renderer shutdown - release leftover GPU fences before destroying their owning render threadPR #5932 by @sampavlovic
Friend invites - clicking Invite no longer opens the friend popup and gives clearer feedbackPR #5886 by @devultj
Pause menu - keep footer buttons visiblePR #5886 by @devultj
News images - do not stretch HtmlPanel images by defaultPR #5886 by @devultj
Jam voting - keep voting snapshots fresh and prevent listener failures from turning successful votes into errorsPR #5899 by @garrynewman
Package statistics - resolve the calling package from compiler-written assembly metadata instead of its assembly name95bc339 by @garrynewman
Manifest failures - allow a failed manifest download to be retried instead of leaving an empty manifest cached as a successful resulte5ac631 by @lolleko
Server browser - share and refresh Steam discovery requests to avoid false empty server lists after repeated queries; use the running Steam AppID for standalone games too#11869PR #5907 by @garrynewman
Filtered text - fixed text compositing in UI masks and filtersPR #5853 by @xezno
Bound values - ensure initial values with a hash of -1 are synchronized into controlsbc2e016 by @garrynewman
Assembly access checks - reject assemblies declaring IgnoresAccessChecksToAttribute5ba6aa3 by @lolleko
Geometry helpers - fixed closest-point calculations on zero-length linesPR #5894 by @garrynewman
Camera piloting - position cameras through the scene viewport with camera-matched settings, 16:9 framing and rule-of-thirds guides; record movement in Movie Maker with Alt+F8PR #5803 by @metapyziks
Panel docking - added DockHost tab groups, resizable splits, lazy panel registration and JSON layout statePR #5716 by @garrynewman
Floating panel windows - added PanelDockWindows for moving panels between editor windows and saving/restoring workspace layouts and window geometryPR #5716 by @garrynewman
Doorway shapes - choose which outer wall faces to generate while keeping doorway jambs and the inner archPR #5826 by @aylaylay
Automatic materials - optionally generate and assign materials when creating models from meshes, matching texture names and shader suffixes in the model folder and subfolders98b0152 by @wheatleymf
Model placement - added a Scene View preference to control whether models with colliders are placed as propsec89dcc by @wheatleymf
Animated sprites - added SpriteInstance playback and Painter.Sprite drawing, with independent animation selection, pause, speed, reverse playback and loop supportPR #5812 by @garrynewman, @handsomematt
Panel layout controls - added Toolbar, StatusBar, TabBar and TabPanel controls, plus texture icons through Button.IconTexturePR #5854 by @garrynewman
Canvas and graphs - added CanvasPanel with pan, zoom and draggable handles, plus GraphPanel and GraphAxis with configurable ticks, labels and gridsPR #5854 by @garrynewman
Curve editing - added CurveEditor with key and tangent handles, snapping, undo and presets, plus curve and curve-range property controlsPR #5854 by @garrynewman
ScriptControl - added a panel-based script editor with syntax highlighting, diagnostics, completion, hover information and signature helpPR #5852 by @garrynewman
Label style spans - style ranges of plain text through SetStyleSpan and ClearStyleSpansPR #5852 by @garrynewman
Material applicability - added ActiveIf() annotations for feature-dependent material controls and texture inputs, preserving saved values while inactivec5ac37a by @handsomematt
Custom light loops - added explicit shadow receiver normal overloads to Light::From, Light::Init and Light::Shadows; compute the normal before entering the light loop12bd1db by @handsomematt
Extra UV channels - added UV3 and UV4 support through explicit LowPrecisionUv2 and LowPrecisionUv3 shader inputsc6032f0 by @wheatleymf
Shader schema - exposed texture filename suffixes through Shader.VariableDescription.TextureEnding11ed06b by @wheatleymf
Sampler filtering - accept Linear as an alias for trilinear filtering in shader sampler statesa1e8c1b by @lolleko
Vulkan diagnostics - added -vulkan_validation_stack_trace to print a call stack with validation messagescf78218 by @lolleko
Shader specialization - added StaticCombo(..., ShaderConstant()) declarations with automatic Vulkan constant IDs, shared compiler jobs and specialization-aware pipelines28d80c9 by @handsomematt
Terrain material sampling - added Terrain::Sample() for sampling blended terrain materials in custom shaders using local UVs or world-space coordinates, including transformed terrainPR #5694 by @wheatleymf
Video encoder readiness - exposed VideoWriter.ReadyForVideoFrame so callers can wait for space in the encoding queuePR #5880 by @metapyziks
VP8 playback - added support for VP8 WebM videos, including companion alpha streams for transparency9b11bb8 by @lolleko
Experimental scripting - added Game.Scripting with reusable scripts, typed return values, bound arguments and local/global stores, backed by Breen and TypeLibraryPR #5852 by @garrynewman
Environment recording - capture gradient fog, cubemap fog, volumetric fog volumes and 2D skyboxes, plus light contribution and directional contact-shadow settingsPR #5881 by @metapyziks
Text editing - added selection drag-and-drop within and between text entries, including copy and move handlingPR #5852 by @garrynewman
Directional shadow filtering - smooth hard shadow edges at the highest filter quality while preserving soft filtering45501b3 by @polepie
Bindless textures - sampled-texture lookups now support non-uniform indices in every shader stage by default, with an explicit UniformIndex path for known-uniform indicesba36487 by @handsomematt
SpriteRenderer - now shares SpriteInstance playback and dispatches frame events during the component updatePR #5812 by @garrynewman, @handsomematt
Shader compilation - consolidate SPIR-V optimization into one pipeline using SPIRV-Tools, followed by binding fixups and final cleanup9fb368c by @lolleko
Shader errors - reject unknown render-state enum names during compilation and report the accepted values30d0bdb by @lolleko
Shared shader storage - deduplicate shader modules per program and compress them in shared groups; new output uses VCS 67 while retaining VCS 65-66 loading supportd18c6b8 by @handsomematt
Complex shader - specialize bent normals, normal scaling, normal self-shadow, cloth and transmission, reducing pixel-shader compiler jobs from 5,728 to 8569c3b64b by @handsomematt
Skin and generic shaders - specialize skin bent normals and age textures and use material-controlled backfaces in generic; pixel-shader compiler jobs fall from 512 to 128 and 144 to 72 respectively1e867c5 by @handsomematt
Flatten tool - added Align to Surface to flatten along the slope at the start of a stroke, with clearer plane guidesPR #11397PR #5509 by @polepie, @antopilo, @handsomematt
Game hover cards - limit preview growth on large cards, position away from the footer and screen edges, and avoid covering overlays or lingering after scrolling awayPR #5864 by @devultj
Party size - increased the party limit from 8 to 16 playerscea5870 by @lolleko
Party joining - added a bottom-right status card with leader and follower download progress, connection status, cancel and retry controls4961ff5 by @lolleko
Friends list - show Main Menu when a friend has no game titlebaccd7d by @lolleko
Party joining - display the game thumbnail on the join status carddf943f8 by @lolleko
Rewards - open item-drop progress and objectives in a compact popup beside the navigation railPR #5847 by @devultj
Menu scaling - use consistent-height scaling so the interface stays readable at higher resolutionsPR #5847 by @devultj
Game previews - reduced the hover delay on game cardsPR #5847 by @devultj
Menu polish - refreshed the friends list, party popup and game jam layouts, standardized loading spinners and made store discounts clearerPR #5847 by @devultj
Scene queries - reduce allocations with a dedicated Scene.GetAll enumerator and struct-based internal scene lookupsdb03fa8f67cb55 by @lolleko
HashSetEx - make iteration allocation-free768ac48 by @lolleko
Trace results - pre-size RunTraceAll result lists to reduce resizing allocations6dd3c6a by @lolleko
Hot lookups - avoid closure allocations in input actions, render-target caching, Razor render trees and performance timingsf930a7b by @lolleko
Particle gradients - reuse the default white gradient instead of rebuilding it for every instance0075320 by @lolleko
Steam integration - updated the bundled Steam client libraries to the September 2026 releasec7aba4a
Managed windowing - moved game and panel window ownership, SDL input routing, cursors and controller handling into C#PR #5858 by @garrynewman, @handsomematt
Configuration - moved key bindings, console configuration and config-script execution into C#, with migration of legacy user settings to JSONPR #5858 by @garrynewman, @handsomematt
Uniform scale gizmo - use camera-facing, screen-relative dragging for consistent scaling#11315PR #5734 by @handsomematt
Fast texturing - respect the scene grid spacingPR #5827 by @aylaylay
Function-key shortcuts - remain available while flying or piloting the viewport camera, including Movie Maker recordingPR #5803 by @metapyziks
Startup shaders - reload shaders after compiling them when opening a project, so already-loaded resources use the updated files8d512db by @handsomematt
Launcher news - reserve the news area during startup to prevent layout jumps, load thumbnails instead of full-size images and keep Open button text on one line81f56d9 by @handsomematt
Images - update layout when asynchronously loaded textures change sizedfb7fb7 by @handsomematt
Transparent backgrounds - fixed fully transparent background images tinting the box background in both standard and batched CSS rendering#2881a3ea7fb61bcea by @lolleko
Preformatted text - fixed alignment for white-space: pre text45ac820 by @xezno
Filtered panel shadows - include box shadows in layer bounds so filters do not clip themPR #5836 by @polepie, @handsomematt
Mouse dragging - stop dispatching mouse events to an active panel deleted or rebuilt by its drag-start handler65ebede by @samfadi-dev
Mouse active state - preserve active styling when another mouse button still holds a panel or its descendantsPR #5854 by @garrynewman
Text-entry validation - validate Unicode code points and account for selected text when entering decimal separators or minus signs in numeric fieldsPR #5852 by @garrynewman
Steam lobbies - fixed connection cleanup and stale join attempts; improved timeout handling and error details for lobby, Steam route and game-handshake failures92860cb by @lolleko
TCP fake lag - keep delayed receive callbacks on the tick thread#11786PR #5727 by @handsomematt
Directional shadow hardness - preserve the softness control in later cascades instead of clamping different settings to the same resulta669733 by @polepie
Clustered shadow artifacts - calculate receiver normals outside per-light loops to fix dark lines at cluster boundaries that crawl with camera movementcc9179212bd1db by @corentarts, @handsomematt
Orthographic shadows - skip perspective-only screen-space shadow masks for orthographic viewsPR #5875 by @sampavlovic
Inactive material textures - use explicit fallback bindings without missing-texture diagnostics for disabled features, while retaining diagnostics for active missing texturesc5ac37a by @handsomematt
Environment probes - use non-uniform-safe cubemap indexing when sampling reflectionse834b54 by @handsomematt
Legacy dev materials - restored vertex paint support#11286PR #5723 by @handsomematt
Clutter shadows - respect disabled shadow casting for screen-space shadowsPR #5614 by @polepie, @sampavlovic
Shader sampler defaults - use sampler-state defaults instead of interpreting sampler IDs as render-state IDs0f2c391 by @lolleko
SPIR-V optimizer - match the optimizer environment to the SPIR-V 1.5 modules emitted by Slangf86456e by @lolleko
Linux and macOS shaders - preserve the leading slash on absolute shader paths so compiled shaders are found instead of repeatedly recompilede940641 by @sampavlovic
GPU text - fixed flickering with many TextRenderers by uploading shared glyph and instance data before render display lists are submittedPR #5810 by @sampavlovic
SceneObject batching - split batches when render attributes differ while keeping objects with equal attributes batchable7565be0 by @handsomematt
Decal sampling - use non-uniform sampler access when clustered decal selection differs between pixels08a4d2f by @handsomematt
Slang capabilities - explicitly declare supported capabilities to prevent implicit shader-profile upgrades90e3b6f by @handsomematt
Shader compatibility - explicitly mark the fixed dynamic-reflection texture slot as uniform and remove deprecated HLSL inheritance from MaterialMultiblend56c8c0c35f2efa by @handsomematt
Realtime cubemaps - finish rendering environment maps before building camera views that sample them, fixing one-frame black flickers in gamePR #5859 by @sampavlovic
Cubemap captures - exclude UI from managed and native cubemap rendering, preventing UI in reflections and associated rendering errorsPR #5859c37d247 by @sampavlovic, @lolleko
Vulkan barriers - only include the ray-tracing shader stage in buffer barriers when ray tracing is enabled06c204b by @lolleko
Material expressions - warn instead of asserting on evaluation failures and only mark texture results after a successful lookup5e9b3e138c232e by @lolleko
Recycled scene objects - clear stale tags when creating SceneObjects and SceneModels from recycled native objects97d1b8eebf1fee by @samfadi-dev, @handsomematt
Ambient occlusion - explicitly mark the fixed SSAO texture slot as uniform to resolve shader warnings after the bindless changes630910c by @polepie
Resource bindings - synchronize resource-name allocation and release, and retrieve native resource GUIDs through strong handlesf6eca9a7ca9815 by @solwllms
Asset GUIDs - do not treat duplicate BuildFileList entries as collisions or generate replacement GUIDs for themPR #5843 by @solwllms
Texture GUIDs - fetch the GUID from the loaded texture handlePR #5844 by @solwllms
Brush preview - clear the preview when the cursor no longer intersects terrainPR #5509 by @polepie, @antopilo, @handsomematt
Terrain normals - refresh the baked normal map after sculpting for live lighting feedbackPR #5569 by @polepie, @handsomematt
Concurrent terrain traces - stop sharing a scratch list between simultaneous tracesdf203cf by @lolleko
Party joining - fixed following the leader into a game, cancelling obsolete join attempts and handling download/connection failuresf25715c by @lolleko
Lobby invites - ignore duplicate invitations7b87a8b by @lolleko
Party avatars - fixed clicks being intercepted by avatar contentsbbc913e by @lolleko
Friend invites - fixed clipped invite button textafd93a3 by @lolleko
Context menus - prevent multiple menus stacking on top of each other#1186815e7e75 by @lolleko
Game shelves - fixed shelves containing one game stretching the card across the full width2533e20 by @lolleko
Party download progress - refresh progress indicators as values change and report completion for cached downloads too773c007 by @lolleko
Waiting for the leader - keep downloaded content and wait while the leader sets up a server in the game menu68c3446 by @lolleko
Party invitations - restore invite notifications to the top of the screendb98dea by @lolleko
Game loading - cancel and tear down an in-flight load before starting another, preventing duplicate loading screens, overlays and a potential freezePR #5840 by @devultj
Menu alignment - centered the party deck and fixed clipped news descriptions, store alignment and the leaving countdownPR #5847 by @devultj
Achievement totals - use lifetime achievement and score totals instead of the limited recent-achievement overviewPR #5862 by @devultj
Video exports - wait for space in the encoder queue before submitting each frame, preventing dropped frames when rendering outpaces encodingPR #5880 by @metapyziks
Demo visibility - capture Renderer.RenderOptions so first-person and world-model visibility changes are preserved in recordingsPR #5857 by @metapyziks
Demo prefab targets - defer component initialization until unrecorded components are stripped and prevent Dresser from changing body groups in prefab cache scenesPR #5857 by @metapyziks
Async waits - correctly respect zero and finite timeouts, including time spent processing queued workPR #5812 by @garrynewman, @handsomematt
Exported games - fixed Windows standalone games failing to launch by using an unbundled launcher with embedded game configurationPR #5855 by @devultj
Game data - use the standalone data root directly instead of creating an extra game subfolderPR #11737PR #5856 by @boxrocket6803
Inventory - equip the initial active item when the component starts, including items received in an initial network snapshot, without double-equipping#11787PR #5732 by @handsomematt
macOS content builds - restore executable permissions on downloaded content-builder binaries34a2253 by @polepie
Public repository sync - allow long Windows paths when cloning the public repository49ac137 by @handsomematt
Bindless sRGB argument - replaced GetTexture2D(index, true) with GetTexture2DSrgb(index); use GetTexture2D(index) for linear samplingba36487 by @handsomematt
NonUniform sampler wrapper - replaced the wrapper overloads with GetSamplerNonUniform(index) and GetSamplerComparisonNonUniform(index); compute RW texture indices must remain uniformba36487 by @handsomematt
UV aliases - removed the uv and uv1 semantic aliases; use LowPrecisionUv and LowPrecisionUv1c6032f0 by @wheatleymf
Resolution presets - removed legacy launch presets such as -720; use explicit -width and -height argumentsPR #5858 by @garrynewman, @handsomematt
Painter - added a shared drawing API for panels, HUDs, world panels, textures and command lists, with antialiased shapes, paths, fills, strokes and clippingPR #5785 by @garrynewman, @handsomematt
Panel drawing - added OnDraw(Painter painter) for custom panel renderingPR #5785 by @garrynewman, @handsomematt
Overscroll behaviour - added overscroll-behavior and per-axis controls to disable scroll edge bounce8296281 by @handsomematt
Mesh flipping - added controls to flip selected meshesPR #5786 by @bakscratch
Surface-aligned blocks - hold Shift while dragging to create a block along the hit surface normalPR #5781 by @bakscratch
Graphics presets - switch rendering quality directly from the viewport toolbar080e430 by @lolleko
Multiplayer testing - added editor and MCP tools to host sessions, spawn local instances and migrate the host5acd730 by @lolleko
Hover cards - hover a game to see an interactive preview with play, rating, favourite, review and hide actions87e792911e4a11 by @lolleko
Game context menu - added like, dislike, favourite and hide actions to the right-click menu6a4bd24 by @lolleko
Jam nominations - nominate eligible games from hover cards, the game modal and the end-of-game toast, with minimum play-time checksbab2a6357aa0db by @lolleko
Shader feature values - read a feature by name as an integer in shader code without extra declarationsPR #5776 by @wheatleymf
Mac geometry shaders - added geometry shader support to KosmicKrispPR #5798 by @sampavlovic
GPU text rendering - UI, HUD, TextRenderer and particle text now render directly from glyph outlines on the GPU, staying sharp when transformed or viewed up closePR #5685 by @sampavlovic, @garrynewman
Panel rendering - panels now use the shared Painter backend with batching and cached paint dataPR #5785 by @garrynewman, @handsomematt
HUD drawing - deprecated HudPainter in favour of Painter.Begin, CameraComponent.BeginHud and BeginOverlayPR #5785 by @garrynewman, @handsomematt
Connect Vertices - validate selections before editing and explain why vertices cannot be connectedPR #5720 by @aylaylay
Movie Maker export - capture frames through scene update hooks in the main loop; AV1 is now the default video codecPR #5784 by @metapyziks
Game modals - moved rating, favourite, review and hide controls beside Play, and added a write-review prompt57aa0db by @lolleko
Jam browsing - jam shelves link to the Jam tab, nomination controls use gold styling, and entry cards show Play until eligible088bfc2612c2ec by @lolleko
Storage settings - redesigned downloaded-content usage and type breakdowns, with scan progress, clearer cleanup recommendations and removal confirmationPR #5806 by @xezno
Linux runtime - native Linux x64 builds now use Steam Runtime 4, with updated libcurl dependencies and bundled ICU0df6dcd062c296PR #5808 by @handsomematt
Source setup - simplified bootstrap, added timed build and download progress, and introduced public Setup.bat / Setup.sh with platform-specific artifact downloads and Git update hooksPR #5808 by @handsomematt
Graphics diagnostics - include the graphics environment alongside hardware information in system reports4c60c25 by @lolleko
GameObject cloning - reduced cloning time and allocations; the commit benchmark reports approximately 2.6x faster cloning and 38% fewer allocationsd527633 by @lolleko
Snapshot encoding - moved JSON, blob and packet encoding for join, scene-load and migration snapshots onto workers while preserving per-connection send orderb21367e by @lolleko
Razor outros - keep child content alive while the parent plays its outro animation#1117545fd884 by @handsomematt
Scroll bounce - enforce a hard boundary on edge overscroll8296281 by @handsomematt
Dragging - clear stale drag state when a mouse press lands outside any panelbd40b95 by @ryleigh
Bitmap text - preserve HDR colours, ignore the bitmap pen and align text using layout boundsPR #5685 by @sampavlovic, @garrynewman
Colour emoji - fixed emoji alpha and added Twemoji glyph fallback on Mac and LinuxPR #5685PR #5801 by @sampavlovic
Asset Browser layouts - restore every saved Asset Browser, reuse disabled browsers and remove stale closed-browser menu entries after restartingPR #5557 by @carsonkompon
Publish hotload - recover from hotload by returning to compilation so the wizard uploads fresh assembliesPR #5775 by @devultj
Doo editing - mark scene changes dirty and integrate Doo edits with undo handling#11772PR #5721 by @handsomematt
Mesh mirroring - preserve grouped mesh transforms and scalePR #5763 by @handsomematt
Pivot picker - set the pivot without changing the selected meshPR #5782 by @bakscratch
Mapping materials - use the latest Asset Browser material selection in mapping tools, including Hammer#11399d2ed97c by @handsomematt
FBX import - preserve bone streams when scale helpers are generatedPR #5787 by @aylaylay
Connection serialization - correctly resolve connection types that differ between peersd9ae0de by @lolleko
Targeted messages - prevent recursive nested messages from overflowing the server stackc7fc6de by @lolleko
BytePack - track nesting depth explicitly and limit nested data to 32 levelsdb678e4 by @lolleko
HTTP requests - prevent hostnames resolving to 0.0.0.0 from bypassing loopback restrictionsc354923 by @lolleko
Refractive materials - fixed a VRAM leak from unused framebuffer-copy texturesPR #5791 by @sampavlovic
Clutter LOD - match coverage between perspective and orthographic views#11313PR #5729 by @handsomematt
Resource reloads - preserve procedural resources when mounted files reloadPR #5797 by @ryleigh
Mac rendering - fixed procedural-render callback lifetime crashes and Highlight component crashesPR #5798 by @sampavlovic
Mac editor - fixed game-view input, DPI scaling, Finder folder opening and scene stagingPR #5798 by @sampavlovic
Mac and Linux tools - fixed code editor detection and availability of publish/export controlsPR #5798 by @sampavlovic
Agent transforms - runtime object and parent transforms no longer reset the simulated agent or its path; use SetAgentPosition to reposition it explicitly#11811364a039 by @lolleko
Custom link traversal - preserve the agent landing position when completing a custom linke472ae8 by @lolleko
Navmesh rebaking - discard loaded tiles that the latest bake leaves empty5e0fe16 by @lolleko
Block layout - Add block flow, automatic margins, and margin collapse.a7b5147 by @handsomematt
CSS Grid - Support explicit and implicit tracks, repeat, fr, minmax, named lines, and dense placement.a7b5147 by @handsomematt
Inline text - Support styled spans, wrapping, links, and selection in text-only content.a7b5147 by @handsomematt
Fixed positioning - Add root-local overlays with position: fixed, not separate OS windows.a7b5147 by @handsomematt
Menus and menu bars - Add cascading submenus, checkable and disabled items, and keyboard navigation.29c4c2c by @garrynewman
TreeView - Add a virtualized tree with multi-selection, renaming, keyboard navigation, and context menus.36291e6 by @garrynewman
Rich tooltips - Add Panel.OnTooltip and rich tooltips for panel windows.a8eb15a by @garrynewman
Scrollbars - Add opt-in draggable thumbs, track paging, and scrollbar-width, scrollbar-color, and scrollbar-gutter styling.547dc51 by @garrynewman
PanelWindow lifecycle - Add ownership, modal lifecycle handling, cancellable closing, and HideOnClose.ec730385cbe294 by @garrynewman
Window controls - Add display geometry, fullscreen sizing, opacity, and stacking controls.fbfb3485bde5af by @garrynewman
Doorway primitive - Add camera-aligned doorways with an optional arch.db79f71 by @bakscratch
Particle controls - Add initial rotation and scale controls, plus sprite sequence lifetime control.PR #11450 by @ledernierpoisson
Keyframe editing - Add Shift-click-and-drag gestures to create and remove keyframes.f186283 by @metapyziks
Movie commands - Add movie_stop and an optional filename for movie_save.8850001 by @metapyziks
Game jam page - Show the active jam's theme, schedule, prizes, and entries, with submission and nomination controls.f17e21e by @garrynewman
macOS source support - Add Apple Silicon client and editor support in source; distribution is still being prepared.a180420 by @sampavlovic
Color picker - Add five layouts, alpha and HDR support, saved and recent colors, and numeric input.76dc0e0 by @garrynewman
Keyboard focus - Traverse focus with Tab and Shift+Tab and scroll focused controls into view.9a16c2c by @garrynewman
PanelWindow input - Support mouse capture and Mouse.Delta.f9e9f84 by @garrynewman
Bevel limits - Support bevels beyond the previous 256 limit.2430f60 by @wheatleymf
Mapping workflow - Align stairs to the camera and add face visibility shortcut help.db79f710366f4d
Movie storage - Use a shared movies folder with improved naming and cross-game importing.8850001 by @metapyziks
Export preview - Match the panel size, use fewer buffers, and default to 2x MSAA.67cf084 by @metapyziks
Shader property values - Allow typed values beyond declared ranges while keeping sliders clamped. by @wheatleymf
Model normals and tangents - Improve precision with signed-octahedral and diamond encoding at the same four-byte size.01cd545 by @wheatleymf
Ultra preset - Lower shadow and fog costs and use a more conservative 12 GB threshold for automatic selection.9de061b by @lolleko
Shadow caching - Reuse shadow maps across compatible views and spread local-light shadow updates across frames.8f20bf9 by @sampavlovic
FBX importing - Replace the Autodesk importer with ufbx.9882bd5 by @sampavlovic
Font rendering - Fix font-face load order and text outline color bleed.4ebacde63bddd0 by @garrynewman
Empty text lines - Prevent crashes from newline-only labels.387f295 by @ryleigh
Texture drawing - Fix transparent backgrounds in Draw.Texture.9723a2e by @xezno
Style updates - Schedule layout after inline style changes and rebuild descendant rules after stylesheet changes.683f18a1718425 by @handsomematt
UI sounds - Respect cascade priority.958aa91 by @handsomematt
Prefab updates - Fix geometry updates, nested ownership, and dependency refresh.5d3edd9 by @lolleko
JSON patches - Preserve unchanged siblings.f5996ca by @lolleko
Project startup - Fix template startup settings and handling of unresolved GameSetup scenes.69849f97c3487e
Change tracking - Fix bounds undo and scene dirty tracking, and mark input action edits dirty.00133de318b13e
Curve editing - Clamp group dragging while preserving spacing.e8faf7f
Variant enums - Fix enum handling in Variant.e27b62a by @handsomematt
Launcher delay - Fix delay handling in locales that use decimal commas.ca97128 by @garrynewman
Native tools - Avoid crashes when native tools are unavailable.695cbe4 by @aidencurtis
Gizmo transforms - Fix scope transforms in batched gizmos.a0738bb by @aylaylay
Particle preview - Stop non-looping previews from restarting.b8b8025 by @handsomematt
Linux runtime - Fix .NET 10 staging.PR #11744 by @arcevalis
Dedicated console - Handle negative console widths. by @handsomematt
File watching - Handle inotify limits gracefully. by @aidencurtis
Material creation - Fix Create Material producing empty materials, prioritize selected textures, and recognize additional texture suffixes including opacity.0a2c0f0 by @wheatleymf
Material transmission - Fix transmission interpolation.4ba53e4 by @handsomematt
Display settings - Honor the selected exclusive fullscreen option and recreate the surface when switching VSync.
Monitor refresh rate - Fix monitor refresh-rate handling.de0aa65
Vulkan frame pacing - Remove a main-thread wait to restore CPU/GPU overlap. by @lolleko
Upscaling - Fix crashes during rapid resolution changes and prevent auxiliary render targets from applying or repeatedly reinitializing the main view's upscaler. by @handsomematt
Bone writes - Guard against writes using invalid bone indices. by @lolleko
Yoga layout - Replace native Yoga with Sandbox.Layout; change display: block to display: flex where code depended on legacy flex behavior.a7b5147 by @handsomematt
Autodesk and FBX export - Remove the Autodesk SDK and Hammer FBX export; DMX and OBJ export remain available. by @sampavlovic
2D API coverage - Not all 3D shape and joint APIs are supported, including heightfields and upright/parallel joints.ae6d488
Editor upscaling - Upscaling is disabled in tools and the editor Game view.
Linux support - the native engine, editor tooling and client build and run on Linux, packaged and shipped to Steam as a dedicated depot.
Linux builds are produced inside the Steam Runtime (sniper) container and bundle their own .NET runtime, so they run without a system install.
Main menu redesign - a new front page with navbar and condensed sidebar, a floating footer, game tiles and spotlight rows, activity and in-game-now feeds, and the reward drop and popup.
Menu music, with an easy API for playing it: Game.Music and MusicComponent.
The mounts page is rebuilt as a MountCard grid with mount extensions alongside it, and BaseGameMount exposes what the card needs to show.
border-shape generalises border-radius from rounded corners to an arbitrary polygon or circle, drawn with shape SDFs so edges antialias and borders trace the shape, with matching hit testing.
CSS colours can go above 1 for HDR - color, border-color and background-color all take them, and the parser understands brightness multipliers like rgba( white multiplied by 4, 0.5 ).
background-clip, including clipping a background to the text sitting on top of it.
Elliptical border-radius, via the h / v syntax and the two-value longhands.
Select a face loop when editing meshes.
Select all similar meshes and models, the same way Hammer does.
A bounds toggle in object mode.
Shaders can be recompiled in batches from an asset browser selection, through a proper compile queue rather than only ever compiling the last file selected.
Switching tabs in Project Settings without saving now warns you about unsaved changes.
MCP toolsets for driving and inspecting the UI - dump the live panel tree, probe panels, list matched rules, hit test, read pixels, screenshot, set styles and pseudo-classes, measure text and check batch counts, all without editing a file.
A UI parity test scene, so CSS behaviour can be eyeballed side by side against a browser.
A full-screen Settings page with search, hover descriptions and fine-grained post-processing controls.
Automatic graphics quality selection on first launch based on GPU and system memory.
A new launcher built with the Panel UI system, with running-editor detection and support for dropping projects into the window.
Panel-based native windows through PanelWindow, including clipboard integration and OS file and text drag-and-drop delivered to panels and games.
TextEntry undo and redo, read-only mode, improved Unicode and IME input, text drag-and-drop, multiline caret scrolling and more reliable selection behavior.
Number inputs can be scrubbed by dragging their labels.
Camera depth fade for SpriteRenderer, ParticleSpriteRenderer and ParticleTextRenderer.
ParticleSphereEmitter distance bias and one-sided axis controls for domes, lines and partial sphere emission.
ParticleEmitter.EvaluatedDuration and EvaluatedDelay expose resolved runtime timing values.
A Panel Gallery application for testing controls and UI behavior.
Optional material overrides when creating models from Asset Browser selections.
Scene tabs can be reordered by dragging.
Bone names are shown when bone gizmos are selected or hovered.
Slang uniformity validation catches unsafe bindless sampler indexing; sampler indices that vary across a wave must use NonUniform().
The UI blended in linear space against sRGB targets, so anything with alpha came out wrong. The shaders encode their own output for gamma blending now and it composites correctly.
Text is rastered unpremultiplied, so text textures are straight alpha like every other texture and batch together with regular boxes instead of needing their own blend mode.
Glyph overhang is no longer clipped out of the texture, sampling is clamped so neighbouring glyphs can't bleed in, text isn't mip-biased, and text can carry HDR colours.
Rich label spans use their own font size.
HDR colour used to blow out anti-aliased edges into a hard step; edge softening keys on coverage rather than alpha, so glyphs and rounded corners keep an SDR-shaped ramp while the solid interior still carries HDR for bloom.
Boxes, borders, clips and shadows now share one rounded-rectangle SDF and one gaussian blur, so a corner looks the same whatever draws it.
filter: blur and drop-shadow use a real gaussian instead of an approximation, and the colour filters use the CSS colour matrices evaluated in sRGB, like the web.
CSS gradients are evaluated in the pixel shader from a gradient table rather than baked into an image per panel, sized and placed by background-size and background-position like the web, with the angle convention no longer mirrored.
Gradient stop positions can be pixel lengths rather than only percentages, and a gradient to a corner leans with the box the way the web draws it.
Corner radii resolve the way the web does, including scaling down when adjacent radii overflow.
The batched box shader evaluates only the clips an instance actually has, and clips before shading rather than after; the clip ramp follows the screen pixel on world panels so the edge stays a pixel wide however the panel is angled.
A perf pass out of profiling the menu: PanelRenderer no longer inverts a matrix per panel per frame, layout and length values sit behind the dirty gate, scrolling doesn't invalidate the whole layout, Panel.GameObject caches from its parent, Razor skips bind updates when there are no binds, Texture.MarkUsed early-outs, CameraComponent reuses its mip-gen command list and Package.FullIdent is cached.
Screen panels can render before post processing, are snapshotted for the render thread, and have a stable sort order when z-index ties. Early UI is off by default now and the camera opts in, since it costs a seed and composite pass on the HDR buffer.
Menu music ducks while videos with audio are playing.
Undo works properly on Hide and Isolate actions.
Asset Browser directory watchers are shared and lifecycle-managed, and filesystem notifications dispatch safely.
Shader compile errors are no longer swallowed by the compile step.
Aftermath outputs the shader that crashed the GPU, so there's some context to debug with.
mimalloc's debug knobs are kept out of Retail, and its errors are recorded without allocating.
Panel applications avoid allocating scene memory they never use, and Panel windows draw without the scene rendering pipeline.
Menu videos select quality from their displayed size, limit and rotate concurrent playback, crossfade cleanly and stop decoding while not being drawn.
Launcher startup work was deferred and Vulkan discovery optimized, reducing measured startup-to-visible-window time from 2.12 seconds to 0.98 seconds.
Global-space scaling treats a multi-object selection as one group around its center; local-space scaling and rotation operate around each object origin.
Movie Maker creates missing playback targets by default, handles MapInstance children correctly, records fewer redundant Enabled tracks and keeps maps visible while scrubbing recorded demos.
Curve presets preserve the current curve range by default, with an explicit option to apply the saved range.
Fractional mouse-wheel input is preserved for high-resolution wheels and trackpads.
Base package code and controls now live in the engine, reducing package startup and dependency overhead.
Shared package UI controls retain source compatibility where they do not conflict with older navigation APIs.
Baked envmaps crashed on higher quality settings - probe coefficients were read out of bounds, which the new slang backend no longer implicitly safeguarded.
Corner radii changed shape with the root panel's scale: a plain border-radius: 8px rendered as a circle at 1080p but a progressively flatter ellipse above it.
Movie bone animation: several places resolved the animator from the wrong scene, bone overrides weren't cleared when bone track data was deleted, and "Remove Empty" was slow because it updated the track list after every removal.
Animgraph event dispatch survives re-entrant tag handlers.
A square corner where opposite radii overlapped, and a wrong box-shadow silhouette on tall radii.
A vertical border radius transitions from the horizontal one instead of snapping.
Hit-testing treats rounded corners as ellipses, matching how they're actually drawn.
Downsampled render targets no longer round to zero.
A batch of CSS parser fixes: text-decoration: none was ignored, an empty url() threw instead of resolving to nothing, aspect-ratio didn't accept none, hsl() failed to parse with spaced-out components, a child selector didn't match when nested in another block, Panel.SetAttribute threw on a null key, and scroll offsets moved even with nothing to scroll.
The text measure cache keys on height when text-overflow is set, so an ellipsised label doesn't reuse a measurement taken at a different height.
Nav active state ignores the query string.
Gizmo.Position signature restored.
Menu polish: sidebar nav button alignment, the pill-shaped cancel load button, MapSelector text sitting under a gradient, home page content scrolling under the tab bar, right-hand column padding matching the sidebar, centred section-head content, and GameGroup titles matching other sections.
Max-width centring shifted from the page content to the whole menu now that navigation is on the side, and widened to a 21:9 size.
World-space animation transforms remain correct when root motion data exists but root motion application is disabled.
Launcher fixes for variable DPI, missing samples directories and incorrectly positioned popups.
Fixed absolute-positioned UI children collapsing against unpositioned parents and inherited inline styles failing to load, including Settings pages remaining visible after navigation.
Focusing a TextEntry repaints both affected panels so its caret appears immediately.
Shared dynamic textures no longer render stretched in every panel after the first one using them.
SceneObject.OnAfterRender now runs after every primitive of a multi-material model rather than after its first draw call.
ResourceCompiler no longer mistakes serialized component type names such as Sandbox.Decal for asset dependencies.
Velocity-facing particles preserve their position and orientation as damping reduces velocity to zero.
Curve handles work when a curve contains one key or has a length of one.
Inspector group paste works correctly.
Edge Arch undo works correctly and matches the behavior of the bevel tool.
Default combo keybinds display correctly.
Absolute asset paths work correctly on Linux.
Linux editor file watching, managed launchers, filesystem paths and packaged .NET runtime behavior were corrected.
Package builds fail clearly when no assemblies are copied and carry addon assemblies correctly between build and upload runners.
PackageCard styling now lives in the engine-owned base controls so uses outside the main menu, such as the organization modal, render correctly.
Preserved gizmo and editor-tool PNGs when filtering material source files from package builds.
Obsolete CitizenAnimationHelper enum aliases continue to resolve for existing packages.
Protocol 29 removes the package.base and local.base package. Its code now lives in the engine and its assets live under core. Remove explicit base-package references and calls to CompilerExtensions.AddBaseReference, then rebuild your package.
Removed legacy navigation compatibility types that conflict with old packages: Sandbox.UI.NavHostPanel, Sandbox.UI.NavLinkPanel, Sandbox.UI.INavigatorPage and the old Sandbox.UI.NavigationExtensions. Use the equivalents in Sandbox.UI.Navigation.
Removed public SceneCamera.OnRenderPostProcess and SceneCamera.OnRenderOpaque. SceneCamera.OnRenderOverlay and SceneCamera.OnRenderUI are now internal. Use CameraComponent.AddCommandList with the appropriate rendering stage.
Removed SrgbWriteEnable0 through SrgbWriteEnable7 render states. Render-target color space now controls sRGB encoding; custom shaders should remove assumptions based on these states.
Removed the standalone CSS shadow and outline shaders, now folded into the shared SDF box shader.
Removed BoxDrawDescriptor.PremultiplyAlpha and the per-instance premultiply flag now that text uses straight alpha.
Removed the featured item from the item store.
Removed desktop buttons from the menu UI.
Removed unused scene-system code and unnecessary work from CFrustum construction.
HTTP/2 support to Sandbox.Http.RequestX.
Can create a single model from a selection of multiple mesh files.
Movie Maker command for creating sequences from selected tracks.
More diagnostics to overlay_fps, including: main-loop and rendered frame rates, % of frames not rendered, and more.
overlay_fps 2, with a frame-time shuttle intended for analysing slow-motion recordings.
Circle-of-confusion debug view for Depth of Field.
Ground tracing to the position editor tool.
Scoped file-watcher suppression system for operations which modify several related files.
New C# native project and solution generator, replacing VPC.
Safety checks preventing render targets from being created with zero mip levels.
Explicit Vulkan synchronization between texture clears and subsequent GPU work.
Terrain rendering with multiple cameras.
Terrain meshlets are now culled independently for every rendered camera view.
Terrain culling now uses the latest camera frustum, removing a one-frame delay.
Terrain culling now supports both perspective and orthographic views correctly.
Shadow passes continue to draw the complete terrain clipmap so off-screen terrain can cast shadows.
Depth of Field rendering for both near and far blur, front-blur compositing and coverage.
Handling of empty and undispatched Depth of Field tiles.
Depth of Field rendering order around transparent objects.
Depth of Field support for first-person viewmodels by remapping their depth range.
Depth of Field reliability on AMD GPUs with explicit resource barriers.
Upgraded FSR from 3.0.3 to 3.1.4.
Vulkan support with Vulkan 1.3 cleanup.
Frame-time diagnostics while keeping overlay sampling and drawing allocation-free.
Movie Maker undo behavior.
Hidden-geometry editing so edges and vertices belonging exclusively to hidden faces are also hidden.
The orientation gizmo so it no longer blocks looking around.
MeshComponent handling of ExcludeGameLayer when rendering shadows-only meshes.
Temporary-effect processing by avoiding temporary list allocations.
Cloud asset installation so packages are only processed after all their files have downloaded.
Asset compilation by avoiding recompile requests for assets which cannot be recompiled.
Terrain disappearing or being incorrectly culled in secondary camera views.
Terrain culling using stale camera information.
Incorrect world-space frustum planes when reading the current native render view.
Black lines around Depth of Field.
Colour bleeding around blurred areas.
Square artifacts in near Depth of Field.
Stale pixels from unused Depth of Field tiles being sampled during compositing.
Custom transparent objects being clipped or rendered in the wrong order by Depth of Field.
Viewmodels using a different depth range from the world during Depth of Field processing.
Depth of Field corruption on AMD GPUs.
Vulkan texture clears racing with later GPU work.
Texture samplers becoming stuck at mip level zero.
Slang renaming or corrupting real shader resources with an _0 suffix.
Temporary render targets calculating an incorrect maximum mip count.
Engine accepting render targets with zero mip levels.
Engine reading the wrong MSAA configuration.
Bark materials allowing meshes from separate props to be combined incorrectly.
Streamer Mode popup behavior.
Avatars displayed while Streamer Mode is active.
Deleted VPC
Deleted checked-in third-party binaries and source trees which are now downloaded during setup
Deleted Fossilize and its bundled dependencies.
Deleted the obsolete fur ShaderGraph asset.
Reverted Steam controller glyph support as part of moving back from development SDL 3.5 builds to stable SDL 3.4.14.
Bloom 3 — a rebuilt, higher-quality bloom pipeline.
Static Shadows Cache — caches shadow rendering for static geometry to cut per-frame cost.
NVIDIA DLSS support, available alongside FSR3.
Steam Controller support
Streamer Mode setting to hide sensitive personal info.
CSS `isolation` property support in the UI/panel system.
Show Pivot Transform in the editor gizmo
Mapping rotation nudging
Model builder bindings for constructing models from code.
Expose sun direction/color to Shader Graph, plus new sRGB colour-transform nodes.
Public `Index` on `SamplerState`s for bindless rendering.
`Input.SetLastAction` API.
`SurfacePrefabCollection.BulletImpactDecal`.
Allow `[TimeRange]` and `[ValueRange]` attributes on fields (not just properties).
"Create Decal" entry in the context menu.
Tint support on the fur shader.
Mesh editor: hide faces, box-select for edges/faces, and component collapse menu actions.
Mesh editor: import scale with unit presets that remembers your options.
Bring back multiple asset browsers.
Add optional mounts to the asset picker.
Mounts: map thumbnails.
Quake maps: support for 6-sided skyboxes (`_sky`) and sky surfaces in thumbnails.
MCP compile status reporting.
Debug names on command-list error messages for easier diagnosis.
Constructor overload taking an extension on `FilePathAttribute`. Thank you @boxrocket6803
Terrain: option to show the grid, and show it outside the paint tool too. Thank you @PolEpie
Shader toolchain moved to Slang — `vfx_vulkan` now compiles with the Slang compiler; built-in shaders are offline-compiled and ship as embedded SPIR-V, removing the runtime DXC dependency.
Vulkan 1.3 is now the minimum, using core APIs instead of extensions: `VK_KHR_dynamic_rendering` is mandatory, `VK_KHR_synchronization2` adopted, `VK_KHR_dynamic_rendering_local_read` used when available, and redundant render-pass begins are skipped when render state is unchanged.
Map aggregation backport from Deadlock — aggregate meshes and props in the map builder, more aggressive aggregation and open-space pre-merge parameters, and aggregates submitted via `MultiDrawIndexedInstancedIndirect` with self-managed culling.
Physics collision event optimizations.
Clutter allocation optimizations.
Improved GPU crash reporting, with precise buffer stages specified for buffer operations.
Improved package download reliability.
Friends list improvements.
Primitive tool UX pass.
Show localized strings when using `[Title]` or `[Category]` attributes in the editor.
Editor reopens in ortho view if it was last closed in ortho.
Refactored the viewport orientation gizmo to render in-scene.
Mesh editor: bevel & edge-cut tools now support undo; ctrl/shift selection fixed.
NS2 model loader updated to support animations.
Resolve modeldoc material slots by their name.
Specular is now always enabled in the complex shader.
Tints now work on Hammer aggregates.
Updated the Citizen skin clothing preview material.
Reward drop tweaks.
Include library and transient assets in editor file networking.
Terrain editor quality-of-life improvements. Thank you @PolEpie
Improved `TcpChannel` to stop stuttering caused by non-async reading. Thank you @deadmonstor
`Http.RequestStreamAsync` now streams the response instead of buffering it. Thank you @Gamah
Font loading logs an error and falls back to the system font instead of hard-failing. Thank you @Mykol-Word
Changed a fallback message from an error to a warning. Thank you @Mykol-Word
Clear the resource loader to ensure a clean state. Thank you @deadmonstor
Fix A2C artifacts on hair and when MSAA is off.
Movie Maker: `Enabled` property playback fixes.
Fix blurred textures when using upscalers.
Remove the flashing red background in the pause menu while the thumbnail loads.
Fix Hammer `light_environment` SkyColor not applying to the DirectionalLight.
Fix Hammer `physic_entity` prop not applying its MaterialGroup at runtime.
Fix default baked Hammer lights casting dynamic shadows.
Kill the orientation gizmo when entering play or repossessing.
Fix nav agent avoiding the goal when it is next to a wall.
Guard Aspect against NaN and build `CameraComponent` FoV from the camera rect instead of the screen's.
Remove receiver plane depth bias to fix shadow-acne quad divergence.
Fix shadow-mask textures having a 1-frame creation delay.
Fix ragdoll bounds being wrong.
Read loop point from the WAV cue chunk, and fix load options not defaulting so every sound looped.
Don't cache `overridesDrawGizmos` on component instances.
Fix mixer processors not applying to child mixers.
Fix mesh component vanishing after editing a mesh in a prefab.
Height coverage clipping fix.
Fix `[SHADERGRAPH]` UV on the triplanar node.
Fix `SliderControl` ignoring `ShowValueTooltip`.
Physics debug draw now requires cheats or the editor.
Fix multi-scene hotkeys.
Fix heightfield contact material hole check.
Fix gizmo lines exploding on very long surfaces.
Quad slice falls back to the four sharpest corners.
Draw bad-face outlines in mapping mode.
Fix stack overflow computing submerged volume for many-sided hull faces.
Applying material to faces now recomputes texture coordinates so they aren't stale.
Fix nudging not correctly updating the texture.
Fix terrain material update using the wrong stride.
Make the asset transient string ring per-thread to fix garbage paths.
Mesh component blob fixes.
Fix nested compiler search paths.
Fix an appendstructurebuffer Slang regression.
Fix editor validation errors/warnings.
Fix missing barrier for UAV clear.
Forget scene-tree expansion state for scenes that have closed.
Stop the GPU resource viewer keeping the textures it lists alive.
Expire `NativeResourceCache` entries ourselves instead of via `MemoryCache`.
`vfx`: stop serialising uninitialised memory into compiled shaders (made them non-deterministic).
Fix sync vars getting stuck due to dropped/delayed ACKs. Thank you @deadmonstor
Mark create messages as sent for every object in a join snapshot, including ancestors. Thank you @deadmonstor
Fix `NullReferenceException` in `WaterVolume.OnFixedUpdate`. Thank you @Nolankicks
Fix off-by-one in the `Texture.GetPixels` destination array bounds check. Thank you @Relicjamin-jv
`BaseFileSystem.FileExists` returns false instead of throwing on a null/empty path. Thank you @boxrocket6803
Fix `Steam.SteamId` for dedicated servers. Thank you @766974616c79
Removed the DXC dependency and dead D3D11 backends from `vfx_vulkan` (Slang migration)
Removed legacy Vulkan code paths superseded by mandatory dynamic rendering
Removed the C++ ATL dependency
Mapping object selection can move an object's pivot while keeping its geometry in place.
Scene tabs and docks can now be closed with the middle mouse button.
Asset categories can now be nested in editor category displays.
Orthographic X, Y, and Z editor views now display appropriately oriented grids. Thank you @A-PS1999!
Newly saved materials automatically find matching nearby textures by filename and prefix.
Box Colliders can be resized to the combined GameObject bounds from the inspector.
Clicking the selected orientation-gizmo axis again toggles from orthographic to perspective view.
Props now expose an `OnGibsCreated` callback for accessing and managing generated gibs. Thank you @Tripperful!
Scene Mapping now includes a streamlined find-and-replace material tool.
Selected edges can now be extruded along a chosen edge path in the Mapping tools.
Mapping vertex and edge selections can display their dimensions with a selection-bounds toggle.
Mapping now supports one-click full edge-loop cuts.
Shift duplicate nudge to both object modes.
Ability to use custom code editors.
Controller joystick deadzone customization.
Mapping clip and mirror planes align more intuitively, display tool shortcuts, and provide more consistent Apply and Cancel behavior.
Invalid style-property assignments now produce warnings instead of intrusive error popups.
`AnyOfType` property controls support inline editors and optional dropdown presentation.
Scatterers generate faster through parallel ground traces, more uniform distribution, and cheaper collider placement.
Use extended list selection behavior for TreeView.
Increase subtool icons to 24px for clarity.
Show DPI scaled resolution in play mode resolution dropdown.
Engine build time by 15%.
Blendable materials expose world-mapping dimensions so Mapping tools scale them correctly.
Frame-buffer and refraction shaders no longer become excessively blurred when viewing model backfaces.
Fast hotload remains reliable across repeated incremental changes and edits spanning multiple files.
Sprite Editor widgets correctly fill their docks under the new docking system.
Mapping face texture scale is preserved when a mesh is reloaded.
World panels accept configured actions and controller input while the mouse is active. Thank you @Mykol-Word!
Screen-space shadows no longer error when lights temporarily lack scene objects.
Gradient editing once again updates live.
Undoing inspector transform changes no longer deletes Mesh Component geometry.
Mapping lasso selection starts reliably while dragging and records selection as an undo operation.
Network proxies using transform sync flags no longer jitter when interpolation encounters locally controlled components. Thank you @deadmonstor!
Dragging the orientation gizmo orbits around the focused pivot without unexpectedly snapping the camera.
Gradient point controls no longer disappear when selecting points, presets, or the editor panel. Thank you @AustinDotCodes!
Reflection cleanup no longer errors when encountering default immutable arrays.
Sticky popups remain usable in narrow inspector layouts instead of collapsing to a tiny size.
Editor mouse capture initializes correctly when docks take focus during startup.
Late-joining clients now receive and display networked Mesh Component geometry. Thank you @deadmonstor!
Make "Render Backfaces" in glass shader functional.
Fix editor viewport video recording.
Fix lag caused by Terrain when in the scene Mapping Tools.
Fix certain assets not mounting from addon packages.
The ability to invite friends directly from the friends list.
Per-entry clutter controls for shadows, collision and local scale.
Sound import options for mono conversion, silence trimming, loudness normalization and gain, with improved live previews.
Mounting support for maps and assets from Serious Sam HD: The First Encounter and The Second Encounter.
Baked-viseme lipsync through `SkinnedModelRenderer.SpeakSound`, with realtime analysis as a fallback.
Height-based coverage masking for decals.
Recent projects in the Windows taskbar jump list.
Voice subtitles.
Replaced the editor docking system with Qt Advanced Docking System, improving scene tabs, layouts, splitter proportions, redocking, fullscreen and viewport overlay behavior.
Movie Maker can now record and edit tag sets and flag enums, including properties needed for first-person recordings.
Expanded vertex painting with flood fill, noise, occlusion, curvature, inversion, colour picking and brush improvements.
Extruded mesh faces now inherit UVs from neighbouring faces.
Scaling game objects with the gizmo now preserves their visual proportions.
Reduced network log noise by respecting debug settings and removing duplicate player-joined messages.
Clarified package identifier validation to mention all supported characters.
Terrain performance with improved optimization, including culling.
Support for multi-drawcall LODs in clutter GPU-driven path.
Unpredictable game-setting ordering and incorrect initial dropdown values in the Create Game dialog.
Editor popups remaining open after their owner was destroyed.
Hammer lights losing shadows and wide spotlights receiving excessive shadow bias.
Batched sprites leaking render attributes and causing scene-lighting flicker.
Material Editor controls remaining locked after an untitled material was first saved.
Blocked `ComImport` in sandboxed addon assemblies to close a remote-code-execution path.
Client asset search paths and loading on Linux.
Joining clients receiving objects excluded by `INetworkVisible`. Thank you @deadmonstor!
Translucent sprites rendering in opaque passes and interacting incorrectly with skyboxes and screen-space shadows.
Linux dedicated-server startup failures caused by stale CRLF line endings.
A networking exception when snapshotting an object whose parent was being destroyed.
`TextEntry` throwing or exceeding `MaxLength` when pasting text.
Movie Maker tracks becoming misaligned when recordings began at different times.
Publishing local projects, parent-package validation and targeted-addon code inclusion.
Dedicated-server play sessions not activating correctly in the editor. Thank you @deadmonstor!
Map collision failing to rebuild after compiling in Hammer.
Client-owned props being unable to spawn gibs when the owner was not the host. Thank you @deadmonstor!
Rotation-gizmo sensitivity changing with camera distance. Thank you @boxrocket6803!
MovieMaker keyframe bugs.
First-party inventory, weapon, ammo, camera shake, camera modifier, tracer, and scene anchor APIs.
Targeted Addons so published code can target a parent game package, including a Target Game option in the project wizard.
An editor MCP server so local AI agents can inspect and drive open projects through discoverable editor tools.
Screen-space shadows for lights, including support for soft contact shadows and viewmodel shadowing.
Static GameObjects for static-layer rendering and future static shadow caching.
A viewport orientation gizmo for quickly orbiting and switching between orthographic axis views.
Lip sync generation support to the sound editor.
Mapping texture lock, mesh edge path selection, and refreshed mapping icons.
Draw count and stride parameters to indirect draw calls.
A local loopback networking socket for multi-instance testing. Thank you, @dictateurfou!
`PlayerController.RestoreGrounding()` for restoring grounding after temporarily losing it. Thank you, @2czu!
A camera ignore tag set to PlayerController camera collision. Thank you, @nixxquality!
Missing menu binding support for map list context menus. Thank you, @766974616c79!
Multi-edit support for particle resources. Thank you, @PolEpie!
Rich text label support for the `style` attribute. Thank you, @kEllieDev!
Shortcut on tooltip of Play/Stop, pause and eject.
GPU clutter rendering with per-view GPU LOD selection and culling for painted, volume, and procedural instanced models.
Polygon mesh serialization by storing versioned binary blobs for faster loads, faster saves, smaller files, and larger maps.
The fur shader with cleaner packing, fewer compiled textures, better color-space handling, and new optional lighting controls.
The GPU profiler with accurate nested timing, fixed editor frame timing, and clearer scope names.
Performance API reporting with idle timing, accurate timing accumulation, and higher precision GC pause reporting.
Terrain rendering by using cull distance for holes and bounds so clipped terrain avoids pixel shader work and keeps early-Z.
Bloom threshold behavior and made bloom intensity more linear.
Shader compilation recovery when existing compiled shader data is corrupt or still contains a git-lfs pointer.
Single-asset addon publishing so code-path files such as stylesheets are included.
Asset Browser behavior so Find In Asset Browser clears the current search before selecting an asset.
Scene drag-and-drop for textures, images, and 2D view placement.
AddressSanitizer builds so they are easier and faster to use when debugging native memory issues.
Clothing metadata with missing clothing categories.
Sound previews with playback shortcuts.
Benchmark timing by moving forced GC out of the measured first frame.
When entering play mode, carry the current selection to the runtime object.
ByteStream copies reading pooled buffers after disposal and hardened BytePack against deeply nested payload crashes.
Occluded sounds briefly playing at full volume when they start.
Menu boot errors when sound occlusion traces run before surfaces are loaded.
Nested prefab instances losing data when applying prefab changes.
Old sprite files loading as white or invalid textures when legacy loop points were present.
Sprite opacity incorrectly affecting scissor clipping cutoff.
A Sprite string allocation issue that could scale badly. Thank you, @K3rhos!
Doors playing their close-finished sound when a game launches. Thank you, @Fitamas!
Terrain brush size being treated as a radius instead of a diameter. Thank you, @PolEpie!
Terrain holes rendering black or crashing on AMD hardware.
Terrain requiring at least one valid splatmap before continuing. Thank you, @766974616c79!
Viewmodels and game overlays being overwritten by world depth prepass effects.
Vertex explosions on skinned instancing.
Shadow receiver depth bias producing bad shadow artifacts and validation issues.
Several Vulkan validation issues.
Material editor shader variable duplicates resetting properties when toggling features.
Movie keyframe merging and reduction edge cases when loading older movie projects.
GameResource inspectors prompting to save unchanged assets and SpriteInspector not enabling Save for some edits.
The editor console ignoring its filter after compiling.
Editor ray casts at non-100% DPI. Thank you, @PolEpie!
Badge components not updating when their value changes. Thank you, @zxcPandora!
GameObject transform control margin in the editor inspector. Thank you, @Tripperful!
DontDestroyOnLoad survivor hierarchy preservation during non-additive scene loads. Thank you, @deadmonstor!
Pressing Escape in the editor opening the pause menu instead of freeing the cursor.
Targeted addons not swapping to the hotloaded parent game assembly.
Radius( 0 ) traces missing everything.
PlayerController press interactions not searching parent objects for pressables.
AssetPreviewWidget null reference errors.
VFX serialized data compatibility for newly versioned data.
Fix Eject keybind inconsistency.
AssetBrowser.FocusOnAsset isnt suitable for filter clearing.
Removed obsolete `CameraComponent.ISceneCameraSetup`.
Movie keyframe connection modes (_Default_, _StartBlock_, _EndBlock_) with Split and Join operations, allowing overlapping keyframes for hard cuts.
`overlay_fps`, an on-screen frame pacing overlay showing a live frametime strip, distribution histogram and GPU time for diagnosing frame delivery.
HtmlPanel now styles `h2`, info, warning, success and strikethrough elements to match how they render on the web.
Undo/redo and full JSON operation support for binary data, so embedded terrain operations carry their binary payload across edits.
Editor gizmo drawing is dramatically faster — the handle cache is now respected and per-object LINQ/texture loads were removed (MSC main scene dropped from 55ms to 19ms).
Directional shadows are skipped for the 3D skybox, saving 64MB of memory.
Orthographic views now sort sprites by view-axis Z instead of distance for correct ordering.
Reduced navmesh allocations and tuned the network compression pool target span for lower overhead.
Window activation/focus events now work on any platform by handling them through SDL instead of Win32.
The ShaderCompiler can recompile `shader_c` files against the current engine shader sources.
Benchmark runner improvements, now exposing P50 (median) timings that are more resilient against hitches when comparing regressions.
Network debugging improvements and heartbeats are now sent as reliable packets to avoid being kicked while idle. Thanks @DEADMONSTOR!
Fixed vsync micro stutter and input latency when `fps_max` is set above the monitor refresh rate by clamping the cap and restoring drift compensation.
Fixed gizmo regressions in the editor.
Fixed painting at full opacity not removing all residuals.
Fixed `IsSceneSaved` not being evaluated for `ShowIf`/`HideIf`, and fell back to reflection to access internal members in conditional visibility attributes.
Fixed a mix-thread use-after-free by reference counting `CAudioStreamManaged`.
Fixed a malformed package exception.
Fixed map compiling by removing path narrowing/stripping that only made sense for CS2/Dota mods.
Fixed a debug assert that always fired for recursive references at higher ref depths.
Runtime flags are no longer persisted.
Storage arrays are now hidden in the terrain storage editor.
Fixed `Networking.IsActive` not being true `OnStart` by mimicking how `CreateLobbyAsync` creates lobbies. Thanks @DEADMONSTOR!
Fixed `SyncFlags.FromHost` properties being overwritten by client refresh messages. Thanks @DEADMONSTOR!
Fixed singular snapshots receiving a stale snapshot. Thanks @DEADMONSTOR!
Sprite loop points - draggable start/end loop markers in the Sprite Editor, so animations can have a lead-in section, a looping section, and a lead-out.
AutoLOD material culling & replacements - cull or swap materials on automatically generated LODs to cut draw calls at distance.Closest point on heightfield - query the closest point on a terrain heightfield, matching the other physics shape types.
Menu discovery overhaul - a load of new discovery content on the menu, and the Games page now has you pick a category first.
Terrain Tool improvements - reordered brush types with shortcuts, a clearer current-brush display, a simple ring brush mode, brush rotation, size/opacity shortcuts, a higher max brush size (2048), and you no longer need the terrain object selected to paint.
Package video controls - package trailers now have a video player with volume, click-to-pause, and remembered volume, with controls that hide until hovered.
Publish Wizard - the License page now lists referenced files, and the "Create Sprite" context menu uses the image file generator so textures compile correctly when published.
Resource Compiler fixes - a batch of fixes uncovered while importing large asset sets.
TextureInspector - textures without a source file are no longer editable, preventing accidental corruption of compiled assets.
Asset browser - better handling for missing pins.
Automatic receiver plane depth bias - re-added to reduce shadow acne on cascaded, point and spot lights.
Allocation optimizations - a wide pass reducing per-frame allocations across physics traces, particles, network sync, DotRecast navigation, JSON diffing and deserialization, fixed-update interpolation buffer walks, anim param boxing, and clone fast paths.
Cached reflection property lookups in JSON deserialization for faster object loading. Thank you @PatrickJnr!
Glass and translucent shaders now render correctly in editor thumbnails and previews.
`g_flTime` in shaders is now correct when exporting movies.
Fixed heap corruption caused by bad meshoptimizer usage during AutoLOD face-set simplification.
Fixed prefab render-options cloning.
GameObjectSystems and their properties are now serialized in a deterministic order.
Fixed nested prefab instance GUID stability and break/reparent edge cases.
Vertex layouts are now freed on hotload.
UI textures no longer flash a red "missing" texture while streaming in, and animated textures are correctly marked dirty.
SDL clipboard warning is no longer logged on success.
`Project.CacheAssemblies` no longer breaks dedicated servers running in local project mode.
Fixed a potential null-reference exception during resource disposal. Thank you @dimmerly!
Fixed margin adjustment in fullscreen. Thank you @boxrocket6803!
Area-light (LTC) shading path - removed the unused Linearly Transformed Cosines area-light branch from standard forward+ lighting. It was the peak-register path compiled into every lit shader, so removing it frees a large amount of VGPRs, improves GPU occupancy and eliminates register spilling - up to ~26% faster lit passes even in scenes with no area lights.
Games are mounted in the main menu
Maps from mounted games can be played
Menu framerate limit option.
Editor: Mounts are grouped by installed / not installed, with a search bar
Editor: LOD and material group selector in the model preview toolbar
Editor: Mip level selector in the texture preview
Editor: Inset Tool for mesh editing
Text renderer billboard mode.
Scale snapping in the editor.
Terrain editor trace support.
`Collider.ComputePenetration`.
Local-space bone following for particles via `ModelEmitter`.
Movie recorder support for custom track names.
Publish Wizard license warnings.
Quake mount support for loose files, not just files inside a pak.
Whitelist System.Memory
Whitelist System.ReadOnlyMemory
Whitelist System.IO.InvalidDataException
Whitelist System.Runtime.CompilerServices.Unsafe.SizeOf<T>()
Whitelist System.Runtime.CompilerServices.InlineArray (For compiler generated code only)
GTAO optimization.
General shader fixes.
IRenderThread components are now stored off for the render threads.
Hoisted `sc_reject_all_objects` out of the per-object cull loop.
Removed the unused `s_nNumOutstandingDrawLists` counter.
Double-checked locking in `CMemoryManagerVulkan::GetCommandBuffer`.
Inlined `CConstantBufferVulkan::GetBufferAndOffset`.
Texture hardening pass.
`CMaterial2::m_hCopySource` is now a strong handle to address the long-standing `SetMaterial` crash.
`CommandList` gained locks that should never contend in normal use.
Allocation metrics now exclude their own self-noise.
Editor now caches built-in project assemblies.
Mapping "align down" support.
Minor menu fixes and a quick `PackageSelectionModal` refresh.
More explicit access control around System.Span / System.ReadOnlySpan
Mount snags cleanup.
Scene v2 unboxing.
Disabled bone objects now use the correct bind pose.
Terrain crash when enabling/disabling fixed.
`b3Shape_IsOverlappingSensor` was reading the sensor from the wrong argument.
Buoyancy fixed for light props.
Indirect Light Volume bakes now work on unsaved scenes.
Move snap precision fixed.
Block placement precision fixed.
Dresser now ensures clothing is not null.
Local clients fixed with editor assembly caching.
TextureGenerator publishing/networking fixes.
Movie Maker track creation fixes.
Quake palette fallback fixed.
Missing nullptr check added in `CTextureVulkan::AssignTextureObject`.
`CVfxStaticComboData::Decompress` guarded against corrupt combo sizes.
Rebuilt transients after the vtexwriter fix (many falsely claimed mips that don't exist).
Don't include the checker pattern when rendering thumbnails.
Tracy disabled on Linux for now (static TLS blocks were preventing the server from booting).
Mounts can mount scenes (which would be maps)
Rewards progression system
Twitch API for reading channel and stream data from your game
More human heads to the model library
Tracy profiler integration for engine performance captures (developer builds)
Basic screen-coordinate 2D view for drawing in screen space
Light contribution settings and rendering options for diffuse, specular, and transmissive lighting
`[Uniform]` attribute so vector property controls can toggle uniform editing
Sampler support on terrain materials, and exposed terrain rendering attributes
`FormatOverride` on `TextureGenerator` (alongside a texture color-space fix)
Toolbar shortcut hints
Icon color parameter on the `AssetType` attribute. Thanks @rzkid!
Precompiled DLLs are now loaded from the manifest instead of CLLs
Improved buoyancy behaviour
Reworked and improved the Terrain sampling API
Improved escape logic for reverb and occlusion traces
Terrain displacement can now move both up and down instead of only up
DSP Volumes now use the `TargetMixer` instead of being hardcoded to the Game mixer
`OnRenderBefore`/`OnRenderAfter` callbacks now fire once per object instead of once per primitive
`SamplerState` now displays correctly as a property
Binary files are tracked as compile references so `_d` files rebuild when changed
Addons can no longer increment Game Stats
Mounted file systems now resolve paths case-insensitively, with Zio updated to 0.23.0. Thanks @joshuascript
Prop gibs now inherit velocity in most cases, using pre-velocity only for impact kills. Thanks @Xenthio!
Fixed vertex paint and the fast texture tool having no lighting, causing black squares.
Fixed Sprite Editor "Import Image".
Fixed PNG mipmap generation.
Fixed Movie Maker keyframe widget selection quirks.
`Game.IsPlaying` is now correctly set on game load and on init in published games.
Fixed Indirect Light Volumes / Envmap bake warnings and a light-volume blotch artifact.
Fixed `CitizenAnimationHelper` NRE issues.
Terrain collision now also updates on terrain edit undo.
Fixed a `QScrollBar` NRE in `BaseScrollWidget.ScrollingFrame`.
Use `g_sBilinearClamp` instead of `g_sBilinearBorder` in Terrain shader.
Always create a default draw call so the first submesh reuses it.
Various mount fixes.
Fixed Shorts clothing LOD.
Restored original icon colors for `PrefabFile`, `SceneFile`, `Clothing`, and `Surface`. Thanks @rzkid!
Fixed `BaseFileSystem.GetRelativePath` lowercasing paths internally. Thanks @joshuascript!
The viewport context menu no longer shows if the camera moved. Thanks @boxrocket6803!
Deprecated the global `Global`/`Frame` attributes (now obsolete).
Audio: Physical sound simulation - a new physically based sound propagation system, using Steam Audio for reverb, HRTF and distance attenuation.
Audio: Basic reverb and occlusion settings to tune the new sound simulation.
API: `Mesh.AddSubMesh` lets a single mesh carry multiple materials as separate draw calls, sharing one vertex and index buffer instead of duplicating them.
Editor: GPU Resources Viewer with live preview, live updates and memory stats, plus exposed refcounts and a treemap view to spot leaks
Added package flair (updated, favourite, contest winner)
Added change lists to package view
UI: css min(), max() and clamp() for lengths
UI: css-wide keywords inherit, initial, unset, revert (incl. shorthands)
UI: added currentColor keyword to css
UI: colors can parse oklch(), lab() and hwb()
UI: added css text-align: justify
UI: css white-space: pre-wrap and break-spaces
UI: added css word-break: break-word
UI: parses css image-rendering: crisp-edges (point sampling)
UI: added css inset shorthand
UI: now parses 1–4 values in the css border-width shorthand
UI: added css transition-duration, -delay, -property and -timing-function longhands
UI: css :has() now supports descendant selectors
UI: added css opacity percentages
UI: added css overflow: auto (maps to scroll)
UI: added css gap: normal
UI: added css filter: none
UI: css transform: scale() now takes comma-separated args
UI: css animations now accept ms units
UI: added more css justify-content, align-* and text-align keywords (start, end, …)
UI: parses css dvh/svh/lvh/dvw viewport units (treated as vh/vw)
UI: parses css object-fit: scale-down (treated as contain)
UI: added css margin-block / margin-inline (+ the logical margin sides)
UI: added css padding-block / padding-inline (+ the logical padding sides)
UI: added css inset-block / inset-inline (+ the logical inset sides)
UI: added the css flex-flow shorthand
UI: added the css font shorthand
UI: added css font-size keywords (xx-small … xxx-large)
UI: css letter-spacing and word-spacing now accept normal
UI: added css font-smooth: none
UI: css aspect-ratio now accepts the auto form
UI: css font-family now maps generic families (serif, sans-serif, monospace)
UI: added css flex-flow
UI: added css font
Updated SDL to 3.4.8.
Skinned meshes now render with instanced skinning, cutting draw call overhead for scenes with many skinned objects.
Morph targets are processed in a single bindless draw call instead of one update per mesh, improving performance for animated characters.
Volumetric fog no longer jitters when far from the world origin or in high-contrast areas, and the denoise pass is much cheaper (8 trilinear taps instead of 27).
Procedural render layers now run in parallel jobs, improving performance when rendering multiple views.
Reworked input scoping to cleanly separate keyboard/mouse from controllers, improving local multiplayer support.
Overhauled the main search bar with structured autocomplete, better result sorting and a more prominent top result.
Cleaner, less cluttered cloud browser with filters moved below the search bar.
Terrain tools improvements: auto-create terrain, prompt to save `.terrain` on scene save, a resolution dropdown and a clipmap preview.
Terrain painting now automatically decides which layer to paint on based on opacity.
UI sounds now target the UI mixer by default when no mixer is set, so 2D sounds aren't spatialized like world sounds.
Rebuild model hitboxes when the renderer scale changes.
UI: css rule matching is ~3–5× faster on large stylesheets (rules indexed by class)
UI: ~2× fewer allocations in css transitions (snapshot styles once, not per property)
UI: finished css animations no longer re-layout every frame
UI: less GC in css sibling/child selector queries (no list copies or wrappers)
UI: less GC diffing active css rules (no LINQ or hashsets)
UI: faster, lower-GC Yoga layout wrapper
UI: css stylesheet hotload now watches newly imported files
Movie Maker: Don't show redundant full path to GameObjects in the track list, just show the name
Movie Maker: Created targets are now nested under a NotSaved GameObject parented to the MoviePlayer's GameObject
Movie Maker: You can promote a created target into a saved object in the scene by dragging it out of the MoviePlayer's ancestors
Movie Maker: Wait a little before updating export preview when changing res, so it doesn't try to allocate an RT on every key press
Movie Maker: Support capturing BeamEffects with a MovieRecorder
Movie Maker: Add icon / tool tip text in track list to easily see which tracks are bound to a created target
StringControlWidget now selects its entire contents on click. Thanks @Matt9440!
Fixed a NaN assertion when running physics traces with invalid translation values.
Removed lingering invalid bodies from the physics world.
Fixed `OnEnabledInternal`/`OnDisabledInternal` being called out of order.
Fixed regular world panel transforms and world panel custom draw transforms.
Fixed a race in `SoundHandle.Time` so only the mix thread advances the native sampler.
Fixed a race condition when destroying sound streams by queuing destruction to a safe time.
Fixed stereo sounds (music and some SFX) being incorrectly spatialized in mono.
Fixed a performance regression when many sound handles exist.
Fixed inspecting procedural textures that aren't backed by a disk source, such as those from mounts.
Fixed dedicated server connection names by resolving them during the handshake.
Fixed cloud asset directory serialization exceptions.
Validate `ObjectCreateMsg`/`ObjectCreateBatchMsg` so clients can't create objects on behalf of other clients.
ServerPackages fixes, including no longer shipping the game package in the server package table.
UI: fixed css !important dropping the whole declaration
UI: css line-height without units is now a multiplier
UI: fixed css calc() division and full-expression parsing
UI: fixed the css flex shorthand for single-number and three-value forms
UI: fixed the css transition shorthand when the property is omitted
UI: css font-family now uses the first family in a comma stack
UI: colors now parse fully in the css background shorthand
UI: an unknown css @-rule no longer drops the whole stylesheet
UI: css variables no longer match on partial tokens
UI: injected css variables are kept across stylesheet hotloads
UI: fixed css selector specificity overflowing when comparing rules
UI: css background: none now resets the background (image and colour)
UI: css filter: none now overrides a filter set by a base class
UI: css transform: none now overrides a transform set by a base class
Movie Maker: Avoid animgraph playback going crazy when scrubbing
Movie Maker: Fix animations updating at the wrong speed when previewing sequences
Movie Maker: Immediately repaint scrub bars if their background colour changes
Movie Maker: Make sure timeline tracks get created when track list changes, fixing keyframes not always getting created
Movie Maker: Fix created targets escaping to the scene root if their parent changes
Movie Maker: Fix lots of edge cases where created targets aren't created / removed when changing movie / toggling CreateTargets
Made the stylesheet cache context aware to stop styles bleeding between games and the menu. Thanks @Matt9440!
Don't normalize remote URIs. Thanks @Noztik!
Runtime mesh morphs API - `Mesh.AddMorph()` lets you add morph targets (position and normal deltas) to meshes at runtime
Mesh to model dialog now shows options for configuring collision when converting meshes
Mirror tool can now be repositioned after placing, similar to the clipping tool
Bounding box snapping - bounding boxes now snap to grid by default
`ResourceWriter.AddExternalReference` for referencing external resources (e.g. materials from model resources)
Model inspector has useful info about meshes
`DragEvent` constructor is now public, allowing custom input systems to forward drag events through the UI pipeline. Thanks @dictateurfou!
Viewport background color is now customizable in editor preferences. Thanks @boxrocket6803!
Cursor page rework in project settings - now shows all system cursors you can override and auto-adds cursor images on upload
Audio system refactored with a lock-free triple-buffer threading model, eliminating previous crash-prone locking
Steam Audio effects compiled directly into the engine with AVX SIMD, roughly doubling spatial audio performance and removing the external DLL dependency
Physics queries no longer allocate heap memory for multi-result queries, using thread-local buffers instead
Physics callback virtual dispatch overhead eliminated by using concrete types and caching body type lookups
Rendering performance improved by removing redundant render attribute duplication, unnecessary performance trace scopes, and unused render pipeline stats
LOD clutter screen coverage now calculated per-model instead of per-tile for more consistent results
Media recording now captures at the end of the render pipeline, including overlays
VMDL writer now also saves the PHYS block when exporting models
Physics resource system modernized to use proper resource handling, enabling vphys resource previews
Steamworks SDK and steamclient updated to latest version, which should reduce network packet issues
Default video settings aligned between native and managed - MSAA now defaults to 4x (was 16x native), fullscreen defaults to borderless
Grass rendering looking super dark in places
Player display names now resolved locally, instead of by the host. Thanks @Matt9440!
Compile timeout raised from 60 to 120 seconds for large projects. Thanks @MrBrax!
Props now ignite their gibs when a burning prop breaks. Thanks @Xenthio!
Scene wheel zoom now treated as camera movement. Thanks @TheGWOO!
Dragged decal game objects now assigned proper names. Thanks @wheatleymf!
Fixed morph target names and categorization when importing models
Fixed incorrect FBX morph normals
Fixed managed video settings overwriting CLI flags like `-sw` and `-720` on startup
Fixed shader "Internal Compiler Error" for inline shaders on Linux/Mac caused by wchar_t encoding differences
Fixed Steam Audio not working correctly on Linux
Fixed model scaling in mapping mode
Fixed ESC not cancelling mesh tools
Fixed ragdoll joint rest length using bind pose body positions instead of frame offsets
Fixed scaled physics bones when world transform has scale
Fixed objects wrongly becoming transparent after opaque fade fixes
Fixed chat network messages not registering on non-host clients
Fixed platform settings property getting cut off in the editor
Fixed custom shaders having tinted wireframe
Fixed mouse wheel direction for natural scrolling
Fixed material override not clearing properly when applying model material groups. Thanks @Matt9440!
Fixed Doo visual scripting not showing return assignment when function has no arguments. Thanks @PolEpie!
Fixed viewport flashing on Linux/XWayland by suppressing Qt paint cycle. Thanks @AlexTrebs!
Fixed pointlight shadows breaking when shadow resolution decreases. Thanks @boxrocket6803!
Fixed missing hover styles when dragging items over folders in asset browser. Thanks @Matt9440!
Re-enabled 'None' anti-aliasing option. Thanks @Mykol-Word!
Editor now opens on the correct monitor. Thanks @boxrocket6803!
Splash screen now always starts centered. Thanks @boxrocket6803!
Default platform chat system - games can toggle this on/off in project settings, and hook into it with IChatEvent
Welcome screen shown on first game startup to communicate what s&box is
`SoundFile.FromOgg` for loading OggVorbis sound files
`GpuBuffer<T>.CopyTo` for GPU-side buffer-to-buffer copies
`RenderAttributes.Set(uint)` overload for correctly passing unsigned integer attributes to shaders
`CameraComponent.RenderToBitmap` overload with optional UI rendering parameter
Clutter LOD support for instanced models — models in the same LOD level are batched into a single draw call
Voice Mixer added to default mixers; Voice Component now restricted to only use Voice Mixer or sub-mixers, ensuring the voice volume setting always works
Terrain storage grid visualization when painting materials
UI panels can perform custom drawing again via `IPanelDraw` and `Draw(CommandList)`
Backend notice system for item drops
Trace results no longer allocate arrays, reducing GC pressure — use `HasTag()` instead of the now-obsolete `.Tags` property
Redesigned package modal to match the rest of the UI
Doo methods renamed to include "Doo" in their names for clarity and to avoid variable name conflicts (old names remain as `[Obsolete]` extension methods)
`GpuBuffer.SetData()` now accepts `ReadOnlySpan<T>` instead of requiring `Span<T>`
SceneTree search no longer filters out prefab contents
Video settings are now applied on first launch, fixing potential poor performance before settings are saved
Heightfield collision no longer snags player movement
`TerrainStorage.Resolution` setter made private — use `SetResolution()` instead
`GameObjectSystem` properties now respect property initializers and `[DefaultValue]` attributes
Stale config values are now removed on failed deserialization
`LoadAllGameResource` can now replace existing resources when loading addons or syncing network files
Disabled opaque fade being wrongly enabled on on GameOverlays
Backwards seek (e.g. from `SoundHandle.Time`) causing an infinite loop when hitting the very start of a sound
Opaque Fade not working without MSAA and not rendering properly in shadows
MSAA edges appearing in translucent `screenshot_highres` captures and scene panels
`CameraComponent.RenderToBitmap` UI scaling incorrectly to the bitmap size
Pivot tool grid snapping when dragging fast
Editor shortcuts getting stuck after ALT+TAB or pressing the WIN key while navigating the viewport
Square particles on some impact effects due to incorrect texture paths
Vertex painting not working with custom blendable shaders
System scene overwriting game object systems of the actual scene
Clothing hide parameter selecting wrong bodygroup for human models
Scene system render stats breaking with multiple render scopes
TreeView item not committing pending name change when unfocused
Screenshot UI resolution not matching when resizing - Thanks @Matt9440
Upscalers: Stretch, FSR, FSR3 - rendering the game at a lower resolution and upscaling it
Mapping: boolean tool
Mapping: vertex extrude via Shift+Drag
Mapping: vertex select loop
Mapping: UV vertex mode for moving UVs directly in the texture view.
Clutter props now support instanced rendering with physics collision, no longer need a prefab for collision
New Citizen/human animation parameters
Open microphone voice setting with an explicit disable option for users who never want voice transmitted
Gizmo handle preferences: worldspace, depth test, scale, and render distance
Cone shape traces via `Scene.Trace.Cone`
`Rigidbody.SleepThreshold` advanced property for controlling when rigidbodies go to sleep, useful for games with lots of stacking objects
Mouse wheel up/down support for keyboard shortcuts, including with modifier keys
Added `Color32.Lerp` and `Color32.LerpTo`
Updated Box3D physics engine with contact recycling for more stable object stacking, mesh contact rework, and solver optimizations
Platform overlay now renders independently even when no active cameras are present, preventing apparent freezes during loading
Texture tool merged back into the face tool with collapsible groups
Vertex mode layout improved, properties now saved to cookies
Texture tool correctly saves and loads last state including bounds, mapping mode, and grid size
Impact sounds now use more of the available sound variants
Sound files created from data now correctly preserve loop points
Addon editor assemblies now properly load ConVars, Mounts, and EditorEvents
Explosive props detonate instantly from impact damage
Prop break pieces now inherit MaterialGroup
Achievements list no longer limited to 10
Publishing now excludes all dot-files and dot-folders
Layered modals get proper stacked z-indexing
`GameTask.WhenAny` methods now return `Task<Task>`
Eliminated SceneTrace boxing allocations in filter callbacks
JSON reflection warmup is now cancelled before hotload to avoid race conditions
Launching a map in another game ignores ParentPackage dependency
Editor mouse position now updates while game widget is unfocused. Thank you @aidencurtis!
Fixed terrain crash in editor from null material during heightfield shape casting
Fixed shape cast traces returning incorrect hit points on overlaps
Fixed CCD bullet bodies incorrectly triggering sensors based on AABB instead of actual shape
Fixed bone scaling not preserved through animation add pose operations
Fixed invalid scale in animation subtract pose operations
Fixed null and dangling resource crashes in animatable objects and scene objects
Fixed vertex colors lost during mesh topology operations
Fixed multi-edge merge in mesh editor
Fixed vertex paint on non-manifold meshes
Fixed BoolControlWidget not calling SignalValuesChanged
Fixed NRE in console autocomplete for convars
Fixed various issues reported in PVS static analysis
Fixed URL validation hanging on DNS lookup
Fixed DefaultMap stomping map selection for games that don't use the create game modal
Fixed `TaskSource.WhenAny` not returning the completed task
Fixed ModelPhysics created components not being available immediately after creation
Fixed isolate selection when isolating children
Fixed resize mode in mesh editor
Fixed extrude nudge direction
Fixed pivot mode snapping
Fixed crash web page opening on benchmark runner
Fixed Steam networking stutter on joining clients from stats collection on connections that haven't finished handshaking
Fixed runtime configs not matching sbox.runtimeconfig.json
Fixed incorrect tintMask in material output. Thank you @Beldaa!
Fixed `GetComponentsInParent` in TriggerHurt causing double damage with player controllers. Thank you @Deotexh!
Project templates including Player Controller, Sandbox Map, and Sandbox Game Addon
Mapping components: door & button with Doo support
Content reporting system
Reviews now let you select various positive and negative tags
Prop explosion damage now includes an "explosion" tag so games can react to it
`Connection.OwnerSteamId` shows the owner of a family sharing account
`Sound.Play(SoundEvent, Mixer)` overload for playing sounds with a specific mixer
Separate mesh components added to object selection mode (Alt+N)
Drag models, maps, sounds directly into the Hierarchy panel instead of just Scene View
Tools context menu showing per-tool keyboard shortcuts
`version` console command to display engine version info
Allow multiple `[Doo.ArgumentHint]` attributes on a single property
Physics simulation on proxy rigidbodies when transform sync is disabled
Loading screens now show meaningful progress with the main thread unblocked during load
Scene objects now render off the main thread by default, improving rendering parallelism
PreJIT moved off main thread, eliminating 4+ second stalls when joining servers
Clients no longer download redundant code archives when joining servers, cutting load time by ~33%
Lobby queries are significantly faster with async processing and reduced allocations
UI panels with backdrop blurs can now be batched, reducing draw calls
Matchmaking silently retries the next best lobby on connection failure
Particle system performance improved with object pooling
PolygonMesh.Rebuild optimized — menu scene mesh build time reduced from 1s to 300ms
Eliminated per-field boxing allocations in network message serialization
Reduced sound cache memory usage from 512MB to 256MB
Sprite batch rendering uses zero-copy approach for better performance
Deep-copy of embedded resources only performed in editor, not at runtime
"Waited 500 ms for jobs to complete" no longer gets stuck on main thread jobs
Collision contact point calculation using best separation from manifolds
Potential crash with material overrides when copy source handle is invalid
Managed callbacks firing before BuildDependencyData completes
Vulkan swapchain destruction handling
Material load reentrancy crash in terrain tool
Animated textures (GIFs, animated Steam avatars) not playing through the lazy load path
`GameObject.GetBounds` incorrectly including origin when components have bounds
Box/lasso selection picking hidden objects in the editor
Unfinished mapping primitives lingering when entering Play mode
Death ragdolls spawning in T-pose on explosion
Vertex paint tool undo/redo sync, selection tracking, and vertex count display
Duplicating GameObjects sharing ResourceGenerators between original and copy
Lobby privacy settings not being applied immediately on creation
Other players appearing with no clothing due to inventory verification on clients
Unowned avatar items not being removed when first loading
Esc Key now closes modals, dropdowns, and cancels text entry
Footer friends list debounce
Missing Steam auth ticket validation
3D text bounds not recalculating when text properties change - Thanks @Infiland
All-white material thumbnail lighting on blend and reflective materials - Thanks @frotstar
Server Browser shows ping
Marked loads of convars as cheats
Networking.QueryLobbies filters out disbanded lobbies
Hide hidden items unless they're owned
Performance analytics are sampled to 1% of users now
Update GameObject enabled status when changing parent
Call TransformChanged on inactive children too
Display org thumbnail next to org name in Game Modal
Optimize TypeDescriptor.Create
VideoPlayer: Support ctts 1 in MP4s
Crashing during model hot-reloads (e.g spawning models from Sandbox)
Play Fund
Text rendering on top of blurred
Game.Render NRE
Modeldoc LOD UI fixes
Linux Dedicated Server
Editor: Selection Sets
Editor: Paste Special
Native library loading now happens at runtime instead of at InteropGen, enabling cross-platform binary compatibility
Zio case-insensitive filesystem wrapper for Linux
Offline mode login handling is more resilient, menu no longer throws errors when launched offline
Video encoder now uses libyuv for much faster RGB to YUV conversion, enabling 2K AV1 recording at 60fps
Video export render target now uses MSAA, eliminating dithering artifacts
Video recorder quality improved for scenes with fast-moving objects and camera
Video container format settings now properly passed from managed to native layer
AO upscaler is now pixel-perfect compared to full-res, with proper MSAA support
Slow rotation no longer stutters due to improved per-component Rotation.AlmostEqual precision
Menu layout improved for ultrawide displays with constrained content width and feathered edges
Menu fixes across store CTA positioning, search overlay, server list filters, and various UI components
Batch publisher UX improvements including org handling and completion messages
Component categories reorganized for better discoverability in the editor
Removed unused shadow data from lightbinner, cleaning up for future GPU-driven lighting
Missing undo support to TransformComponentWidget for reset, paste, and toggle operations
Storage settings page no longer takes minutes to scan large download caches. Thank you @Zaddish
StringBuilder race condition that could lead to remote code execution
Two AnimGraph crashes
Crash in FindOrAllocateTransforms during model hot-reload
CResourceSystem crash when reloading symlinked resident resources on Linux
WebM video header being written twice
Odd-size resolutions breaking the AV1 encoder
Inverse scissor box shadow rendering in UI
World panel transformation being applied twice in subpanels and render targets
IsRunningOnHandheld always returning false, causing small UI on Steam Deck and other handhelds
Dedicated server errors when using Steamworks.Friend methods
Focus in 2D editor views incorrectly moving camera toward objects instead of framing them
Rigidbody properties not being reapplied when ModelCollider updates, causing lost gravity scale on resize
Editor exceptions when performing large project structure changes
Client disconnect not triggering when game load fails during handshake
Shorts clothing models clipping with the player body
Menu carousel null reference exception
Menu toggle styles and context menus on game cards
Restored holding ESC to force quit game
Automatic LOD generation in ModelDoc, allowing users to build LOD chains from a single mesh. Auto-generated and handcrafted LODs can be mixed.
Spritesheet Importer for the Sprite Editor with automatic strip detection, row/column selection, and persistent padding settings.
Bridge Tool for the map editor, enabling quick bridge geometry creation between surfaces.
Clip Tool cycle mode for toggling between clip sides without restarting the operation.
SoundFile.FromMP3 API for loading audio from MP3 files in mounts.
SoundFile.FromPCM API for loading raw PCM audio data without creating a fake WAV wrapper.
Editor option to hide GameObjects in the scene view while keeping them visible in the hierarchy.
MovieRecorderOptions.BufferDuration property for ring buffer recording mode, with `movie_save` command to save without stopping.
Foliage Subsurface Scattering using an improved Frostbite-based SSS term, restoring foliage rendering broken in the Shadows2 update.
Ctrl+A shortcut now selects all faces in texture mode, matching face mode behavior.
Whitelisted `System.Threading.Tasks.TaskCreationOptions` for sandbox use. Thank you LeQuackers!
Apply-and-continue shortcut (Spacebar) for the Clip Tool, allowing consecutive cuts without exiting the tool. Thank you @trende2001!
Background Audio toggle in Audio Settings. Thank you @drekunia!
Sound file support for the NS2 mount, reading FMOD sound banks with PCM16 and MPEG formats. Thank you @nixxquality!
Removed FFmpeg dependency entirely, and replaced them with other alternatives -- reducing binary size by ~30MB and improving video export quality.
Movie Maker timeline grid rendering optimized from >10ms to <1ms by only repainting when the view changes.
Multiplayer party system improvements: Steam party invites now work, menu buttons restricted to lobby leader, player kick functionality, auto-leave when joining a different server, and better error messages.
Better disconnect feedback with formal disconnect messages, retry support for SteamId connections, and connection loading screen fixes.
GameClosedToast lifetime increased from 4 to 10 seconds, countdown pauses while hovered.
Mesh components now automatically add a world tag to their GameObject.
Bindless shader API now uses NonUniformResourceIndex by default, removing redundant explicit calls.
Upgraded Zio library to latest version, fixing a detected security vulnerability.
Menu UI/UX cleanup: GameCard activates on click, adjusted heading sizes, removed unused styles.
Line material now lazy loaded in a thread-safe way.
SceneCustomObjects now safe to run on non-main thread.
AssetSystem defers orphan deletion until parents are fully resolved, preventing incorrect asset removal during project load.
SpriteBatchSceneObject sprite data collection moved back to UploadOnHost, fixing single-frame sprite artifacts.
Physics filter component now creates its internal joint in OnStart, ensuring rigidbodies exist first.
Fast Texturing Tool settings now properly saved when the window is closed and undo scope is correctly disposed in all cases. Thank you @CarsonKompon!
Editor Widget API: OnWheel renamed to OnMouseWheel for consistency with other mouse event callbacks. Thank you @RumBugen!
Formatting for [InlineEditor] in collections is now correct. Thank you @boxrocket6803!
VR editor play/stop crash no longer occurs when toggling game mode.
Asset scan startup crash resolved.
Assets now correctly detect changes when activating mods.
UI VRAM leak fixed by removing threadlocal panel renderer and adding proper thread synchronization.
Sprite.BroadcastEvent type now displays correctly with proper [EnumDropdown] attribute, and unnamed broadcast events render properly.
EnumControlWidget now correctly triggers OnChildValuesChanged.
HudPainter.DrawLine now handles colorspace (gamma correction) and blend modes correctly.
Menu fonts no longer disposed when unloading games, fixing garbled text in the overlay.
Menu no longer clears out when game load is cancelled or errors at certain points.
Foliage red flicker issues fixed, along with improved antialiasing.
ModelDoc Auto LOD fixes: ngon simplification, infinite loop in mesh list simplification, better tooltips and defaults.
Menu framerate limit setting now persists correctly. Thank you @RumBugen!
Standalone startup timing event submission no longer throws a NullReferenceException. Thank you @RumBugen!
SCSS inset values with commas no longer break shadow lists. Thank you @boxrocket6803!
UI tooltip children now have pointer-events: none, and hover flicker on icon edges is resolved. Thank you @pedroforbeck!
FFmpeg dependency removed, replaced with free codec alternatives.
MPG123System removed from binding definitions.
Added `UprightJoint`, which constrains objects to remain upright, useful for characters, vehicles, and other physics objects that should resist tipping. Also has a parallel mode when targeting another body.
Added on-demand navmesh tile generation API — new `NavMesh.DeferGeneration`, `NavMesh.RequestTileGeneration`, `NavMesh.RequestTilesGeneration`, `NavMesh.UnloadTile`, and `NavMesh.UnloadTiles` APIs for large open-world games that need to generate and unload navmesh tiles at runtime rather than all at once on load.
Added a search bar to the main menu navbar for quickly finding games and content.
Added "Convert to Mesh" in the mapping editor — converts a placed model to an editable scene mesh, similar to Hammer's workflow.
Added `movie` command support for recording Light Components — light brightness and colour changes are now captured in recordings.
Rewrote the UI renderer with a batching system that groups panels into a single draw call where possible, yielding massive performance improvements — up to ~4× faster in benchmarks (40fps → 150fps). Also introduces a new `Panel.Draw.XX` API for custom panels to emit drawing commands directly.
Improved ambient occlusion performance with various shader and sampling optimisations.
Improved hotspot tool in the mapping editor — now uses the active material, supports mirror horizontal/vertical, and adds a per-face apply button.
Improved prefab editor performance when handling large prefabs — faster diffing and reduced initial load times.
Improved serialization accuracy for prefab and scene files — positions, rotations, and transforms no longer silently drift between saves, eliminating unnecessary prefab instance noise and large git diffs. Switched to lossless `G9` float format.
Improved `WildcardMatch` performance by replacing expensive regex with `MatchesSimpleExpression`.
Improved shadow mapper hot path by eliminating array, `IEnumerable`, and LINQ allocations.
Improved `SetObjectBounds` with minor overhead reductions.
New s&box installs now default to MSAA 4× anti-aliasing on first launch.
"Make Editable Mesh" in the mapping editor is now undoable.
Fixed a VRAM leak where shadow map textures were never returned to the pool when a `SceneLight` was destroyed — in scenes with many lights this would fill VRAM quickly.
Fixed a transform equality regression where `Rotation.AlmostEqual`'s default threshold was too loose (~1.62°), causing `SetLocalTransform` to silently drop small updates and producing jittery camera movement.
Fixed `Rotation.AlmostEqual` incorrectly returning `false` for two default (zero-length) quaternions.
Fixed cascade shadow exclusion culling overculling objects at the edge of shadow cascade spheres.
Fixed managed textures (prefab-embedded textures) never being present on headless/dedicated servers, which caused missing icons for inventory items, health, ammo, etc.
Fixed `ScenePanel` being completely reset on hotload — panels that manage their own `Scene` now survive hotloads intact.
Fixed the `TextEntry` caret becoming invisible after the move to command lists.
Fixed a ~300ms stutter when first opening the settings panel.
Fixed `MaterialAccessor` retaining stale material overrides after deserializing new data, causing phantom overrides to persist after prefab instance reverts.
Fixed `PolygonMesh` writing world-space properties into JSON, which broke prefab diffing.
Fixed blob IDs regenerating on every save, producing unnecessary git noise.
Fixed light probe regression caused by an incorrect call to a stubbed `RenderDevice->IsUsingGraphics()` on headless servers.
Fixed modeldoc wireframe rendering.
Fixed crash when accessing `MusicPlayer.Title` with an invalid URL.
Fixed assert triggered on `MusicPlayer` disposal.
Fixed null `TargetComponent` crash in the Doo invoke block inspector.
Fixed `SimplePicker` showing cloud assets when searching in the "Local Assets" tab.
Fixed package modal portal layout regression.
Fixed several Linux server path and library casing issues that prevented the dedicated server from starting.
Restored center pivot behaviour in object selection mode.
Doo, a simpler visual scripting system for wiring up component events — designed as a friendlier alternative to ActionGraph for common use cases
Mesh cable tool in the mesh editor for creating cables, working similarly to Hammer
New games dashboard with a rotating carousel and redesigned game cards
`lang.showkeys` cvar and editor toggle to display localisation keys instead of translated text for debugging
CSS `overflow: clip` and `overflow: clip-whole` properties for UI element clipping
CSS `background-playback-state` property to pause video backgrounds
`[ShowIf]` and `[HideIf]` attributes now support null checks
Center option added to the pivot list in mapping tools
`IFormattable` whitelisted for use in the sandbox. Thank you @RumBugen!
Texture editor moved into the inspector - Thank you @boxrocket6803!
Cascaded shadow map exclusion culling — shadows no longer render beyond each cascade boundary and objects from previous cascades are no longer re-rendered, significantly improving shadow performance
Networking thread now processes messages at the same tick rate as the main thread
Particle sprite GPU upload performance — buffer uploads moved into valid Graphics.Scope to avoid unnecessary render context creation
Network packet byte arrays are now pooled in DecodeStream, reducing GC pressure for large compressed payloads
Fixed a Steam buffer GCHandle leak where N-1 handles would leak per broadcast packet; replaced with a cheaper memcpy approach
`Package.MountAsync` now supports mounting specific package revisions, allowing games to pin map versions
`LoadingScreen.IsVisible` is no longer overridden every frame, allowing games to manually control loading screen visibility
`Game.ChangeScene` now shows a loading screen for all clients instead of just the host
Engine overlays remain visible during loading states
ScreenPanel `Scale` property now works when Auto Scale is enabled, and `Opacity` now correctly affects ScreenPanels
Undo support for WrapTextureToSelection and WrapTexture operations in the mapping tools
Pause modal now uses the lighter HtmlPanel instead of a full WebPanel
Launcher window geometry is saved when auto-closing
PATH changes are now a no-op on non-Windows platforms. Thank you @MrSoup678!
Disabling shadows on a directional light now works correctly
Shader compiler shutdown crashes resolved by properly draining the material system and preventing Steam callbacks after managed shutdown
Exceeding the maximum light count no longer triggers assertions or causes directional light flickering
`GetPixels` arguments are now validated to prevent negative values, fixing a security vulnerability
Referencing a deleted prefab no longer crashes — the editor shows a warning and preserves instance data for recovery
Creating a prefab from a GameObject now correctly restores the object's position
Reverting changes on a nested prefab instance no longer wipes all outermost overrides
Applying changes to a nested prefab no longer regenerates all GUIDs
Fixed cyclical library references caused by built-in projects referencing libraries
Fixed a null `AssetTypeAttribute.Name` NRE that silently shut down the GameInstance on editor startup
Game loading is now properly cancelled on disconnect, preventing background loads from continuing
Fixed filesystem unmount exceptions when a load is cancelled
Prop gibs now properly inherit velocity when spawned in a batch group
`IgnoreSingleObject` trace now correctly checks both rigidbody and collider GameObjects
Glass shader tint now blends correctly through multiple layers using premultiplied alpha blending. Thank you @Infiland!
`backdrop-filter: blur` no longer generates excessive mipmap levels Thank you @Infiland!
Toast notifications (e.g. achievements) no longer persist indefinitely
Post-game info popup is no longer dismissed on click, so its actions can be used. Thank you @RumBugen!
Fixed human models having deformed hands with the "holditem" holdtype
Fixed TextRenderer alignment not updating on re-enable
Fixed possible NRE in `Button.Text` setter
Fixed possible NRE in `UpdateMusic`
New C# shadow mapper, fully replacing Source 2's native shadow mapper
Bindless per-light shadow maps
Directional light configurable cascade counts
Per-light shadow hardness
User quality settings for shadows
ModelDoc hulls from meshes now supports per-mesh and per-element hull generation, allowing better collision when saving map meshes with mixed hull and mesh collision types
HtmlPanel now supports ordered and unordered lists
Footstep sounds for glass surfaces
Mesh element selection now supports undo/redo in the editor
New hub page layout with smarter game cards showing upvotes/downvotes and active players, condensed friend activity grouped by game, and achievements sorted by completion percentage
Movie recordings can now be imported from any game into a blank project, and games can disable demo recording on clients
Input system now uses scan codes for gameplay input, making the game usable on non-QWERTY keyboard layouts (e.g. AZERTY) without rebinding — key glyphs are translated to local key names
Vulkan per-thread data rewritten with a dynamic slot pool that bounds memory usage and eliminates potential out-of-bounds access from unbounded thread indices
Pixel shaders are now stripped for opaque objects during shadow and depth passes, reducing GPU work
Physics hull creation is more robust, routing through CQuickHullBuilder to avoid potential infinite loops with coplanar points and adding support for planar geometry
Network broadcast now encodes the wire payload once instead of per-connection, and large messages are compressed before chunking — client decompression is ~3.4x faster
Network serialization omits null values, reducing JSON processing overhead and improving compression/decompression speed
Sprite system optimized to perform a single GPU upload instead of one per group, eliminating upload overhead
RadiusDamage batches and parallelizes LOS traces with reduced allocations, improving heavy explosion processing from ~10s to ~2s
Heartbeat ping/pong switched to unreliable channel, eliminating head-of-line blocking under packet loss
Movie recording performance improved by avoiding reflection in hot paths, reducing per-frame recording cost
Potential infinite loop in PolygonMesh.Rebuild with fractional/coplanar vertex positions
Memory leak in DeltaSnapshotSystem where pooled snapshot IDs were not cleared before returning to the pool
OutOfRangeException in Rigidbody when Bodies and BodyTransforms sync lists arrive independently
"Lobby Disbanded" spam, lingering socket, and stuck loading screen when host disconnects mid-join
Modals not closing when joining a game, server, or lobby
Lingering error toast popups not dismissing across game/menu context switches
Atmosphere sky shader not using the new single sunlight path
IgnoreGameObjectHierarchy not applying to child objects
Client hotload not clearing reflection type cache, causing errors after server-side code changes
Damage falloff being inverted in RadiusDamage
Movie recording of TextRenderer, NaN rotations, and target creation edge cases
Deprecated OnDirty, MakeDirty, and OnPropertyDirty in favor of field-backed properties
Mounts can create prefabs with PrefabBuilder
Open the pause menu programmatically with `Game.Overlay.ShowPauseMenu()`
Cylinder hitbox support in ModelDoc
`Model.SaveToVmdl` and `Model.SaveToVmdlAsync` APIs for saving models to VMDL format
Select all support for vertex, edge, and face in the mesh editor
Lift vertex color under cursor in the vertex paint tool
Network diagnostic tools with `net_diag_record` and `net_diag_dump` console commands for detailed RPC and sync var stats
ConVars for maximum incoming and outgoing network messages per tick
Support for `font-variant-numeric` CSS style property with `tabular-nums`. Thank you @aidencurtis
Smoothstep anti-aliasing for rounded border corners in the UI
Video player now uses a compute shader for YUV resolve instead of VS/PS
Updated zstd compression library from 1.4.6 to 1.5.7 for faster shader compilation
Morph crossfade control between animation-driven and override morphs
Mesh trace now supports RunAll for tracing all mesh components
Interop code generation optimizations
Reduced LINQ usage in hot paths to eliminate iterator allocations
`ClipScope` is now a ref struct to avoid megabytes of heap allocations per second
Eliminated array and list allocations in `TemporaryEffect.OnUpdate`
Asset Browser defaults to sorting by name and fixes context menu for mounted assets
Demo recording improvements: parent change recording, skeleton bone detection, ragdoll physics fix, and cloud asset references
Terrain tool UX: opacity slider is now disabled for base layers with an explanatory tooltip
Better menu avatar lighting with AGX tonemapper
ThumbLoader now waits for thumb render in the editor instead of returning a placeholder icon
Unix platform support: ARM64 interop fixes, DLL import resolver, Mac now uses KosmicKrisp instead of MoltenVK
`MODES` section in the compute shader template so new compute shaders work out of the box. Thank you @boxrocket6803
`STANDALONE` compile constant when exporting standalone games. Thank you @boxrocket6803
Envmap rendering everything in one frame, overwhelming descriptor pools and crashing
Multiple Vulkan validation errors on boot and game launch
`CommandList.DrawText` evicting textures in cached CommandLists
`Gizmo.Draw.Sprite` crash when used with a texture URL
Labels not redrawing when text is cleared
File path DragData URIs containing `#` being truncated
Networking: DeltaSnapshotCluster ID not being set from pool, incorrect KB/s in Network Graph, and sent cluster tracking
Duplicate/Group crash with prefab roots
System config enum deserialization
`FindDirectory` throwing exceptions for missing directories
Frame 0 bone-merged renderers stuck in bind pose for avatar hover icons
Multiple null reference exceptions in ThumbLoader, UI selector, and mount textures
Menu overlay being attempted in standalone mode
Network `CanRefreshObjects` validation for refresh messages
Addon libraries editor not being loaded. Thank you @PolEpie
Still seeing a small amount of crashes on latest Nvidia drivers
In-game demo recording for Movie Maker — automatically record objects with renderer components in any game, play them back in-game or import into the Movie Maker editor
Mapping displacement tool for terrain sculpting, similar to Hammer
Paste and duplicate objects at cursor position in the editor, with an option to disable in editor preferences
Up/down arrow keys now nudge the value of float and integer controls when focused
Float control step buttons for fine-tuned value adjustment
Quad slice line preview when changing the number of cuts
Added `GameObject` reference to missing component log messages for easier debugging
Added `TypeHintAttribute` for Object/Value types with hinted types
Added `ControlWidget.OnLabelContextMenu` for extending right-click context menus on control widget labels
Upgraded shader compiler (DXC) to HLSL 2021, enabling namespaces, improved syntax, and paving the way for Slang migration
Sprite batch bounds are now calculated in parallel for better performance
Fast Texturing Tool initializes the rectangle based on existing UVs instead of defaulting to full-size
Resize tool now works on all selection modes, not just the default
Clip tool improvements
Allocation overlay now shows additional stats and improvements
Undo dock UI improvements
Launcher UI tweaks — fixed text alignment, boosted button brightness, consistent window icons
Replaced VariantControlWidget switcher button with right-click label
Gibs now use BatchGroup when spawning for proper networking to non-local clients
`InterfaceConverterFactory` now respects `JsonConverterAttribute` on interface types
`GameTags.GetTokens` now returns all tags including ancestor tags
`GetTokens` now uses atomic pointer swap to avoid race conditions when iterating
Dresser component fully trusting user data, allowing players to equip cosmetics they didn't own
DDGI stale buffer crash caused by referencing deleted Vulkan buffers in render attributes
Bounds calculation for boneless meshes on `SkinnedModelRenderer`
Defensive checks for valid poses and bones to prevent animation system crashes
Cash on shutdown caused by `crashhandler64.dll` — now properly calls `SteamAPI_Shutdown()`
Race condition crash during Steam Audio HRTF initialization
Persistent data loading crash when files no longer exist on disk
ModelDoc close crash by removing all binding targets before shutdown
Terrain flickering caused by divergent GPU access on AMD GPUs
Vulkan validation error for `NonPixelShaderResource` pipeline stage flags in barriers
`SpriteRenderer` sorting improperly against other renderers like `TextRenderer`
Texture corruption caused by `CopyFrom` unregistering textures from the resource system
UI regressions — filter applying after transform causing cropped images, and rotation animation using distance-based lerp
Toolbar buttons in viewport sidebar disappearing after exiting Play Mode
`MemberCopyCache` hotload exception
Undo breaking when undo scopes made no changes — now properly cleans up with try/finally
Navmesh bounds not updating when loading scenes in succession
`OnDragStart` sometimes getting called twice, causing multiple drops
Incorrect offset when extracting faces from a scaled mesh
Bake scale recomputing UVs from coordinates instead of preserving existing UVs
Underwear appearing incorrectly when legs or chest are hidden by clothing, and removed underwear from clothing icon previews
Terrain texture memory leak on prefab save — terrain component now cleans up on destroy
Editor camera NRE when double-clicking a GameObject in the hierarchy during Play Mode
Protected command bypass in `ConsoleSystem.Run`
`CompilerService` attributes-based RCE exploit by blacklisting `UnsafeAccessorAttribute`, `SkipLocalsInit`, and `AsyncMethodBuilder`
Audio thread safety issues — audio resources are no longer destroyed by the main thread while in use by the mixing thread
Nvidia drivers 595.71 onwards crash, last knowing working version is 591.86
IScenePhysicsEvents.OnFellAsleep (#4243)
Author to Storage.Query
FileIds to Storage.Query
Variant type
Humans always have underwear 🥵 (#4236)
Less allocation heavy version of Task.Delay (#4225)
SSR Optimizations (#4244)
Custom NavMesh bounds (#4279)
Avoid CallbackBatch action allocations (#4201)
Cache type.GetInterface results (#4212)
Avoid allocations when pushing a mix perf scope (#4207)
Skip GameObject.MakeNameUnique in non editor builds (optimization) (#4204)
Sanitize all float/vec3 inputs in PhysicsBody methods (#4222)
Faster public sync (#4245)
Lazily initialize component lists (#4217)
Lazily initialize interpolation backing storage (#4208)
Simplified how ParticleGradients are serialized (#4252)
Reduced SpriteSystem per-frame allocations (#4249)
Avoid GameTags allocations (#4203)
Avoid async state machine overhead when processing acks (#4226)
Avoid unnecessary action bindings in CollisionEventSystem (#4200)
Protect against corrupt vulkan pipeline cache writes/reads (#4258)
Shutdown leak fixes (#4242)
Many Movie Maker Improvements and fixes (#4254)
Use ConcurentDictionary for TypeLibrary cache (#4270)
Fixed Synthesizer leaking SpeechSynthesizer threads (#4261)
Localization files are synced to clients from editor sessions
Community Contribution: Clamp FOV slider in game settings to an integer (thank you @PenialJackson)
Community Contribution: Made font loading recursive (Thank you @Kilian)
Clutter fixes (#4240)
Fix copy of value types being boxed on the heap (#4202)
Fixed ignite/explosion prefabs having no sprite (#4233)
Fixed terrain disappearing after changing subdivision factor (#4239)
Dresser not applying clothes over the network (#4238)
Fixed hidden GameObject delete (#4251)
Editor: Fixed actions like extrude being run every frame when 2+ views are visible (#4166)
Reset SDL ModState when loosing application focus (fixes lingering inputs, for stuff like ALT + F4 after alt tabbing) (#4257)
Fix NRE during panel cleanup (#4269)
Don't clone or serialize static members (#4273)
Fixed hudpainter drawtext texture being deleted (#4272)
Editor: Include disabled gizmos in serialization (#4271)
Changing language refreshes localised labels, invokes Panel.LanguageChanged again
SceneViewportWidgt will no longer create duplicate editor cameras (#4280)
Community Contribution: Fix BBox gizmos after Hitbox.Sphere change (#4278, thank you @nixxquality)
Unecessary parameter from GetNextSibling
Trackball from Rotation control gizmo
Clutter system — the clutter/scatter tool and system has been moved in-engine
CSS outline property — outline draws outside a panel's border without affecting layout, matching web standards
Multithreaded UI rendering — UI can now render off the main thread
New main menu front page — redesigned around flatgrass, refreshed navbar and footer
ContentBlock row scroll buttons — left/right scroll arrows appear on hover as an alternative to drag-scrolling
DepthTextureRef on RenderTargetHandle — lets you access the depth buffer of a render target in command lists, not just the colour buffer
Improved UI drag & drop — new OnDragEnter, OnDragLeave, and OnDrop panel events matching standard web behaviour
AdvancedDropdown — ComponentTypeSelector abstracted into a reusable dropdown that supports foldered menus
SerializedProperty.GetCustomizable() — creates a customisable copy of a property with an overridable display name and other metadata
MemberDescription.DeclaringType — exposes the type that declared the member
Json.Serialize / Json.Deserialize — low-level methods plus object/Type overloads for use with IJsonConvert
Package.MountAsync() — public API equivalent of the internal PackageManager.InstallAsync
Json.Patch, Json.CalculateDifferences, Json.ApplyPatch and related types are now public, along with GameObject.DiffObjectDefinitions and Scene.SerializeProperties()
TestAppSystem exposed to user unit test projects, replacing the old Application.InitUnitTest flow
Vector2Int and Vector3Int added to TryToType
Mirror tool now supports mirroring any selected object type, not just meshes
UI rendering now uses command lists — panels only rebuild their command lists when something actually changes, reducing per-frame work
Audio mixing allocations reduced — temp lists are reused in-place and the occlusion sort predicate is cached as a static
CommandList attribute access — switched from ConcurrentDictionary to a regular dictionary, cheaper and avoids expensive clears
Cluster lighting — Cluster::Query now takes a screen-space position instead of world-space, which was unstable near cluster boundaries
Razor incremental processing — only re-runs RazorProcessor on changed files and reuses SyntaxTree instances, speeding up hot reloads
Debug overlay visual clarity — render stats grouped into categories, timing fixed to CPU/GPU order, new metrics added, low-signal rows removed. Thanks @darkfated
SerializedProperty.TryGetAsObject now returns a SerializedObject of the actual runtime derived type, not just the declared property type
Close game if Steam is not running — instead of cryptic errors, the game now exits cleanly with a clear message
Error reports now correctly embed user information
Editor unit tests can now reference built-in tool packages (Shader Graph, Action Graph, Hammer, Movie Maker)
DetermineHuman not checking the base model first, breaking dresser clothing for characters with a base model
PropertySignal.Compile(timeRange) not clamping the first/last blocks to the requested time range, causing "blocks must not overlap" errors when compiling Movie Maker recordings
:last-child pseudo-class updating a frame late when adding child panels
Cancelling a purchase incorrectly showing "You purchased X!" after the 20-second timeout
DefaultMaterialGroup not working for .vmdl files exported from MeshComponent
Clothing properties not serializing to JSON when marked internal — free clothes referenced by resource ID now save correctly
ScenePanel — render scenes are now kicked off during Tick, decoupling them from the render texture step.
CBaseFileSystem::AddSymLink overwriting the target path of an existing symlink
NavArea toggling behaving incorrectly due to stale MakeDirty usage
The M key resetting the active mapping subtool when merging vertices
Editor splash screen losing its taskbar window icon
Minor prefab serialisation and instance ID edge cases
An array pool use-after-free exploit — game code's ArrayPool.Shared usages are remapped to Sandbox.PublicArrayPool to prevent reading memory from other sandboxed games
Missing HTTP redirect URL validation — redirects are now manually followed so blacklisted local URLs cannot be reached through redirect chains
Hammer entity placement always inserting info_player_start instead of the selected entity type. Thanks @Kaikenny
Gizmo.Hitbox.Sphere behaving differently from all other hitbox functions, causing rotation gizmo priority and clickability issues. Thanks @nixxquality
Editor splash screen has a progress bar, no longer spews console, is customizable
Editor Welcome Guide
Time.NowDouble
Incremental compiles: smarter processing, syntax tree reuse
Games can have a dedicated server only launch mode
If a party leader is downloading a game, party members download it async in the menu
Mapping vertex paint selection modes
Updated Scene & Prefab Previews
Scene.BatchGroup disposable method obsoleting SceneUtility.RunInBatchGroup, also batches network spawns
Physics out of bounds event
Selectable abstract AnyOfType<T>
Gizmo.Control.Rotate now outputs Rotation instead of Angle, added trackball and view based rotation @DrakeFruit
Mapping: Vertex paint traces only on selected surface
Mapping: Vertex paint shows verts with paint information
Mapping: Vertex paint can paint backfaces
mat_toolvis button in in-game console
mat_toolvis converted to managed from native
Minor menu style tweaks: use actual logo svg, hide LiveLobbyCard whilst loading, tweak notification badge styles
Startup background is smaller, lighter and uncompressed UI image
Several verbose logs moved to trace channel
Cleaned up main menu assets and transient files
Dedicated server no longer does unnecessary transform interpolation
rendersystemvulkan: use SDL_Vulkan_GetInstanceExtensions for surface extensions
Update Vulkan headers and volk (w/ valve mods)
rendersystemvulkan: use VK_EXT_surface_maintenance1 make swapchain recreation a bit better
SceneUtility.RenderToBitmap uses a normal scene instead of an editor scene so components execute normally
Improve allocation overlay (#4121)
Avoid StringToken boxing causing unnecessary allocations
Reduced Trace.WithCollisionRules allocations
Reduced Action allocations from Component.ExceptionWrap
Avoid per-frame KeyValuePair[] allocations when using Parallel.ForEach
Avoid allocations when creating and iterating CommandList
Remove need for second lightbinner for fog, just do it all on shader, we do classification on the shader itself, edge cases like fog disable are rare to require doing it with an entire new collection of lights
LoadAllGameResource only loads new resources
Make sure SeverPackages.InstallAll only reloads packages once
Close existing project settings window when opening new one
Use InvariantCulture in various places when parsing floats @MrSoup678
Don't show Max Player slider if Min players == Max players @nixxquality
Dynamic splash screen height to avoid stretching @boxrocket
Verify CreateGameResults cookie before usage @nixxquality
mat_toolvis convar doing nothing
Duplicated r_3d_skybox convars
BlitMode.WithBackbuffer actually respects WithMips setting (#4096)
physicalDeviceVulkan12Features.bufferDeviceAddress only enabled if hardware supports it (#4095)
addon type not having ProjectPage
Shadergraph: Don't generate TextureAttributes for albedo if its dynamic
Native Resource networking
PostProcessSystem does not run under dedicated servers
Custom loading screen not showing when joining to an existing session (#4124)
Envmaps, particles and light cookies not being marked as used, meaning they can end up evicted out of VRAM
GameObjectSystem configuration supports collections properly
Native resource reference networking
DirectionalLight gizmo line spacing @boxrocket6803
Tags not being applied to particle sceneobjects @LeDernierPoisson
Guard null button origin if none set in action @peter-r-g
list reorder not updating inspector for class types @Ardivaba
Enforce FriendsOnly lobby privacy during handshake @trende2001
Version overlay
Mapping: Shear Mode
Mapping: Object Selection
Screen recording can now record the editor viewport
Fade-in support for Sound.Play
ParticleFloat support for ParticleEmitter properties
New image/rendertarget formats: RGB32_UINT, RG32_UINT, R32G32B32A32_UINT
Paint.Draw overload for pixmap with border radius
SHIFT+RMB and CTRL+RMB can now be used outside of the Texture Tool
Save Play in Game Mode with cookie project
Indirect Light Volumes improvements, nicer bounds for "Fit to Scene Bounds" button
Menu server list improvements
Lazy prefab cache loading for prefab dependencies
Make ParticleFloat widget descriptions context-neutral
Make slnx/csproj always use relative paths
Humans: eyelid morphs are now affected by aim_eyes
Particle DieOnCollisionChance works more intuitively
Resize support on GameObjects with IHasBounds
Load cached asset info for new mods in AssetSystem::UpdateMods
Destroy menu scene when entering a game to free resources
Track dynamic states in Vulkan render system to remove redundant vkCmdSetPrimitiveTopologyEXT/vkCmdSetPolygonModeEXT calls per draw call
Upgraded DXCompiler to latest from Vulkan SDK 1.4.341.1
Signed Qt binaries, these were causing Windows Smart App Control to not launch the game
Defer descriptor set deletion to avoid use-after-free on render thread
Confirm GameObject/Component selection on double-clicking a node
Scale baked into physics shape geometry — strip it from the target body when calculating local offset
"Texture manager doesn't know about texture" log spam
Descriptor set layout ref counting leak in RegisterDescriptorSetLayout
NRE in Terrain deserialization when TerrainBuffer is not yet created
Navmesh bake corruption when EditorAutoUpdate is enabled
ResourceIndex holding strong references to native resources
EdgeArchTool going the wrong direction
CompletionQueue assert during shutdown
GTAO depth dispatch size and missing UAV barriers
W and E hotkeys not switching gizmo tools
Crash when ParticleEffect has PushStrength
WorldPanelInput NRE
Incorrect property summaries
Pause modal NREs when no available package (unpublished second instance)
net_debug assertion spam by calling SetDebugFunction with DebugOutputType.None when disabled
When reparenting a SkinnedModelRenderer, clear out new skinned parent
Only create/update nav mesh area when active
Linux: Non-small struct args (>8 bytes) passed as ptr in managed but not received as ptr in native (InteropGen)
Linux: Added missing libdxcompiler.so and libswscale.so dependencies
Linux: Stop trying to load resourcecompiler when in non-tools builds
Linux: Enable VK_KHR_wayland_surface for Wayland
Linux: Plat_CreateWindow creates an SDL_WINDOW_VULKAN
Humans: prevent skeleton from blowing up when wearing jar head
Defer sentry close to after native AppSystem shutdown
Mapping snapping
Mapping: flip mesh
Mapping: box select & lasso selection
LengthOverride property @ubre
TreeView extras
Navmesh baking
Navmesh memory optimizations: improved by at least 5 times
Hi-res screenshots use global anti-aliasing setting
Mapping Tool "Save As Model" uses the model origin & supports more collision types
Swapchain creation now uses SDL to handle surface creation, try to be more sane about format
Swapchain depth format is simplified as always being D32FS8, with additional required flags
DDGI uses RG1616F instead of BC6H because block compression caused too many artifacts
Navmesh polygon mesh generation is 20-30% faster
DDGI gizmo probes load relocation positions from relocation texture
Use native C implementation for LZ4 managed compression API, used by networking
Error handling for nested prefabs when a prefab is missing
Steam callbacks run in network thread to prevent disconnects whilst main thread is busy (loading resources)
Indirect light volumes use two passes bounce by default for higher quality
Keep MainThread responsive when loading navmesh in editor
Big VR cleanup
Logs now archive when old or go over 512MB @766974616c79
Crash: CLoadingResource::FinalizeLoadRequest with cyclical dependencies
Crash: ResourceType overflow (too many GameResources) causing a buffer overrun and resource system corruption
PlayerController animation events not reenabling when component is reenabled
Navmesh CalculatePath giving up early on complex paths
Not being able to frame to objects while in ejected viewport
Nudge direction being inverted
Auto-closing restore scene tabs on startup
Terrain buffer leaking if disabled or deleted
Terrain buffer reading has a HasTerrain check now
Memory usage is measured with WorkingSet instead of PrivateMemorySize
Vulkan robustness correctly uses pipeline robustness alongside now
Null GPU buffer descriptors are now "bound" correctly with VK_WHOLE_SIZE range
Error shader had mismatched descriptor set layouts between the vertex and pixel shader, potential GPU crash
Editor swapchains matching screen resolution forcing exclusive fullscreen on Nvidia
Titlebar switching back to fallback thumbnail after publshing
Screen recording failing with ScenePanels
MovieMaker: Session nav widgets not always being visible
MovieMaker: Additive keyframe editing when source block starts at T=0
MovieMaker: Timeline vibrating when trying to pan too far left
MovieMaker: When dragging in timeline, scrub if we drag off the edge
Indirect light volumes copy depth to color using compute, a Graphics.CopyTexture was not suitable because of different image formats
CookieContainer not auto saving properly
Renaming assets causing duplicate AssetListEntry selection
GameObjectSystems not serializing on global systems, and deserialization failing for non-trivial types
Glass shader not supporting orthographic projection properly for refaction
StickyPopup height being awful
Occasional double context menu on searchable menus
CodeGen compiler warnings related to [Sync] when using nullable @Remscar
Indirect Baked Lighting - DDGI
Project settings window, accessible from project bar in the top right of the editor window
GameObjectSystems can have confgiurable properties, accessible in the project settings window
Networked local instances now have a unique SteamID for testing persistence
Networked objects can now be "detached" meaning they're no longer networked
Snap To Frame option for particle sheet sequences
Popup.PositionModel.Right
Binaries (exes, dlls) are now code signed by Facepunch - makes Windows trust them more
Foliage shader has been improved in many ways, adding new options, fixing dithering, and more
Mapping tool hotspot matches Hammer's hotspot
Mapping selection enhancements
Mapping face selections
Active material is remembered with a cookie when you restart the editor
Profiler post processing removes dead threads
Console output gets forwarded to attached debuggers
Unspawned networked objects do nothing when Network.Refresh() is called
Lots of micro optimizations for networking CPU performance
Dedicated servers use Steam Networking's SendMessages API
Codegen lambdas are cached
Optimize Json.Diff.ReorderAddedObjects
Vector3 micro optimizations
Reduce smoothdamp usage in audio components
GroupButtonControlWidget Enabled/ReadOnly handling
Movie Maker Maintenance
BlobDataSerializer is now stack based
Enabled VK_EXT_robustness2, adding extra safety and allowing null
When creating a new asset, it is named before being created instead of renamed
GenericControlWidget will pick the parameterless ToString method @766974616c79
Potential crash with PoseContext::TryTakePose and PoseContext::GetPose
Potential crash with AsyncResourceLoader accessing the resource system during shutdown
Crash on shutdown when the main loop throws an exception
Crash when rendering envmaps during an active render pass
Crash when closing dock tabs by the context menu
Crash with Qt widgets getting deleted too soon in event callbacks
Crash with exclusive fullscreen in editor mode (disabled it)
Error with ReferenceMaterial not being found when loading the fast texture tool
Error when using dump_scene command
Trying to ConVarSystem.AddAssembly the same game assembly twice
Video generation for batch upload by making sure ScreenSize is set
ScreenRecorder not respecting framerate cvar
Rubber surface being way too bouncy
Certain tools eating shortcuts because the ViewportToolbar was taking focus
Fast texture tool UV's not being frames to the preview
Fast texture tool world scale having confusing extra options
Missing large network files on local networked instances
GameObjectSystems not existing on clients (older version) erroring when connecting to servers
ConsoleWidget trying to parse arg: anchor as uri
Cloud assets not persisting between sessions @trende2001
SceneTrace.UseRenderMeshes are now editor only
GPU crash diagnostics which had some performance overhead
Clustered Culling
EnvmapProbe baking
SCSS Mixin Support
Editor gizmo selection
BlobData API which will serialize as a binary file blob
IPressable Tooltips
Mapping tools apply hotspot
Expose MinImpactDamageSpeed, ImpactDamage in ModelPropData
Added "thrill" parameter to the player animgraphs
Added "eyes_closed" override to the "face_override" list in the player animgraphs
Add custom texture filtering/address mode to line renderer @wheatleymf
Allow for getting and setting of static properties and fields in TypeLibrary @Kicks
CodeGen supports C# 14's `field` keyword @badandbest
Restrict client object destroying option (Networking) @jusvit
Custom filtering/address mode for line renderers @wheatleymf
Add custom texture filtering to BeamEffect too
Editor: Better widget feedback
GameObjectSystem can now serialize properties
Managed Skybox Pipeline + Skybox Tiled Rendering
Fast Texture Tool preview update
Mapping gizmo & helpers
Crash reporting reports C# stacks when C++ crashes
Edge cut tool & pivot picker updates
Dedicated Server Improvements
Audio Optimizations
Reduce Some Network Allocations
Humans now blink the same as citizens
Updated mimalloc to 3-rc2
Show resource generator descriptions as menu option tooltips @Zontax
Node Editor API changes @QuackCola
Having to restart after purchasing a new Clothing Item
Crash in video recorder with double mutex unlock
Crash when closing ModelDoc Shutdown called before hide
Crash when joining via New Instance
Crash when rendering lines with an invalid LPV
Crash in animation code out of bounds
Crash catching EnqueueResourceManifest in managed
Crash with managed exceptions in Qt callbacks crashing native engine
Crash with IES being disposed at end of function
Assets recompiling just because of search path changes (menu assets primarily)
"Discard Changes" option not working, make sure we're updating the scene source when saving a session
Editor Viewport Fixes (DPI scale, multiple viewport box select)
Cubemaps messed up in scenemaps with 3D Skyboxes
UpdateActivity Exceptions
Selection breaking after model reloads (recompiles)
OnNavigationOpen not being called on panel you switch to
Editor tools not being ticked if mouse is not focusing a viewport
Press events on child GameObjects being sent to the parent if it has a rigidbody
Hammer block tool exceptions
Hammer GameObject components being unable to be edited
DropDown initial display when using Value:bind with Options
Clean up editor tools when entering play mode, notably camera preview doesn't stick around in play mode anymore @boxrocket
NRE when clearing graph on GraphView @fishy
ActiveScene.Name @766974616c79
CheckValidationAttributes call within ReviewWizardPage not outputting all error messages @TrvsF
Broken hover styles, add missing tooltip & relevant localization files for "Notifications" @matt944
update model drop object gizmo scenemodel, no longer gets stuck @boxrocket
UseInputControls disabling lookat controls on PlayerController @LeDernierPoisson
Localized Particle Velocity Fixes @Fortune
Asset Browser clearing on asset recompile @trende2001
Nvidia Aftermath is now enabled by default and uploads GPU crash dumps to Sentry
Shader sources that were in our open source repo are now pushed to Steam too
Editor console links can open files (like videos)
Rubber Surface Type
Mapping: Fast Bevel Tool
Mapping: Fast Texturing Tool Undo/Redo
Mapping: Select Faces/Objects using Material
Mapping: Merge Meshes By Edge
Joint has an advanced AnchorBody property
GameObjectSystem supports INetworkSnapshot
AssetTypeAttribute.FindTypeByExtension
SpriteRenderer: Alpha Cutoff is allowed in all circumstances
ModelPhysics behaves better when enabling and disabling
Many IDisposable objects are now disposed properly with a using scope, reducing GC pressure
Many materials and shader references have been statically cached, reducing GC pressure
Dont break prefabs on networkspawn
GameResourceEditor windows are child of main editor (they no longer hide behind it)
Inspector now resolves SceneEditorSession from it's target
ByteStream now uses ArrayPool as it's backing storage
Mapping: Double click faces selects contiguous faces, not all of them
Mapping: Compute vertex tangents the same way hammer does
Mapping: Gizmos no longer eat inputs when double-clicking
Make DEBUG define constant controlled by ReleaseMode
Duplicate files when publishing a package, preventing publishing
Texture.Load and other media loads now obey the same rules as Http.Get
Terrain texture streaming not working
SkinnedRenderer add null check when accessing go parent
GlobalContext getting dropped in async tasks causing naked avatars in the main menu
Corrupt shader cache preventing the game from opening
VSCode workspace files failing to write when projects contained unittests
VSCode workspace sets slang.workspaceFlavor to vfx enabling shader intellisense
Texture Cube Fixes
Wheel suspension gizmo goes along Y
Handle HttpRequestException on package get
Label IsRich not applying font size, scaling properly
Game Controller Vendor Fix
BuiltIn game projects (menu) aren't dependent on libraries
Inspector selection lag
ComponentEditorWidget ignoring derived types @badandbest
Physics: Updated Box3D
Physics: Added Rigidbody.EnhancedCcd which is useful for fast-moving objects like bullets or rockets
Mapping: Nudge mesh selection with arrow keys
Mapping: Can save mesh selection as a model
Mapping: Mesh collision uses per triangle physics materials (like Hammer)
Mapping: Attempt to retain selection switching between modes
Networking: NetworkFlags + Transform Sync Flags
TextRenderingScope supports font smooth & 1px aliased outlines
Standard thumbnail texture loader e.g thumb:entities/sents/npc/scientist.sent
Prop inherits Rigidbody properties like mass that were set in ModelDoc
CameraComponent treats CustomSize as an override instead of being used as a fallback
UI Panel animations use double precision time
Simplified WheelJoint creation - placed on the wheel, axis and suspension is logical, gizmos display axis and suspension
Mapping: Fast Texturing Tool supports tiling, world mapping, and more
New Pause Menu
Main Menu cleaned up styles
Many BaseControls now SupportsMultiEdit
Renderer: Tiled culling layer ported from C++ to C#
Volume is formatted as a percentage % in the settings menu @DrakeFruit
CrashReporter still reports even if Sentry fails
Mapping: Bevel tool steps match closer to Hammer, added smooth normals
Scope last selected SceneViewportWidget to SceneViewWidget
Video recording: pass the muxer options
UI/Panel Eyedropper tool works with recent changes
Wheel joint steering axis
Fallback to shortcut without modifier if the shortcut doesn't exist with modifier (allows things like tool switching while modifier is down) (#3653)
Sound previews start at playhead position
Editor camera sticking in place at very low speeds
Sprite editor origin
Opaque & non-opaque sprite sorting
Unduck headroom check failing
Don't discard normal in line compute shader when there's 2 points - fixes not being able to rotate points of line when there's only 2 objects
Physics aggregate data causing crashes
Only draw meshes in highest lod for Graphics.DrawModel etc.
Mapping move mode gizmos initial state
Actiongraph editor regressions
ByteStream memory leaks
Editor shortcuts
LargeNetworkFiles requesting non-existant files would crash the server
Crashing connections by sending invalid data or JSON
WorldInput state being stomped
Gizmo selection crash when TypeLibrary lacks a component type
Transition background-image-tint
Editor command line argument parsing
SceneLineObject loading Materials & ComputeShaders on non main thread causing a crash
"Apply to Scene" shortcut
ALT input not working in the editor
CodeGen Preprocessor Defines Fix
Compiler: get rid of "library" assembly prefix when publishing
Obsolete vertex attribute array
Obsolete WorldInput class (Use the component)
Scene Mapping: Edge Cut
Scene Mapping: Fast Texture Tool
Scene Mapping: Polygon Tool
Scene Mapping: Resize Mode
Scene Mapping: Material Palettes
Scene Mapping: Merge meshes operation
UI: Allow scss variables to be used in `@keyframes`
Networking: Added callbacks to NetList and NetDictionary when entries are added/removed
Shaders: Added g_vSelfIllumOffset for scrolling self illumination texture
NavMesh: Collision Rules to NavMeshAgent Ground Trace
Shutdown scene early (#3576)
Brush settings control widgets (#3598)
popup/dropdown stylesheets
Add formatting to indicate state of sound preview toggle buttons @boxrocket6803
Reset Game.IsPaused when the scene is stopped. Tint pause button blue when the game is paused @Matt9440
Call SceneLoaded listeners for clients @andy013
Do not focus LastSelected when switching tools @aidencurtis
Crash: When writing descriptor sets, some buffers could become freed whilst in use
Terrain: Create buffers early to avoid rendering unbound leading to a potential crash
Terrain: Brush preview follows cursor when held down
Map.CreateAsync not working properly because of a missing ServiceWorldRequests
Sandbox.Compiler.config not being initialized by default
Nametags showing above menu for humans on main menu
Editor: Orbit Camera
Editor: Preferences keybind modifier
DropDown control struggling with empty/null values
exceptions in ParticleModelEmitter when model is null
Make sure MovieResource.EditorData is set when saving
Prevent INetworkListener OnDisconnected being called on clients @andy013
package visibility overlay @Drakefruit
overload of Gizmo.Draw.Model @Nolankicks
DebugOverlay.Text being culled when looking away from the scene origin @andy013
GameObjects in GameObjectSystem NetLists being null on clients @andy013
UI not being resized to screenshot_highres dimensions, contributed by @trende
Terrain: Can now support up to 64 materials, changed to a 2 layer blend (base/overlay) instead of a 4 layer blend
New mapping editor tool interface
High resolution screenshots with screenshot_highres command
Dresser component now has a randomize button
Human Visemes
PhysicsFilter component which allows collision to be disabled between two rigidbodies
VolumetricFogVolumeTool editor tool to edit volume bounds @Nolankicks
API: Panel.GameObject
API: Make public SceneModel.GetBoneVelocity() and SceneModel.HasBoneOverrides @yuberee
API: Add SkinnedModelRenderer.GetBoneVelocity() @yuberee
API: Allow DecimalConstantAttribute @766974616c79
Crash Reporter is now a C# app, and calls to our API
Multi-viewport in play mode
Update meshoptimizer to v1
Make MSAA setting work on editor SceneRenderingWidgets
enforce gameobject order and form groups whilst duplicating @johncosfm
Various crash fixes when shutting down engine
unfuck the ordering of rebuilding in mesh component so mesh is built before collider, also don't use gameobject scale to scale geometry
suspension disabled just limits the suspension to zero internally so it doesn't fly off into space, also set suspension and steering spring defaults to 10 hertz, 1 damping
Don't double present the game in editor, which was incrementing completed frames too far and freeing used resources too early
Avoid doing LoadAllGameResource multiple times on editor startup (and before we've setup some search paths)
AgX tonemapping being washed out
Networking: Performance Regression
DebugOverlay.Text not rendering @andy013
Mesh Tool - Shortcut Fixes
Cache (De)SerializeOptions in hot paths
Check if native SteamUser is valid before trying to access it
Fix clamped does nothing @766974616c79
Fixed additive scenes (such as the system scene) applying its NavMesh properties on the main scene
Fixed terrain UV rotation giving wrong normalsa @wheatleymf
Handle profiler cancel @766974616c79
Categorize uncategorized base components @Nolankicks
change "games" to "maps" @chesiren
Fix: Properly destroy Scene in MapWorld to prevent memory leak @PatrickJnr
ControlSheetRow hides property based on ShowIf etc
Fix broken grass texture in menu
Wheel joint support
MovieMaker: Bone tracks, IK controls, character animation tools
Connection Input / User Commands
ModelDoc: Gravity scale to physics body markup (supports negative gravity)
GraphicsView: Min/Max zoom
Text effects drawing for underline/strikethrough styles
NetList: AddRange
Sandbox.Mounting.InitializeContext.IsDlcInstalled
Support for Nullable<> as ConCmd argument
r_max_anisotropy convar automatically set by Texture Quality settings
Sandbox.ISceneLoadingEvents.AfterLoad default implementation
Allowed System.Collections.Frozen.*
Implemented Game.IsClosing
Reimplement impact damage system for Rigidbody
Tweaked editor styles
Display s&box version in editor
SceneEditorSession: stop setting window icon on frame; use editor title
Fix AssetBrowser view mode persistence and icon update
PathWidget: update visibility on resize instead of rebuilding
Updated menu cloud assets
Updated button styles and nested hover rules
Transform child panels relative to parent space
Improved Sandbox.ISceneLoadingEvents.AfterLoad with default implementation
Switched Dresser's initialization from OnAwake to OnStart
VR fixes
Use TensorPrimitives in FloatSpan
Update MapInstance to support scene maps
ParticleEmitters aren’t finished until at least one emission
Clear Bitmap PathEffect
Fixed Dresser component failing to dress players in their own clothing
Editor: Fixed re-possessing not getting saved viewport size
Fix Outline Stencil Tests
Fix Parenting Networked Transform Issues and Interpolation Bug
Fix audio playback and waveform rendering for vsnd preview widget
Engine swapchain validation error fixes
"QMenu was null when calling clear" error
Impact gib velocity
Fix atmosphere_sky shader
Model highlights showing when gizmos block selection
Handle QueryServers cancellation without throwing
'Open in Editor' not working on hierarchy prefabs
Pasting properties with invalid JSON
Delayed heartbeat and host stats sending every frame
Ducking modifying body height, stomping over user changes
SoundscapeTrigger error if source or SoundFile is invalid
SSR fixes
Gibs being network spawned twice
AssetList: fix label clipping, proper text eliding
Voice.LaughterScore not being hooked up
Only delay FakeLagProcess if no packets were handled
Spell checked various public-facing XML comments
Animgraphs not downloaded for local-only projects
Clicking within ContentBlockHero now correctly opens create game modal
Removed IsUnitTest check in Material Load functions
Remove legacy native networking code
Remove unused native coroutines
Gibs networking
Editor tool widget
UI EnumControl
UI Label.Tokenize (turn off automatic conversion of strings starting with #)
UI TextEntry has tokenize turned off, strings can start with #
UI ColorControl
UI Color mixer popup
Native memory management rewrite, switched from jemalloc to mimalloc
Refactor TreeNode.OnRename, it's not up to the node to create the popup anymore, just react to what the text is.
Stopped a lot of the editor recreating itself during hotloads
Networked Children Replication When Parent Is Disabled
Make indirect lighting from skybox actually be infinite rather than a big volume
Updated Box3D
UI happens after OverlayWithDepth (Scene.DebugOverlay, Physics Debug, etc.)
Animgraph sort condition list
Prevent Camera Preview LookAt mode from exiting immediately
ControlSheetRow.Property is a [Parameter]
MixerTreeNode inline rename not working
Update PlayerController docs link
Abort video threads early on stop
Storage.Query not sorting properly
Hammer crash from invalid CUtlScalarHash usage in mapdoclib
Play mode not focusing, setting correct cursor, weird inputs, ime not working
Play button playing the wrong scene
Using Movie Maker in play mode
Ejected scene camera not being at game camera's location, NRE when no camera
ViewportOptions button being visible while ejected
Toggle eject button highlight + tooltip
Input: release pressed buttons when losing focus
Toggle Fullscreen toggles the current scene view
Game view resolution/ratio dropdown functionality
Restored GameEditorSessions
Fix nullref when right-clicking Inspector property name
Remote Spawn Child Transform Fix
"Render Backface" toggle not working in Material made from ShaderGraph shaders
Not being able to "Paste as New Component" on prefab instances
SceneTrace uses the passed scene.PhysicsWorld instead of Game.ActiveScene.PhysicsWorld
Skip menu editor code outside of the menu project
Asset Browser: skip menu project assets in Everything and Recents
Deleted old softbody nodes
Deleted old thirdpartylegalnotices.txt
Razor now supports automatic folder based namespacing
Network ownership parenting rules
Network snapshot owner version
Inline Play Mode
EditorPreference to enable/disable undo/redo sounds
EmbeddedSpriteControlWidget for easier Texture -> Sprite usage
Multi-select support for body groups
Razor syntax highlight in VS2026
Razor intellisense in VS2026
Sprite Control Widget enhancements
Cloud asset cleanup
Network time sync improvements
Prop / ModelPhysics network refresh is granular instead of the whole hierarchy
Only create bone physics if the model has joints
Editor: Dedicated server uses local project path, instead of cloud project path
Movie Maker: serialization safety, better string support
Physics rules caching
Several security exploits allowing RCE
Error sometimes when framing objects in the editor
Terrain not streaming textures and using the lowest mip
Physics spring serialization fixes
Warning/error in AddPanelEventAttribute
box3d: Hull bugs
SSR and SSAO not working
Highlight not working
Hammer Static Overlays not projecting on world only properly
A bunch of unused native libraries
ModelDoc: Unused jiggle/cloth/softbody nodes
ModelDoc: Cloth preview (hasn't been functional for a while)
VR doesn't work
Scene.AllActive
Game.Overlay.Close and Game.OverlayCloseAll
Optimization: ByteStream optimized much faster
Optimization: Switch DeltaSnapshotSystem to use ByteStream
Optimization: Reduced interpolation allocations
Optimization: Convert CommandList from Action += to struct list (#3325)
Box3D updated
Input router now uses floats for mouse deltas
Editor: Inline widget can copy, paste, reset
PlayerController: only scale anim-driven footstep volume by WishVel
Don't fire OnEnabled on child components if the GameObject is being destroyed
Fixed time in Update being 1 frame old
Clean up FixedUpdate lerping, fix weirdness
Security: Fix unrestricted TypeLibrary property setting
Security: Sealed Bitmap
Security: TypeLibrary.MakeGenericType obeys constraints at runtime
Buffer Overrun in SpriteSystem
Movie Maker: Fix not being able to scrub by dragging on scrub bar
CreateGameModal not passing thru selected privacy
EnterChair Not Being Exposed
Don't flush in SwapChain destructor during shutdown
Fix wrong logic in OOBChecks.ThrowIfBoneOutOfBounds
Fix divide by zero in MathX.LerpInverse
Fix SelectionSystem.OnItemRemoved being called with the wrong object
Fix Plane.Equals always returning true
Fix BBox.Contains when the box is the same size
Fix PanelTransform equals operators
Fix string.TrimQuoted could throw on empty strings
Fix logic in Spline's CheckPointIndex
Fix divide by zero in Spline
In Rotation.Pitch - add clamp to prevent NaN
Fix incorrect calculation in Vector3.TcbSpline
Fix possible divide by zero in MathX.Remap
BaseFileSystem.Mount will ignore double mount
Fix launcher being in the wrong directory
Fix Collection was modified in ExecuteEnabledInSelfAndDescendants
Avoid throwing OperationCanceledException when querying servers
Protect against NREs in Mixer.ApplyProcessors
Fix asserts in ClothingContainer.ApplyAsync - just return if body becomes invalid
Fix NRE in NetworkSystem.OnSceneLoaded
Fix NRE in GameInstanceDll.CreateGameNetworking
Fix NRE in MoveModeLadder.ScanForLadders
Fix NRE in MoveModeSwim.UpdateWaterLevel
Tweak MenuUI\FrontPage.razor to fail less spectacularly
More packages to the GameCache
Editor can use menu overlays in games
Add references to editor libraries from editor compiler/csproj
Movie Maker: Image Sequence Export
Physics: Rigidbody.GravityScale
SpriteRenderer `OverlayColor` property
MoveMode.CalculateEyeTransform()
MoveMode.UpdateCamera( CameraComponent cam )
PlayerController .IEvents.PreInput
Collider.ColliderFlags
SitMoveMode - a MoveMode for PlayerController that enables sitting
ISitTarget - used by SitMoveMode to allow sitting on a component
BaseChair component
Terrain displacement
Sandbox Entity Template
Dev staging builds are now versioned date-commit e.g 25.11.04-e3cd948
Fail to launch if !Avx.IsSupported, it's a sane requirement of any CPU made after 2011.
Movie Maker: Snapping / dragging / resizing rewrite
Gizmo.Draw.Model can be animated
Optimization: Avoid ComponentList.GetAll usage in hot paths
Update VSCode editor integration
RenderAttributes pooling reduces GC pressure
Crash: ModelDoc using the RemoveBoneAndChildren node
Crash: CreateMixer audio crash
Application.Version being stripped early
AssetList: fix context menu not showing "Open in Visual Studio" for code files
fix PlayerController.Step getting stuck on edges when under low ceiling (#3247)
Physics: Fix collider offset bug
Physics: Clamp physics material density to zero not FLT_MIN, zero density is allowed because it can be used to skip mass calculation
fix model collider scale
clamp convar value setter to min max
CreateObjectMenu NRE fix
Nav: Fix Pathing A* heuristic by removing cost normalization
Nav: Force Agent Position Validation after Agent.SetPosition
VideoPlayer: Readded HTTP live streaming support (hls/m3u8)
NavMeshAreaDefintion Resource
NavMeshArea.Area
NavMeshLink.Area
NavMeshAgent.IsNavigating
NavMeshAgent.GetPath()
NavMeshAgent.AllowedAreas/ForbiddenAreas
bool NavMeshAgent.AllowDefaultArea
Capsule properties are marked with [JsonInclude]
Game.Overlay.WorkshopPublish
FileSystem.CreateMemoryFileSystem()
Cloud.IsInstalled( package )
Cloud.Load( package )
Cloud.ResolvePrimaryAsset( path )
Cloud.ResolvePrimaryAssetsFromJson( string )
TextEntry.HasClearButton property
ResourceLoader.Name (filename without extension)
InputFocus.Clear()
Upgraded to FFmpeg 8.0
TriggerHurt assigns DamageInfo.Damage
ProjectSettingsInspector now opens a single popup when forcing the Inspector
Materials & models store their referenced cloud packages
Only group selection for convert to prefab if it has more than one element
Re-initialize the editor camera whenever a new scene is loaded in a SceneViewportWidget
Bias nav agent ground detection to prefer bottom trace
BaseFileSystem creates the directory structure when writing a file
TextEntry is :empty when it has no value set
Tool materials used by Hammer/ModelDoc not rendering properly due to dynamic expression reliance
Crash when attempting to duplicate a scene root
Crash when trying to mix an invalid sound handle
Crash when GenerateMipmaps was used from multiple threads
Whitelist errors when verifying multiple assemblies at once
High Acceleration NavMeshAgent Getting Stuck on Edges
Restore IPressable.StartPressing behaviour so it can work with GetUsableComponent again
Restore Eye Dropper for InterfaceControlWidget
Load NRE when EditorOnly flag is set on a prefab root
"Merge Edges" not undoing to it's original state properly
MeshComponent's SceneObject being rebuilt whilst disabled
Modelphysics trying to drive physics from animation when motion is still enabled, we only want to apply this feature if the modelphysics is in kinematic mode
Sandbox.Mounting.ResourceFlags not actually being flags
Fixed held down keys repeating when input goes into UI mode instead of ignoring until up
Fix ColorAdjustments PP running in the wrong place
Obsolete NavMeshArea.LinkedCollider use SceneVolumes instead
Preloaded content in initial Steam download
Crashing now opens a crash report
Support for selecting resources for interface properties in the editor
Sprite Editor: Multi-Select support. CTRL to add to current selection, SHIFT to select all between last selection
Sprite Editor: Added DEL and CTRL+D shortcuts for Delete and Duplicate
Sprite Editor: Deleting, Duplicating, and even Drag-and-Drop actions now work when performing a Multi-Select
Sprite Editor: Right Click -> Edit Frames can edit multiple frames at once with a Multi-Select
Sprite Broadcast Events
Sprite Broadcast Event Types
SpriteRenderer.PlayAnimation() no longer resets the playback when calling on the animation that's already playing
ParticleSpriteRenderer now has a PlaybackSpeed property for Sprites with animation
Ability to edit HashSet<T> properties in inspector
Material: Material.Set( ... ) actually works to set any parameters
Material: Added Material.SetFeature( .. )
Material: Added Material.GetFeature( .. )
Material: Added Shader.Schema (but don't use it yet because it's all gonna change)
Material: Refactored internal material system, so we understand it more
Sprite Editor: Made room for the scrollbar in the Timeline
Refactored SceneSpriteSystem.AdvanceFrame -> Sprite.AnimationState
Clears clamp properly to the render area
All resources support IsValid
BBox.Transform() now works correctly for asymmetric boxes and scale
PlayerController press trace can hit triggers, but drops if a solid fails press
ToolsVis Quality of Life Improvements
Allow PlayerController unducking while swimming or climbing
net_fakelag and net_fakepacketloss are cheat convars
Model reload crash
Physics: FindClosestPoint on overlaps
Glass now always uses the correct framebuffer, fixes it when multiple tools are open
Depth of Field Fixes - Edge Vignetting & Quality Scaling
Clear connections from local snapshot states for networked objects on host change
Update main camera when a camera priority changes
Fixed [KeyProperty] properties not respecting [ShowIf] and [HideIf] attributes
GenericControlWidget now checks for visibility updates properly
NativeRenderingWidget: Replacement is SceneRenderingWidget
Material: Dynamic Expressions
Remove native unused WellKnownRenderTargets
vr_vulkan_wait_fence_between_eyes dead convar
Networking Compression: LZ4 is used on larger packets (> 128 bytes)
Decals: Emission Texture Input
RenderTexture Asset
Sprite Resource Editor
Rope Component
RigidBody: Added InertiaTensor, InertiaTensorRotation, ResetInertiaTensor
Mounts: Added flags and tags and a directory system to make it easier to browse
Third party attributions for: VMA, Vulkan Headers, Box3D, MonoMod
Move Sandbox Verlet Ropes to Engine (#3150)
Networking: Optimized Sync Vars and Delta Snapshots
Networking: Remove allocations from NetworkObject.GetPropertySlot
Menu Settings Improvements
Managed navmesh generation
Don't run post process effects if we're in ToolsVis, other command lists should still run eg SSR and GTAO
Directly forward Sandbox.Vector index access to System.Numerics.Vector.Item[int32]
Cloud Assets: use non-recursive vmap ref collection, better version conflict handling
MeshTrace now has ignore GameObject support
Default decals have a tighter attentuation angle
Adjusted main menu particles to be way less intense
Line Renderer now applies tags
GPU Crashes go through our crash reporter
Movie Maker: Video export correctly switches camera based on priority
Santa Hat and Skater Helmet Camo being unusable
Bloom "Firefles", Fix Subsurface in Ambient Baked Lighting
Apply missing attributes to 3d skybox attributes
Kinematic ModelPhysics lagging behind
Child collider update on transform change
Physics heightfield triangulation not being clipped before navmesh generation
Update decal sort layer on change
Edge case for loading nested prefabs
NRE when applying added objects to a prefab
Display thirdparty licenses in about modals in game and editor
Support getting root motion transform on single sequences, not just animgraph
BBox control gizmo tweaks
Screen recorder stops when ending editor play session
Ambient Occlusion: Restored spatial denoise mode
Ambient Occlusion: Support non-standard projections and fix haloing around edges by calculating fov from projection matrix
Updated Box3D: Wind force & mesh vertex weld options
BaseItemWidget has more explicit callback handling and improved undo integration
Refactored SceneCamera.RenderToCubeTexture to use command lists
ModelPhysics bodies set a GameObject source so collision event system can look for listeners
Scene Viewport: Only show black background in 2d views with ShowSky disabled
Downsampled SSR producing artifacts and crashing Intel Graphics
SpriteRenderer having an unbound unused buffer leading to a potential crash
GPU Resource Barriers having completely wrong flags in many cases, leading to potential crashes or undefined behaviour
Rare crash in ModelDoc physics sim
Crash when loading invalid VPKs
Crash when binding invalid render targets
Speculative editor crash with destroying widgets
SnapToGrid dividing by zero
Updating PanelRealTime twice in editor, resulting in 2x faster UI transitions and animations
Standalone not booting because of missing quality profiles and expecting a download cache
Movie Maker: Not being able to drag time selection fade in
Movie Maker: Video exports have correct field of view and warm up ray tracing
Console styles
Scene Viewport: Fix FOV not respecting editor preferences
GameObjectSystems not running in PrefabScenes in editor, they will only not run in PrefabCacheScenes now
ModelPhysics Destroy
Profiler not launching from missing dependency Microsoft.Diagnostics.Tracing.TraceEvent
Editor TintAttribute and HelpUrlAttribute not working
Left-click inconsistency when select/deselect GameObject gizmos
Gamepad Cursor Issues
InputContext: CTRL + C queues a copy event, not cut
Hierarchy right-click context menu creation at root
First person models, moved to workshop
"Include Source Files" option temporarily while we figure out a more solid solution
BaseItemWidget.ItemsSelected and BaseItemWidget.ItemsDeselected are obsolete in favour of BaseItemWidget.SelectionChanged
ResourceState.VertexAndConstantBuffer and ResourceState.IndexBuffer are obsolete, use ResourceState.VertexOrIndexBuffer
Third party dependency: Template Numerical Toolkit (TNT)
Third party dependency: org.json
Unused parts of native recast
Sprite Resources
Live Lobbies
Editor: Managed screen recorder
GpuBuffer.GetDataAsync
Texture.GetPixelsAsync
Editor: `SceneUtility.RunInBatchGroup` helper
Rendering: Sphere bound check for frustum culling
GameObject: `RunEvent<T>` method
Editor: Managed screenshot service
Debug: Overlay frustum drawing
UI: Multi-edit support for dropdown controls
Camera: Frustum API using screen rect
Utilities: LZ4 compression/decompression
UI: Infinite scroll for package lists
Profiler: Auto-upload for captures
Editor: Added ListHeader to Asset Browser/Cloud Browser
Editor: Added `BaseItemWidget.SelectItems` to select multiple items
.webp files are now recognized as an Image asset type
Editor: Movie Maker video file export
Physics: Ball joint motor
Physics: Control joint
ModelPhysics.Mass/MassCenter
Pause Screen: change map modal
Pause Screen: player list modal
Steam.FilterText methods for censoring text based on their Steam settings
Render Settings for texture detail, post processing, volumetric fog
Editor: Can now pin camera previews
Rendering: Default text rendering filter mode applied
Camera: Transform updated before frustum queries
Physics: Parallel joint and ghost collision handling
Rendering: Cubemap fog now respects rotation
Rendering: Standardized sprite roll rotation
UI: Games page shows up to 200 items (was 60)
Diagnostics: Exception reporting buckets cleaner
Animation: Update optimizations
GameObject: Clone performance improvements
UI: Create Game dialog usability improvements
Memory: Use CUtlVector for safer result handling
Serialization: Component interface serialization support
Audio: Soundscape box/sphere priority handling
Tools: Visualization modes always supported
Hashing: Migrated FastHash to xxh3
Hashing: Native CRC32 replaced with xxhash3
Optimization: AnimationUpdate hotpath, reduced frame time spend on animation (~10% improvement)
Optimization: Gameobject.Clone
Framework: Updated Facepunch.AssemblySchema (fixes protected members being stripped)
GraphView: Dragging a node or selection box to the edge of the display now pans in the graph
ShaderGraph: UI Group / Subgroup names now show a dropdown choice with other values used for that property in other nodes
Editor: "Create Child" now creates a GameObject under all selected GameObjects (instead of just the first)
Editor: Renaming GameObjects through the TreeView is now undoable
Editor: "Paste as Child" will paste under each selected GameObject (instead of just the first)
Editor: Dragging a GameObjectNode on top of itself no longer plays the error sound
Editor: Renaming multiple GameObjects at once will make each name unique if under the same parent GameObject
Don't init GameObjectSystems on PrefabScenes
Maps now default to using Sandbox instead of Walker
Editor Cloud auto-cleanup
Resolution scaling for screenspace reflections
Failure to launch the game on Windows 10 LTSC because of forced on CET
Crash trying to render disposed textures
Crash in `ToolFramework2->Spin`
Crash in `CreateRenderMesh` with certain names
Crash when selecting maps in Asset Browser
Crash when hotloading after closing Hammer
Low resolution textures after seeing a planar reflection
Memory leak on editor and dedicated server from metrics
Navigation Tool: Overlay deletion when not enabled
Navigation: Navlink edge cases & NREs when disabling the link
Physics: Mass overrides not applied correctly to body parts
Resources: Type cache not clearing in resource system
Hotloading: Issues with ConcurrentDictionary and keyed collections
Editor: Startup reliability improvements
Editor: Movie import menu breaking after repeated use
Compiler: File saving during compilation race condition
Rendering: Depth-aware filter regression (borders)
Editor: Selection/undo inconsistencies
Editor: Overreaching custom editor logic affecting widgets
UI: Interface control widget taking unintended priority
Prefabs: Duplicate ID warnings for broken/unloaded references
Prefabs: ApplyGameObjectChangesToPrefab for hierarchies with "added prefab instances"
Rendering: Z-fighting on highlight component inner color
ShaderGraph: Surface preview errors
Video Recording: Cursor flipped
Video: FFmpeg deprecated pixel format warning
Video: VideoPlayer Duration returning 0 for some files
UI: `Package.VideoThumb` not being set
UI: Unnecessary stylesheet lookups on panel creation
Editor: MovieMaker serialization errors
ShaderGraph: Numbers can be used in parameter names without them getting cleaned out
Editor: Eye Dropper Tool can now find disabled Components
Editor: ListControlWidget now accepts a multi-select drag containing disabled Components
Editor: Fixed `GameObject.MakeNameUnique()` logic
Editor: Cloud Browser no longer loads more assets when scrolling to the bottom of the "Installed" section
Editor: Asset Browser Flat View no longer allows you to accidentally drag files up into the root folder
Editor: "Delete File" prompt no longer shows incorrect file extension for certain asset types
Editor: Block tool having incorrect tangents
Capsule class does not want a Vector3Converter
Black in fullbright toolvis mode when using metallness
Regression on bloom where bloom-only layer being composited with only mip 0
NRE when starting lobby on an unpublished project
don't base ui skew on window size
Fix vignette on Gaussian Blur Downsample
Fix Mipmaps for Decals
Fix cloud cosmetics not appearing in game
Launch options: editor is now a seperate steam app
Unused Thickness property on Surfaces
Unused texture filtering user config
Various quality settings on post processing components, these are now user convars
Many third party libraries that were unused or barely used
Workshop Cosmetics
Cloud Addons
Embedded Resources
Server .csproj
Natural Selection 2 Mount
UI: VirtualGrid Panel
Add "Replace With Prefab" Context Menu Option for GameObjects
Add warning popup when opening KV .vtex with Texture Editor
Pirate outfit human version
Add FindMode to ISceneEvent.PostToGameObject
Add `nav_debug_draw_distance` ConVar
Add NavMesh.CalculatePath
Add NavMeshAgent.SetPath
Pirate outfit human version
Cylinder Hitbox API
Renderer Component LOD Override
Added Cloud.Load<T>(ident) for fetching Cloud Assets at Runtime
ModelBuilder attachments
ModelBuilder body groups
ModelBuilder material groups
Model body & joint builder
DDS texture loader
Editor: Asset browser side tabs
Granular Network Refresh
Added privacy modes to Create a Game Modal
Added Subgraph Input nodes to ShaderGraph
Package.IRevision now includes a Summary property
Cached Packages no longer have Summary = null even when a summary is present
Library Manager: Added "Category" and "Sort By" dropdowns in the Browse tab
Library Manager: Added "Package Details" section to the selected package
Updated Box3D
Reactive EnvmapProbe (#2634)
Minor Editor Visual Cleanup
Networking CPU Optimizations (#2683)
Editor Selections are now correctly ordered according to what was selected first/last
Support convert to prefab when multiple game objects are selected
Ensure a prefabs RootObject name always matches the file name
Inspector prefab instance override context menu.
Can drag-and-drop files to WildcardPathWidget#8294
Don't create Texture Asset when dragging an Image into the Scene
Constrain Editor Flyouts/Popups
Rework Impact Sound Networking
Support empty selection in SequenceControlWidget
Flag open prefab editors as unsaved when applying instance changes.
Make project's launchSettings.json actually useful and launch the editor with -project
Movie Maker: Curve painting optimizations, recording fixes
Menu Server List fixes #2687
Shadergraph: always serialize default values
Hotload: support compiler-generated readonly collection types
WorldInput uses cursor ray when mouse is active
Fix text renderer bounds not respecting alignment
Text render point filtering
Asset browser shows folder paths when searching/recursive
Batched Sprite Renderer
Particle Optimizations
Can now use the [Order] attribute for tabs in the Widget Gallery
SubgraphInput and FunctionResult nodes now have unique colours in ShaderGraph
Library Manager Visual Improvements
Library Manager: The left and right sides can now be resized using the splitter
Library Manager: Hovering over a version in the dropdown displays the version's changes/summary in a tooltip
UI: CSS property image-rendering is now inherited properly
UI: Samplers are now bindless
Razor: RenderFragment now uses the correct context
Replaced [GameResource] with [AssetType]
TypeLibrary cache system
Hammer static overlays being batched incorrectly making them not appear
CameraComponent.RenderToTexture not applying post processing
Editor startup hanging on package downloads
Networking: Exploit where you could impersonate other users
Memory leak on managed layers causing high memory usage and poor hotload performance
Release branch sentry uploads not getting tagged with version
TreeNode OnHashChanged triggering node rebuild twice
Fixing a bunch of .Clothing files
Sliders not working in avatar screen
Bring back terrain brush overlay
Janky SceneViewport input with DPI scaling
Sandbox.Compiler blacklist running under editor or standalone code
"Preprocessor directives must appear as the first non-whitespace character on a line" error in codegen
SERVER define constant not getting set for libraries
ActionGraph: fix return trip node serialization, type selector widget
Color multiselect (while using ColorUsage.HasAlpha) stomping values
Managed ConVars not showing default values
New prefab system producing large diffs, for Bone/Attachment GameObjects
Various event handler and FileWatch leaks
EngineOverlay never drawing (UI inspector)
fix multi-select for hierarchy treeview
simplify dof code, clamp to avoid NaN on overbrightened areas
RectControlWidget and ParticleVector3ControlWidget now use correct capitalization#8978
InputActionPanel now uses one font everywhere and no longer resizes improperly on hover
Removed the gap between the options and the scrollbar in EnumControlWidget dropdown. Fit to full-width when no scrollbar is present.
Fixed the faulty TreeView example in the Widget Gallery
Fixed the broken RenderToWidget examples in the Widget Gallery
Fixed NRE when searching in the Library Manager and no packages are found
Fixed Library Manager displaying some older descriptions as raw JSON
Fixed search not working in the Installed tab of the Library Manager
Obsolete NavMesh.GetSimplePath
Remove S_SPECULAR and ENABLE_NORMAL_MAPS (#2635)
Mounts API
LineRenderer: PBR Material support
LineRenderer: Face Mode Cylinder
SamplerStates API
Renderer.Attributes - set attributes are now deferred when the renderer is disabled and will persist when re-enabled
ModelPhysics GameObjects
Rigidbody networking kinematic proxy
GameObject.Network.RootGameObject
NetworkTable<T> and NetworkTransforms
NetworkSpawn accepts options to specifcy NetworkOrphaned and OwnerTransfer settings
Component.DontExecuteOnServer
Game.ChangeScene
Sequence Animation Events
SprintJoint.RestLength
DebugOverlay.Trace
TextRenderer.VerticalAlignment - the vertical alignment of the rendered text.
ImageFileGenerator.Cropping (useful for importing spritesheets or images with whitespace)
Perlin and Simplex noise types to RandomTextureGenerator
Offset, Scale and Octaves properties to RandomTextureGenerator (only for Perlin and Simplex noise types)
Bitmap.Tint and ImageFileGenerator.Tint
Bitmap.SetPixels(Color[])
[Step] attribute, allows you to specify step amount of a value in an inspector without specifying the range
[Range] (and [Step]) attribute support to types Angles, Rotation, Margin, BBox, and Sphere
Editor viewport now has a context menu
Projects can now be editor only
Application.RenderSettings for standalone
ITintable to ParticleEffect
Audio: Support FLAC 24 bit
Hotspot Editor - Position and Size properties are now shown when any Rectangle(s) are selected
Hotspot Editor - Added "Grid Size" option for entering exact values that are not a power of 2
Hotspot Editor - Added "Normalized Values" option, which shows Min and Max properties in place of Position and Size
ConVar properties now support decimal type
New surface types: plaster, plastic, cardboard, ceramic, fabric
Whitelist: ITuple
SerializedProperty: Added OnPreChange, OnChanged, OnStartEdit, OnFinishEdit events
Editor Apperance
More Vulkan Validation Fixes
Materials made with shaders created with ShaderGraph will automatically populate any textures used in samplers instead of the color white.
Made SceneViewportWidget editor shortcuts consistent with one-another so they need viewport focus.
Pressing a ViewportTools-related editor shortcut will update the related button visually without having to hover/click it.
Added missing XML summaries to TextRenderer.
Added missing XML summaries to ImageFileGenerator and re-categorized properties
Removed "Null or empty audio data" warning.
Physics: Box3D now uses the thread pool improving
Stepped increments with new [Step] attribute (or previous [Range] attribute uses) now work without the need for a slider
Inspector handles inspecting [ null ] better instead of erroring
Allow suppressing SB3000 with [SkipHotload], add a CodeFixProvider
Networking: Optimize prefab instance NetworkSpawn
Networking: Break prefabs before network spawning
Networking: Unify GameObject refresh logic
Networking: Fonts load over local instances
Networking: Deterministic map ids
Dedicated Server: Cvar fixes, cheats
Dedicated Server: clear command
Scene.Source is no longer set when loading an additive scene
Vignette renders before bloom
Derived GameResources are pickable
Removed SceneTree splitter and hotload event
FileSystem.Data is no longer resets with every game version
Ambient occlusion has more sane defaults
AssetPreview uses proper Scenes now
AssetPreview on small objects
Reduce allocations in Json.Diff
Misc Asset Browser fixes:
Only do FolderContextMenu for disk locations. Prevents trying to pin paths that aren't real etc.
Wait for the browser to populate after navigation before trying to highlight an asset.
When renaming non-assets, only auto-select the region up to the last '.' so you can just start typing without accidentally changing the extension, but still change it if needed. (Like windows does)
Editor shortcut consistency
ImageFile TextureGenerator Improvements
RandomTextureGenerator Optimizations
Texture.Load() no longer requires BaseFileSystem to load files
Texture.LoadAvatar() now takes an optional argument for the avatar size
Hotspot Editor - Can now hold CTRL or SHIFT to multi-select rectangles and edit multiple at once
Hotspot Editor - Editor now remembers the Grid Size and Reference Material for each .rect asset
Hotspot Editor - Can right click on a rectangle to quickly delete them
Hotspot Editor - Can now click-and-drag to move or resize rectangles
Vector2.Up is now ( 0, -1 )
Vector2.Down is now ( 0, 1 )
Vector2.Left is now ( -1, 0 )
Vector2.Right is now ( 1, 0 )
Vector2 now implements IInterpolator
Added Vector2.IsNan, Vector2.IsInfinity, Vector2.IsNearlyZero, Vector2.SmoothDamp, Vector2.SpringDamp, Vector2.ClampLength, Vector2.AddClamped, Vector2.Reflect, Vector2.Approach, Vector2.SubtractDirection, Vector2.Angle and Vector2.GetAngle
Vector2 and Vector4 now have an index accessor
Matrix.Transform now accepts Vector2 and Vector4
Many APIs now take Vector2 instead of Vector3 where it makes sense
Vector3.IsNearZeroLength actually checks if the length is near zero instead of checking if each axis near zero (which is how Vector2 and Vector4 work)
Added == and != operators to Vector4 along with Vector4.Equals and Vector4.GetHashCode
Added Vector4.WithX, Vector4.WithY, Vector4.WithZ, Vector4.WithW, Vector4.SnapToGrid, Vector4.Clamp, Vector4.Min, Vector4.Max and Vector4.Lerp
Added implicit operators for int -> Vector2Int and int -> Vector3Int
Added explicit operators for Vector2 -> Vector2Int and Vector3 -> Vector3Int
Make use of MethodImplOptions.AggressiveInlining across all Vector structs
Standalone: Now launches exported games fully
VR: Scaling fixed
VR: Main menu inputs work again
In-game debug wireframe rendering
TextRenderers now update immediately upon making a change in the editor instead of having to disable and re-enable component.
Can no longer delete the scene root
Decals: DecalDefinition.Tint is now used
Decals: Preview updates when properties change
Decals: Fix texture streaming requesting only lowest mips
Terrain: Only create terrain when active
Terrain: Fixed terrain "Fucked" error causing storage resource not to link to component
Update parent panel
Fix reparenting and cloning parts of prefab instances
Fix text area control multi edit
Fix Map Load Warning Spam + Unnecessary Creation of GameObjects
Folder Metadata now loads properly
Fix editor only prefab instances not getting destroyed on load
Physics aggregate surfaces
Fixed regression when calling NetworkRefresh on a GameObject hierarchy that contains child networked objects.
Fixed several asset load problems when running a dedicated server with a local project.
Server local project asset fixes
Input.Keyboard erroring on dedicated server
PostProcess running on dedicated server
Networking: unidentified RPCs no longer crash the dedicated server
Bytepack TypePacker respect [JsonIgnore]
NavMeshLink Start/End Local <-> World space transformation
NavMeshLinks sometimes lingering wen moving from one tile to another
Player controller reground
DragData.OfType includes value types when T is object
Incorrect nav areas offset when BoxCollider.Center is set
Plane.Trace returning hits behind ray
Fixed support for .flac sound files
ShaderGraph now tells you when you are using invalid parameter names to prevent conflicts
Margin struct now serializes/deserializes properly
Hotspot Editor no longer resets the Grid Size and Material Reference upon hotload
Blendable material preview
3D Skybox applies proper rotation from the Hammer sky entity
SerializedDictionary: set parent, formatting fixes
Fix inspector widgets duplicating after editing a property
Fix mono mixing
Fix ModelPhysics not using mass and mass center overrides
Fix PolygonMesh not clearing out unused materials
Mouse4/Mouse5 glyphs
RangeAttribute.Step obsoleted - Use [Step] attribute now
Citizen gibs - Now available on the workshop
Core cleanup
Shader cull: black_only, combine_colorcorrection_lut, cables, cs_mipgen, decal, downsample, general_filter, hair, projected_decals, projected_sheet_decal, sampletexture_bicubic, screen_texture_with_depth, tools_encode_environment_map, tools_modelviewer_wireframe, visualize_depth, visualize_physics
Various HL:Alyx particle textures
Unused thirdparty libs
Box3D Physics
Editor: Added new startup errors dialog for resolving code errors
Editor: Component Selector now supports nested sub-categories separated by "/"
Editor: Added Flat View option to Component Selector
Editor: Missing Undo Steps to ControlSheet and certain ControlWidgets
Curve Editor: Added "Move Range When Panning" button, which moves the entire curve when panning or zooming
Curve Editor: Added "Retain Values When Changing Min/Max" button, which doesn't resize the curve's values when resizing ranges
Curve Editor: Added "Fit to Screen" button, which fits the viewport to the curve's current range
Curve Editor: Added [TimeRange] and [ValueRange] attributes to specify default range min/max and whether or not it's clamped
ShaderGraph: Added Scene Color node (with UV address modes)
ShaderGraph: Is Front Face node
ShaderGraph: Normal Blend node
ShaderGraph: Reflection node
ShaderGraph: Tangent View Vector node
ShaderGraph: Added GraphCompiler.RegisterGlobal
Shaders: Automatically append mode combo to mode if no arguments are set
Decals: Gizmos for the size
Decals: Added decal resources
Decals: Added transient properties
New default surfaces
Networking: Ability to specify port to use when hosting a dedicated server - defaulting to 27015
Enabled sc_visualize_batches publicly
ParticleEffect.LocalSpace - float, allows sliding between local and world space
ParticleEffect.InitialVelocity - velocity to start with
Particle.ConstantMovement - apply movement without velocity
Particles: ParticleModelRenderer.RotateWithGameObject
API: BaseControl.CreateFor - allows creating Panel based controls for specific property
API: ViewSetup
API: ReflectionSetup + RefractionSetup
API: Pixmap.UpdateFromPixels( Bitmap )
API: VideoWriter.AddFrame( Bitmap )
API: SoundHandle.Time setter
API: System.Random.FloatDeterministic( int seed )
API: Color.WithColorMultiplied( float )
API: [InfoBox] - allows adding inline help to inspector properties
API: Scene.FindAllWithTag & Scene.FindAllWithTags
Hammer: Map builder produces maps with significantly less draw calls, hugely improving performance
Audio mixing crackling resolved by switching to a request based system
Curve Editor: Dragging a Curve Handle outside the bounds of the Curve will automatically update the range(s)
Curve Editor: Grid lines now have nice value increments and change with range instead of being static
Curve Editor: Can now Pan/Zoom around the Viewport with Mouse3/MWheel
Curve Editor: Clicking on a Curve Preset will reset the Viewport to fit the Curve
Curve Editor: Added X-Range Inputs so you can modify the TimeRange of the Curve
Curve Editor: Holding CTRL while dragging a Curve Handle will snap the Handle's position to the grid
Curve Editor: Now draws a light grey rectangle with a dashed line to denote the min/max ranges of the Curve
GameTransform.World is now cached instead of recalculating every access
ShaderGraph: Can no longer delete Result nodes (the final output nodes)
Editor: Simplified the Filter Menu in the Component Selector
Editor: Component selector improvements
Networking: Stop breaking prefabs during NetworkSpawn
API: Re-categorize PlayerController.RotateWithGround and remove PlayerController.GroundYaw
Bloom (quarter depth, fix rendering behind walls)
Display default property values in editor inspector tooltips
Clamp alpha on ParticleSpriteRenderer, fixes negative alpha rendering black
RenderTarget.GetTemporary thread safety
CommandList state is scoped allowing recursive command lists
Nav Agent path invalidation behaviour
Highlights: Can target other renderers explicitly
Don't render ScreenPanel if it's excluded by a camera's RenderExclude tags
GameOverlay layer is split into opaque/transparent
Curves use Binary Search for better performance
Bail out of SoundHandle.Stop if already finished or fading out
Prefab instance context menu: edit shortcut, tidy
Startup crash on GTX 900 series cards
Tooltips were recreating every frame
Hotload errors when encountering anonymous types
VideoPlayer: Unable to play VP8 (webm) videos
Native editor tools (Hammer, ModelDoc) stylings
Launcher showing added projects as launching when they weren't
Curve Editor: Fixed grid numbers disappearing when increasing the range
Curve Editor: Popup no longer opens between two monitors when opened near the edge of the screen
ShaderGraph: "Render Backfaces" setting getting reset on recompiles
ShaderGraph: shaders not rendering backfaces in Material Editor
Fix [CallerLineNumber] not being properly whitelisted
RenderTarget.GetTemporary: Don't try to UAV bind or create mips for depth formats
Decals: Poor culling at edges for rotated decals
Decals: Normal maps not decoding or transforming to world space correctly
Decals: Not inheriting their GameObject tags
Decals: Fix Decals in Valve's Shading Model
Game Tick/Update running for one frame after ending the game
[ColorUsage] HasAlpha issues
Tint, Tags, Shadow Flags, and Source not getting reset on MeshComponent when disabling "Hide In Game"
Standalone exports showing black screen
Editor: Enum selectors showing a horizontal scrollbar instead of wrapping
Editor: Cloud code assets failing to resolve on project initial launch
Editor: Disabled text theme color
VR: Duplicate floor in main menu
Undefined nav agent behaviour if nav link traversal is not implemented
Navmesh links worldstart/end position not taking rotation into accont
WebM video playback for UI and VideoPlayer
Fixed nested prefab issues related to undo/redi
Fixed GameObject Transform not transfering to Prefab when Converting a GameObject to a prefab
Fixed an issue when converting a GameObject (that is part of a prefab instance) to a prefab.
Fixed prefab changes not propagating correctly to all their dependencies and open editors
Fixed unlinking a nested prefab not correctly propagating to instances in open editor scenes
Fixed GameObject to prefab conversion for sub hierarchies that contain nested prefabs
Fixed reparenting parts of a prefab instance to another GameObject
Fixed cloning parts of a prefab instance
Fixed Gameobject ordering not updating when reverting instance to prefab state and applying instance state to prefabs
Fixed Component order not being restored in some cases after undo/redo
Fixed NavMeshLink.OnLinkExited not getting called if the link is completed on the frame the agent enters
Fix drag/drop material preview not resetting in some cases
Hotload: Fix NRE in DelegateUpgrader
Hotload: Don't let DefaultUpgrader process delegates
Fixed connection crash when trying to join via new instance to editor lobby with no game running
Fixes [Property] properties from a Component's base class not being serialized when sent to other clients
Fix network owner being unset in OnAwake when doing NetworkSpawn
Fixed css gap property creating ugly uneven gaps
Fixed white viewport when opening the editor
Fixed terrain still being enabled on disabled GameObjects
Fixed ListViews holding onto stale items
Ensure ReflectionQueryCache.ClearTypeCache is called on hotload for game instance
Fix faulty logic for in-place static field hotload upgrading
Input Editor Fixes
Inspector history/locking fixes
Fix DressPrefabScene
DebugTextSceneObject uses Graphics.DrawText in worldspace
Fix HashSetEx Remove() being O(N)
Shaders: Depth-Aware Mask Fix - Fixes objects in front of glass looking aliased
Renderer: Multiple Vulkan Validation Fixes
Renderer: Fix prefab thumbnails rendering with black background due to opaque bloom
Renderer: Fix Alpha Test not clipping on non-MSAA
Renderer: Fix MSAA alpha-to-coverage on depth prepass
Obsoleted CameraComponent.AddHookBeforeOverlay - Use CommandLists instead
Obsoleted CameraComponent.AddHookAfterTransparent - Use CommandLists instead
Spritecard shader - Was only used by legacy particles
Sandbox.Game.dll - Merged everything into Sandbox.Engine.dll
Panel.Bind
Projected Decals
::before and ::after to UI
New Prefab Instance System
Screen Space Reflections component
Dresser component - makes dressing avatars easier
Scene.FindInPhysics( Frustum )
Scene.Get<T>()
SequenceAccessor.Blending
ITagSet.GetDefaults
ParticleEffect.RealTime
Panel.SetRect
Plane.ReflectPoint
Plane.ReflectDirection
CameraComponent.BBoxToScreenPixels
Bitmap.Size
DebugOverlaySystem.Texture (draw texture on the screen)
Transform.Mirror
Application.OnWidgetClicked
Graphics.CameraTransform
Graphics.CameraRotation
Graphics.FieldOfView
Renderer CommandList wrappers
Renderer.ExecuteBefore (command list, executes before rendering object)
Renderer.ExecuteAfter (command list, executes after rendering object)
CommandList.DrawReflection
CommandList.DrawRefraction
CommandList.DrawRenderer
CommandList.DrawView
CommandList.Attributes.Set( bool )
CommandList.Attributes.SetCombo( bool )
CommandList.GlobalAttributes
Texture.Clear( Color )
TextureBuilder.WithInitialColor( Color )
Vector3.Dot( a, b )
[FilePath] attribute for string properties
accessors and constructor to Matrix class
Matrix.CreateObliqueProjection
Input.Suppressed
Gizmo.Draw.Sprite angle parameter added
Editor theme improved - new font, color scheme and many tweaks
Shader memory layout changed to drastically reduce stuttering
Time classes internally use doubles for improved precision
Video Recording has been greatly improved for stability and speed
Human female🙍♀️ models look a lot more female
GPU -> CPU readbacks use cached memory improving speed
VR gets it's projection matrix from the headset directly
Updated Roslyn - your games will generate more optimized code now
GameObjectReference serialization for prefab properties
Create GameResource Save button when using a customer inspector
Improved aspect ratio in asset browser thumbnails
Select prefab/network root when selecting object in viewport
Prefab instance UX improvements
Rebuild model hitboxes on renderer model change
Optimized NetworkTable causing excessive delta snapshot GC
Cameras rendering to textures use a HDR texture and matching MSAA
Make sure Screen.Size is correct on scene startup
Component Eye Dropper can be used directly on Components in the inspector
GameObject Eye Dropper can be used on Prefabs in the Asset Browser
GameObject & Component Eye Droppers can be used on other GameObject/Component properties
Load system scenes on any non-additive scene load
Creating a new project or opening a Sample Project will now correctly show the "LAUNCHING" text
Sample Projects no longer create duplicate entries in the Launcher when opened manually
NetworkFiles includes stuff on resource paths
Mixer Handles now support multi-edit
Can now unlink multiple prefabs at once with multi-select
Can apply/revert prefab instance changes with multi-select
Unsaved changes dialog prompt for resources
Update Skin shader with tint and age sliders
Steam Audio update (4.5.2 -> 4.6.1) and static linked
RenderTextures are cleared to magenta by default (to spot errors more easily)
Updated to SDL3 and gamecontrollerdb.txt
UI textures are mipbiased to avoid being blurry
Allow modifying the transform of the prefab root
Project settings UX improvements
Whitelist JsonStringEnumMemberNameAttribute
CameraComponent.RenderToTexture takes a ViewSetup allowing overrides
Yoga config uses UseWebDefaults
HudPainter.DrawLine uses SDF shape for much smoother lines
Exposed and documented ImageFormat
Whitelisted many requested types including BigInteger, Complex, Task.Is*, ReadFromJsonAsync and more..
GameOverlays use a viewport z-slice instead of an additional depth buffer
Intel Integrated Graphics no longer crash on startup, device limitations are checked on startup now
SpriteRenderer crashing trying to render on dedicated servers
UI no longer renders over the Scene tab in the editor while in play mode
Various security exploits reported on HackerOne
MusicPlayer crashes
Razor elements now play :outro properly
WantsFrameBufferCopy doing nothing outside of regular models
Navmesh links triggering when not active
SceneCamera.GetFrustum returning nonsense on ortho cameras
Scene not being pushed before several prefab related editor actions
Scratch depth buffer not matching scratch color dimensions
UI corners being misaligned
UI sometimes getting 1 pixel gaps between panels
SetMaterialOverride( null ) not clearing any overrides
Prefab Root context menu giving options that resulted in error
TreeView not completing a SHIFT+CLICK action when the first item was selected outside of the tree
Locate Prefab option now always appearing when you'd expect it to
Depth-aware mask NaNs
Model renderer local bounds being wrong
Fix rotated off-center box trace
Null GameResource icons preventing editor start-up
Blending mode on translucent objects, default alpha blending mode additive
Missing project settings button on asset projects
Input binds not saving
Dedicated server crashes when trying to use lobby methods
Error when in Eye Dropper tool of a list entry and the entry in the list is removed
Fixes a discrepancy between the hashed identity of TypeLibrary methods and MethodIdentity in WrappedMethod from CodeGen when the method is on a class contained within another class
BytePack struct serialization
TypeLibrary is disabled during cctors / package load
Context menu on normal files in the Asset Browser
Error when multi-selecting an asset and a normal file in the Asset Browser
Flickering when dragging material on to scene mesh
Tooltips linger when mousing out of a tooltipped pannel
Depth Linearization in Oblique Matrices
Crash in CSceneAnimatableObject::MergeFrom
[Button] not showing if not returning void
Fixed menu addon not loading in editor (due to whitelist)
ISceneStage spans the wraps the entire scene update, not just OnUpdate
Prevent EditorUtility.RenameDirectory making a directory a subdirectory of itself
Legacy particle system - legacy particles will no longer render
Prefab variables
Deleted many unused DLLs reducing the game size
Removed unstable GPU shadow culling
NativeRenderingWidget now doesn't render without a scene
Graphics.RenderToTexture (use CameraComponent.RenderToTexture)
Added follower Prefab option to ParticleEffect
Added create prefab on collision option to ParticleEffect
Added SequenceAccessor.Looping
Added Mouse.Visibility
Added Compute dispatch indirect
Added EditorEvent.ISceneView.DrawGizmos
CommandList: Added Draw, DrawIndexed, DrawInstancedIndirect, DrawIndexedInstancedIndirect
CommandList: Added DispatchComputeIndirect & ResourceBarrierTransition
CommandList: Added GrabDepthTexture & Clear
ShaderGraph: Preview Post-Processing & Lighting Settings
ShaderGraph: Added GraphCompiler.RegisterInclude for Custom C# Nodes
Editor: Added Copy/Paste/Reset options to Group Headers and add Reset option to Feature Tab
Sound Event Default Mixer
Project settings are now shown in inspector
Cloud assets are read-only and can not be recompiled
WorldPanel sounds now play from the correct position and mixer
Servers now show across versions if the versions are compatible
Improved hotload speed
Asset Browser now listens for external file changes and refreshes automatically
Sprite and Line shaders use compute shaders instead of geometry shaders
Cubemaps now render directly to cubemap instead of copying to each face
Depth-Aware Mask For Framebuffer Copy
ShaderGraph cleanup, usability, and fixes
Re-Ordering a ListControlWidget no longer displays all values as the previously dragged value
Decal prefabs are staged when previewed
Panel.PlaySound and sound-in/sound-out now plays sounds in 3D if in WorldPanel
Most weapon animgraph 'components' have been turned into reusable subgraphs
CSS @keyframes not order properly
Sequence and direct playback accessors list sequences instead of animations
Networking: Fixed outdated snapshot when downloading maps
Terrain: Fixed errors on dedicated servers
Terrain: Splatmap now default fills the first channel fixing blending
ShaderGraph: Fixed "Render Backfaces" option
ShaderGraph: Fixed "Open Generated Shader" button icon not displaying
ShaderGraph: Fixed named connections getting severed upon re-opening graph when name includes space
ShaderGraph: Fixed properties not clearing when you cut/delete nodes
ShaderGraph: Fixed DefaultOpacity on ShaderGraph Result Node (in Unlit/Post-Processing Shaders)
Material.IsTranslucent properly checks for "translucent" now
Fixed Generating envmaps infinitely when an envmap probe was disabled
Fixed MusicPlayer crashes
Fixed compute skinning for morphs with no skeleton
Fixed Component.OnAwake not getting called on disabled components during deserialization
Fixed case where resource compiler can fail with embedded resources
Fixed DisplayInfo.ForEnumValues name conflicts
Fixed Inspector Multi-Edit not resetting when leaving selection
Fixed EditorToolManager.SetSubTool not always working
Fixed RotationEditorTool handle position not always updating
Fixed very poor EventSystem performance
Fixed some FBXs crashing
Fixed navmesh division by zero on dual core PCs
Fixed skybox env probe updating when not active
Mouse.Visible is obsolete