I've done some work to boost the game's performance, particularly on big maps, and I've also made some QoL improvements
Big Map Performance Improvements
Two things were causing slowdown with very big maps. On the client (the renderer, vtclient.exe), the main thing slowing it down was runaway chunk counts, on the server it was out of control entity counts.
I fixed runaway chunk counts on the client and runaway entity counts on both the client + server, resulting in massive performance gains for playing on big maps. It seems like there's been perf gains in Singleplayer too, but I haven't benchmarked them.
Chunk Unloader Optimisation (Details)
While the client did unload out-of-range chunks, it was nowhere near aggressive enough, resulting in situations where the chunk loader was running faster than the chunk unloader. This could mean that after flying around the world you could have 20k chunks loaded!
I improved this by making the chunk unloader act quadratically more aggressive once your chunk count reaches 1000+drawDistance^2/256. For every 2000 chunks above this count the chunk unloader will take 2x the amount of cpu time it normally does (4x at 4000, 8x at 6000, etc) - the rationale being that if you're dropping frames due to large chunk counts then we can afford to spend more time getting rid of excess chunks. The "unload" distance has been changed from unrenderDistance*4 to (1000 + unrenderDistance - nChunksOverThreshold/20), again meaning very high chunk counts means more aggressive chunk culling.
Entity Count Optimisation (Details)
While entities that are out of player range were put to sleep (AI and physics disabled), they still seemed to take quite a bit of cpu time (must be some O(N^2) or worse stuff happening under the hood). On the client, all entities (mobs, vehicles, etc) that are 1000m from the client are locally despawned. On the server, if the entity count exceeds 100 any bandits that are 1000m from the player are despawned, and if the entity count exceeds 160 base defenders will also get despawned. Any entity that is less than 1000m from any playeris exempt from despawning, and any entity involved in a base attack or base/bandit base that is under attack or a mission is likewise exempt.
The build lot screen now scales with your monitor size, making it much bigger, but not overwhelmingly so in most cases. Also water source blocks are now rendered in the preview.
I've made some wall variants that have water on one or both sides
Lots that spawn Light Planes now have double blast resistance at level 10 when colliding with an aircraft. This means that runways are much more durable and take-off/landing damage at airports is much less likely.
You can now repair racketeered buildings! Repairing a control point now despawns the defenders there, fixing a defender-duplication bug.
You can now enter the "/status" command and the server will tell you its chunk and entity counts. It will also give profiler info if the server is under non-trivial load (if it just says "Total XXms" that means the server is under capacity). This command is not considered a cheat and is able to be used by all players
Banks now spawn 33% more loot, Jewellery and Gun Shops now spawn 50% more loot.
VERSION: 1.4.3 - 12/01/2019
- [Misc] - Made the loading screen appear faster when you first start the game
- [Misc] - vtclient chunk aggressive chunk unloading threshold raised to 1000 + drawDistance^2/(256) chunks
- [Misc] - Restored the "Extreme" graphics preset
- [Misc] - You can now repair racketeered buildings
- [Misc] - Lots with an "Light Plane/CDF Light Plane Spawning Zone" now have double blast resistance at level 10 for the purpose of aircraft/tarmac collisions
- [Bugfix] - Repairing a control point now despawns any defenders (prevents defender duplication)
VERSION: 1.4.2 - 12/01/2019
- [Misc] - vtclient is much more aggressive in unloading chunks if there are more than 1000 chunks loaded clientside. This gets even more aggressive for each 2000 chunks loaded. Fixes the client having 20k chunks loaded when you fly around the world because the chunk loader is running faster than the chunk unloader
- [Misc] - vtclient will despawn any clientside mobs that are more than 10000m from the player
- [Misc] - If the server's entity count is above 100, it will despawn any bandits (not in missions or base attacks, as either attacker or defender) that are more than 1000m from any player
- [Misc] - If the server's entity count is above 160, it will also despawn any base defenders more than 1000m from any player (again not involved in missions or base attackers, as either attacker or defender).
VERSION: 1.4.1 - 10/01/2019
- [Feature] - Added 6 Wall lot variants that have water to one side or both
- [Feature] - Added the /status command, shows details of the server's status
- [Misc] - Water is now rendered in the lot preview
- [Misc] - The "Build Lot" UI now scales with window size (gets bigger if x resolution > 1200 to a maximum of 2x size)
- [Misc] - City Gen will try to plonk 2 more 1x1 commercial lots (12 now, 10 before).
- [Misc] - Jewellery shops now buy and sell precious metal ingots
- [Misc] - Loot in Jewellery shops and Gun Shops has been increased by 50%. Bank loot has been increased by 33%.