What's New in Rust's "Friday Devblog 16" Update
July 2014 brought walls to experimental Rust along with some genuinely clever engineering: a grid-based workaround for Unity's 64k collider limit, ditching ScriptableObjects for a huge memory saving, and a fix for why trees sometimes ran around like players.
Friday Devblog 16 went out in mid July 2014, and it's a week where the engineering write-ups are more interesting than the feature list. Walls went into the building system, but the standout content is the explanation of how Facepunch sidestepped Unity's collider limit without the hacks the legacy version relied on, plus a memory optimization that clawed back nearly 100MB on the server.
Walls and building doubts
Walls are in. At this stage they could be placed on terrain without a foundation, which Garry wasn't sure would stay - though he was clear he wanted fences and garden walls at some point.
To stress test the servers, placing foundations and walls was made very cheap and fast while knocking them down was made hard and slow, which produced predictably chaotic servers. The honest note underneath it was that he was still trying to work out whether the whole approach was wrong - whether building should be block based instead - and was deliberately holding off on committing, which is why everything remained programmer art.
One experiment did go in: slanty foundations, where foundations orient to the ground you place them on, forcing you to find reasonably flat ground. It was a one-word code change so it was switched on to see how it felt. Garry noted it creates some unrealistic situations and would likely require building stability rules - which he expected they'd need to add eventually regardless.
AI progress
Andre continued on AI, and the devblog re-explained why it was taking so long. The old AI used Unity's built-in navmesh, and the baked mesh for the island was 400MB. That approach can't work on the new island because everything is procedurally generated, so nothing can be pre-baked - the navmesh has to be dynamic. That's the problem Andre was solving.
The collider limit workaround
This is the best part of the post. Rust had a problem since building was added: people build too much. Unity has a 64k collider limit, and with 100 players on a server you can hit that in roughly 10 hours. Unity 5's upgraded physics engine fixes it, but Unity 5 wasn't available to them.
The legacy version dealt with it through hacks. All tree colliders were merged into one big collider at game start, which is exactly why trees couldn't be removed in that version, saving around 5,000 colliders. Connected building colliders were merged too. That worked, but it was an enormous amount of work to implement and even more to make it not lag the server - and it created a follow-on problem, because when a player shoots a compound collider you then have to figure out which object was actually hit.
The new version takes a completely different route. The world is already divided into a grid for networking purposes, with players only sent objects in adjacent cells. So each object can simply check whether any player is subscribed to its cell, and if not, turn its collider off. It kept them comfortably under the limit - a stopgap intended to hold until Unity 5 arrived.
Server performance
Items had been using ScriptableObjects, which are convenient - automatic serialization, editor visibility, a tidy Destroy function - but consume far more memory than a plain class, which matters enormously when there are tens of thousands of them. Converting them all to plain classes produced close to a 100MB difference in Unity's memory usage.
There was also a subtle scheduling fix. Several systems used InvokeRepeating to call functions every second, which isn't actually slow - but with multiple of them running they would gradually bunch up until they all fired on the same frame, causing a small hitch under 50ms. The fix was varying each one's repeat time by about 1%, so any bunching un-bunches itself naturally over time.
Fixes and polish
- Disconnections now work. A long-standing bug meant disconnecting turned the game to night and third person while your player fell through the world forever. You can now disconnect and join another server normally.
- String table fixes. The string table is a bandwidth saver - common words like entity names are pooled and referenced by a number, so "entity" costs a 2-byte integer instead of 7 bytes. A bug let the client add its own values, scrambling all the strings and causing wrong entities to spawn. That's why you occasionally saw a tree running around like a player.
- Ragdoll transitions now blend properly from the player's model instead of appearing sprawled on the ground where they died. Works for wolves too.
- Weapon effects. You can now see and hear other players shooting, with muzzle flash and gunfire sounds - and your own viewmodel has them too.
Art
Bill continued on the cave art test, building assets in a way that could actually be used when the real system arrived. Petur kept working on the northern biome, and Goosey moved onto deer animations. Concept corner brought Meg's generators and stacked hut, Paul's buildings and shack ladder, and Scott's building scrawlings.
Closing
Most of the cleaning and optimizing was done, with the following week earmarked for working through a list of easy gameplay wins. The stated goal remained the baseline - every feature currently in the legacy version - expected to take a few more weeks, after which the plan was to balance those features while adding new ones to draw people across. Multiplay had started hosting test servers for the experimental version, though they were probably already out of date.