XGAbilityTree.BuildAbilities
Contents
Overview
This function is used for both XCOM Soldier and Alien abilities. It is found in the XComGame.upk file.
Function
- Path: XComGame.upk >> XGAbilityTree >> BuildAbilities()
- Values: See for tables of related enumerated values such as Ability, DisplayProperty, Effect, Property, Range, and Target.
Signature
- simulated function BuildAbilities()
- no return value
History
- Available since version 1.0?
Header in Hex
XCom Enemy Unknown; version unknown; patch unknown
8E 7E 00 00 47 55 00 00 00 00 00 00 79 7E 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4D 00 00 00 A4 0C 00 00 13 0D 00 00 F7 0C 00 00
Code Break Down
simulated function BuildAbilities()
{
m_iCurrentCategory = 1; BuildAbility(7, 2, 1, -1, -20, 1, 1, 46, 8); BuildAbility(9, 2, 5, -1, -20, 1, 1, 25, 36, 11); BuildAbility(10, 2, 5, -1, -20, 1, 1, 26, 36, 11, 3, 9); BuildAbility(11, 1, 2, -1, -20, 1, 1, 3, 9); BuildAbility(8, 2, 1, -1, -20, 1, 1, 1, 9); BuildAbility(25, 8, 3, 2, -20, 1, 12, 1, 4, 45, 3, 7, 9); BuildAbility(66, 8, 3, 2, -20, 1, 2, 12, 1, 4, 45, 44, 3, 7, 9); BuildAbility(12, 2, 1, -1, -20, 4, 1, 1, 44, 9); BuildAbility(17, 2, 1, 2, -20, 2, 5, 18, 1, 3, 29, 38, 40, 44, 9); BuildAbility(67, 2, 1, 2, -20, 2, 5, 1, 18, 1, 3, 38, 40, 44, 9, 9); BuildAbility(20, 8, 2, -1, -20, 12, 1, 33, 13); BuildAbility(81, 8, 2, -1, -20, 12, 1, 33, 13); BuildAbility(33, 1, 0, -1, 20, 6, 39, 3); BuildAbility(34, 8, 2, -1, -20, 21, 12, 1, 4, 3, 7); BuildAbility(22, 8, 1, -1, -20, 1, 12, 1, 3, 4, 7); BuildAbility(24, 8, 1, -1, -20, 1, 12, 1, 3, 4, 7); BuildAbility(23, 8, 1, -1, -20, 21, 12, 1, 4, 30, 3, 4, 7); BuildAbility(71, 8, 1, -1, -20, 21, 12, 1, 4, 3, 4, 7); BuildAbility(30, 1, 0, 3, -20, 22, 3, 2); BuildAbility(31, 1, 0, -1, -20, 23, 1, 8, 3); BuildAbility(32, 1, 0, -1, -20, 24, 1, 8, 3); BuildAbility(13, 2, 1, 3, -20, 8, 1); BuildAbility(14, 2, 1, 2, -20, 2, 1); BuildAbility(15, 1, 1, 1, -20, 8, 1); BuildAbility(48, 2, 2, -1, -20, 1, 1, 2, 47, 10); BuildAbility(70, 8, 2, -1, -20, 1, 12, 13, 9, 3, 1); BuildAbility(52, 2, 2, 7, -20, 17, 1, 2, 21, 32, 44, 10, 11); BuildAbility(75, 2, 2, 7, -20, 17, 1, 2, 21, 32, 44, 11); BuildAbility(35, 8, 2, -1, -20, 21, 1, 4, 42, 12, 44, 3, 7, 9, 3); BuildAbility(28, 2, 2, -1, -20, 18); BuildAbility(61, 2, 1, 4, -20, 1, 1, 44, 9, 3); BuildAbility(62, 2, 1, 4, -20, 1, 1, 44, 9, 5); BuildAbility(72, 2, 2, 5, -20, 1, 2, 1, 2, 32, 44, 3, 3); BuildAbility(73, 3, 2, 8, -20, 2, 12, 2, 4, 1, 44, 21, 3, 7, 9); BuildAbility(53, 2, 2, 5, -20, 16, 1, 2, 32, 44, 25, 5); m_iCurrentCategory = 2; BuildAbility(76, 1, 1, 5, -20, 2, 2, 1, 44, 3, 9); BuildAbility(82, 3, 1, 5, -20, 2, 2, 8, 44, 1); BuildAbility(74, 1, 2, 2, -20, 2, 1, 2, 44, 21, 3, 9); BuildAbility(39, 4, 3, -1, -20, 20, 3); BuildAbility(38, 1, 0, 2, -20, 2, 23, 38, 39, 3, 2); BuildAbility(86, 1, 0, 2, -20, 2, 38, 39, 3, 2); BuildAbility(26, 1, 0, 3, -20, 2, 18, 3); BuildAbility(44, 1, 0, -1, -20, 16, 3, 1); BuildAbility(45, 1, 0, -1, -20, 11, 3); BuildAbility(36, 4, 3, -1, -20, 12, 24, 11, 25, 1, 3); BuildAbility(37, 4, 3, -1, -20, 13, 24, 11, 25, 1, 3, 9); BuildAbility(40, 1, 0, 3, -20, 14, 2, 19, 21, 8, 3); BuildAbility(41, 5, 3, -1, -20, 2, 56, 1, 11, 25, 3); BuildAbility(42, 4, 5, -1, -20, 2, 1, 26, 11, 3); BuildAbility(43, 1, 0, 5, -20, 1, 3); BuildAbility(47, 4, 2, 2, -20, 2, 29, 15, 1, 2, 27, 34, 21); BuildAbility(51, 7, 2, -1, -20, 2, 29, 15, 1, 2, 27, 34, 21); BuildAbility(55, 1, 0, 3, -20, 2, 3, 9); BuildAbility(56, 9, 1, -1, -20, 25, 2, 1, 3); BuildAbility(57, 10, 1, -1, -20, 26, 2, 1, 3); BuildAbility(58, 4, 2, -1, -20, 27, 2, 1, 25, 3); BuildAbility(59, 4, 1, -1, -20, 28, 2, 1, 3); BuildAbility(88, 11, 2, 6, -20, 2, 44, 27, 9, 3, 9); m_iCurrentCategory = 3; BuildAbility(27, 2, 2, -1, -20, 8, 1); BuildAbility(87, 2, 2, -1, -20, 15, 8, 1); m_iCurrentCategory = 2; BuildAbility(6, 8, 1, -1, -20, 7, 1, 12, 3, 7); BuildAbility(1, 8, 0, -1, -3, 15, 7, 1, 3); BuildAbility(2, 1, 0, -1, -20, 8, 35, 3); BuildAbility(3, 1, 0, -1, -20, 15, 2, 7); BuildAbility(4, 1, 0, -1, -20, 15, 2, 7); BuildAbility(5, 8, 0, -1, -20, 15, 12, 3, 7); BuildAbility(68, 1, 0, 6, 0, 30, 8, 44, 3, 9, 6); m_iCurrentCategory = 1; BuildAbility(78, 3, 2, 10, -20, 1, 1, 43, 42, 44, 9, 3, 9, 8); m_iCurrentCategory = 2; BuildAbility(77, 1, 0, -1, 0, 8, 3, 9); BuildAbility(83, 4, 1, -1, -20, 2, 1, 26, 3, 2, 9); m_iCurrentCategory = 1; BuildAbility(79, 2, 2, 2, 40, 1, 6, 1, 7, 9); BuildAbility(80, 8, 3, 2, -20, 1, 12, 1, 44, 9, 7, 3, 10); //return;
}
Code Breakdown
Function header
8E 7E 00 00 47 55 00 00 00 00 00 00 79 7E 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4D 00 00 00 A4 0C 00 00 13 0D 00 00 F7 0C 00 00
m_iCurrentCategory = 1; >> 0F 01 72 7E 00 00 26
calling BuildAbility >> 1B 7A 0D 00 00 00 00 00 00
ability >> 24 07
target >> 24 02
range >> 2C 02
duration >> 1D FF FF FF FF
reaction cost >> 1D EC FF FF FF
effect 1 >> 24 01
effects 2-3 >> 4A 4A
property 1 >> 24 01
property 2 >> 24 2E
prop 3-8 >> 4A 4A 4A 4A 4A 4A
visual prop 1 >>24 08
visual prop 2-3 >> 4A 4A
cooldown >> 4A
charges >> 4A
end param >> 16
from there it just keeps repeating function calls.
Replacement Codes
- eAbility_ShotStandard, range set by weapon (ini setting)
SF: 1B 7A 0D 00 00 00 00 00 00 24 07 24 02 2C 02 1D FF FF FF FF 1D EC FF FF FF 24 01 4A 4A 24 01 24 2E 4A 4A 4A 4A 4A 4A 24 08 4A 4A4A 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 07 24 02 2C 01 1D FF FF FF FF 1D EC FF FF FF 24 01 4A 4A 24 01 24 2E 4A 4A 4A 4A 4A 4A 24 08 4A 4A4A 4A 16
- eAbility_RapidFire, range set by weapon (ini setting)
SF: 1B 7A 0D 00 00 00 00 00 00 24 08 24 02 2C 02 1D FF FF FF FF 1D EC FF FF FF 24 01 24 01 4A 24 01 4A 4A 4A 4A 4A 4A 4A 24 09 4A 4A 4A 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 08 24 02 2C 01 1D FF FF FF FF 1D EC FF FF FF 24 01 24 01 4A 24 01 4A 4A 4A 4A 4A 4A 4A 24 09 4A 4A 4A 4A 16
- eAbility_ShotFlush, range set by weapon (ini setting)
SF: 1B 7A 0D 00 00 00 00 00 00 24 0C 24 02 2C 02 1D FF FF FF FF 1D EC FF FF FF 24 04 24 01 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 4A 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 0C 24 02 2C 01 1D FF FF FF FF 1D EC FF FF FF 24 04 24 01 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 4A 4A 16
- eAbility_ShotSuppress, range set by weapon (ini setting)
SF: 1B 7A 0D 00 00 00 00 00 00 24 11 24 02 2C 02 2C 02 1D EC FF FF FF 24 02 24 05 4A 24 12 24 01 24 03 24 1D 24 26 24 28 24 2C 4A 24 09 4A 4A 4A 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 11 24 02 2C 01 2C 02 1D EC FF FF FF 24 02 24 05 4A 24 12 24 01 24 03 24 1D 24 26 24 28 24 2C 4A 24 09 4A 4A 4A 4A 16
- eAbility_ShotMayhem, range set by weapon (ini setting)
SF: 1B 7A 0D 00 00 00 00 00 00 24 43 24 02 2C 02 2C 02 1D EC FF FF FF 24 02 24 05 24 01 24 12 24 01 24 03 24 26 24 28 24 2C 24 09 4A 24 09 4A 4A 4A 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 43 24 02 2C 01 2C 02 1D EC FF FF FF 24 02 24 05 24 01 24 12 24 01 24 03 24 26 24 28 24 2C 24 09 4A 24 09 4A 4A 4A 4A 16
- eAbility_PrecisionShot, range set by weapon (ini setting) and cooldown reduced to 1 turn
SF: 1B 7A 0D 00 00 00 00 00 00 24 3D 24 02 2C 02 2C 04 1D EC FF FF FF 24 01 4A 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 2C 05 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 3D 24 02 2C 01 2C 04 1D EC FF FF FF 24 01 4A 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 2C 03 4A 16
It seems the game counts both your and AI turns. Do not know for sure if the ability cooldown must finish on AI turn for it to work the next.
- eAbility_DisablingShot, range set by ini weapon setting
SF: 1B 7A 0D 00 00 00 00 00 00 24 3E 24 02 2C 02 2C 04 1D EC FF FF FF 24 01 4A 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 2C 05 4A 16
RW: 1B 7A 0D 00 00 00 00 00 00 24 3E 24 02 2C 01 2C 04 1D EC FF FF FF 24 01 4A 4A 24 01 24 2C 4A 4A 4A 4A 4A 4A 24 09 4A 4A 2C 05 4A 16
References
Referred to by this article:
- XComGame.upk
- XGTacticalGameCoreData.EAbility
- XGTacticalGameCoreData.EAbilityTarget
- XGTacticalGameCoreData.EAbilityRange
- XGTacticalGameCoreData.EAbilityEffect
- XGTacticalGameCoreData.EAbilityProperty
- XGTacticalGameCoreData.EAbilityDisplayProperty
That refer to this article: