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.
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!" );
}
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.
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.
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...
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.
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.