In Rust we have this system that shows you tooltips when you look at something. This has two nice effects.. first of all they know they can interact with something instead of just spamming E at everything hoping.. and secondly you can tell them exactly what it's going to do.
This is now built into the IPressable interface, so anything that implements it can also provide context sensitive help describing what it is going to do.

I don't think this was ever in Half-Life or Half-Life 2 because Valve comes at it from more of a "show don't tell" point of view, where if something looks like it can be interacted with, it will be interactable. We don't have that ability, really, because interacting with things can do unexpected stuff.. so this feels like a pragmatic choice.
Much like Garry's Mod, we want a bunch of options for our wheels, thrusters and chair entities for Sandbox mode. 

Thankfully, we already have a lot of options that work well in our asset library, so you should start to see more options when building your mad contraptions in the coming days

Ponder the days of yore for a moment. You might recall that if you were sitting in a chair or chair-like object in Garry's Mod, and going very fast for whatever reason, the arms of your character model might raise skyward, so as to convey something resembling unbridled glee.

This is back, and tied to a new parameter called thrill. It is also usable outside sitting — which will probably useful to you if you're making a cops & robbers thing. You could even combine it with the wish values that govern leaning to get a rather zombie-like result...

Additionally, humans now blink naturally, and a new entry to the face_override list was added to let programmers forcefully close a character's eyes at any time.
We improved our audio performance by optimizing the occlusion system, binaural spatialization, and memory management. In our audio benchmark scenes, this resulted in a solid 20–30% reduction in frame time.



We also shipped several improvements to our VOIP component. Now, lipsync and audio processing are disabled for players who aren't speaking. This change should drastically improve VOIP performance on servers with large populations.

We've moved our renderer from Forward+ Tiled Culling to Clustered Culling.

Light calculation during shading will only affect what it's actually intersecting on geometry instead of any intersection with the frustum.

This is a more modern way to deal with GPU culling of Lights, Envmaps, Decals and other GPU-driven objects, for the average user it's nothing to worry about.

This simplifies a lot our pipeline and improves framerate in some edge conditions, our Tiled Rendering implementation was made targeting D3D11 and was hard to maintain, this also helps us iterating on it as time goes on.
Our envmaps are awesome to generate quickly for very fast iteration on the editor but they're an annoyance to the user that they are also generated every time they join a game.

We added the ability to be able to bake and cache Envmaps to disk instead of generating them at load time.
Since these use BC6H, VRAM cost for these are 8x smaller than dynamic cubemaps.
Garry made the API for saving a dynamic texture really awesome with just Texture.SaveToVtex():
public async Task Bake()
{
	RenderCubemap( CubeTexture, CubemapRendering.GGXFilterType.Quality );

	var sceneFolder = Scene.Editor.GetSceneFolder();
	string filename = $"/envmap/bake_{Id}.vtex_c";

	var vtexBytes = await CubeTexture.SaveToVtexAsync();
	var path = sceneFolder.WriteFile( filename, vtexBytes );

	BakedTexture = await Texture.LoadAsync( path );

	// Make envmap baked
	Mode = EnvmapProbeMode.Baked;
}

Backend of this stuff will be used to store the results of other things we want baked like Indirect Light Volumes.
We've been trying to figure out how to make Scene files function like real maps for a while. We've thought about the compile process, saving lightmaps, navmesh, envmaps etc.

Since Source 1 maps have been compiled to a VPK file, which is basically like a zip file with a bunch of loose files in. We have decided to skip that and just have a folder.

So now you can call Scene.Editor.GetSceneFolder() to get a class to interact with this folder in the editor. You can generate and save resources in there, which your scene will reference and use. For example, when we bake cubemap textures we save them in this folder.

This unlocks a lot of capabilities for us in terms of mapping.
Enums in the inspector were always a dropdown control. This works, but fuck me it's a click to see the list of options, then a click to select the option. Now if your enum has less than 4 options it's turned into an EnumButtonGroup, which shows the options as a group of buttons.



This seems like a stupid thing to care about, but it makes the UX so much better when you can see everything and single click between the options.

You can force enums to use a GroupButtonControlWidget by adding the [EnumButtonGroup] attribute to the property.
We have this new property on the Application static class. This allows access to the editor tools from the game.

It doesn't have much available right now, just access to the currently editing scene and a Foreach that provides a progress bar while iterating. It's something that I can imagine will be expanded over time, as we want more editor functionality in the game code.

