This week after a nice easter break I’ve been working on bugfixes for the 0.5.4.x experimental release. Whilst Spencer got to work fixing problems in the network layer with our structure initialization I started to look into why players were able to shoot others inside of bases after they had failed to load.
In ItemV2 we are running more robust hit validation where after a players computer records the hit it sends off information about the hit to the server to be validated. The server then performs a series of raycasts to make sure it agrees that the projectile was aiming at the target and there is nothing in the way. If the server doesn’t agree with the hit it sends back a deny message and doesn’t process the hit any further, the deny message turns the players hit indicator blue to indicate a denied shot.
This wasn’t quite working properly when the server would hit something other than the client target, although the deny message was getting through ok the server was setting up the data about the hit incorrectly so it was still processing a hit on the target rather than a hit on the thing that was in the way (like the base walls in this instance).
Now the next time something like this occurs you’ll still be safe in your bases even if they don’t exist on your local machine, as long as they exist on the server.
I’ve also been making big improvements to the way binary effects (no build, freezing, burning etc.) are handled by the stat system. Shortly after releasing 0.5.4.0 and running our new network profiler we realised we were using an insane amount of bandwidth to sync binary effects on the server with effect display components on the client. Because we were only using this to display whether other players were on fire or not we quickly pushed out a hotfix turning off this sync until we had time to investigate properly.
On thorough investigation of this system I found that the list of effects to sync wasn’t releasing effects properly effectively leaking memory and ballooning in size over time, compounding this problem was the fact we were syncing this list way too aggressively on every add or remove operation meaning the sync message could be sent multiple times per frame!
Now this has all been made more sensible, the sync list now is just the list of the binary effects themselves rather than trying to manage the state of the client sync elsewhere and the effects are synced up as part of EntityStats’ slow update loop.
With these improvements we’ve reduced our constant network traffic by ~50%!
Our next major experimental patch 0.5.5.0 will release on the 12th of April.
Along with the binary effect fix mentioned above and some other huge networking improvements Spencer has been working on we’ll also be doing a balance pass through the gear system turning more gear items into upgrades so you can carry your fragments and other modifiers through the progression.
We’ll also be looking at adding more heat protection gear into the game as well as finding a place for several currently unused assets like the military gear.
We’re also looking to add more fragments, start separating the fragments into different rarity groups and creating an option to ‘reroll’ unwanted fragments.
Hey all! I’ve been working on the pistol some more. Got the Hi Poly done and will finish the UV mapping today/Monday. Been a bit distracted this week talking to players and server admins about bugs in V2, then filtering the relevant ones and passing them onto the coders. Still the pistol is coming out nice. It’s the old one just overhauled and made a bit better mesh-wise. The main changes as I may have mentioned earlier is going to be the texturing. I should be baking by Tuesday then hopefully Texturing by Wed or Thur.
The image below shows the Hi Poly in Red and the UV checking Texture on the low poly. I did have to do a little tweaking on the low after the UV mapping was done, Looking straight as an arrow now.
This week I’ve been continuing work on improving server performance using profiling data from the new network engine. Progress has been really good and I have narrowed the remaining network bottleneck issues to structure initialization when players connect. The previous system had a load balancer in place, but didn’t take into account concurrent connections properly and allowed far too aggressive downloads per player. On top of this the data serialization of the structure information was very inefficient. This caused possible lag spikes on mature servers when players connected, triggering the send buffer full issue seen on most busy servers, which resulted in CPU spikes on the server and heavily delayed RPCs in some cases.
This is all fixed now and should be much more efficient, along with some big CPU load improvements for inventories and map marker objects serverside that increased my local editor empty server FPS with a big savegame loadedfrom ~200 to ~600 fps.
I will be periodically increasing server player caps and continue to profile for bottlenecks. Gameplay wise I don’t want to go above 120 players per server on our current version of mangatang, this may change in future.
Afternoon, been working on ironing out the rest of the map tool kinks. It’s at a pretty good point now, no more extremely time taxing manual processes, still a few things that it needs to be really efficient but those things will come in time. Working on creating more negative space than filling the map with lots of stuff and things, clearing out trees and flattening height in certain areas has been making the map feel a lot more interesting. It seems like something very simple to do (and it is) but actually getting your head around where to clear these areas and how big to make them along with making them feel like they belong can be pretty tricky but after last release I got a pretty good idea of what I need to do. Also making the roads interesting and not just straight, flat boring-ness. Which reminds me I fixed a problem with the intersections causing the terrain height to drop below the actual intersection mesh, this caused collider problems and took a ton of time to deal with every release. So that was a huge win. Now that everything’s moving along smoothly and doesn’t need to be broken down and built back up from scratch every release I can start playing with ideas I have for transforming the map into something with a natural flow that feels interesting to explore.
I also fixed up the Snood and gave it a bit of an update. Added a male and female version because there didn’t seem to be a good solution for a one size fits all. Added a basic camo mask, want to add some more though.