This analyzer, a front end feature that collects high level metrics from a building, has been in development on and off for a while. Now it comes to a point that can be called done.

Before, it was hard to tell the actual firepower coverage in the area from a complex moving structure. Because shooters can be occluded, out of pitch angle, fast moving, etc. This analyzer system collects large amount of samples (65536) distributed across the nearby area of a unit. Each sample represents the possible damage that can be received, determined using ray testing from the shooter to the ground where the sample is at. All the info is then, put in to a large texture map, visually enhanced. The brighter a pixel on the ground is, the more damage it will receive relatively. And sure occlusion is also marked.

anal_progress_optimized

For any particular design, the analyzer can also emulate the damage/acceleration capability which may be constrained by the energy usage. The energy is stored in each block and transfers to other connected blocks automatically. Therefore a whole set of linked blocks is a complicated system. This analyzer assist player to see if there is any bottleneck that prevents supply and causes partial shutdown.

From all these data, 3 conclusive numbers are finally calculated.

  • Destruction Coverage: This is the % of the area reachable by shooter. Right now this is just areaReachable/totalArea. In the future I may use DPS as a weight to this so the number is more accurate.
  • Swiftness Rating: For those movable flying structures, this means the capability the structure can do fast moving and sudden turn/acceleration. This is not a percentage number so an opinion is given after it.
  • Energy Sustaining: As discussed above, if there is any bottleneck causing low power, preventing maximum functioning. It is reflected here.

Let’s take a loser look at a few scenarios.

1. Higher is not always better.

anal_height_t

As you can see the square dark area is inside the bright circle. That is the occluded area where no line of sight exists from the sphere to the ground. Because the sphere is occluded by the cube below it, the higher it goes, the lower the sphere need to “look at” – more occlusion.

2. Gatling cannon that burns out quickly.

anal_gatt_t

The Gatling has a very interesting and convincing distribution map. In the “Damage Output” graph, the red line drops significantly overall a few seconds off. This means the tower’s fires at full rate in the first a few seconds then when power runs low, given shooting requires a few power, it shoots slower. You can also check out the “Sustaining Time” under “Weapon Metrics”, that will be the time for full rate.

Unfortunately this analyzer cannot tell the accuracy for the bullet projectiles. It does not emulate real simulation and I would imagine that kind of simulation will get quite noisy and time consuming.

A few years ago in the early development of this game, someone suggested using “a different color for the enemy blocks, maybe black”. Before that there was also a feedback for the initial 2 month development of the prototype: “it was hard to tell the enemy”. Because at that time all blocks have the same color for the outer shield part(which can fall off), except subtle difference of inner shining intensity.

I accepted that suggestion using the contrast of color, without realizing the potential racism message that may have added to the game, until I have heard about people complaining about it. Wow, I am not a racist. But that idea just slipped through. Now the development has come along, I think a way to counter this effect is to introduce customizable size colors. But the challenge is, the aesthetic is designed in a way that the block’s shield should be neutral color so it is different from the inside colored core. So at best there are 3 side colors: black/gray/white. I did find gray a little challenging that blocks may look bad. So without challenges it will be black/white for sure then, but customizable: the player can choose the side color. I hope this is okay to start with.

sidecolor_t2