At what range do various weapons get range bonuses

xcom-2

Weapons can gain an aim bonus based on your range to a target, as shown at the bottom of this screenshot:

enter image description here

Does this "Weapon Range" bonus apply the same way to all weapons, i.e. is the effective range for all weapons X tiles away from a target? Or do the effective ranges depend on the type of weapon, like shotguns being most effect at ranges of less than X tiles, rifles being most effective at ranges of between X and X + 10 tiles, while sniper rifles are most effective at ranges between X + 10 and X + 20 tiles?

Weapons can also get critical change bonuses depending on range to a target. The shotgun is the most obvious one: the closer you are to a target, the higher your critical chance. Does this crit bonus apply the same way to other weapons as well, e.g. the closer you are to a target with a sniper rifle, the higher your crit chance will be?

Best Answer

There are three types of weapon range available for player characters: Short, Medium and Long. The exact bonus/penalty changes a little depending on tech level (conventional, magnetic or beam).

  • Short Range applies to shotguns, it gives you up to +40 aim at point-blank range and up to -30 at extreme distances with +0 modifier at 11 tiles.
  • Medium Range applies to most weapons and gives up to +20-22 bonus aim at point-blank range with no long range penalty and slower drop-off.
  • Long Range applies to Sniper Rifles and is actually the easiest to account for because of its linear nature. They give -30 at point-blank range and +0 at 11 tiles. Long Range weapons don't give you an aim bonus.

Weapons don't have crit bonuses from range unless they are equipped with a laser sight. The bonus is +10 at 0 tiles distance and drops-off at a rate of 0.5 points per tile.

Weapon Range Tables from DefaultGameData_WeaponData.ini

This file is located under C:\Program Files (x86)\Steam\steamapps\common\XCOM 2\XComGame\Config\DefaultGameData_WeaponData.ini.

Short range:

SHORT_CONVENTIONAL_RANGE[0] = 0
SHORT_CONVENTIONAL_RANGE[1] = 40
SHORT_CONVENTIONAL_RANGE[2] = 35
SHORT_CONVENTIONAL_RANGE[3] = 32
SHORT_CONVENTIONAL_RANGE[4] = 28
SHORT_CONVENTIONAL_RANGE[5] = 23
SHORT_CONVENTIONAL_RANGE[6] = 19
SHORT_CONVENTIONAL_RANGE[7] = 16
SHORT_CONVENTIONAL_RANGE[8] = 12
SHORT_CONVENTIONAL_RANGE[9] = 6
SHORT_CONVENTIONAL_RANGE[10] = 2
SHORT_CONVENTIONAL_RANGE[11] = 0
SHORT_CONVENTIONAL_RANGE[12] = -2
SHORT_CONVENTIONAL_RANGE[13] = -4
SHORT_CONVENTIONAL_RANGE[14] = -7
SHORT_CONVENTIONAL_RANGE[15] = -10
SHORT_CONVENTIONAL_RANGE[16] = -12
SHORT_CONVENTIONAL_RANGE[17] = -15
SHORT_CONVENTIONAL_RANGE[18] = -17
SHORT_CONVENTIONAL_RANGE[19] = -18
SHORT_CONVENTIONAL_RANGE[20] = -18
SHORT_CONVENTIONAL_RANGE[21] = -19
SHORT_CONVENTIONAL_RANGE[22] = -19
SHORT_CONVENTIONAL_RANGE[23] = -21
SHORT_CONVENTIONAL_RANGE[24] = -25
SHORT_CONVENTIONAL_RANGE[25] = -30

Medium range:

MEDIUM_CONVENTIONAL_RANGE[0] = 0
MEDIUM_CONVENTIONAL_RANGE[1] = 20
MEDIUM_CONVENTIONAL_RANGE[2] = 19
MEDIUM_CONVENTIONAL_RANGE[3] = 17
MEDIUM_CONVENTIONAL_RANGE[4] = 16
MEDIUM_CONVENTIONAL_RANGE[5] = 13
MEDIUM_CONVENTIONAL_RANGE[6] = 11
MEDIUM_CONVENTIONAL_RANGE[7] = 9
MEDIUM_CONVENTIONAL_RANGE[8] = 7
MEDIUM_CONVENTIONAL_RANGE[9] = 5
MEDIUM_CONVENTIONAL_RANGE[10] = 4
MEDIUM_CONVENTIONAL_RANGE[11] = 3
MEDIUM_CONVENTIONAL_RANGE[12] = 2
MEDIUM_CONVENTIONAL_RANGE[13] = 1
MEDIUM_CONVENTIONAL_RANGE[14] = 1
MEDIUM_CONVENTIONAL_RANGE[15] = 1
MEDIUM_CONVENTIONAL_RANGE[16] = 0
MEDIUM_CONVENTIONAL_RANGE[17] = 0
MEDIUM_CONVENTIONAL_RANGE[18] = 0
MEDIUM_CONVENTIONAL_RANGE[19] = 0
MEDIUM_CONVENTIONAL_RANGE[20] = 0
MEDIUM_CONVENTIONAL_RANGE[21] = 0
MEDIUM_CONVENTIONAL_RANGE[22] = 0
MEDIUM_CONVENTIONAL_RANGE[23] = 0
MEDIUM_CONVENTIONAL_RANGE[24] = 0
MEDIUM_CONVENTIONAL_RANGE[25] = 0

Long range:

LONG_CONVENTIONAL_RANGE[0] = 0
LONG_CONVENTIONAL_RANGE[1] = -30
LONG_CONVENTIONAL_RANGE[2] = -27
LONG_CONVENTIONAL_RANGE[3] = -24
LONG_CONVENTIONAL_RANGE[4] = -21
LONG_CONVENTIONAL_RANGE[5] = -18
LONG_CONVENTIONAL_RANGE[6] = -15
LONG_CONVENTIONAL_RANGE[7] = -12
LONG_CONVENTIONAL_RANGE[8] = -9
LONG_CONVENTIONAL_RANGE[9] = -6
LONG_CONVENTIONAL_RANGE[10] = -3
LONG_CONVENTIONAL_RANGE[11] = 0
LONG_CONVENTIONAL_RANGE[12] = 0
LONG_CONVENTIONAL_RANGE[13] = 0
LONG_CONVENTIONAL_RANGE[14] = 0
LONG_CONVENTIONAL_RANGE[15] = 0
LONG_CONVENTIONAL_RANGE[16] = 0
LONG_CONVENTIONAL_RANGE[17] = 0
LONG_CONVENTIONAL_RANGE[18] = 0
LONG_CONVENTIONAL_RANGE[19] = 0
LONG_CONVENTIONAL_RANGE[20] = 0
LONG_CONVENTIONAL_RANGE[21] = 0
LONG_CONVENTIONAL_RANGE[22] = 0
LONG_CONVENTIONAL_RANGE[23] = 0
LONG_CONVENTIONAL_RANGE[24] = 0
LONG_CONVENTIONAL_RANGE[25] = 0