Sandbox Logo
30 April 2021

April 2021

We gave out a dev preview and spent the whole month cleaning up the mess.
The biggest event this month was that we gave out access to a few devs. This was less than 100 keys.

It's been great for us, to show where we should be focusing energy, what's missing, what we're fucking up. Not only in terms of the game, but in terms of developer support, things like the wiki, discord, error reporting, feature requests and bug reporting. We've managed to get that in pretty good shape now so we can build on it in the future.

Obviously we're getting continually hounded for keys now, so we're giving keys out via nominations. The people with access nominate who should get keys. This is obviously a biased, unfair, popularity contest, flawed way of doing it, but so far it's serving its purpose of getting keys into the hands of capable people.

Finally, I want to emphasise that this is a developer preview. There's no game to play. We've been working on foundations for the last 4 months. So if you're a player and want to play GMod2, this isn't for you, don't get excited for it, you'd be disappointed if you got access.
I added a scaling tool to the sandbox mode. I actually initially forgot to add a check to disable it on players because I just assumed it wouldn't work. Turns out it just works without me needing to code anything special for it - so I kept it in.
I spend the first couple of weeks of April setting up the s&box dev site, which lets people upload their games and maps. This is all obviously still a work in progress, there's a lot to think about and part of the reason to invite developers was to force us to think about that early on.


We organise assets into organisations. This means that name clashes won't happen. So if you want to play the flatgrass map by facepunch, you can go in the console and do "map facepunch.flatgrass". If you want to play sandbox by facepunch you can go in the console and do "gamemode facepunch.sandbox". 

In reality you won't need to type these things in the console (because UI exists) but internally this is how it works.


You can add content to your organisation. Right now this means maps and gamemodes, but this should expand to a bunch of things I want to try.

An important thing to note here is that in the system gamemodes and maps are the same thing. The end goal is if you make a map and upload it to this system you'll be able to add achievements and see play stats just like a gamemodes would.

Content can be uploaded a multitude of ways too. I imagine this will evolve over time too, like providing separate host and client downloads.
It took a few days but I got remote maps working.

So what happens is if you're trying to load a map that you don't already have, it'll query the backend and ask about it. Then it'll download it and load it. No manual downloading, no installing, just playing.

This is actually that fast that you don't even know it's happening most of the time. When you think of map downloads like this you're probably thinking of 10 years ago waiting for 20 minutes while a map downloads from the server at 30kb/s. 

This ain't that.
So Valve had an asset system like this.
/content/alyx/models/gman.mdl <-- source files
/game/alyx/models/gman.mdl_c <-- compiled files

And I changed it to be more addon capable like this

Well this month I decided that sucks too. So now it's like this.
So here's the logic here. 

Being in separate folders definitely has its benefits, it creates a clear line between what should be shipped and what shouldn't. 

But on the other hand, it's confusing, it's another thing that you have to explain to people. It's another folder to be aware of, it feels so much nicer to have related files next to each other. You know if something is source or compiled because compiled files end in _c.

So I decided on balance that this is the way forward for us.
Something funny that I never considered came up when we started getting other people playing. Russian people were getting a black screen when starting up. They couldn't parse the stylesheets.

Something I hadn't considered was how float.Parse changes with culture. In English it's expecting a number like "1.23", but in Russian it's expecting a number like "1,23". 

I got this fixed and now our Russian devs can play just fine.
Taylor and I have been working on refining the Citizen model, so that it can be a much better foundation going forwards, not only for ourselves, but also everyone wishing to create clothing, animations & other content for these funky little fellas.

We've taken the original model and reworked it from the ground up to better take advantage of the Source 2 engine, with a brand new mesh and set of materials. Fundamentally it's the same character, just a much more polished and functional version.

Although the visual changes are subtle, many of the changes are "under the hood". There's a completely new rig with much smoother weighting and procedural helpers!

This new version is not hooked up in the preview build yet; it's in the process of being animated. It should replace the old one sometime in May!

You can grab the current source file here. If you had already gotten started on clothing for the V1, you may need to adjust it to the new bind pose. Please be aware that s&box is in active development, and we can't guarantee there won't be any breaking changes down the line!
I spent most of the month creating a couple of visually pleasing maps trying to help nail down the style for our levels while also giving some variety in level design.

This map is one of the bigger ones I have made so far supporting open spaces and tight areas, similar told old 90s shooters. This is helped to flush some ideas out for more of a interior science/ warehouse art assets, also though not final I feel like its a good direction to make improvments on.

This is using the deathmatch map showed from the last update blog, It's based on brutalist architecture which helped get something out fairly quickly so we aren't looking at dev textures all day, but also makes it look fairly boring as its a lot of greys. This is probably not the direction we want to go.
Animgraph hotloding wasn't working but now it does
Explosion data can be set in model doc, if the entity is a prop, it will use that data to apply forces and deal damage within a radius. Your custom entities can also make use of it.
Hole primitive to make easy holes.

Tilemeshes can now be tinted.

Cable path now has an initial radius slider and can be offset by the radius
Value properties in the tools didn't have sliders before, now you can click and drag at the side of them to slide the value, like most other tools have.
I was welcomed into Facepunch at the start of the month and since then I have been trying to break stuff.

The goal has been to test the API and find any issues or areas of improvement we could make for people wanting to make all kinds of different games.

Dynamic lights can be created very easily, we have point lights, spot lights and ortho lights. It's as simple as creating the entity and setting their light properties.
Dynamic lights can also be used for flash lights.
It really feels like the early dev of GMod. Mornings are for fixing bugs, afternoons are for improving. Sleep and repeat. Every day getting a little bit better.

This is going to be the process for a while now. We're going to be fixing bugs, fielding requests and experimenting. I've already found some pretty big things that I want to fix and refactor to make things easier for everyone in the future. 

This is the best part of development for me. People have fun developing, iterating fast, no-one threatening to refund unless I change something back. Everyone sharing what they're doing - like a group of magicians showing each other tricks. 

It's the good stuff 🥰