Heavy Armor Nerfs
Lots of people have been complaining about the Heavy Armor and how it protects too much. I disagree, but only because I know how it really should behave and the fact of the matter is it was only half implemented. I’ve taken some steps to bring it more inline with its original concept. First thing you’ll notice is that if you wear the helmet your view will be seriously impaired
Second thing you’ll notice is that if you wear the jacket you will not be able to aim down the sight thanks to how bulky it is. This means you’ll have to get good at hip-firing, use the lasersight, or rely on shotguns/flamethrowers etc.
Lastly, wearing either the jacket or the leggings fully reduces your movement speed to that of the full set rather than each piece providing a small reduction.
Lets see how this plays out. It may be too much, in which case I’d like to increase the protection even further. Or it may not be enough, in which case I’d like to add some more nerfs like being unable to swim. I still have some work to do with the view occlusion, I’d like to to eventually be a mesh and bounce up and down as you walk, and it probably occludes super widescreen multi-monitor setups too much. More on this next week.
Minor AI Fixes
I didn’t do much with AI this week, but I did fix an issue where some ore nodes were not properly carving the navmesh, resulting in AI potentially getting stuck between them. I also adjusted the bear walk animation to properly match its move speed.
Helicopter Rocket Fix
Shout out to arodax for pointing me in the right direction and finding the fix for our helicopters randomly shooting explosive rockets instead of napalm. For those interested: it happened when the helicopter was shot and forced into a strafe pattern, but the napalm cooldown hadn’t finished yet so explosive rockets were considered available. This should be fixed now
I made a few changes to shadows this week. One issue that’s been bothering me for a while was the resolution of the shadows changing according to the camera orientation, so I went ahead and switched to a more stable solution. You should note that resolution is more predictable and hopefully less distracting.
In order to maximize shadow resolution, Two Cascades now has a maximum distance limit of 200 meters, regardless of the value you set on the graphics options. The No Cascades option already had a limit of 50, which is also the minimum. Only Four Cascades will give you the full range now.
Another shadow cascade related problem is that the hard border between different cascades can be quite distracting. I added blending between these regions in order to mitigate the distraction.
Finally, water caustics now get shadowed properly from the sun/moon light.
Ambient Lighting Improvements
We’ve been struggling with ambient lighting for a long while now, due to Unity limitations handling fully dynamic scenes. We’re now slowly working to solve some of these problems with the ultimate goal of improving overall visual fidelity of the game.
Until we have a proper global illumination solution, this week I took the opportunity to switch to spherical sky-based ambient lighting. It looks wrong in some cases but still beats what we had before, which was basically a dark flat color. It’s not final yet, but it’s a start. The ambient occlusion was also tweaked to cover a larger radius and higher intensity to add more depth.
Better Movement Violations
I spent some time reducing the false positive rate from the server side flying detection and eliminated some overhead from the water checks to free up some time to do other, more advanced verifications. Overall these improvements led to a much better detection rate with fewer false positives, which allowed us to push the detection strictness quite a bit. We’ll be experimenting with the parameters on some high population servers over the course of the next week in order to determine how far we can push the system without running into false positives.
Smooth Player Movement
You know how in Rust players in the distance looked like they were walking at half your framerate? Well, that was because in Rust players in the distance were walking at half your framerate. This was caused by some ancient optimization that no longer makes any sense and made every gunfight feel kind of shit, so I removed it and made shooting people feel buttery smooth in the process.
Large Furnace Exploits
Oops, looks like last week’s furnace placement changes fucked shit up. Those exploits are now fixed.
Garbage Collection Reduction
Nothing interesting to see here. I removed a bunch of needless memory allocations that were done every frame, which reduces the amount of garbage collections that occur.
Water Catcher Exploits
I realized that the various water catcher exploits were still around and finally addressed them with this update. Sorry, we really shat the bed there.
Launch Site Crane
I spent this week building a crane on the rocket launch site:
It will have two lifts running in the columns left and right of the crane, and not all floors will be accessible using it. For some I’ll have you jump because I know you all love it. As always, some juicier loot will be where it’s hard to get to. When I’m done with this, the next undertaking for me will be the rocket itself.
Rocket Factory Site
I’ve been working on a variety of tasks around the rocket factory site. I focused mainly on getting all the buildings textured, and I also did a quick dressing pass in parts of the level to get a better preview of what the finished area would look like. In addition I’ve been working on polishing the fuel silos, added pavements and curbs alongside buildings and tweaked the layout to allow for more open spaces. Next week, I will be going back to the rocket factory interior and getting it done to a presentable level.
Roadsign Armour Rework
A few weeks ago Helk and I talked about reworking the Roadsign Armour, so I’ve been taking a look at it this week. It’s a bit of a delicate one: on the one hand it’s an iconic part of Rust; on the other it’s just a few signs loosely dangling round your neck. Not to mention it already has a bunch of skins, so the textures all need to line up properly to keep the skins intact.
Fortunately there’s a lot of spare space on the old texture so I’ve got a bit of leeway to add some straps, buckles and rivets to make it all feel a bit more constructed. I’m using a few tricks to cut the plates up while maintaining a nice edge bevel and I’ll be taking another pass on the textures. Here’s where I am with it so far:
Water Jug Viewmodel
Animations and states are now setup for the Water Jug, so it’s ready for when there’s time to get it in game.
I’ve been going over the various player animations and fixing minor little details that looked a bit off. For example, the crouch walking animations had the spine jutting out a bit awkwardly, so I fixed that. I’m also polishing up the jumping animations and re-adding the multi-directional jump animations so it looks more natural when you jump sideways/backwards.
I finally finished going through all of the viewmodels, fixing minor cosmetic issues such as awkward looking wrists and clipping animations.
Tier 2 Workbench
Finished up grounding the props onto the main model, and also finished up on the textures. Now finalising the LODs–those loathsome LODs–and setting up the prefab, it’s so nearly finished!
After playing and taking a bunch of notes after the last patch went out, I’ve gone through and polished up some of the newer footsteps this week. Barefoot concrete and wood sound a lot better now and most of the grass footsteps are a bit softer and sound better as well.
Animal Sound Polish
I’ve polished up most of the animal sounds that weren’t playing before the AI update (sleeping sounds were the really bad ones). I’ll do a full pass over all of these once the animal animation updates are finished.
I also did a higher level mix pass over our audio this week. There was too wide of a difference between our quietest sounds and our loudest sounds, which caused people to turn their volume up to hear the quiet bits, and then get their ears blown out when an explosion or gun goes off nearby, so I’ve brought some of the quieter stuff up a bit and most of the louder stuff down a bit. This was a fairly quick rough pass, so I’m sure there’s some bits that are out of whack still, but most of the core sounds should be a lot more reasonably balanced now.
I made some EQ adjustments and swapped a few ambient sounds out for better versions as part of this too.
I got my hands on a bunch of chunky, solid pieces of scrap metal the weekend before last so I’ve spent some time recording that stuff this week. Metal has been one of the harder things for me to get good recordings of because I have mostly had access to fairly thin metal, and that doesn’t always have the tone or texture that I’m looking for. Some of this stuff will be used to improve weapon sounds and some will be for UI/physics sounds.
Music system updates are coming along nicely! The back-end updates are fairly nailed down now, and I’ve spent a good chunk of time on editor side UI this week. Here’s a little peek at the old UI vs the new UI (although the length in bars bit on the old one is actually newish too):
In the previous system music playback was divided into layers and sections. Sections divided a song up in the time domain and layers were divided a song by instruments (ambience on one layer, drums on another, etc). This worked okay, but the strict section time division thing was getting in the way, so I’ve got the music system working much more like traditional audio software now. Layers still exist but clips of music can live anywhere in time on a given layer. This means I can lay drum stings in right on the timeline with the meat of the music, and we have the flexibility to do clips that have lead ins instead of every clip needing to start right when a section starts.
After the core UI stuff is finished up I want to explore adding some randomization to music playback. Playing random clips is an easy and obvious first step here, but I’d also really like to jump around the timeline a bit a specific points. Being able to loop a section of the timeline a random number of times, or to randomly jump to one of a handful of different playback positions could be really cool.