There are now Saves in Sandbox so you can save and load entire play sessions. These work in singleplayer or multiplayer, and will keep track of the map, players, all props and entities, ect.
We've been pushing updates almost every single day now, so if you've noticed something that was previously broken, it's probably been fixed. A lot of our focus over the last couple of weeks has been on stability, so there's not been as many glossy features.
We're always looking for feedback, so feel free to share your feedback on the forums, and show us your contraptions, and screenshots!
Facepunch sponsored DreamHack Birmingham over the weekend. We attended and had a booth showcasing s&box, letting people try out the platform, Sandbox, Sausage Survivors 2 and community games.
It was an overwhelming success with many people coming back again and again for another round of Sausage Survivors 2. We got some valuable feedback on how people use the platform for the first time. And it was great to support our local gaming community where we're based.
When we first got Source 2 it was the Half-Life: Alyx branch, the only dynamic light you could have was your flashlight. We threw more in but it was never really intended to be used this way, we didn't have ownership of the shadow mapping and it was difficult to do anything with.
I've removed all of Valve's C++ shadow mapping code and written a new shadow mapper in C#. Why rewrite?
Our C# and HLSL is open source, anyone can see how it works, fork and improve it.
Full ownership: we know how every part works.
Less code, simpler, easier to follow and less room to fuck up.
We saw this fixing critical bugs like shadows disappearing completely in Construct, but we also see small performance wins without any real changes to behaviour.
One of the key changes with shadows is the swap from a traditional shadow atlas to bindless shadow maps.
A shadow atlas is a big preallocated texture (8192 x 8192) that contains all shadows in the scene, at 32 bits this texture takes up 256MB of VRAM. If you're playing a game that doesn't need many shadows this is wasted, if you're playing a game or map that needs a lot, you can potentially run out of space.
Switching to bindless means we can dynamically allocate individual shadow maps, we don't have to mess around with finding where in the atlas we can render to, trying to manage what happens if we run out of space etc.
If your game uses no shadows, congratulations you've got 256MB of VRAM back!
Directional lights can now configure their cascades, specifying how many they want and where they split. This is great if you're working on a top down game with a limited view, you'll only need 1 cascade for all your shadows, increasing performance.
We had no ways to configure the performance settings of shadows, now we have a shit ton of convars to control max shadows, max number of cascades, shadow filter quality, max resolutions, and more.. These are globally configured in the graphics settings menu now too. Here's how the different filter qualities look:
Source 2's Vulkan renderer is designed to be used from a very specific amount of threads.
However in s&box .NET can run async code from any thread, we need to be able to use renderer methods from 100s of different threads, we need it to still be fast and we need it to be stable.
We had a hacky solution before which was growing unbounded, leading to memory leaks and crashes.
This has now been resolved, improving engine stability.
We made a few changes to how we handle larger network payloads (ObjectCreate & Refresh Messages). Most of the gains come from improvements to our compression pipeline, reducing CPU and bandwidth usage on client and server:
Server were compressing broadcasted messages once per connection instead of once per message, resulting in unnecessary CPU load.
We now strip null values from JSON before compressing. Doesn't reduce the payload size a lot, but noticeably cuts compression/decompression overhead for both client & server.
We used to chunk large payloads first and then compress each chunk individually. Flipping that around turns out to make a pretty big difference, especially on the client side.
Here are some cherry picked benchmarks (~1MB payload 1000 GOs & 2000 components):
Compress with nulls 0.210 ms/op (old)
Compress without nulls 0.165 ms/op (new, 1.27x faster)
Decompress with nulls 0.232 ms/op (old)
Decompress without nulls 0.074 ms/op (new, 3.13x faster)
If you're unfortunate enough to be French you very likely have an AZERTY keyboard, or German with a QWERTZ layout. With games binding default keys to WASD, you would always have to rebind to ZQSD... 😫 We've made our input system use scan codes now, which standardizes input keys based on position instead of name. Meaning when a game binds something to the W key, if you're an AZERTY keyboard that will be bound to the Z key automatically.
The hub page was confusing, I've redesigned it a bit with smarter cards and grouped friend activity. I'm sure we'll change it some more.
New cards, which are a little bit smarter and give info about upvotes/downvotes and active players.
Friend activity is now condensed and grouped nicely, making it more readable. We use avatars instead of game icons here, showing online state, allowing you to join friends, etc.
Achievements are sorted by percentage complete, and we filter out games with no earned achievements now.
hulls from render would create a single hull from ALL render meshes, now they have the option to create a hull per mesh or per element (each set of connected faces)
this allows better collision when saving map meshes, selected map meshes that have a mix of hull and mesh collision types are supported in the saved model.
Everything is continuing to come together, we've been playing Sandbox everyday, it's starting to feel very well rounded. Building contraptions, messing around, taking screenshots for our Steam page. We tried to quietly announce ourrelease date — 28th April, but it seems everyone has got excited.
Before then we'll be revoking anyone who hasn't played a lot recently, developed games or bought skins. And we'll then go on sale for $20.
It's April — we've got the month left to really beat out the worst of the rough edges. Don't expect too much fanfare in the upcoming updates, we're doing the boring stuff before we can get to the fun stuff again.
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
🧼 Improved
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
I really hope you guys start prioritizing performance since atleast for me it does not run the best. However I absolutely love how this game is turning out and cannot wait so see more people get access!
You can see in the first video the vehicle randomly bouncing on nothing, this has been a major issue for me on any object rolling even on completely flat ground, ball rolling physics are so buggy for me I cant even create a game with a ball as the player. Thank you to the team for everything yall do, the updates are great!
so according to steam the game was added to my account on "13 Nov, 2024 | S&box for Beta Testing" so I'm just curious if im safe and got the game for free?
I'd like my access to s&box returned, please. One of the criteria for keeping the game was that you played recently; I played yesterday, 15/04/26. Unfortunately, I actually have a job, so I couldn't put that many hours into the game, but I did rack up 6/7 hours on the game. I don't care that it's coming out in 2 weeks or that it will be cheap on release. It's about staying true to your work. The precedent you set.
Joke aside, nice devblog, I really appreciate this change for the keyboard layout and the improvements to shadows especially !