Aigis Wiki
Advertisement

The most natural units for measuring range are canvas pixels which will be referred to simply as pixels. (These may or may not correspond to actual pixels on the user's screen depending on the screen size, browser zoom settings, etc. The canonical canvas size for Aigis is 960 by 640.)

An enemy's range depends on its scale. Scale is a mostly hidden attribute that determines how much the enemy's pixel art (dot art) is scaled up or down. (In the enemy data tables this is "DotRate.") This scale may be modified, e.g. by a special mission condition ("Giant Battle"). Essentially, the range statistic is multiplied by the scale.

For player units, the range statistic is multiplied by 1.5. Almost all player units actually have a scale of 1.5 ("DotScale" in the player data table). However, even units that don't have scale 1.5 use the value of 1.5 instead for range calculations. (Range is primarily based on class, so it would be awkward to have two units of the same class but different scales. Having to display the value to the user makes it worse.) However, modifications of player scale do affect the range calculation (e.g. "Dwarf Battle"). For convenience, I will still refer to this value as scale.

At a scale of 1.0, the range stat represents the diameter in pixels of the circle where things in the circle are in range. It is more natural to consider range as the radius of a circle, so we will consider range in pixels to be half the range statistic times the scale. This is radius of the green circle displayed by the game.

Each entity also has a hidden size attribute (for purposes of this model, though it's not clear if this is hard-coded or data-driven). To determine if a target is in range, the game adds its size to the pixel range of the source. So, size can be thought of as the radius of a bounding circle around an entity.

The size of player units is 20 pixels times the scale (so 30 pixels in the absence of unusual effects). Apparently, this does not depend on the scale of the unit nor the size of the sprite. The size of enemy units is 12 pixels times the enemy scale. Size does not depend on the size of the sprite, so it is often a poor reflection of the visual size of an entity.

The range values displayed on the wiki are normalized for 1.5 scale because these are the values the game actually displays (for player units). That means that for enemies, the value displayed on the wiki is calculated as follows:

wiki_range = range_statistic × scale / 1.5

This is a reasonable value to display. For example, enemies with the same wiki range (and possibly different scales) on the same route will both either be able to attack or not be able to attack a particular player unit.

However, another important consideration is whether a player unit will out-range an enemy in a one-on-one context. The wiki range is not enough to determine this -- it is possible for an enemy with a shorter wiki range to hit a player unit that can't hit it in return (and vice versa). Since player units all have the same size (under normal circumstances), it is also possible to calculate a "comparative range" for enemies that can be used for such comparisons.

comparative_range = 40 + (scale / 3) × (2 × range_statistic - 64) = wiki_range + 40 - (64 × scale) / 3

Unfortunately, this value cannot be calculated without knowing the enemy scale which is not available on the wiki. Although this value is useful, I think the current way of displaying enemy range is more natural (and also useful in its own way). Since the details are a bit involved, I don't have an opinion for how or if the information should be distributed elsewhere. Also worth noting, a rule of thumb can be developed based on common assumptions about enemy scale. For example, most enemies have scale 1 or greater, so their comparative range is no more than 19 more than their wiki range.

On some maps, enemy spawn positions have a random offset from the route. (In the route data tables, this is the default, and turned off by a value of -1 in the "RouteOffset" column.) However, for the purposes of range calculations, this offset is ignored. Enemies are considered to be at the position indicated by their route regardless of any offset. (This means enemies that appear to be in different positions may actually be in the same position or vice versa.)

Player vanguard units also have a range value that determines how close enemies need to come before they are blocked. This calculation uses these same range mechanics. The range statistic used here is 40 for all vanguard units ("AtkArea" in the class data table). (This is also reflected by the size of the green circle when it isn't overridden for a ranged attack.) (Interestingly, this is the same as the size for player units, although it is a separate attribute.)

These calculations apply to ranged attacks, healing, splash, and proximity effects (e.g. Elyse's skill or the Demon Summoner ability). For splash range, the value given in the game data ("DamageArea" in the missile table) is actually the radius in pixels instead of the diameter, and there is no scaling factor. (So, for the wiki, the value is multiplied by 4/3.) Also, note that the splash area may not be centered on the target of the triggering attack.

I wouldn't trust these values completely when they are within perhaps one pixel. It seems perhaps that entity positions can be a little bit unpredictable sometimes depending on animation frames (e.g. the gold armor jitter bug), and there could also be subpixel measurements or rounding coming into play.

Also, a lot of this analysis is based on empirical observations, so errors and exceptions are possible.

Advertisement