May Update

What happened to the April update?

We've switched to a release cycle. Everything in this blog and change list is bundled into a single May Update released on Steam today.

Outside of hotfixes, the game will remain on this version until next month's update.

Staging Branch

We have a staging branch where developers can ensure their games still work, and try out the newest features. Games published on the staging branch are only playable on that branch, and automatically become the live version once the update is out.
Garry went on holiday and gave us a challenge to create a Theme Park game. In just over a week the team has created a theme park tycoon game with:
  • Building: place down rides, paths, buildings & decorations on a grid based system
  • Simulation: guests come to your park, spend money, enjoy the rides, have wants and needs to fulfil
  • Terrain: each map is a procedurally generated terrain with full terraforming
  • Persistence: your park can be saved and loaded
  • Co-op: it's fully networked so you can play and create parks with your friends
We do these because it's good to dog food the engine, everyone should know what it's like to work within the engine to find out what sucks and improve further.

Previously the mouse would be visible if there was a clickable panel on-screen, or it could be forcibly shown via code. But there was no way to hide the cursor while clickable UI elements were on the screen.

We can now use Mouse.Visibility to specify the exact behaviour we want. Meaning you can do things like lock your mouse back into the game to pan/rotate the camera in a UI-heavy game. Mouse.Visible is now obsolete.

Mouse.Visibility = IsOrbiting ? MouseVisibility.Hidden : MouseVisibility.Auto;

When posting a news post you can now attach a change list. This was something we wanted for our new release cycle, to show a list of changes like GMod and Rust do it, but you can obviously use it for your own game updates too.


It's bare basics right now - we'll improve it over time, make it prettier, add an api, show change lists in game etc.
This month I've been rebuilding the keyframe editor for Movie Maker. This gives you a quick and easy way to animate and tweak simpler movements and property changes. Along with that, I've added a trail gizmo to the scene view to preview how the selected track changes over time.
You can add keyframes to gameplay recordings to make additive changes too.
The trail gizmo integrates with the motion editor, as you'd expect.
You can now define a GameObject to clone in your ParticleEffect. An instance of the object will be created for each particle, and will follow the particle's transform. It can be automatically destroyed when the particle dies.
This adds a lot of utility to the particle system, as you can now effectively have particles with sub-emitters.
Similar to Particle Follower, you can now define a GameObject to be spawned when a particle collides with an object.

This is useful if you want to spawn a decal when a particle collides, or if you want to spawn another effect when a particle impacts a surface.
The TemporaryEffect component uses the ITemporaryEffect attribute (which is implemented on ParticleEffect, Sound etc) to delete a GameObject once all of its child effects have finished.

This is useful in scenarios where you want to spawn an effect and delete it when it's finished, rather than after a set number of seconds. This is a component we've found useful elsewhere and implements common functionality, so we've moved it into the engine.
We've moved the project settings window from being a tabbed modal window outside of the main editor. It's now in the inspector. An added bonus is that you can drag stuff in from the asset browser.



We added support for accessing keyboard inputs - they're not user rebindable like our input actions, but can be useful for certain games.
// Is the W key down this frame?
if ( Input.Keyboard.Down( "W" ) )
{
    Log.Info( "W is down!" );
}

// Was the W key pressed this frame?
if ( Input.Keyboard.Pressed( "W" ) )
{
    Log.Info( "W was pressed!" );
}

// Was the W key released this frame?
if ( Input.Keyboard.Released( "W" ) )
{
    Log.Info( "W was released!" );
}
Take a look at how to use this via our official documentation.
Post-Processing shaders are now working in ShaderGraph again, with support for each Blend Mode and will display properly in the Preview window.
There's also a new Lighting Panel to help preview your shader under certain lighting conditions.
And if you're the type who likes to make your own custom nodes with C#, you can now reference an include file.
[Output( typeof( Vector3 ) ), Hide]
public NodeResult.Func Result => ( GraphCompiler compiler ) =>
{
	compiler.RegisterInclude( "procedural.hlsl" ); // #include procedural.hlsl
	string func = compiler.RegisterFunction( MyCustomFunction );
	string funcCall = compiler.ResultFunction( func, $"{compiler.ResultOrDefault( Color, Vector3.One )}" );

	return new NodeResult( 3, funcCall );
};

And a ton of other bug fixes/tweaks that will make using ShaderGraph a lot friendlier :)
Refraction disocclusion is a solved problem.

Last month I worked on solving translucent sorting through glass, but since glass is rendered after opaque we need to deal with that too.

