Graphs make everything better

Hello, brave pilots! This week we were down a couple men, but the rest of us have plenty to show for our efforts. 🙂 First and foremost – last week we did a bunch of work improving the performance of the game, and this week, in addition to more improvements, we built a ton of logging into the system so that we could determine how much we’ve improved performance and where we still need to make things snappier! TLDR — when you enable debug info, you’ll see a bunch of new graphs.

From left to right, they are:

Drops per second. If the network layer receives a duplicate or mis-ordered message, it drops it and counts it in this graph. Sometimes on the tortuous path over the internet, packets will get duplicated or reordered; then they’ll show up on this graph. Note that this is only for messages sent from the server to the client. Most of the time, it will be empty. We can tolerate some number of these, but if there’s a lot of drops then that’ll affect lag.

Resends per second. The game sends a fair amount of information over a TCP-like reliable channel. If a message is lost in transmission, the other side will signal its absence, and it will get resent. This should correlate roughly with packet loss; however it looks like there’s a bit of an amplification effect. Like drops, a small number will be tolerable, but a large, sustained pattern indicates problems that will cause lag.

Bandwidth. This is the bitrate the client is downloading from the server. Note that this is bits, not bytes. We’ve noticed that the presence of other players is the strongest correlation with this number, and we’ll be working to mitigate that.

Ping time. This is the time it takes a packet to do the round trip from the client to the server and back again. A lot of factors affect this, including the framerate of the server, the batch window in both the client and server (as discussed last week), and the network latency between the client and the server. Our reported latencies are typically higher than you’d see in other games. The rate of change of the latency is probably a bigger reflection of network badness than the absolute value. If its changing rapidly, that indicates that something fishy is going on. Perhaps the route between the client and server is changing; maybe there’s some quality-of-service traffic massaging that’s shunting our packets into a lower-priority queue. Maybe it’s just “bufferbloat” kicking in!

Frame time. The taller and redder a bar is, the longer the frame took. By default we use vsync which means that frames are capped at 16.667 milliseconds, 60 FPS, depending on your system configuration. You can turn off vsync in the graphics options (this is saved as a preference now so it should persist across runs of the game), and then you’ll see it render frames as quickly as it can, though at the cost of introducing visual tearing. The yellow bars that sometimes appear in the graph represent garbage collection; it’s an unavoidable fact of life when developing with the Unity engine!

We’re expecting these graphs to be useful for identifying patterns. For example, we recently noticed that the bandwidth graph spikes sometimes when enemies are killed. That’s an interesting pattern, and once we track it down we’ll probably find that we were doing something wasteful. Or that there’s a bug in the graph. 🙂 If you’re interested in helping out with finding bugs and performance snags, please observe if there’s any in-game activities that correlate with observable patterns on any or all of these graphs, and let us know if you think you’ve spotted something!

And, in the visual goodies department, we’ve got new environment art for the Grindhouse Dungeon:

In the “this is totally invisible to you, but will someday make the game better” department: we are nearly finished replacing the 3rd party backend that we have been relying upon for things like account and inventory management. We’ve now got our own custom-made functionality for tracking pilots and items, we can deploy to our test servers, we can sync with Steam, and of course, we can export your data from the old backend into the new one. When we wipe everyone’s planes and progression in a few weeks from now, we’ll be taking that opportunity to migrate your accounts over. We’re expecting the game to be more stable and more performant as a result (at very least, in the long term.)

Other changes include:

  • Fixed issue where an increase in cooldown is shown as positive (green) and vice versa
  • Arc guns: reduced lock-off distance by 1.25, to compensate for the gains they effectively experienced when we fixed a lock-related bug last week.
  • Increased drop rate of T7/T8 items in a bunch of different places.
  • Added a decent chance that Meowza will drop at least a T8 item (previously, if you didn’t get lucky and roll a T9/T10, you simply got nothing. You could still get nothing now, but the chance is much lower.)
  • Reduced Laser Playground dungeon length
  • Archived 200+ old units, reducing the size of the build by ~50 MB
  • Gave Kraken and Hypnotist a guaranteed drop of a water defense upgrade
  • Fixed piercing bullets skipping enemies while at low framerate/fast speed. (It was only processing one hit per frame, but some bullets could move fast enough to hit two or more enemies in one frame.)
  • There is now an option to use the Vulkan renderer when you launch the game. This won’t work for everybody — we’ve had some crashes even on our team — but if it does it might improve performance. If you do have crashes, try updating your video card drivers; it might really work, they’re actually building this stuff right now. But also your video card might not support it.