Semi-Auto Pistol changes, optimisations, what we're doing with recoil, and more.
15 September 2016
I was made aware this week, via several channels, that the Semi-Auto Pistol was far too overpowered. I went in-game and witnessed it myself: a clan of three people in an armored base were attempting to snipe me with it instead of rifles. Yikes. I’ve gone and reduced the damage for this weapon to 40 (was 50), which should make it less appealing to use over rifles.
While on a Battlefield server I noticed significant slowdowns. I opened the profiler to check it out and it appeared between 200-400 projectiles were being simulated at any given time! Part of this had to do with the max lifetime of the projectile being set to 60 seconds, so projectiles shot into the sky or into the water would fall forever and eat up CPU until their lifetime expired. I reduced the max projectile lifetime to 8 seconds to compensate for this and saw some improvement. There was also a slowdown introduced last week by the first-person tracer stuff I added. This is also resolved and in total gains us a few ms during heavy gunfire. tl;dr gunfights are slightly less performance intensive and your frames wont dip as much.
I’ve been working on adjusting how recoil works in Rust to bring it in line with traditional first-person shooters and make it less annoying. This ended up being a lot more work than I expected, so it won’t make it in this week. Basically I’ve changed it so when you stop firing your weapon, the vertical recoil is compensated for (brings it back down to where you were aiming). Instead of that annoying horizontal recoil, I’m increasing the conefire/randomness of the bullet paths with each successive shot. All-in-all you’ll get the same kind of groupings you would before, but the weapon won’t randomly fly around on your screen. This ended up being a lot more difficult to implement than I thought, because we have to take into account that people will be adjusting their aim while trying to stay on target and the vertical compensation cannot ever be noticed by players, i.e. when pulling your mouse down to compensate, ceasing firing should not lower your view by much. This is something that will need a lot of testing to get right because it will be a large departure from how the weapons currently work and I want to make sure it’s headed in the right direction and not another XP system.
I’m still hammering out some details and solving some edge cases, but I hope to start work on a location based component system next week. We’re going to run it on prerelease and actually make sure it’s not a piece of garbage before we push it out to everyone. Next week I’ll post an outline of how it’s going to work. Stay tuned.
I've textured, skinned, and LOD-ed the cloth sash ready for Helk to do his thang (when he's got some time). Here are some shots of it in game, although you guys won't be able to access it till it's functional.
There was a semi rare issue that could make players show the wrong name, gender or skin tone to other players until they either died or left the networking range. The reason for this was that the server placed sleepers of newly joined clients at world origin and sent them to all clients within networking range before updating and sending their correct position. This also could have been contributing to some other related desync or world origin leaking issues and has now finally been fixed.
There were a number of issues with the client side network interpolation that could lead to weird snapback issues when players respawned very close to their corpse. Those are now fixed.
I continued my efforts to fight frame rate drops when walking around the world. First I eliminated a 150+ millisecond spike that happened whenever bigger structures despawned by optimizing our entity destruction event handling, which was the last big slowdown from entity despawning. Then I sat down and wrapped up the player model pooling implementation, which is now enabled by default, and optimized various other components of the player mesh building pipeline. These measures combined eliminate 20+ millisecond spikes that happened whenever a new player entered the networking range.
There are still a few things that can be optimized in this department, but I think we’ve come a long way from the state we were in a month ago.
In the current projectile model every ammo type has a default maximum and minimum damage distance. Individual weapons like the bolt action rifle then adjust those default ranges to mirror their unique properties. Rifle ammo starts losing damage once it traveled 20 meters and slowly drops off until it reaches its minimum damage at 100 meters. Pistol ammo does the same thing from 10 to 80 meters. However, we felt like pistols and SMGs were still a bit too powerful at long distances so I reduced the minimum damage distance of pistol ammo from 80 to 60 meters. This should help widen the gap between rifles and pistols while keeping pistols powerful enough in close quarters.
This week I have focused on finishing the interiors, fixing various mapping and geometry issues. I have also made proper collision meshes which means that the lighthouse is now fully functional. I will be spending some time playtesting this area as well as making LOD meshes. Once that is done, the building will be ready to be made accessible in game.
I have worked on a few props sets since last time, some stalagmites/stalactites, glowing irradiated sacs. I’m carrying on the cave room work as well, if things go according to plan I could have something to show by next week.
This week has mostly been finishing up the explosion sound stuff I’ve been working on. Everything explodey has unique explodey sounds. Distant explosions sound a lot more natural, and things like rockets and C4 sound a lot heavier than Landmines and Beancan Grenades, so it’s easier to tell if that boom is something you should be trying to counter-raid. I added extra variations for things that go off a lot in a short period of time, like the C4 and Satchel Charges.
I also discovered a sound player that a lot of explosions use attached to one of the smoke particle effects, which was triggering an extra C4 explosion, and fixed that.
I’ve made a few minor polish tweaks this week as well. Footsteps got cleaned up a touch more. The bolt pull on the AK deploy/reload is tweaked a bit (less sharp) and has been broken out into separate sounds, so it won’t play when you quickly cycle past the AK in your hot bar
This week I finished off the Zbrush sculpt model, finished the Low Poly, and baked out the base textures! Now onto the fun part: the texturing! I’ve slapped on a quick metal texture so you all can see what it looks like so far.
I’m off to Japan tomorrow for 10 days, so it won’t be finished for next week. Sorry about that guys and gals, but in the week back I’m it’ll be ready for implementing fo' sho'!
Added stabilityqueue server convar (building stability update time per frame)
Added surroundingsqueue server convar (surroundings refresh time per frame)
Old bone armor no longer drops( will be removed next wipe)
Fixed players sometimes appearing with wrong name, gender or skin tone
Fixed various small client side network interpolation issues on respawn
Fixed various issues with player model pooling
Fixed exception when trying to upgrade building block after it was destroyed
Fixed exception when trying to rotate building block after it was destroyed
Better explosion sounds
Misc sound polish
Projectile CPU optimizations
Semi auto pistol damage nerfed to 40 (was 50)
Pistol ammo effective distance nerfed to 60 (was 80)
Enabled player model pooling by default on 64bit systems (pool.players convar)
Drastically improved entity destruction performance (less stuttering)
Optimized player mesh building and refreshing (less stuttering)
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.