Traditionally you can't render behind what being refracted, it's typically fixed by re-rendering only what's refracted in a slice, which is not malleable and has it's own set of problems, instead this is simple way to fix this without looking like ugly fucking stretching.

Since this depth-aware mask happens when we grab the color buffer, it works with any refractable without shader author needing to do anything special.
This works by reconstructing with blur instead of stretch, so it's very fine, glass blurs don't bleed through front objects either, no stretch artifacts.
Old DecalRenderers have been obsoleted fully, their prefabs removed, component hidden and class marked as obsolete. The new Decal component should be used instead, they are far more performant and customizable.
Sheet sequence support was added to them this month.
I decided Flatgrass could do with a face lift as well as expanding, The old one we had didn't serve much of a purpose so I decided to change that. This new version has been made using most of our new art assets, so visually, it's a big improvement from the old version. It also lets us make more pretty pictures.
This new version now acts more as a micro Construct, with everything you'd want in it from; Light/Dark room, different heights, interiors, ladders, narrow/ wide door ways, reflective surfaces and plenty of space to build.
The plan for the future would be to make the grass area around the building to be swapped out with different types of terrain of your choice, allowing for unlimited freedom for your creations.

You can check it out Here: https://sbox.game/facepunch/flatgrass
Work continues on Depot, our version of Datacore. It's mainly been finishing up the art pass of areas that were previously in blockout phase and solving problems to make the layout somewhat logical and grounded to a realistic setting.

There's still work to be done - polishing what's there, adding further detailing as we continue to expand our available signage and branding, as well as further tweaks to lighting and post-processing.

As always, the props/materials used to make this map are uploaded to our s&box assets collection pretty much immediately - give it a favourite and find them in your Cloud Browser in-engine for easy use. 
You might not have known this, but Facepunch doesn't just give you access to a vast library of ready-to-use props; we've also made first-person weapons! The latest addition to our collection is the M700 bolt-action sniper rifle.
And more importantly, all the first-person weapons we've published now come with their source files: FBX, VMDL, and animgraphs! You can modify them easily to suit your needs, or simply peek into them to learn how it all works...

Here's a brand-new documentation page going over all the details.
We've entered a transitional phase in our development now. We're attempting to move from the previous slap dash development, where we did whatever we wanted, whenever we wanted and it was all kind of experimental, into more of a sustainable model. 

Our aim right now is to get into a monthly release cycle that creates the least disruption possible to our creators. Or at least to disrupt in an organised, transparent, planned way. It's important that we get this as right as possible now, because we want to basically be able to iterate forever.

I think we're getting there now. It's been an adjustment for the team - but everyone is seeing the value in it now. I am very happy with where we are right now with the engine and the progress we're making. I'm also happy to see how active and vibrant the community is becoming.

We've got a couple of bigger things in the pipeline for next month's patch (like the prefab system rewrite). We'll be shipping them to staging over the next few days to give them the maximum amount of testing.
May Update
0.2.0
1 May 2025
add_circle Added
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
upgrade Improved
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
construction Fixed
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
delete Removed
Mouse.Visible is obsolete
trophy 895
Apr 2021 33 posts
May Update : news/may-2025
trophy 0
Jan 2023 1 post
Fantastic work everyone!
trophy 10143
Sep 2022 59 posts
may? april???
trophy 305
Oct 2021 19 posts
good work team, layoffs have been temporarily paused.
trophy 370
May 2024 1 post
I really hope it'll be compatible with source games like Gmod so it's possible to add the ragdolls from installed source games
trophy 50
Dec 2022 3 posts
Good work
trophy 685
Sep 2022 10 posts
Looks good from here!  o_O 
trophy 500
Feb 2024 19 posts
Lots of good changes this month like always, cant wait for the prefab system rewrite!!!
trophy 4103
Nov 2022 1 post
Flatgrass looks great!
trophy 965
Sep 2021 70 posts
Cool as always. The new Tycoon looks still raw, but interesting, I'll take some ideas from it. Facepunch are good that they are taking a break from engine development and will switch to games to understand "how we, simple game devs feel and what we are missing". 

I also noticed that they jumped from March to May at once 😂, which is interesting. In any case, we will wait for: the agreement with Valve to publish games on Steam, private server code and performance improvements.
trophy 38
Aug 2023 73 posts
keyboard input is cool, but might decrease controller/steamdeck compatible games out of the box
trophy 598
Apr 2025 1 post
:)
people
Log in to reply
You can't reply if you're not logged in. That would be crazy.