Armor Initialization Modding - XCOM:EU 2012
Contents
Overview
While investigating issues with implementing the Armor Property "eAP_Grapple" via the DefaultGameCore.ini settings - XCOM:EU 2012, I noticed that the XCOM:EU Force's Armors did NOT use a standard initialization; that is there was no real standardization of which "eSlots" were being initialized for the equip-able armors.
There are those that will say: "This is a good thing"; if they feel that changing this might offend them, they are welcome to go elsewhere (while ignoring the rest of this article).
For those that are still here, this article will go into the details on what needs to be understood to knowingly modify the XCOM:EU Force's Armors to a standard initialization scheme.
While Item loadouts - XCOM:EU 2012 does touch on parts of the below details, it focuses more on XCOM:EW 2013 (and came before this article was written).
- That is to say: this article (focusing on XCOM:EU 2012, with more recent discoveries) supersedes whatever contradictions may be raised by the (above) referenced article (focusing on XCOM:EW 2013).
Game Version Compatibility
Investigated and tested using Steam's:
XCOM: Enemy Unknown - Patch 6, Date: 2013-Nov-25, EXE Version: 1.0.0.4963, Changelist: 398179
Known Issues
DEFINITELY NOT COMPATIBLE with XCOM: Enemy Within (XCOM:EW 2013).
Issues with implementing the Armor Property "eAP_Grapple" via the DefaultGameCore.ini settings - XCOM:EU 2012 led to this investigation.
By design the Armor Property "eAP_Grapple" should cause the Weapon "eItem_Grapple" to be equipped to the "eSlot_Grapple" (on the left-forearm) of an Armor, and enable the proper functioning thereof.
Heretofore:
While the Weapon "eItem_Grapple" would appear on the left-forearm of an Armor with the "eAP_Grapple" property, it would not have a control in the Tactical Game (i.e. on a mission). Using the ABILITIY "eAbility_Grapple" on an Armor would turn on the Tactical Game control, but "eItem_Grapple" would malfunction:
- On use the firing of the Primary Weapon animation is played then the Grapple animation plays, but ends before the Soldier climbs onto the targeted tile.
- with the result that the Soldier ends up one tile short (and below) the tile targeted by the Grapple action.
- In open terrain the soldier can walk away from this;
- But in Urban or Ship terrain the soldier is stuck (unless there are other grapple targets within range).
A critical clue to what the actual problem is - when using the ABILITIY "eAbility_Grapple" on an Armor - was that the Tactical Game control for the "Grapple" would be in the wrong place within the sequence of Tactical Game controls.
- That is the "Grapple" control came after all of the "eSmallItems" controls (rather than before them - as it should), and just before any Psi controls.
Programs and Tools
For the purposes of this article there are three tools from Modding Tools - XCOM:EU 2012 that I would recommend; tool links (below) will be to specific points on the referenced page.
Please see:
- UE Explorer
- I used UE Explorer (version 1.2.7.1) to view decompiled code from the XComGame.upk file.
- UPK Utils
- I used PatcherGUI (version 7.3) to install (and uninstall - as needed) the "test code" for this mod.
- Only needs to be extracted from it's download file to work (no lengthy installation process).
- 'Take Notes' on where the "PatcherGUI.exe" file is extracted to (or create your own shortcut to it).
- For modders there are two "Readme.txt" files in with the "PatcherGUI.exe" file:
- "PatcherGUIReadme.txt" - written for those that are more interested in 'applying mods';
- and "PatchUPK_Readme.txt" - written for those that are also interested in 'writing mods'.
- For modders there are two "Readme.txt" files in with the "PatcherGUI.exe" file:
- Also - worthy of mention here:
- Tools Menu: "Disable hash check" - modifies "XComGame.exe".
- Tools Menu: "Enable ini loading" - modifies "XComGame.exe".
- Tools Menu: "Disable phoning home" - modifies "Windows network settings".
- Button (on right side): "Show log" - may be used to quickly locate the most recent uninstall.txt (for a PatcherGUI installed mod).
- Button (on right side): "Apply" - why we use PatchGUI: to apply a modifying txt file.
- Notepad++
- For those that want that little bit more than what Microsoft Windows' "Notepad.exe" offers.
Compiled Code : Source & Scripts
Unmodified decompiled "Object" code (i.e. Source Code 'equivalent') found in - XComGame.upk using UE Explorer (or scripted-text found in XComGame.int using notepad-or-equivalent) :
XGInventory
simulated function DualWieldHandling(XGInventorySlot kEquipInventorySlot, XGInventoryItem kItem) { local XGInventorySlot kLeftBackSlot, kRightBackSlot; local XGInventoryItem kItem1, kItem2; // End:0x283 if(((kEquipInventorySlot == (GetSlot(2))) && kItem.m_kSlot == (GetSlot(1))) || ((kEquipInventorySlot == (GetSlot(0))) && GetSlot(0).GetPrimaryItem() != none) && GetSlot(1).GetPrimaryItem() == none) { kLeftBackSlot = GetSlot(1); kRightBackSlot = GetSlot(0); kItem1 = kLeftBackSlot.GetPrimaryItem(); kItem2 = kRightBackSlot.GetPrimaryItem(); kRightBackSlot.UnequipItem(); kLeftBackSlot.UnequipItem(); // End:0x1FE if(kItem2 != none) { kItem2.m_kReservedSlot = kLeftBackSlot; kLeftBackSlot.EquipItem(kItem2); PresRemoveItem(kItem2); PresAddItem(kItem2); } // End:0x283 if(kItem1 != none) { kItem1.m_kReservedSlot = kRightBackSlot; kRightBackSlot.EquipItem(kItem1); PresRemoveItem(kItem1); PresAddItem(kItem1); } } //return; }
- Default Values
m_SocketNames=Inven_R_Back m_SocketNames[1]=Inven_L_Back m_SocketNames[2]=Inven_R_Hand m_SocketNames[3]=Inven_L_Hand m_SocketNames[4]=Inven_Grapple m_SocketNames[5]=Inven_R_Leg m_SocketNames[6]=Inven_L_Leg m_SocketNames[7]=Inven_L_Belt m_SocketNames[8]=Inven_L_Boot m_SocketNames[9]=Inven_R_Boot m_SocketNames[10]=Inven_R_Chest m_SocketNames[11]=Inven_L_Chest m_SocketNames[12]=Inven_R_Forearm m_SocketNames[13]=Inven_RightSling m_SocketNames[14]=Inven_RearBackPack m_SocketNames[15]=Inven_PsiSource m_SocketNames[16]=Inven_Head m_SocketNames[17]=Inven_C_Chest m_SocketNames[18]=Claw_R m_SocketNames[19]=Claw_L m_SocketNames[20]=HeatRay bTickIsDisabled=true
XGInventoryNativeBase
- Constants
const LARGE_WEAPON_SIZE = 4;
enum ELocation { eSlot_RightBack, eSlot_LeftBack, eSlot_RightHand, eSlot_LeftHand, eSlot_Grapple, eSlot_RightThigh, eSlot_LeftThigh, eSlot_LeftBelt, eSlot_LeftBoot, eSlot_RightBoot, eSlot_RightChest, eSlot_LeftChest, eSlot_RightForearm, eSlot_RightSling, eSlot_RearBackPack, eSlot_PsiSource, eSlot_Head, eSlot_CenterChest, eSlot_Claw_R, eSlot_Claw_L, eSlot_ChestCannon, eSlot_None, eSlot_MAX };
native simulated function XGInventorySlot GetSlot(XGInventoryNativeBase.ELocation eSlot);
- Parameters
XGInventoryNativeBase.ELocation eSlot out XGInventorySlot ReturnValue
XGInventorySlotNativeBase
native simulated function SetSlotLocation(XGInventoryNativeBase.ELocation eLoc);
native simulated function SetSize(int iSize);
native simulated function SetEnabled(bool bEnabled);
XGArmors
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; // End:0x33 if(m_kInventory == none) { m_kInventory = Spawn(class'XGInventory'); } kSlot = GetInventory().GetSlot(13); kSlot.SetSlotLocation(13); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(14); kSlot.SetSlotLocation(14); kSlot.SetSize(5); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_Invalid m_eClass=EArmorClass.eClass_Invalid m_bCanTakeLowCover=true m_bCanTakeHighCover=true
File: XComGame.int
[XGArmor] m_strType="Armor"
XGArmor_LevelIIILight
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(false); kSlot = GetInventory().GetSlot(4); kSlot.SetSlotLocation(4); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_III m_eClass=EArmorClass.eClass_Light m_eType=EItemType.eItem_ArmorGhost m_strUIImage="CHH_Lv3_ICONS.CHH_Lv3LightMale_Armor_ICON"
File: XComGame.int
[XGArmor_LevelIIILight] m_strName="Ghost Armor" m_strNotes="The Ghost is capable of vanishing from sight."
XGArmor_LevelIIIMedium
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(10); kSlot.SetSlotLocation(10); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_III m_eClass=EArmorClass.eClass_Medium m_eType=EItemType.eItem_ArmorTitan m_strUIImage="CHH_Lv3_ICONS.CHH_Lv3MedMale_Armor_ICON"
File: XComGame.int
[XGArmor_LevelIIIMedium] m_strName="Titan Armor" m_strNotes="The Titan armor provides an excellent defense against alien weapons."
XGArmor_LevelIIIMediumAir
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(10); kSlot.SetSlotLocation(10); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_III m_eClass=EArmorClass.eClass_Medium m_eType=EItemType.eItem_ArmorArchangel m_strUIImage="CHH_Lv3_ICONS.CHH_Lv3MedMale_Armor_ICON"
File: XComGame.int
[XGArmor_LevelIIIMediumAir] m_strName="Archangel Armor" m_strNotes="The Archangel is capable of flight."
XGArmor_LevelIIIHeavy
File: XComGame.upk as viewed in UE Explorer
Nothing found.
File: XComGame.int
[XGArmor_LevelIIIHeavy] m_strName="Golem Armor" m_strNotes="The Golem is impervious to damage."
XGArmor_LevelIILight
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(10); kSlot.SetSlotLocation(10); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(4); kSlot.SetSlotLocation(4); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_II m_eClass=EArmorClass.eClass_Light m_eType=EItemType.eItem_ArmorSkeleton m_strUIImage="CHH_Lv2_ICONS.CHH_Lv2LightMale_Armor_ICON"
File: XComGame.int
XGArmor_LevelIIMedium
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(10); kSlot.SetSlotLocation(10); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_II m_eClass=EArmorClass.eClass_Medium m_eType=EItemType.eItem_ArmorCarapace m_strUIImage="CHH_Lv2_ICONS.CHH_Lv2MedMale_Armor_ICON"
File: XComGame.int
[XGArmor_LevelIIMedium] m_strName="Carapace Armor" m_strNotes="The Carapace Armor is both stronger and lighter than our conventional armor, allowing soldiers to carry more gear even as they withstand greater damage."
XGArmor_LevelIIHeavy
File: XComGame.upk as viewed in UE Explorer
Nothing found.
File: XComGame.int
[XGArmor_LevelIIHeavy] m_strName="Heavy Carapace Armor" m_strNotes="The Heavy Carapace Armor allows a soldier to withstand heavy damage while wielding two weapons at once. Inventory and mobility, however, are severly restricted."
XGArmor_LevelILight
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_I m_eClass=EArmorClass.eClass_Light m_strUIImage="CHH_Lv2_ICONS.CHH_Lv2LightMale_Armor_ICON"
XGArmor_LevelIMedium
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(false); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(4); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_I m_eClass=EArmorClass.eClass_Medium m_eType=EItemType.eItem_ArmorKevlar m_strUIImage="CHH_Lv1_ICONS.CHH_Lv1MedMale_Armor_ICON"
File: XComGame.int
[XGArmor_LevelIMedium] m_strName="Kevlar Body Armor"
XGArmor_Psionic
File: XComGame.upk as viewed in UE Explorer
function Init() { local XGInventorySlot kSlot; super.Init(); kSlot = GetInventory().GetSlot(2); kSlot.SetSlotLocation(2); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(0); kSlot.SetSlotLocation(0); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(1); kSlot.SetSlotLocation(1); kSlot.SetSize(4); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(5); kSlot.SetSlotLocation(5); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(6); kSlot.SetSlotLocation(6); kSlot.SetSize(2); kSlot.SetEnabled(true); kSlot = GetInventory().GetSlot(11); kSlot.SetSlotLocation(11); kSlot.SetSize(2); kSlot.SetEnabled(false); kSlot = GetInventory().GetSlot(15); kSlot.SetSlotLocation(15); kSlot.SetSize(1); kSlot.SetEnabled(true); //return; }
- Default Values
m_eLevel=EArmorLevel.eLevel_III m_eClass=EArmorClass.eClass_Light m_eType=EItemType.eItem_ArmorPsi m_strUIImage="CHH_Lv3_ICONS.CHH_PsionicMale_Armor_ICON"
File: XComGame.int
[XGArmor_Psionic] m_strName="Psionic" m_strNotes="Bring powers of the mind to the battlefield."
XGLoadoutMgr
XGLoadoutMgr.TLoadout
- Variables
class<XGArmor> Armor class<XGInventoryItem> Items[21] array< class<XGInventoryItem> > Backpack
- Default Values
Armor=none Items=none Items[1]=none Items[2]=none Items[3]=none Items[4]=none Items[5]=none Items[6]=none Items[7]=none Items[8]=none Items[9]=none Items[10]=none Items[11]=none Items[12]=none Items[13]=none Items[14]=none Items[15]=none Items[16]=none Items[17]=none Items[18]=none Items[19]=none Items[20]=none Backpack=none
XGLoadoutMgr.ConvertTInventoryToSoldierLoadout
XGTacticalGameCore
XGTacticalGameCore.BuildArmors
simulated function BuildArmors() { local TConfigArmor A; // End:0x1D7 foreach default.Armors(A,) { BuildArmor(A.iType, A.iHPBonus, A.iDefenseBonus, A.iFlightFuel, A.iWillBonus, A.iLargeItems, A.iSmallItems, A.iMobilityBonus, A.ABILITIES[0], A.ABILITIES[1], A.ABILITIES[2], A.Properties[0], A.Properties[1], A.Properties[2], A.Properties[3]); } //return; }
XGTacticalGameCore.BuildArmor
simulated function BuildArmor(int iType, int iHPBonus, int iDefenseBonus, int iFlightFuel, int iWillBonus, int iLargeItems, int iSmallItems, int iMobilityBonus, optional XGTacticalGameCoreData.EAbility eAbility1, optional XGTacticalGameCoreData.EAbility eAbility2, optional XGTacticalGameCoreData.EAbility eAbility3, optional XGTacticalGameCoreData.EArmorProperty eProperty1, optional XGTacticalGameCoreData.EArmorProperty eProperty2, optional XGTacticalGameCoreData.EArmorProperty eProperty3, optional XGTacticalGameCoreData.EArmorProperty eProperty4) { local TArmor kArmor; kArmor.strName = GetLocalizedItemName(byte(iType)); kArmor.iType = iType; kArmor.iHPBonus = iHPBonus; kArmor.iDefenseBonus = iDefenseBonus; kArmor.iFlightFuel = iFlightFuel; kArmor.iWillBonus = iWillBonus; kArmor.iLargeItems = iLargeItems; kArmor.iSmallItems = iSmallItems; kArmor.iMobilityBonus = iMobilityBonus; ++ kArmor.aAbilities[eAbility1]; ++ kArmor.aAbilities[eAbility2]; ++ kArmor.aAbilities[eAbility3]; ++ kArmor.aProperties[eProperty1]; ++ kArmor.aProperties[eProperty2]; ++ kArmor.aProperties[eProperty3]; ++ kArmor.aProperties[eProperty4]; class'XComMCP'.static.RegisterItemType(kArmor.strName, iType); m_arrArmors[iType] = kArmor; //return; }
XGTacticalGameCoreData
XGTacticalGameCoreData.EAbility
Please see wiki article: XGTacticalGameCoreData.EAbility
XGTacticalGameCoreData.EArmorProperty
The following properties appear on Armors: as the "eAP_" prefix (denoting eArmorProperties) suggests.
From: XGTacticalGameCoreData.EArmorProperty (File=XComGame.upk \ XGTacticalGameCoreData \ Enumerations \ EArmorProperty).
XGTacticalGameCoreData.EWeaponProperty
The following properties appear on Weapons: as the "eWP_" prefix (denoting eWeaponProperties) suggests.
From: XGTacticalGameCoreData.EWeaponProperty (File=XComGame.upk \ XGTacticalGameCoreData \ Enumerations \ EWeaponProperty).
XGTacticalGameCoreNativeBase
XGTacticalGameCoreNativeBase.TArmor
- Variables
string strName int iType int aAbilities[EAbility] int aProperties[EArmorProperty] int iHPBonus int iDefenseBonus int iFlightFuel int iWillBonus int iLargeItems int iSmallItems int iMobilityBonus
- Default Values
strName="" iType=0 aAbilities=0 aAbilities[1]=0 aAbilities[2]=0 aAbilities[3]=0 aAbilities[4]=0 aAbilities[5]=0 aAbilities[6]=0 aAbilities[7]=0 aAbilities[8]=0 aAbilities[9]=0 aAbilities[10]=0 aAbilities[11]=0 aAbilities[12]=0 aAbilities[13]=0 aAbilities[14]=0 aAbilities[15]=0 aAbilities[16]=0 aAbilities[17]=0 aAbilities[18]=0 aAbilities[19]=0 aAbilities[20]=0 aAbilities[21]=0 aAbilities[22]=0 aAbilities[23]=0 aAbilities[24]=0 aAbilities[25]=0 aAbilities[26]=0 aAbilities[27]=0 aAbilities[28]=0 aAbilities[29]=0 aAbilities[30]=0 aAbilities[31]=0 aAbilities[32]=0 aAbilities[33]=0 aAbilities[34]=0 aAbilities[35]=0 aAbilities[36]=0 aAbilities[37]=0 aAbilities[38]=0 aAbilities[39]=0 aAbilities[40]=0 aAbilities[41]=0 aAbilities[42]=0 aAbilities[43]=0 aAbilities[44]=0 aAbilities[45]=0 aAbilities[46]=0 aAbilities[47]=0 aAbilities[48]=0 aAbilities[49]=0 aAbilities[50]=0 aAbilities[51]=0 aAbilities[52]=0 aAbilities[53]=0 aAbilities[54]=0 aAbilities[55]=0 aAbilities[56]=0 aAbilities[57]=0 aAbilities[58]=0 aAbilities[59]=0 aAbilities[60]=0 aAbilities[61]=0 aAbilities[62]=0 aAbilities[63]=0 aAbilities[64]=0 aAbilities[65]=0 aAbilities[66]=0 aAbilities[67]=0 aAbilities[68]=0 aAbilities[69]=0 aAbilities[70]=0 aAbilities[71]=0 aAbilities[72]=0 aAbilities[73]=0 aAbilities[74]=0 aAbilities[75]=0 aAbilities[76]=0 aAbilities[77]=0 aAbilities[78]=0 aAbilities[79]=0 aAbilities[80]=0 aAbilities[81]=0 aAbilities[82]=0 aAbilities[83]=0 aAbilities[84]=0 aAbilities[85]=0 aAbilities[86]=0 aAbilities[87]=0 aAbilities[88]=0 aProperties=0 aProperties[1]=0 aProperties[2]=0 aProperties[3]=0 aProperties[4]=0 aProperties[5]=0 aProperties[6]=0 aProperties[7]=0 aProperties[8]=0 iHPBonus=0 iDefenseBonus=0 iFlightFuel=0 iWillBonus=0 iLargeItems=0 iSmallItems=0 iMobilityBonus=0
XGTacticalGameCoreNativeBase.TInventory
- Default Values
iArmor=0 iPistol=0 arrLargeItems=0 arrLargeItems[1]=0 arrLargeItems[2]=0 arrLargeItems[3]=0 arrLargeItems[4]=0 arrLargeItems[5]=0 arrLargeItems[6]=0 arrLargeItems[7]=0 arrLargeItems[8]=0 arrLargeItems[9]=0 arrLargeItems[10]=0 arrLargeItems[11]=0 arrLargeItems[12]=0 arrLargeItems[13]=0 arrLargeItems[14]=0 arrLargeItems[15]=0 iNumLargeItems=0 arrSmallItems=0 arrSmallItems[1]=0 arrSmallItems[2]=0 arrSmallItems[3]=0 arrSmallItems[4]=0 arrSmallItems[5]=0 arrSmallItems[6]=0 arrSmallItems[7]=0 arrSmallItems[8]=0 arrSmallItems[9]=0 arrSmallItems[10]=0 arrSmallItems[11]=0 arrSmallItems[12]=0 arrSmallItems[13]=0 arrSmallItems[14]=0 arrSmallItems[15]=0 iNumSmallItems=0 arrCustomItems=0 arrCustomItems[1]=0 arrCustomItems[2]=0 arrCustomItems[3]=0 arrCustomItems[4]=0 arrCustomItems[5]=0 arrCustomItems[6]=0 arrCustomItems[7]=0 arrCustomItems[8]=0 arrCustomItems[9]=0 arrCustomItems[10]=0 arrCustomItems[11]=0 arrCustomItems[12]=0 arrCustomItems[13]=0 arrCustomItems[14]=0 arrCustomItems[15]=0 iNumCustomItems=0
Details
DefaultGameCore.ini
Armors=(iType=eItem_ArmorKevlar, ABILITIES[0]=eAbility_NONE,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_Grapple,Properties[1]=eAP_None,Properties[2]=eAP_None,Properties[3]=eAP_None, iHPBonus=1, iDefenseBonus=5, iFlightFuel=0, iWillBonus=0, iLargeItems=1, iSmallItems=1, iMobilityBonus=0) Armors=(iType=eItem_ArmorCarapace, ABILITIES[0]=eAbility_NONE,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_Grapple,Properties[1]=eAP_Psi,Properties[2]=eAP_PoisonImmunity,Properties[3]=eAP_None, iHPBonus=4, iDefenseBonus=5, iFlightFuel=0, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=0) Armors=(iType=eItem_ArmorSkeleton, ABILITIES[0]=eAbility_NONE,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_Grapple,Properties[1]=eAP_Psi,Properties[2]=eAP_PoisonImmunity,Properties[3]=eAP_None, iHPBonus=3, iDefenseBonus=10, iFlightFuel=0, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=3) Armors=(iType=eItem_ArmorTitan, ABILITIES[0]=eAbility_NONE,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_DualWield,Properties[1]=eAP_Psi,Properties[2]=eAP_PoisonImmunity,Properties[3]=eAP_None, iHPBonus=10, iDefenseBonus=5, iFlightFuel=0, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=0) Armors=(iType=eItem_ArmorArchangel, ABILITIES[0]=eAbility_Fly,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_AirEvade,Properties[1]=eAP_Psi,Properties[2]=eAP_BackpackLimited,Properties[3]=eAP_None, iHPBonus=8, iDefenseBonus=5, iFlightFuel=6, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=0) Armors=(iType=eItem_ArmorGhost, ABILITIES[0]=eAbility_Ghost,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_Grapple,Properties[1]=eAP_Psi,Properties[2]=eAP_PoisonImmunity,Properties[3]=eAP_None, iHPBonus=6, iDefenseBonus=20, iFlightFuel=0, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=3) Armors=(iType=eItem_ArmorPsi, ABILITIES[0]=eAbility_NONE,ABILITIES[1]=eAbility_NONE,ABILITIES[2]=eAbility_NONE,ABILITIES[3]=eAbility_NONE, Properties[0]=eAP_Grapple,Properties[1]=eAP_Psi,Properties[2]=eAP_PoisonImmunity,Properties[3]=eAP_None, iHPBonus=6, iDefenseBonus=10, iFlightFuel=0, iWillBonus=20, iLargeItems=1, iSmallItems=1, iMobilityBonus=2)
File Changes
Localization Changes
None should be required.
References
Referred to by this article:
- Item_loadouts_-_XCOM:EU_2012 : Related XCOM:EW 2013 information
- DefaultGameCore.ini_settings_-_XCOM:EU_2012
- Modding_Tools_-_XCOM:EU_2012
- XComGame.upk
- XGTacticalGameCoreData.EProperties_-_XCOM:EU_2012 : ?
That refer to this article:
For your convenience, here are the current subject Category Names and their primary locations.
- Category:XCOM
- Category:Game Files & Modding - XCOM:EU 2012
- Category:XCOM Modding
- Category:Enum Values XCOM Modding
- Category:Functions XCOM Modding
- Category:XGTacticalGameCoreData
- Category:XCOM Mods
Remove the above list once your article is complete. The actual category links appear below. Just remove those that do not apply: