Sandbox Logo
Page Header

October Update

People love the half-life style player controller. They love how it moves, they love how it feels. When you ask them what they mean specifically, they won't be able to tell you.

I want a physical player controller. I want it so that when you get hit by a physics object you go flying across the map. I want it so that when something heavy falls on you, you get squished. I want it so that if you attach a rope to a player and the other end to a helicopter, it can lift the player up. I want it so if you attach a rope to a player with a boulder on the back, they can drag the boulder around. I want it so if the player is standing on the roof of a car, it moves with the car.

And I want all this to work just using physics code. No gotchas, nothing you have to work around, just a rigidbody that you can walk around and use ladders and stuff. I want it so you can drag it into the scene and it just works.



So that's what I did. It's big, so I'll make a full technical post about it.
Last month Garry added Scene Maps, which let you publish scenes as if they were maps.
This left Hammer in the cold, as you couldn't add doors, or buttons, or triggers like you can in scene.
So now Hammer can use game objects and components. Not only does this open up interactivity but you also have access to all regular components, such as the new particle system, physics joints, world UI, and more.

Internally this is all just a regular scene inside your map that gets packed in the vpk.
You can also tie meshes to game objects, the door and button here are both interactive map meshes.

There's still a few bits to add such as prefabs and nested parenting, but it's getting there.
You can create ActionGraphs inside hammer to make stuff happen, just like in the scene editor.

We've added a dashboard page. This shows a few common things about you.. like your current achievement status and a feed of your friend's activities. I figured this is better than just showing the about page.



The plan is to hone this information into something useful, and then show it all in game too.
Our current model physics component doesn't allow for easy access to the rigid bodies and joints of each body part. The ragdoll component is a work in progress component that creates rigid body and joint components as child game objects.
Because everything is now a component, a lot more is possible.

User profile page got an update this month. They now show your achievements and gamerscore, as well as a few other stats. There's a link to Steam too.

You can edit the page, so you can add information about yourself, links to your friend's brother's discord etc.


These pages follow your Steam profile settings. If you have a vanity url set on Steam - it'll copy that, and your page will be accessible via that url, if not, it'll use your SteamId. If your steam profile is private, then your s&box profile will copy that setting too.
For our physics player controller we wanted an easy way to make conveyor belts. I figured out that this could be applied per surface, so conveyor belts can be made without any coding required.
Because it's per surface this can allow for curved conveyor belts.

Over the last few weeks I've been working on improvements to what is probably our most-used tool, the asset browser. Every developer at some stage is going to end up using this, so I figured I'd make it as easy to use as possible.

Without going into excessive detail, the main highlights are:
  • Color-coded asset types & better asset displays, so you can see what each asset is at a glance

  • Separate cloud browser - this helps keep a degree of separation necessary to help with workflow and make it obvious as to which assets are cloud, and which are stored locally

  • Fast, progressive search with improved options - so that it's easier to find the things you want

  • An improved list view - we now display things like date modified and asset type

  • And other stuff, like categories for asset types, we show C#/razor files now, and improved thumbnails for materials.
Rolling resistance can now be applied to sphere and capsule collision shapes. This is needed for games that want to control how much a ball can roll on a surface.
For a minigolf game you would want to apply different rolling resistances depending on the surface. A smooth surface would have less reistance than grass for example.

We merged a major refactor to how we do our internal lighting system, it should solve all square artifact issues and increase your framerate in scenes with many lights.

Previously we used a Forward+ approach to light culling by testing shapes against tiles, we changed this to use frustums instead, makes it much simpler and lets us to a lot more with this, and slides perfectly with fog & our GPU driven shadow culling system


You don't need to do anything to enable this, you just get free frames.

The Particle Text Renderer is now included with the engine, which allows you to use text rendering in the particle system.

Continuing with the big visual changes from last month, I've added an optional grid-aligned mode for wires.
Another big feature is you can drag from inputs now, not just outputs. It'll also suggest scene references for components and game objects when you do that.
We've finally got a switch-case node, which works with enums, strings and ints.
Lastly, you can now hover over items in the node menu to see their descriptions, inputs and outputs. It'll use whatever docstring you put on your custom node methods in C#.

