What's New in Rust's "Devblog 163" Update
June 2017's Devblog 163 was the follow-up pass on the previous week's recoil revamp: centre-weighted aimcones for automatics, a proper shotgun pellet distribution, AK47 tuning, and a round of server DOS fixes and client optimisations.
Devblog 163 shipped on 7 June 2017, one week after the recoil revamp, and it is the corrective pass that made the new system actually work. Helk spent the weekend playing CombatTag, discovered he could not hit anything with an AK, and came back with centre-weighted aimcones and a complete rework of how shotgun pellets are distributed. Andre spent the same week fighting off packet exploits that could take servers down.
Recoil changes
The problem Helk found was concentrated on the AK47 and Semi Auto Rifle: holding the iron sight steady on a player and still watching every round miss. He had not caught it before the previous patch because he was testing against reactive targets, so he wrote a rudimentary CPU-controlled bot that runs around randomly - a moving target that can wear any armour, which made balance testing far more honest.
The fix is a weighting system on the aimcones for full auto weapons and the SAR. Rather than each shot landing at a completely arbitrary point anywhere inside the maximum aimcone, some shots are now more likely to land near the centre. That is much closer to how other first-person shooters behave.
He also fixed a follow-on bug from the previous week's aimcone work: under some circumstances aimcones were being calculated as a sphere rather than a circle, which lost information and made spread slightly more random than intended.
On balance, the AK47 had its maximum aimcone slightly reduced but its horizontal recoil slightly increased - meeting the old recoil style halfway.
Shotgun rework
Shotguns got the more dramatic overhaul. Previously each pellet rolled a random offset between zero and the maximum aimcone, which produced random clumps and gaps - you could be near point blank and still whiff entirely, purely to RNG.
Three changes fixed it:
- Each pellet now places itself at a random point on a concentric circle from the aim point, giving a much better overall distribution with fewer gaps.
- Pellets are weighted so that the first 20% are more likely to land where you are actually aiming.
- Maximum effective range was lowered to about 40m for buckshot and 25m for handmade shells.
Together, that makes shotguns genuinely viable inside their intended range - you can aim at someone at a decent distance and hit them - without them becoming a long-range weapon. Helk's point was that a properly shaped, weighted spread is far better design than simply handing the weapon a huge aimcone.
The ammo and shotgun balance around it: Shotgun Slugs are now half price, handmade shells do 9 damage instead of 7 with slightly increased spread and decreased pellet velocity, buckshot's maximum effective distance went up to 40m, the Double Barrel Shotgun had both its aimcone and recoil reduced, and the Eoka had its aimcone reduced again.
Dropbox and mailbox changes
The Drop Box got a handful of corrections. Its emission values were fixed so it glows at night. Neither the dropbox nor the Mailbox auto-submits items when you close them any more - you have to press the submit button. Items now stack in the dropbox even when submitted separately. And submitting against a full inventory no longer tosses items into the world; they stay in the submit box instead.
Server DOS fixes
Facepunch spent the weekend fighting packet vulnerabilities that could bring a server down when exploited, pushing several smaller server updates, with the last round of fixes landing in this patch. New server convars maxrpcspersecond, maxtickspersecond and maxcommandspersecond came along with it, plus P2P flooding protection on the client and a maxpeerspersecond client convar.
While investigating, they also found that a bow would continuously spam the server with packets when aimed with no arrows in the inventory. That is fixed too. A server.woundingenabled convar also appeared - set it false and players always die outright rather than being wounded.
Optimisation
Andre had a productive week on performance. First, viewmodels: the long-standing problem where weapon viewmodels freaked out if you aimed down sights immediately after deploying them is fixed, though some weapons still need tweaking, along with edge cases causing viewmodel flickering when hammering the right mouse button.
On textures, the anisotropic filtering setting had been forced as a global minimum for all textures, which caused problems and could significantly hurt performance at high settings like 8 or 16. It now acts as an upper bound instead, letting individual textures pick their own filtering - a big improvement for anyone running high anisotropic filtering. Filtering settings on workshop skins were optimised in the same pass, along with trilinear filtering on skins.
The most interesting work was decal instancing. Unity 5.6 added new instancing APIs, and the problem with letting the engine handle instancing itself is the CPU overhead of retrieving and sorting combinable meshes and materials every single frame - close to useless in a scene like Rust's with an enormous number of meshes and materials present at once. The new APIs let Rust track meshes and materials in its own code and hand them to Unity already packed and ready for the GPU. Andre tested this on the deferred decals used for bullet impacts, melee hitmarks and footprints, and rendering them is now nearly free, with only slight CPU overhead to build the command buffer. Sorting only happens when a decal is added or removed rather than every frame.
While doing that work he noticed that several structs used as dictionary keys were causing dynamic memory allocations on every add and retrieve. Explicitly implementing the IEquatable interface - overriding Equals() is not enough - eliminated a decent chunk of garbage collections, particularly on the client. Transform caching was added to deferred decals, several client-side commands related to entity lookups were optimised, and unused third party assets were deleted to cut download size.
Forced bloom
Diogo addressed an argument that had run hot for days. The previous week fixed a bug that had allowed bloom to be disabled via console - which was never intended, since the high-quality bloom graphics option is meant to switch between low and high quality bloom, not off. The original reasoning was gameplay rather than aesthetics: they wanted to avoid a situation where some players are blinded by facing the sun while others are not, which is a real competitive advantage.
Several bloom-induced bugs did surface as a result and were fixed for this update, and Diogo committed to continuing to listen and tweak, including possibly adding gameplay options to mitigate sun glare. The changelist carries a set of related lighting fixes: reduced intensities on some emissive materials, the hurt effect no longer looking too bright, corrected lighting on torch, campfire and furnace, fixed deferred mesh decals like the numbers on harbor cranes, and fixed laser pointer emissive blobs and beam intensity. Broken reflections on Hapis rivers - the known issue from the previous week - were also fixed.
Hair shader and viewmodel clothing
Diogo finished the new hair shader as part of the revamped shader set and started working with artists to get the most out of it. It will handle all player hair, including facial and body hair, though actual art assets still need producing and integrating into the current player rendering - a process he warned might take a while.
Taylor and Alex discussed incorporating clothing onto the viewmodels, and Taylor ran tests reusing existing models, which means existing skins come along for free. The wrist geometry had to be increased since it sits so close to the camera. Plenty still to consider, but the tests suggested acceptable quality is achievable with some work while keeping skin support intact.
Monuments
Vincent spent the week optimising the buildings and models he had built over the previous month, so little new to look at, plus a checkpoint asset to create proper points of entry into monuments - something that had been visually needed for a while. The beautification pass was due to start at the end of the week.
Damian pushed the rocket factory close to finished: reworked scaffolding around the rocket, rail tracks beneath its wheels, tweaked elevator shafts, and ladders granting access to hidden areas. All interior and exterior walls were vertex painted to reduce texture repetition and the minor bugs were cleared. What remained was LOD models, collisions and optimisation. He also finished the fuel silos scattered around the area, which have ladder access to the top and add some vertical gameplay.
Audio
Alex R finished a polish pass over all metallic melee weapon impacts. They are cleaner and more restrained now, particularly the metal tools, which makes them layer better with the material impacts. He was happy with how the soft material impacts came out but was considering re-recording a few soft hit layers to soften the initial transient and let the metal ring more, and had started recording material for a pass over the non-metal melee weapons.
The music updates are essentially ready to ship, pending testing on staging in a live server environment which did not happen in time for this patch. He also took advantage of construction work outside his house waking him early to record a lot of source material - not destined for the game immediately, but filling gaps in his sound library. Assorted sound and mix tweaks landed too, plus a fix for NPCs spawning enormous numbers of footstep effects when moved a long distance in a single frame.
The rest of the changelist covers smaller items like the Thompson using the wrong screenshake effect, item info showing as null when destroying world items, a silenced TrackID error when its DLL was missing, and another tweak to the scale of small clutter rocks.