This is null when running outside of the editor.
You can define editor menus in the game code now. I can't imagine there are a ton of use-cases for this - but it has proven to be useful for me. If you can get away with it, it's always going to be much nicer than having editor code somewhere else.
You can now store data as binary when JSON no longer fits your needs.
 
The system is fully transparent and integrates seamlessly with existing JSON serialization. Any type that inherits from BlobData will automatically be serialized as embedded binary data alongside JSON.
public class MyBigData : BlobData
{
    public List<float> Data { get; set; } = [];
    
    public void override Serialize( ref Writerwriter )
    {
        writer.Stream.Write( Data.Count ); // Int
        
        foreach ( var instance in Data ) // float * Data.Count
        {
            writer.Stream.Write( instance );
        }
    }
    
    public void override Deserialize( ref Reader )
    {
        var instanceCount = reader.Stream.Read<int>();
        
        for( int i = 0; i < instanceCount; i++ )
        {
            Data.Add( reader.Stream.Read<float>() );
        }
    }
}
You can now select GameObject and Components right from the control widget! This makes it quick and easy to select something without losing your place in the hierarchy, or having to miss another drag & drop.
Added Copy and Paste shortcuts to the Mapping tool so faces can be easily duplicated/manipulated
We’ve added the ability to select the individual gizmo handles from a list, as well as categories. This stuff is all based on the attributes on a component, you don’t have to do anything extra, it’ll just work.
We've added full SCSS-style @mixin and @include support to the UI stylesheet system.

Mixins let you define reusable style templates that can be included anywhere in your stylesheets. They accept parameters, support nested selectors, and can even use @content blocks for wrapping patterns, dramatically reducing repetition and making your UI code easier to maintain.


Read more about Mixins here.
Scene mapping tools now has hotspot texturing, it automatically applies UV mapping using hotspot rects embedded in the material.
A tool that lets you turn an edge into an arch.


26.01.21
26.01.21
21 January 2026
🎁 Added
  • Clustered Culling
  • EnvmapProbe baking
  • SCSS Mixin Support
  • GameObject/Component Tree Picker
  • Editor gizmo selection
  • BlobData API which will serialize as a binary file blob
  • IPressable Tooltips
  • Added Copy+Paste to Mapping Face Tool
  • Mapping tools apply hotspot
  • Edge arch tool
  • 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
🧼 Improved
  • Editor: Better widget feedback
  • Launcher & project creation window styling fixes
  • GameObjectSystem can now serialize properties
  • Managed Skybox Pipeline + Skybox Tiled Rendering
  • Fast Texture Tool preview update
  • Vertex, Edge, and Face tools all save their last Selection
  • 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
🪛 Fixed
  • 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
  • WorldPanels `overflow: hidden` not working
  • 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
trophy 1515
Apr 2021 123 posts
Update 26.01.21 : news/update-26-01-21
trophy 1650
Sep 2021 149 posts
I wonder Map Editor will be ready, will Hammer Editor 2 be removed? 🤔
trophy 1385
Feb 2024 39 posts
Envmap baking is great awesome beautiful
trophy 1253
Feb 2025 9 posts
amazing

i like the way for expansions buil-in already features like player animations/hands/models/guns/open source project wants to see it more
This is a good entry point for beginners and for quickly creating a variety of games from scratch, not just clickers i think
More features like this, more game variations, more audience. 
trophy 145
Jun 2021 137 posts
based
trophy 4880
Oct 2022 41 posts
Great work !
trophy 100
Nov 2025 7 posts
absolute cinema

trophy 0
Jul 2024 16 posts
For "Envmaps Baking" IMO you should support .NET Streams for both the SaveToVtex and WriteFile (WriteStream?) APIs if you're not already. Byte arrays will work fine for small amounts of data but someone somewhere is going to try to stuck a gigabyte texture in one and then you've got problems. Supporting Streams allows you to internally use a small buffer to transfer any amount of data. Maybe this isn't possible (I don't know what SaveToVtex needs to do internally), but even if not, you still get support for being able to integrate with existing Stream types like NetworkStream and so forth.
trophy 2030
Apr 2021 70 posts
Cool stuff 🍻
trophy 62
Aug 2021 1 post
Will there be any Linux support for tools in any foreseeable future?
people
Log in to reply
You can't reply if you're not logged in. That would be crazy.