We're going to be making a bunch of small scoped, polished, fun games. The first of many is Mini Motors - we've worked on this as a small team of a few people over the last 2 weeks, start to finish.
Mini Motors is a top down arcade racer which includes a bunch of maps, cars, pickups, achievements and leaderboards, where you can compete for the fastest lap times. You can also play against bots!

The objective here is to provide nice polished experiences for players but also to provide a learning resource in many ways to developers: the code is open-source to use as an example, and we've created tutorials based on the game on how to use the stats system, build ghost recordings and replay support.
In previous versions we supplied a code archive with the games. This was kind of like a zip file of the source code for that game. We thought nothing of it, because if you were using Lua in Garry's Mod the code would be right there, and dlls are trivial enough to decompile.

But you guys didn't like that logic, you didn't like that anyone could see your code. So last week we shipped it so we compile your code on our backend and ship a compiled, trusted dll with your games instead. This had the benefit that clients don't need to compile code, so games start faster etc.

This week we removed the code archive completely, so it's never downloaded and never shown to clients. So raw source code should be completely secret now. Unless you choose to open source.
We've got a mounts system in s&box that lets you play with content from your installed Steam games. This has been accessible in Sandbox mode for some time, but this week we've integrated it into the platform and stuck it right on the main menu.
You'll now see a Mounted Games list on the main menu and pause screen, where you can enable and disable game mounts. You need to own the game on Steam and have it installed on disk to mount it.

This replaces the old automatic behaviour in Sandbox, so you're in control of what's loaded, as we add support for more and more games.

The mounts API is open for anyone to use. Get started here.
With this new integration, and as mounts can now provide scenes, we've extended the map picker to include mount maps right alongside workshop maps — meaning you can now play on maps from other games, where the mount provides them.
It should work with any games that support workshop maps, and it works in multiplayer too, though other players will also need to own the game and have it installed to join.

This is still early days, and is fairly limited for now, but there's some really cool potential here, and just exploring levels from your favourite games with your mates - exciting stuff.
Our mounts editor side panel needed a bit of love, there's now a search bar and shows which mounts are installed or not and takes you to the steam page to install or buy games for supported mounts.
You can now inset faces in the mapping tools.
This feature was already in the scene editor but I've ported it to work with the mapping tools now.
Tidied up the unboxing scene so cards now show item rarities, particles display to hint at the rarity of the items inside, and the scene itself got a bit of a makeover. There's also a custom transition between the scenes!
Movie Maker's track list now features a sub-track search box, and various track creation bugs have been fixed.
To help everyone play by the rules, there is now a new page in the Publish Wizard which informs you of the Cloud Assets you are using and whether or not they:

a) Are elligible for the Play Fund
b) Require attribution
c) Have no set license  and should be used with caution
d) Are CC0 and can be used freely
We've got a few engine components that we ship as built-in projects, stuff like our UI components, and most of our editor tools. Until now, we'd recompile each of these from scratch every time you opened the editor, even though most people would never change anything here.

Now though, we build once when we need to, and the results are cached and re-used. If you do edit one for whatever reason, we'll recompile that one.

This should speed up editor launch times quite a bit. On my pretty decent machine, this cuts startup times by more than 10 seconds every editor launch.
A feature requested by a user to have a function that computes the penetration normal and distance required for 2 overlapped colliders to resolve penetration.


When working on mounts I would run into texture loading bugs, to debug this it would have been useful to inspect each mip level of a texture, so I added it, along with showing a checkerboard background to see the alpha channel more clearly and a way to see each color channel.



Like particles and world panels, the 3d text renderer now also has an option to face the camera.
I'm slowly going through our existing shader documentation and expanding all pages where it's possible. This will not be a fast process, but the goal is to keep all articles up to date, and provide information that has not been included there previously, which should make learning shaders a bit easier.

So far, I was able to do the following:
  • Updated the Light class documentation, which includes new information about directional light's shadow path, new types of light contributions, and some other little additions
  • More detailed Fog class 
  • Updated the Material struct documentation, added functions that weren't referenced there before. Should be now inline with the current implementation from source code
  • Updated G-Buffer page with an example how you can write normal and roughness/opacity to g-buffer yourself
  • Wrote a big update to Attribute and Variables:
    • Documented a bunch of mip generators that you can use when creating a new Texture2D: Box, PreserveCoverage, AlphaWeighted, and many others. This also comes with some image examples
    • Documented BoolAttribute/FloatAttribute/TextureAttribute and some other related things: what's their purpose? When they should be used? Which ones are read by the engine, and when you should use them? These questions should be answered now.
    • Documented OutputFormat, which specifies the image format that will be used in a compiled texture
    • Slightly expanded the texture packing section with a fancy graph and more detailed description how it can be used. 
  • Added a new page, Procedural Effects, which goes over an existing collection of procedural noise and pattern functions that you can use from your code. I tried to add a preview image for every function.