The TextRenderer component now uses the new text rendering stuff I added, which means you can add outlines, drop shadows, and change a bunch of fonty stuff.

During the development of the new player controller I realised that the order of the physics events was wrong. Fixed update was happening after the physics step, so any changes made it in were only reflected in the next tick.

So I fixed that, and then it became apparent that sometimes you want to do stuff explicitly after the physics step. So I added IScenePhysicsEvents to solve that.
You can emit particles inside models now. It works with regular models and skinned.

We started fixing up the dedicated server this month. Long story short is that it works. You can start a server, load a game, join it, play with other players. That's our first steps.

The next step for dedicated server is what the kids are calling "private code". What they mean is serverside code. We have plans for this, but it wasn't in scope for this month.
It's common in components to have features that you don't always want enabled. Sometimes you don't even want people to know about them unless they go looking. Here's an example:

public class FeatureTest : Component

{
[Property, Feature( "Body" )]
public float BodySize { get; set; }

[Property, Feature( "Body" )]
public float BodyHeight { get; set; }

[Property, Feature( "Head" )]
public float HeadSize { get; set; }

[Property, Feature( "Head" )]
public float HeadHeight { get; set; }

[Property, FeatureEnabled( "Secret" )]
public bool SecretFeature { get; set; } = false;

[Property, Feature( "Secret" )]
public string SecretText { get; set; } = "Bloxwich";
}

This then creates these tabs at the top. The FeatureEnabled option allows you to add or remove a feature, and the component remembers the state in the bool.

You can now define the Distance and Falloff curve of a sound effect, and we brought back the previous widget that allows you to quickly and easily preview how your sound is heard in 3D space. This should give you a lot more explicit controls over your sounds instead of implicitly deciding some for you.

Our Depth of Field effect sucked and was slow, it's been rewritten and now it's fast enough to run on a nokia and looks great.
Blends perfectly with MSAA, even fine details like hair are preserved nicely.

Feels good when we get a month in which we manage to actually merge stuff in. It feels like we've stopped tripping over our own feet so much and we're getting some real velocity now.

There should be a few things happening over the next month. The standalone/exporting stuff is being finalized, and I would expect some news on that. The steam store page should be up next week. The steam inventory system should go live. We'll switch from net7 to net9. The human model will appear on the avatar screen. The new Sandbox Mode should start making its first appearance.

Comments

Jan, 1 2024
465
Nice work!
Aug, 8 2022
530

Oct, 10 2021
105
"When you ask them what they mean specifically, they won't be able to tell you." Yeah that about sums it up.
Jul, 7 2022
0
perfect
Oct, 10 2023
130
Hammer updates and sandbox teaser is really nice
Feb, 2 2024
95
💯💯💯
Sep, 9 2021
0
The best devblog, vibes October 2022. Answers to hot questions: about dedicated, server code, whether Hammer will stay, what will happen with The Sandbox - were given. Good works!

Sep, 9 2022
105
eggcellent work
May, 5 2023
705
Perfectly! We are waiting for Frank and Adam
Jul, 7 2022
160
Nice work.
Aug, 8 2022
0
very cool update

now all i need to be happy is GPU lightbake for hammer and i will be able to die happy
Jul, 7 2023
90
Keep going with the excellent work!
Jul, 7 2023
90
Keep going with the excellent work!
Oct, 10 2021
300
Dr.House
Jul, 7 2022
210
nice

Sep, 9 2022
0
No more sam Squares :(

Feb, 2 2024
140
wild
Mar, 3 2023
0
I love the component features, and really cant wait to do more with the servers.

honestly the way sbox is handling networking and how seamless it is with the engine has been a game changer, unlike unity or other engines where you would have to use a thirdparty plugin like photon or write your own, sbox has it built in as a core feature and is integrated with the component system makes it so seamless to write multiplayer games.

excited to see whats next for networking.
May, 5 2023
0
good job!
Apr, 4 2021
225
An Excellent Blog Post

Oct, 10 2023
0

Mar, 3 2023
120
When will Flotel release on s&box?