The Bradley APC is in.
Let me start this off by saying that it is not complete by any stretch of the imagination. It's going to have a bunch of bugs, especially with movement, and it doesn't have the right loot tables or damage or protection values. It's going to get stuck, and it's going to make bad decisions, and you'll probably find ways to exploit it. All that being said... it seems like it is ready enough for a trial by fire. I'll be watching every single bug video, and reading any reports posted on reddit and elsewhere. Please do your best to try and exploit it and let me know how it was done so I can improve the AI.
The loot tables are kind of slim right now due to the fact that I know it will be exploitable and I didn't want a bunch of free loot going into the economy.
The weapon systems are also not complete. It's missing its rocket pod and the side gun ports, but it does have the main cannon and coaxial machine gun active. It'll try its best to prioritize targets, and if you run away from it it'll try and search for you.
Not much else to be said. This was a lot of work and it's still not complete. Enjoy some of the media and I'll see you guys at the launch site.
Not much to report this week as I was way too busy with the APC. However, I did lower the horizontal recoil on the M92, so let me know how that plays out. The next step will be to polish the MP5 to get a baseline for how SMGs should function, as well as deciding on the best feeling pattern types for semi-auto weapons. Then we will roll it out to the remaining guns.
There used to be an issue with server gibs (helicopter debris) that prevented people from being able to harvest them unless they were in some arbitrary "sweet spot". This is now resolved, and when the temperature has cooled off (no sizzling sound when hitting) you can harvest them from any position. This also applies to the new APC gibs.
Remember when a rocket was fired and the smoke trail disappeared as soon as the explosion happened? This is now fixed, and the game looks much better during raids and helicopter strafes. They'll stick around until they've completely faded out.
My work on the supermarket is coming to an end. This week I focused on setting up the scene to appear in the proc map, creating LOD and collision meshes and placing loot spawns. In addition, I polished the scene decor and added further damage to the supermarket floors and walls. With all that out of the way, all that is left is texturing the remaining newspaper stands, cash register and other store props. Since my work this week was mostly technical not much has changed visually since last week's devblog.
This week on the gas station I completed the final exterior and interior models for the main building and dressed the outside with a touch of overgrowth. What's remaining now is props work and polish. It looks like Damian's supermarket and this are on target for the next wipe cycle.
I made some huge progress on the GC optimizations this week. I've eliminated massive amounts of GC allocations from the networking backend and entity serialization that really hit us hard when entities were streaming in. I've also gone over dozens of commonly used utility methods that were causing GC allocations and optimized them one by one and eliminated the last remaining GC allocations from the effect recycling pipeline. Once that was done I tackled GC allocations from the foliage, renderer and collider batching systems and the foliage displacement system, which were particularly noticeable when moving around the world. I also continued with the elimination of GC allocations from string updates, which we're now doing a pretty good job with aside from the UI, and I took a stab at some remaining GC allocations from the skin application process, which now deals with the required material updates much more efficiently. Lastly, our internal memory pool is now prewarmed with some common class instances for better cache efficiency and less runtime memory allocations - which both helps with performance and makes debugging runtime GC allocations much easier.
The next big thing on my list is to optimize the paintable sign texture caching, which I'm hoping to get to next week. I'll probably have to move parts of this to native code in order to get it to perform well. Overall I estimate that I'll spend at least another week on these sorts of optimizations.
While optimizing various things all over the code base I stumbled over a fairly significant material memory leak. The game would continuously leak materials whenever mining quarries, vending machines, flashlights, lasers and planter boxes were coming in and out of the networking distance. Needless to say, that's not a good thing. Thankfully it is now fixed, though we had to disable certain visuals that were causing the leaks until we find the time to rewrite the underlying code.
This week I did a clean-up pass over all the systems I have been working on relating to general AI management and Navmesh, and in the process I got to improve on quite a few sub-systems, like how many Navmesh patches in a bake queue we generate async at a time. The last big piece of the puzzle related to the Navmesh Grid is linking the patches together. This is required for NPCs to be able to walk between patches of Navmesh, and it's a bit of a hassle to get it working well. When this is working properly, all the puzzle pieces should be in place for me to get back to Scientist behaviour.
The latest version of the Navmesh Grid has been merged to main, but it's not activated by default. If the Navmesh Grid is on, Scientists will spawn around monuments. This isn't working yet as intended, and is just for testing.
My week started and ended working on rendering optimization, some long overdue, across the board from CPU side material related bottlenecks to GPU overlay and post effects.
Total savings could range from 2 to 5 ms depending on the hardware combination. Overall, this will should translate into a decent FPS improvement. I've seen 8 to 12 fps improvement on my local test machines. The highest improvements were on lower CPU and GPU class hardware, and in cases where multiple effect overlays were active (e.g. hurt, cold, radiation).
Complete list of changes:
Fixed culling related runtime allocations
Fixed culling false positives
Fixed material related performance bottleneck (SetPassUncached)
Fixed large furnace lower LOD looking too dark
Fixed LOD transition popping in high external wall
Packed an additional 70 materials
Reduced texture footprint in some materials
Eliminated terrain splat texture related dependencies
Improved performance in materials using biome tinting
Improved overlay effect performance (e.g. water)
Improved performance for Tonemapping, FXAA, Sharpen, Vignette
The Geiger Counter materials are finished. All that I need to do now is the LODs and Unity Prefab setup, so it's ready for implementation. I enjoyed making this asset a lot, especially smaller details like the tags on the side and the top. Details like these that really bring an asset to life. Here are some images, and a spinny thing for you lot to spin. Enjoy!
I only had one non-vacation day this week (if you ever get a chance to go see a total solar eclipse, do it!), but I've continued working on the engine sound system today. At the moment I'm working on generating additional engine cycles for RPMs ranges that only have one or two cycles by slightly pitch shifting cycles that are close to the RPM we need to fill out. It's working pretty well so far, and if the last little bit of tweaking and testing goes well I'll be moving on to the rest of the sound design work on the tank shortly.
I also spent a little time hunting down and fixing a bug with effect recycling that was preventing the helicopter explosion sound from playing more than once.