18 February 2016
Spent more time on music this week! I’ve always had a tendency to write darker, moodier music, but that sometimes doesn’t feel right in game if you’re strolling through a green grassy field on a sunny day, so this one’s trying to get away from the super dark vibe without losing the hint of tension and mystery that feels like Rust to me.
I’ve been playing Rust a bit with the songs I’ve been writing playing in the background and most of them feel pretty good. Some are a bit too busy and feel like there’s a little bit too much going on once the game sound comes into the picture too, so I’m steering the music in a slightly sparser direction now. I’ve started cutting the fat from some of the other songs, pulling atmospheric elements out of the tense drum sections and things like that.
I'm hitting a roadblock with the development of the XP and levelling system. It's getting to where I can't develop any further without playing it properly. So pretty soon -- maybe this week -- I'll be pushing it to the pre-release branch.
It's still pretty rough, as I've been fighting with the internals, but it's very important to see how it plays and iterate on that. So if you do join the pre-release branch and think it's a big, stupid mess, please appreciate that it's not always going to be a big, stupid mess.
Since we got popular again a lot of people have been asking for a connection queue, so they don't have to keep spamming the join button to get on their favourite server. This now exists.
This comes with a couple of extra benefits to server owners: Maxplayers is now somewhat dynamic, and you can change it while the server is running. Making it lower than the number of players on the server will mean that anyone else that joins will be put in the connection queue until the player count is lower than maxplayers.
Another benefit is that server admins jump the connection queue. So if you're running a 200 player server and you want to join to check on some suspicious activity but it's full, you still can. The server will just be 201/200.
You know how you can right-click loot to automatically copy it to the inventory? Wouldn't it be great if you could right-click items in the inventory to automatically copy them to the loot? Well now you can do that.
If you don't have any loot open and you right-click something in the clothing/belt bar, it will try to move it to the main inventory. This is particularly useful if you're dragging something with the left mouse button, because you can right-click to move items in the belt without dropping it.
Between helping to get Rust ready for Unity 5.4, I made improvements to shoreline interaction. Objects like rocks and driftwood now feel wet and more connected to the surrounding water. Every bit helps.
A larger problem I'm also working on, which should be ready next week, is the very distracting z-fighting happening between the shore terrain and ocean surfaces.
The new conditional model system is finally done and it seems to be working really well from what I could see on the staging servers. To recap, the conditional model system is the thing that changes the appearance of building blocks depending on what other building blocks they’re connected to. The old implementation used physics queries quite excessively which led to reduced performance and caused quite a few glitches. It didn’t support batching, couldn’t run on the server, and was only evaluated on objects that were very close to the camera since it was too slow to process and render for all building blocks.
The new system fixes all of those issues and should allow us to do some really interesting stuff in the future. The fact that it supports batching and doesn’t rely on physics queries improves client side performance around huge player-made structures. The fact that it can run on the server allows us to update the roof collider together with the roof visuals, which fixes the invisible roof side walls. The fact that it’s much faster to process and render means we can run it on all building blocks rather than falling back to a generic mesh in the distance. All of this also means we can, for example, remove the sides of foundations where other foundations connect, which reduces the overall vertex count of buildings quite noticeably. A number of building meshes, like the wall corner pieces, will need updating to get the most out of this new system visually, but until then you can simply enjoy it for the fixes and performance improvements.
Hapis Island, while never being perfect in the first place, has unfortunately been degenerating into a mess over the last few months. There are a number of reasons why this happened, things like us changing the way the terrain materials blend, and retroactively changing the already-placed rocks that were all over the map.
On top of that, the map always suffered from ugly, under-spawned areas, because the sheer size of it means it is a massive time sink to flesh out.
I am tackling all those things at the moment, so expect an overhauled Hapis map after the next wipe. It still won’t be perfect, but it will be a lot better. Here's some before and after shots.
Entering and leaving networking groups has always been one of the primary causes of stuttering in Rust. Things even seemed to have gotten worse over time, so I decided to sit down and profile it all this week. The first thing I noticed was that especially leaving networking groups seemed far too slow for what it did. The good news is that I was able to eliminate the major reasons for that by getting rid of a bunch of entity destruction callbacks and balancing the load of massive entity counts in a networking group over several frames, making the process of leaving a networking group orders of magnitude faster (think milliseconds per frame rather than seconds in some cases). I’m not even close to being done with all the potential optimizations we can do in this area, but at least I made some good progress this week and the results should be quite noticeable.
A long standing issue with the way we stream buildings into the world was that there could be situations where certain walls were invisible while their skin was loading, which could potentially be abused to look inside buildings. Since buildings tend to get more complex the more stuff we add, I felt like I should address this now rather than later. I added efficient placeholder geometry to all building blocks, which is rendered until their correct skin and conditional models have been loaded.
Sets of smaller objects done this week: I have the industrial ladders and staircases/overhangs done. I also took a couple of days to better the road textures and models, and add a few longer segments to avoid repetition and to reduce drawcalls. Overall the roads should look more real in the way they are broken up, less like the result of an earthquake (as it was looking like before).
I’m working on the pipelines set, and I should have that done by the end of this week. Nothing to show on that for the moment though.
The placeholder seed planting sound is finally gone so you can stop having a heart attack every time you plant a pumpkin now. Same with the spear.
I've mostly been working on the LODs for the character this week, so there's not a lot to show. You might have noticed that currently all the heads look the same from a distance, this is because there's only one set of LODs for all the head variations. The heads now all share LODs, but retain the differences in shape which is easily applied to any new variations I'll do. The new ones are also a lot cleaner, so no more partially severed hands or gaping holes in the neck!
I've been working on some more early stage ideas for rad animals. Rather than have them as lumps of walking meat, with some random pool of health that you whittle down, we thought it would be cool to explore different behaviours and methods of killing them that would provide advantages to taking them on in groups, but also reward skilled solo players. One idea is there's weak points on the animals, where their skin is thinner and so emanates a radioactive glow, with larger spots on the back/sides that would enable teams to attack them. There'd be smaller, harder to hit spots on the front that accurate solo players could exploit. A feature of these weak points is that might also become more visible during the night, meaning that the time of day that you hunt or are hunted by these things plays a factor in how easily you can see and target these weak points.
Paul concepted this beast of a boar/pig and I took stab at it: take a look!
Paul concepted a newer, more menacing version of it (above). The idea is that the glowy radiated pustules are weak spots (no pun intended) where most damage will be dealt. We want to push more of the deformed, asymmetric limb look to the irradiated creatures. I’m working on the newer version as you read this, and progress is going well. Looking forward with more updates soon!
Another idea that I wanted to explore was disposable, one-time use weapons that enables players to utilise higher tier ammo--such as rockets--with limited resources. It's something that could potentially give weaker players the edge in a fight against a more prepared enemy. First idea that I thought would be cool for raiding is mortars made from some basic materials. These could fire rockets, or even their own kind of improvised ammo.
Our trees also suck right now. You know it, we know it. A lot of it has to do with how crappy the billboards look, but that will be improving somewhat after the next wipe, as billboards will then have proper canopy translucency, instead of just glowing in the dark like I don’t know what.
The main pose for the hammer had annoyed me for while. It seemed really ‘wooden’ & upright, so I went in and changed it. I also tweaked the rest of the other animations while I was there, including a new deploy (complete with new SFX).
Added connection queue
Added new building conditional model system (performance, reliability, visuals)
Added placeholder geometry to buildings while their skin is loading
Fixed unreliable saving
New seed planting sound
New spear throw sound
Right clicking items with loot open moves them to loot
Right clicking items in clothes slots moves them to the inventory
Right clicking items in the belt bar moves them to inventory
Improved and tweaked terrain shore wetness
Beachside objects, like rocks and driftwood, now getting wetness
Updated wood hammer vm anims
Reduced stuttering caused by entity despawning when leaving networking groups
Load balanced worker items are processed by priority
Made mesh batch refreshes faster in certain situations
Made external walls and window bars use the simplified building block entity
Converted entity events from OnDestroy to DoEntityDestroy (modders beware)
Retired “Construction Skin” physics layer (modders beware)
If you want to follow this project you can sign up to the mailing list.
We'll only update you about this project, we won't spam you about other stuff or sell your email address.