Sandbox Logo
19 January 2024

The Scene System

We've been working away in relative secret for the last few months. Here's what we were doing.
Garry Newman
Programmer
UK
Previously, the Engine worked very much like Garry's Mod. It was the standard source engine setup. Entities, client, server, user commands, prediction, hammer.

What became obvious over time is that we wanted more control, over the entire game loop. We wanted to make things more real-time, less baked, less compiled, and faster to iterate and make prototypes.

We did this in Garry's Mod when we added the sandbox mode, which lets you spawn in models and change their colour and materials. It also let you place lights and particles to construct a scene.

In a lot of ways this new system is an evolution of that, except it's the engine.
A few months back we took the decision to see if we could rip everything out and remake it how we wanted. The thinking behind it was that we are incrementally replacing things, so what will we end up replacing in the long run? We should try to get that done now.

This was an exploration. It wasn't guaranteed to work out. It was purely to see if it was possible, and work out if there were any benefits.

It turns out it was possible. And it's awesome.
We've now got a scene system in the Source Engine.  It's wild. This is stuff I dreamt about when making GMod.

What this means is that you have a scene, you put objects in it and press play, and it plays. You stop playing, move those objects around, and press play again, and it's the same again.

Using scenes and components allows for much much faster iteration when prototyping. It's very transparent. What you see is what you get.
Because of that transparency, because you can click on an object on the hierarchy and inspect and modify it at any time, it's a lot easier to use. Especially for non-programmers.
Things that were previously difficult are now plainly obvious and simple to do.
The scene system uses Components instead of Entities. A single GameObject can have many Components, and many child GameObjects.

This is a bit of an adjustment when coming from the Entity system. People are used to thinking in that one dimension, so it can take a while to adjust to see the benefits of this system.
I always have more fun making games than playing them, and this new system makes this all way more fun to play with.
Hey guess what - maps still work! You can load them in the scene.
This is all pretty dynamic too. You can load and unload maps, change them, all in one scene, without restarting the game.
As you can tell, this is kind of like a whole different engine now. 

So let me tell you something. I love the source engine. I'm a source engine geek. The fact that the guys who made half-life know who I am and have let me use Source 2 is insane to me. They are my heroes and I don't want to hurt their baby.

So removing entities, server/client, func_button and all that shit hurts my heart. It's not done lightly. The engine since the start has really been a worldcraft (hammer) first engine. And that's worked for some of the greatest games in the world, but I don't think it's going to work for us.

After using Unity for many years, I can see the benefits of both worlds. Hammer is the king of level editors. It is something engines like Unity sorely miss, and no one has managed to top. But the range of being able to make the smallest high-concept mobile game to the largest open world terrain game is one of Unity's great strengths, too.

So what I would love to do is let people make games in s&box, and then export them as standalone games. And then sell them on Steam. And I don't want any money for that. I don't want any royalties or a cut of your earnings. It'd be totally for free. It doesn't cost us anything, so we're not gonna charge for it.

And what I'd like is to convince the rest of the company that we can make the engine that good that they should use it too. And then they can make games on it, and release them, and make me lots of money to spend working on the engine.

This all obviously needs permission from Valve, but initial talks about it have been positive, and as long as we don't fuck it all up by doing something stupid like uploading one of their games to our platform and forcing them to DMCA it, I think we should be good.
We're a relatively small team at the moment, and could do with a few more programmers to spread the load a bit. 

We don't hold hopes of being as pretty as Unreal, or as popular as Unity, or as free as Godot, but I think we've got something interesting here and we can make it more interesting.

If you know c++ and c#, and want to help us build a nice, fun to use game engine please post your application here.