Sandbox Logo
17 September 2023

Retooling

Invites have been paused - here's what we're doing.
Garry Newman
Programmer
UK
You know, when I started this project I was faced with a choice. Do I use the current Entity system, with its built-in serialization, networking and all that other stuff it does automatically.. or do I implement our own system.

At that time the idea of implementing our own gameloop seemed daunting. All the scene ,  physics, input,  network management. Combine that with the fact that we wanted it to be a comfortable transition for people to come from Garry's Mod, it seemed like a no brainer.

But as time has gone on, we've taken control of all those things on the c# side. We can create a game without the Entity system now, so the balance is falling heavily in the other direction. The engine is aiming far beyond the Garry's Mod community.
As anyone who has played with the Source engine knows, it's split between client and server. If you're playing a single-player game you're running a local server. In some ways this is awesome - because it means you're forced to code in a way that keeps multiplayer working.

But in some other ways, it can add a lot of confusion. It especially seems annoying if you're not interested in multiplayer.

We duplicate the way the engine works in s&box. When you play a game there are two managed context's running, a server and a client. This can take a lot of explaining, and when you're coding you are constantly thinking to yourself "am I doing this on the client or the server".
A while back we introduced GameMenu. It was just meant to be a way for people to make custom game main menus. 

What we quickly discovered is that with a few little tweaks you can make the whole game in it. Your whole entire game loop. You can take full control.

And it's a much nicer experience. It's logical, straight forward. There's one instance. You don't create a server and join it. It just starts. Full control.

So we look at that and think to ourselves.. all these games here could operate purely in the game menu. They don't need the entity system. But all these other games over here can't, what do we need to do so they can?
So just before I went to Mexico we decided to do it. We decided to bring everything out of game. To make everything possible without client/server.dll.

Since then we fetched the renderer out so it doesn't need client.dll. We fetched the map loading out so it doesn't need server.dll. We refactored the PVS system so that works out of game. 

This is still a work in progress, but the progress is really encouraging. The more things we bring into c#, the more possibilities we see. The future of the engine is planning itself.
I didn't really want to reveal this plan until we were relatively sure we could pull it off, and now we are. We're just finishing the first stage of the plan, which was the hardest stage.

The next stages are what I call "dessert" tasks. We've done the hard work, now we get to create new systems and experiment. I would expect this stuff to take a couple of months before we can confidently show what we've got.. which we are confident will end up being a better way for people to work.
So this is why we've paused giving new invites out for now, and all the old ones have expired.

The previous couple of months have been very useful to us in finding scalability issues in the backend, and we're a bit more confident that once we release it won't be a 100% total disaster.

 Invites will start again when we've finished re-tooling.
The take away from this is that we're quiet because we've got our heads down getting shit done. 

The time will come when no client/server games work anymore, which means that most of the games people have created in s&box thus far are unplayable. And that sucks. And I'm sorry.. but this is why we haven't released it yet.

This is a multi-decade project for us, so we want to get it right.