There will be more in the future, and eventually I will write a number of beginner-friendly tutorials on s&box shaders, which will be on the Learn page.
Our GTAO pass was taking up more time than we wanted so we improved it. After opening it up in a frame profiler I spotted a couple of things we could do better.

The first thing that jumped out was the three denoising pass right after the main AO pass.

Those big blue bumps are L2 cache throughput, and we were completely maxing it out by the sheer number of texture fetches those passes did. Every pixel was re-reading depth and normals straight from textures, over and over, including the exact values its neighbours had just read.

By doing some shader magic and a memory optimization called Local Data Share, we were able to reduce those texture fetches and improve memory throughput for those passes. Now each group of pixels loads its little patch into shared memory once, up front, and does all its blurring from there. This Halved the time spent on average on each denoise pass. From 0.12ms -> 0.05ms on average.

We also did various improvements to relieve memory pressure
  • Depth chain went from 32-bit to 16-bit
  • Edge texture went from 16-bit float to 8-bit
  • Fuse depth + normal load 
  • Reduce denoise pass from 3 -> 2 on medium and low setting.





We know our player experience isn't what it should be. It isn't meeting expectations. Our developer experience is shining star in s&box - but that's not what 99% of people see, they don't get that far.

So our plans are to keep improving the player experience, then do a sale and promotion. We have a few different goals to improve the player experience.

First of all, we need to do Game Jams again. They need to include the player community more. The jams should be aimed at getting players in game to play and vote just as much as they're aimed at developers. We 100% need to avoid the situation we've seen in previous jams where people reveal their game an hour before the Jam ends.

Secondly, we need to improve the Sandbox game. While we've resisted "subscribing" to addons in favour of cloud based runtime spawnable entities, I think we're coming around to the idea of the two systems co-existing. I need to personally spend more time developing and fleshing out the Sandbox Game.

Then we can do a sale and some promotion. We're going to do that once we're happy with the condition of everything. There's no point doing a Rust crossover and getting a bunch of new players that are going to play it once and be immediately turned off. 

We think that aiming to do this around Christmas time will give us plenty of time to tweak and polish everything that needs to be done.
Update 26.06.17
26.06.17
17 June 2026
🎁 Added
  • 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)
🧼 Improved
  • 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.
🪛 Fixed
  • 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).
trophy 1805
Apr 2021 226 posts
Update 26.06.17 : news/update-26-06-17
trophy 220
Aug 2021 1 post
Nice I appreciate the insight into the plans.
trophy 2940
Jul 2022 85 posts
nice update
trophy 2067
Aug 2022 12 posts
Cool
i love grafis and rod 
trophy 3606
Sep 2021 18 posts
goat like zygoat
trophy 10370
Dec 2024 37 posts
Yea broskis, you really need to promote you game more because it’s impossible to play multiplayers aimed games without players… 
trophy 2105
Apr 2024 13 posts
Fantastic job!
trophy 125
Jun 2025 6 posts
nice update! cant wait for the future of s&box
trophy 85
Feb 2025 3 posts
Thank you for your work, this update is looking fantastic. I see a bright future for s&box!
trophy 375
May 2021 4 posts
Regarding the "Removed Code Archives", does anyone remember the old system back in 2021, when the asset.party website was pulling your GitHub repo to compile the DLL? 👴
trophy 1175
Jul 2024 9 posts
Bacterian 2 Hours Ago edited 2 Hours Ago
great work!
edited:
great work!
trophy 1196
Jul 2022 41 posts
W
trophy 2388
Sep 2021 259 posts
 I’ll say this without irony, this is the best devblog since release.

I agree with Garry here that the game needs promotion and sales. And the chicken-and-egg problem, where developers need players and players need games from developers, is very hard. s&box is almost perfect for developers, but for players... Many people were waiting for Sandbox Game. It is the flagship, literally the thing that can make people buy s&box. And many were disappointed when, after paying $20, they did not see the content they expected.

And I want to say one very important thing: what sells the idea of s&box? It is exactly the combination of engine + platform. You can test your ideas on the platform, and if everything goes well, you can go to Steam and release and promote your game there with an existing audience, technical base, and demo version. Right now, the problem is that the platform’s online numbers are falling, so this advantage does not work at full power. There are also technical and legal problems, but I am sure that this year we will already be able to prepare standalone games.

About game jams, yes, there was a problem. But when Trundler hosted one, it was much clearer. Mostly because there was a theme. When there is a theme, it is better than complete freedom. He also clarified the rules almost every day when conflicts or misunderstandings appeared, and I approve of that approach. That is a fair competition. I will be happy to take part again and to rate other games too.

So, as always, I will stay with the whole community, keep making games, and actively take part in the life of the platform. I am already making trailers for Eridium’s Summer E3.

trophy 2091
Apr 2026 4 posts
nice work, going in the right direction.
people
Log in to reply
You can't reply if you're not logged in. That would be crazy.