It’s Update time, and this one is going to be BIG!
And by big, I am referring to the new heavy cockpit, the Skar!
Look at the size of that beast! This cockpit, available at level 1, is the biggest, most durable cockpit in the game. With a starting durability of 2248 and variants going up to 3628, this cockpit line allows the defender role to truly shine! Variants you ask? Why yes of course, the Skar comes in 8 different variants to fill the role you need!
But that’s not the only thing that has been worked on over the past month!
The AI have become a constant evolving breed, always trying to prove a challenge to the players, and for the most part, I have felt that have done this well. To help them to continue to provide a fun an interesting challenge, I have modified the way the AI difficulty system works. Before, the AI difficulty would help dictate what parts they were allowed to use and how complicated and advanced their MAV builds would be. However, it did not influence the in-game play style of the AI. This has now changed!
AI Difficulty will directly affect 4 key areas of an AI player.
The MAV – Lower level AI will be restricted to low level parts and low ‘build complexity’. This ensures they are not using advanced tactics like hiding the cockpit, or spamming a single weapon type. As the level increases, they will see increasing usage of parts and build complexity. An insane level AI could be running a hidden cockpit, fast attack howie build, just like a high level player.
The Aiming – AI difficulty will now directly influence how fast the AI player can track your movements and react to your changes in direction. Lower AI will aim slower, track you less precisely, and in general not be able to stay on target when dealing with recoil. Insane AI, will be much better at all of these.
Easy AI will be ~80% worse than the old AI. Insane AI will be ~25% better than the old AI.
The Near Miss – All of the AI in M.A.V. have a threshold of when they are ‘close enough’ to start firing. The bigger this threshold, the more likely they will get a near miss instead of a hit on a static target. For easy AI, this threshold has increased by 3x, generating a compelling combat experience but resulting in less damage taken. Insane level AI will be much more calculated, having a threshold 33% smaller than the old AI. This reduces their wasted ammo and results in more on target hits, with higher damage to single parts.
The Reaction – When you hit an AI with a knockback weapon, there is a moment in time that they AI tries to recalculate it’s aiming location and get back on target. For the Easy AI, this time has been increase from 1.5 seconds to 3 seconds. Insane AI will actually recover twice as fast as the old AI, suffering from knockback for only .75 seconds.
Overall, these changes allow the AI to be much more enjoyable for newer players, while also providing a nice ramp up as you gain more experience. In multiplayer, you can tell an AI’s Difficulty level by their displayed player rank. Easy is less than 5, Medium is less than 15, Hard is less than 25, Very hard is less than 35, and Insane is anything over 35.
Yes, the days of worrying about your profile data being lost are finally gone! M.A.V. will now store your profile data on the Bombdog Servers and serve it back to you, no matter what computer you sign on to! Do you have multiple profiles across computers that all have different stats? M.A.V. will merge those profiles, taking the best stat from each profile and storing that data!
While this is a fairly transparent feature for most players, it lays a large foundation for being able to globally store garage data, showing leader boards and stats, and providing very nice player profile pages on the Bombdog Studios site. This took a large amount of work and testing, but the number of doors it opens up is very exciting!
Bugs and Optimizations
Man, I have some horror stories for this section! Most of the month was spent digging deep, DEEP, into the M.A.V. code base to ferret out and solve the in-famous “9FPS” bug once and for all. This has so far been the single longest and most complicated bug hunt of my life! I have learned my lesson about proclaiming bugs as ‘solved’ but I can assure you, I have not been able to recreate this issue in the same ways I was before! Also, while on the war path, I was able to solve a few other critical bugs as well!
Hard crash bug – There was a stack overflow bug that was caused when parts got caught in a cycle loop when trying to reattach to a new parent during a parts destruction. Full write up was in this post: https://bombdogstudios.com/blog/state-of-the-game-272-digging-deeper-than-a-europa-miner/
Turret error spam – Also detailed here: https://bombdogstudios.com/blog/state-of-the-game-272-digging-deeper-than-a-europa-miner/ there was an issue with turrets reacting badly to the new heat system that would cause them to generate thousands of internal errors, clogging up the error handling system.
AI placing turrets over each other – In some conditions, an AI with multiple deploys could place 2 or more turrets into the same physical space. This has been fixed.
FPS Drop with Area Damage weapons – Players on lower end machines, or when lots of objects are close, could experience low frame rates when area damage weapons were doing physics calculations. This process has been optimized, resulting in ~100 times less physics calculations and preventing frame rate drops.
Deploys can be seen for 1 frame when AI are trying to place them– This is getting closer to the 9FPS issue! The deplyment system for AI and players has been rewritten from the ground up to eliminate this issue.
The 9FPS Issue
This gets it’s own section! I believe I have tracked this bug down to a memory fragmentation issue, which would then trigger a prolonged garbage collection cycle, sometimes lasting 30 secs or more. There were many possibilities, but this is the one that matches the best.
I believe this issue first came to light in the December update that allowed AI to place deployables. The deploy system, as it was written, could cause a large amount of memory allocations and destroys, causing fragmented memory. Now, this wasn’t that bad, as the AI didn’t really use the deployables that much, so the bug was VERY rare. Next, the Skynet AI came along. This increased the number of AI builds that would use deployables exponentially! Now, the bug would come up, but it was rare enough to remain a bit of a legend. Faster computers could also do the garbage collection behind the scenes, prevent the issue from hitting a large number of the players.
Then, the meta changed, and the AI started running a lot more deployables. Now, the issue was popping up a lot more, and with the players running more deployables, it was popping up even when the AI were not in the match!
It took me 2 weeks of dedicated digging to track all the code that I was seeing, examining the videos of the bug in action, diving through logs, and establishing the timeline of events to reconstruct this issue. Once I had the probable suspect, I was able to rewrite the deployment system so it does not allocate ANY new memory during runtime, ensuring no memory fragmentation can occur and the garbage collection is never triggered! Now, it’s still possible for situations like this to occur, like a match with 10 players all shooting as many MINI-160’s as possible, or similar, but it’s occurrence should be reduced significantly.
That covers this update! If you are interested in creating systems to interact with user profile data, please contact me! I might have created something that you can easily pull data from 🙂