Fixing PvP, networked headlook, server backups, and more.
13 August 2015
PvP Improvements Phase 1
A big complaint in Rust is how badly the gunplay sucks. I know right? I took a look into this and the reason the guns felt shitty is multi-faceted.
- Viewmodels sway too much when moving.
- Muzzle Flashes occlude your target.
- No hit indicator sound/visual.
- Gunfire hiccups and lag (See Andre’s section for more).
- Hitbox code incomplete.
The incomplete hitbox code is the major issue here. Basically we have separate damage scalar values for each area of the body, so if you get hit in the legs or arm it does less damage, and if you get hit in the toes or fingers it does a LOT less damage. Sounds good in theory, right? Unfortunately, there has been a bit of a long-standing oversight that has caused a lot of WTF moments in Rust. The problem is that when you hit someone in the finger or hands or arms it will *only* deal damage to the hit body part, even if a more critical body part as just beyond it - such as your fingers being infront of your face. This is compounded by the fact that in most firefights you’re aiming at center mass and that just so happens to be where all the hands and fingers are blocking because they’re holding a gun, so your bullet could do 3 damage or 45 depending on where it hits.So, how do we solve this?
We need to redo the hitbox system with some sort of density values so when an attack happens, its power is reduced by the density of the first hit, and continues through until it either exits, or has had its power reduced to zero. An example would be a finger with a density of 5%, damage scale of 10%, and your head with a density of 100% and a damage scale of 200%. If I shot you while you held your hands up to your face, the bullet would deal 10% of it’s damage, and lose 5% of it’s velocity and continue through to hit your head which would deal 200% of it’s damage (less the 5% loss), and reduce its power to 0 and finish.
Unfortunately, this is a task that will take some time so I haven’t started working on it yet, but rest easy! I changed the amount of damage that hands and arms take to be much closer to that of center mass, while still taking armor into account.Old vs. New.
This should seriously help with the bizarre issues where you seem to hit someone 30 times and they don’t die. As soon as I can, I’ll look into fixing the hit-boxes properly, this should hold for now.
This problem is two-fold. One, we added bad-ass muzzle flashes and forgot that they would occlude the target. Derp. Two, there was a shader oversight with the lit smoke that was making them become opaque when they were lit at night. Diogo did an awesome job of fixing this, so you can thank him! Both of these issues are now resolved. I’ve also rotated some muzzle flashes a bit so they don’t directly block line of sight to your target when firing.
I reduced the amount of viewmodel sway you experience while aiming down the sight. I did this to reduce how clunky and unresponsive aiming in Rust felt. This is kind of a long-term stop-gap measure because eventually I’ll make it closer to legacy where you have a small cone where your viewmodel moves independently of your aim. This will also allow us to remove a bunch of the conefire stuff we have in place as well.
Hit Indication Sound
Time to set Reddit on fire. People have very strong feelings about this one way or the other. Here’s what I think: We had it in Legacy and it was great; we don’t have it now and gunplay feels sloppy. So I re-added it and it feels great. It’s the finishing touches that really helps bring the gunplay (almost) back in line with Legacy. With that said, yes there is one ‘Con’ to having a hit indicator sound, and that is if you spray at a bush you know for certain if you hit the guy or not. I can probably address this down the line by ensuring you have a clean line of sight to the target before it plays but for now this is how it is and to be honest, it makes 99 out of 100 fire-fights feel way better, so the balance has tipped in favor of adding it. I’ve also added some convars so you can control how it workshitnotify.notification_level (default = 1)
- 0 = Off.
- 1 = Clientside hit reporting (instant feedback but small chance of false reports).
- 2 = Serverside hit reporting (bit of a delay but always accurate).
Loot Table Changes
I took some time and listened to your feedback and changed some of the loot tables in terms of which blueprints are found in which tier, here are the most significant changes:
- Bone & wood armor no longer default, common/uncommon?
- Salvaged Sword is Common.
- Lantern is Common.
- Some Rad-Suit parts are uncommon instead of Rare.
- Pistol ammo is now Common.
- Removed some snow jackets for now, existing one is uncommon instead of rare.
- Leather gloves use leather, is Common.
- Wood and Bone armor is no longer default, now common/uncommon.
- Roadsign armor is Rare
We’ve been adding so much stuff recently it’s probably about time to take a look back at some of the things we’ve implemented and fix them up. I’ll do some more work on improving PVP & PVE, and take a look at things like Armor Condition and perhaps some initial investigation into how we can do Weapon Mods (but don’t count on that for next week).
I started the week by having a look at the rubber banding reports on high-population servers. Finding the cause was somewhat of a pain, but I did identify and fix some issues that for the most part seemed to be regressions from the player position caching we added a few weeks ago.
I also optimized the time the server takes to save the game and events like the airdrop can now pause auto-saving while they’re active to guarantee that their movement is nice and smooth.
Since the population of our development servers tends to be much lower than on our main servers I can’t say for sure if I got everything, but the tests I ran looked very promising.
In the second half of this week I put my other tasks on hold to deal with gunfight performance issues, since those seem to be the single biggest complaint with Rust right now - and I can definitely see why.
I started by optimizing the ragdoll setup, which was incredibly slow at copying the bone parameters from the player model. It’s not as fast as it could be yet, but it’s acceptable and shouldn’t cause any major issues anymore.
Once that was done I had another look at what’s causing the hiccups the first time a weapon is shot and the first time a certain surface type is hit. We were already warming up the shaders of those effects, but it still had to load textures, materials and prefabs from disk, which resulted in huge framerate hiccups. I fixed this by preloading the entire effect library the first time a server is joined. Should your game crash before the procedural generation starts and verifying integrity in Steam doesn’t help, you can disable the warmup step by adding “-warmup 0” to the launch options in Steam. If this happens to you, please let us know.
A lot of people are confused whenever we increment the network protocol and they suddenly don’t see their server anymore and get a cryptic error message when trying to join via IP. I made that error message more descriptive - it now tells you if it’s the server that’s outdated or your client. If it tells you the client needs updating and you’re not getting an update in Steam, you might play on a development branch server and have to switch to the development branch yourself. On the other hand if it tells you the server is outdated it usually means you have to opt out of the development branch on Steam in order to join the server, or your server admin simply hasn’t updated yet.
As promised a few weeks ago, headlook is now networked to other players, which was made possible by Goosey’s aim animation updates last week. This means you finally see when your enemy is looking at you, even if he’s just turning the head and his gun is pointing in a different direction.
I added our mesh batching system to compound walls and barricades. Expect better performance when people on your server decide to place 500 of those around their houses.
Rust sucked at keeping backups of savegames, blueprints and server configs. If your server owner knew what he was doing he probably manually backed up those things whenever he updated, and while I still recommend doing that it’s finally no longer absolutely required to keep your server safe. This is how it works:
- The folders backup/0/your_server_identity to backup/3/your_server_identity represent the last 4 versions of your server identity folder
- The files 0.sav to 9.sav represent the last 10 versions of your savegame
- The maximum age of a backup copy increases with its version number
- 0 is the most recent version
- 1 is the version before that
- 2 is from about 1 hour ago
- 3 is from about 2 hours ago
- 9 is from about 128 hours ago
If something goes horribly wrong a server owner can now simply revert to the last working state.
- Reduced rain probability some more.
- Fixed duplicate barrels and crates after server restart.
- Drowning water level now matches underwater camera effects.
- Tweaked water drop overlay when swimming.
- Fixed console UI not refreshing when entering console commands that don’t reply with anything.
I’m guessing there’ll be more fixes and back-end work to be done. I’ll see how things play out over the weekend to find out what has to be prioritized next. If everything turns out okay I have a huge list of stuff to get back to.
I’ve been helping out Tom “I can’t believe it’s not” Butters on some technical issues we were having with importing the player model into 3ds Max. On top of that, I also got around to fixing some skinning issues with some of the player model heads. Many people noticed that some of the heads looked particularly ugly when doing certain animations, and I narrowed it down to an error on the skin weights.
I also worked with Andre to fix some issues we were having with the player view-snapping during certain animations when the player was using the Alt free-look.
I also made some more muzzle flashes that look more random than the current ones.
I also made some gesture animations that get played if the player hasn’t fired his gun or done anything in the last minute. They’re meant to give the player a bit of life and not look so rigid all the time.
I’ll be working on more relax gestures, as well as any bugs that crop up.
Spent my return from holidays fixing particle and surface shaders; tasks that accumulated during my absence. Particles are now lit properly by surrounding lights. I’m also tracking down and fixing a SSAO bug causing flat triangle artifacts.
I’m putting the finishing touches on PVT (Procedural Virtual Texturing) cache compression (DX11+) as well. Unfortunately, I was unable to make all the improvements I was planning due to limitations in the Unity Command Buffer API. Therefore, I’m forced to postpone some optimizations until after these limitations are lifted. If you have a Unity account, please vote up the following feedback request to help us get the features we need sooner rather than later.
Compress runtime-generated terrain basemaps (DX11+) and get back to pre-holiday tasks
This week I did a bunch of variations of the balaclava so you can live out your bank robbing fantasies.
I also started on a bandanna so you can live out your Spaghetti Western fantasies.
I should be finished with the bandanna and moving on to some customizable pants, so you can all live out your… pants-wearing fantasies?
Retaining walls around large deployables are now in-game. It’s not a big deal for the game but it’s one of these little changes in both art and gameplay around structures that makes the game look and feel a bit deeper in the long run. It’s a simple modular set of blocks that I can place around any structure using our 3x3 grid. Just like the building blocks, the many instances of these get grouped and batched together. What you guys will likely remember in the end is that it offers a nice little amount of cover for when you will be out monitoring your quarries and pumpjacks.
Much like what I just described above, the barricades and compound walls will now be batched in one single material thanks to some LOD atlasing optimizations I pushed in. You can now spam even more of them per square meter. We had an atlas for building parts, and we are now making a second one for anything that will likely be built away from homes, including barricades, high walls, electricity props, turrets(?), gates...
Speaking of gates, just a quick line to say that I made a quick whitebox model of our future compound gate. Garry has got interesting ideas on how he is going to have it to work, but all that will be coming in later updates as it remains to be implemented.
Oh, and the Satellite Dish monument now has an enterable simple room, to which we will likely move the workbench and other statics.
I’m actually working on this now, but it will land ingame early next week. I’m producing the corn plants art to replace the temporary art from the asset store.
This week I did a big round of polish to a bunch of the weapon deploy/swing/reload sounds. The old swoosh deploy sounds felt a bit too heavy, so those are all gone now. I’ve added some more gear and cloth movement sounds to the background of a lot of these, which makes them feel a lot more interesting and alive to me. Most of the swooshes you hear when you swing a melee weapon have been polished up quite a bit too.
I made gunshots audible from farther away too, because it felt really lame seeing a gunshot flash at night and hearing nothing. They still fade to the distant sound at the same distance, so you should still have a good feel for how close they are.
I’ve also revisited the barrel impact sounds, fixed some issues with the rocket launcher sounds, started a polish pass on some animal footsteps, spent a little time working on a hitmarker sound, and spent some more time working on that secret from a couple weeks back.
Next week I’m going to finish up a polish pass on some of the animal footsteps, and then I want to spend a little time working on explosion sounds and location ambience for some of the other monuments and radtowns because the sphere was really fun.
I have more backpack ideas to show this week. I tried experimenting with some designs that could be used for a more specific purpose than just holding more of your stuff.
I also started to take a look at old world ruins, again. We want rad towns and other remnants to be created procedurally, so you don’t always run into the same rad town layouts. Not unlike the cars I did, I’m trying a modular approach. Here I did a callout from one of my sketches of one piece that could make up a rad town.
Next week I’m going to keep going with the modular rad town idea and do more callouts of specific remnant pieces.
Yo duders and dudettes, I’m feeling much better and I’ve been tackling the female character once more! This is what the low poly looks like.
I’ll be working on the LODs--which shouldn’t take too much time--so hopefully I’ll have that done for next week.
We’ve changed up a few things with the character fbx: instead of having separate body parts in separate fbx files, we’ve compiled the male character into one single fbx file. This doesn’t improve performance, it just keeps things organised and less cluttered, and it means we have less of a chance of things messing up.
I’ll finishing up on the lods and hopefully combining the female meshes into the one file likened to the male mesh. I’ll also taking more time to look at solving some seam issues with the male mesh LODs.
I worked up some ideas for a quiver this week. I think it would be nice to have things that display what ammo and weaponry your player is actually packing. I've also started to relook at some existing assets/concepts that could just do with a bit more polish in areas.
I have a few ideas of what I'd like to tackle next week, one would be to take a step back and continue to revisit some assets and see how they can be refined and polished a bit more with paintovers, another would be to maybe tackle something new. Like a nail gun?
I went through all the item descriptions and made them a bit more relevant, so there's no more filler text or talk of the AK not shooting salt (because it's an 'assault rifle', geddit?). They are a bit less fun, but we crowd-source translations, so it's probably better to be clear and concise in the descriptions. I'm still trying to work out what's best when the text refers to another in-game item or resource. I tend to want to capitalise those words, but seeing 'Pants' in the middle of a sentence is a bit off-putting. Also, days of staring at those descriptions has made me realise that the font isn't particularly readable. Anyone else feel like that?
Added improvised balaclava
Added boonie hat
Added mesh batching to compound walls and barricades
Added hit notification with convar controls
Fixed certain situations that could cause rubberbanding
Fixed framerate spikes the first time an effect is triggered
Fixed duplicate barrels and crates after server restart
Fixed console UI not refreshing when entering console commands that don’t reply with anything
Lots of tweaks to weapon deploy/swing/reload sounds
Rocket launcher volume fixes
Hitmarker sound tweaks
Gunshots and bullet impacts can be heard from further away
Large deployables new foundations
New room in Satellite Dish monument
Vagabond Jacket is less rare
Avoided Unity crash when starting with headphones plugged in
Optimized server game saving
Airdrop event now pauses auto-saving
Optimized ragdoll initialization
Made protocol mismatch message more descriptive
Headlook direction is now networked
Improved server backup system
Reduced rain probability some more
Drowning water level now matches underwater camera effects
Tweaked water drop overlay when swimming
Slightly increased depsawn times for bodies and dropped items
Dropped items despawn slower if they are more rare
Research Table success chance rounds down to match UI
Updated muzzle flashes to be non blocking
Updated hitbox damage scales
Wood armor is no longer default
Bone armor is no longer default
Viewmodels have less sway when aiming down the sights
Loot table balance for BP fragment system
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.