Jump to content

TechTree rework mod to add as a 2nd Wave option


Dethraker

Recommended Posts

Yes, you need only notepad and script compiler to write your own script packages with UDK. Here are some explanations on setting up the environment: https://github.com/wghost/XCOM-Mutators/wiki/Setting-up-UDK-to-compile-XCOM-scripts

 

The basic idea is that references to another packages are just names with no actual code behind them. So you can create dummy XCOM classes with just an appropriate names and then reference these from inside your own packages: https://github.com/wghost/XCOM-Mutators/wiki/Dummy-classes-and-stub-functions

 

This will allow you to compile a new XCOM related class, but it won't allow you to get it into the game. Note that up to this point there are no mutators involved, just unrealscript classes.

 

Since old packages have no reference to your new packages, you can't simply call for your new class from inside any of the existing classes. Here's where mutators come in handy. Mutators in their current state for XCOM are just the bridge between old classes and newly created ones. For example, for random LZ mods to work, I needed to rearrange a lot of map objects after the map is loaded. So I ended up inserting a call into existing PostLevelLoaded method. If I could simply call for my new class, I would. But I couldn't so I created a bridge - mutator class that gets loaded and called and then calls for my new class to do the actual job.

 

One problem with mutators is that they are not supposed to act like this. So I couldn't use any of the standard methods and ended up re-purposing Mutate(string) method into a parser to do the things I need. If you decide to go this route, you'll need to modify this method even further to support your custom calls.

Edited by wghost81
Link to comment
Share on other sites

Quick Question, I've been assuming to this point that the int variable in the upk files(optional int iImage) is what calls the icon for the different techs, foundry projects, and items. Some of those images don't match up with the item, tech, project involved. Johnnylump informed me that the images are called in defaultcontent.ini as follows:

 

 

 

WeaponPackageInfo=(ItemType=eItem_AlienGrenade,ArchetypeName="Weapon_AlienGrenade.GD_AlienGrenade")
WeaponPackageInfo=(ItemType=eItem_MutonGrenade,ArchetypeName="Weapon_MutonGrenade.GD_MutonGrenade")
WeaponPackageInfo=(ItemType=eItem_PsiGrenade,ArchetypeName="Weapon_FlashBang.GD_FlashBang")
WeaponPackageInfo=(ItemType=eItem_FloaterGrenade,ArchetypeName="Weapon_FloaterGrenade.GD_FloaterGrenade")
WeaponPackageInfo=(ItemType=eItem_CyberdiscGrenade,ArchetypeName="Weapon_CyberdiscGrenade.GD_CyberdiscGrenade")
WeaponPackageInfo=(ItemType=eItem_SectopodClusterBomb,ArchetypeName="Weapon_SectopodClusterBomb.GD_SectopodClusterBomb")
WeaponPackageInfo=(ItemType=eItem_CyberdiscWeapon,ArchetypeName="Weapon_Cyberdisc.GD_Cyberdisc")
WeaponPackageInfo=(ItemType=eItem_ElderWeapon,ArchetypeName="Weapon_Elder.GD_Elder")
WeaponPackageInfo=(ItemType=eItem_ChryssalidClaw,ArchetypeName="Weapon_ChryssalidClaw.GD_ChryssalidClaw")
WeaponPackageInfo=(ItemType=eItem_AssaultRifle,ArchetypeName="Weapon_AssaultRifle.GD_AssaultRifle")
WeaponPackageInfo=(ItemType=eItem_DroneBeam,ArchetypeName="Weapon_DroneBeam.GD_DroneBeam")
WeaponPackageInfo=(ItemType=eItem_ArcThrower,ArchetypeName="Weapon_ArcThrower.GD_ArcThrower")
WeaponPackageInfo=(ItemType=eItem_FragGrenade,ArchetypeName="Weapon_FragGrenade.GD_FragGrenade")
WeaponPackageInfo=(ItemType=eItem_HeavyLaser,ArchetypeName="Weapon_HeavyLaser.GD_HeavyLaser")
WeaponPackageInfo=(ItemType=eItem_LMG,ArchetypeName="Weapon_HeavyMG.GD_HeavyMG")
WeaponPackageInfo=(ItemType=eItem_HeavyPlasma,ArchetypeName="Weapon_HeavyPlasma.GD_HeavyPlasma")
WeaponPackageInfo=(ItemType=eItem_HeavyPlasma_Floater,ArchetypeName="Weapon_HeavyPlasmaFloater.GD_HeavyPlasmaFloater")
WeaponPackageInfo=(ItemType=eItem_HeavyPlasma_Muton,ArchetypeName="Weapon_HeavyPlasmaMuton.GD_HeavyPlasmaMuton")
WeaponPackageInfo=(ItemType=eItem_LaserPistol,ArchetypeName="Weapon_LaserPistol.GD_LaserPistol")
WeaponPackageInfo=(ItemType=eItem_LaserAssaultGun,ArchetypeName="Weapon_LaserAssaultGun.GD_LaserAssaultGun")
WeaponPackageInfo=(ItemType=eItem_LaserAssaultRifle,ArchetypeName="Weapon_LaserRifle.GD_LaserRifle")
WeaponPackageInfo=(ItemType=eItem_LaserSniperRifle,ArchetypeName="Weapon_LaserSniperRifle.GD_LaserSniperRifle")
WeaponPackageInfo=(ItemType=eItem_MechtoidPlasmaCannon,ArchetypeName="Weapon_MechtoidPlasmaCannon.GD_MechtoidPlasmaCannon")
WeaponPackageInfo=(ItemType=eItem_SeekerPlasmaPistol,ArchetypeName="Weapon_SeekerPlasmaPistol.GD_SeekerPlasmaPistol")
WeaponPackageInfo=(ItemType=eItem_Medikit,ArchetypeName="Weapon_Medikit.GD_ITEMMedikit")
WeaponPackageInfo=(ItemType=eItem_Pistol,ArchetypeName="Weapon_Pistol.GD_Pistol")
WeaponPackageInfo=(ItemType=eItem_Plague,ArchetypeName="Weapon_Plague.GD_Plague")
WeaponPackageInfo=(ItemType=eItem_CombatStims,ArchetypeName="Weapon_CombatStim.GD_CombatStim")
WeaponPackageInfo=(ItemType=eItem_PlasmaPistol,ArchetypeName="Weapon_PlasmaPistol.GD_PlasmaPistol")
WeaponPackageInfo=(ItemType=eItem_PlasmaAssaultRifle,ArchetypeName="Weapon_PlasmaRifle.GD_PlasmaRifle")
WeaponPackageInfo=(ItemType=eItem_PlasmaAssaultRifle_Muton,ArchetypeName="Weapon_PlasmaRifleMuton.GD_PlasmaRifleMuton")
WeaponPackageInfo=(ItemType=eItem_AlloyCannon,ArchetypeName="Weapon_AlloyCannon.GD_AlloyCannon")
WeaponPackageInfo=(ItemType=eItem_PlasmaLightRifle,ArchetypeName="Weapon_PlasmaRifleLight.GD_PlasmaRifleLight")
WeaponPackageInfo=(ItemType=eItem_PlasmaLightRifle_ThinMan,ArchetypeName="Weapon_PlasmaRifle_ThinMan.GD_PlasmaRifleLight_ThinMan")
WeaponPackageInfo=(ItemType=eItem_PlasmaLightRifle_Floater,ArchetypeName="Weapon_PlasmaRifle_Floater.GD_PlasmaRifleLight_Floater")
WeaponPackageInfo=(ItemType=eItem_PlasmaLightRifle_Muton,ArchetypeName="Weapon_PlasmaRifleLt_Muton.GD_PlasmaRifleLight_Muton")
WeaponPackageInfo=(ItemType=eItem_PlasmaSniperRifle,ArchetypeName="Weapon_PlasmaSniperRifle.GD_PlasmaSniperRifle")
WeaponPackageInfo=(ItemType=eItem_RocketLauncher,ArchetypeName="Weapon_RocketLauncher.GD_RocketLauncher")
WeaponPackageInfo=(ItemType=eItem_BlasterLauncher,ArchetypeName="Weapon_BlasterLauncher.GD_BlasterLauncher")
WeaponPackageInfo=(ItemType=eItem_SectoidPlasmaPistol,ArchetypeName="Weapon_PlasmaPistolSectoid.GD_PlasmaPistolSectoid")
WeaponPackageInfo=(ItemType=eItem_SectopodChestCannon,ArchetypeName="Weapon_SectopodChestCannon.GD_SectopodChestCannon")
WeaponPackageInfo=(ItemType=eItem_SectopodCannon,ArchetypeName="Weapon_SectopodCannon.GD_SectopodCannon")
WeaponPackageInfo=(ItemType=eItem_ShivMinigun,ArchetypeName="Weapon_ShivMinigun.GD_Shiv_Minigun")
WeaponPackageInfo=(ItemType=eItem_ShivSentry,ArchetypeName="Weapon_ShivMinigun.GD_Shiv_Minigun")
WeaponPackageInfo=(ItemType=eItem_ShivLaser,ArchetypeName="Weapon_ShivLaser.GD_Shiv_Laser")
WeaponPackageInfo=(ItemType=eItem_ShivPlasma,ArchetypeName="Weapon_ShivPlasma.GD_Shiv_Plasma")
WeaponPackageInfo=(ItemType=eItem_Shotgun,ArchetypeName="Weapon_Shotgun.GD_Shotgun")
WeaponPackageInfo=(ItemType=eItem_SmokeGrenade,ArchetypeName="Weapon_SmokeGrenade.GD_SmokeGrenade")
WeaponPackageInfo=(ItemType=eItem_BattleScanner,ArchetypeName="Weapon_BattleScanner.GD_BattleScanner")
WeaponPackageInfo=(ItemType=eItem_SniperRifle,ArchetypeName="Weapon_SniperRifle.GD_SniperRifle")
WeaponPackageInfo=(ItemType=eItem_PsiAmp,ArchetypeName="Weapon_MindMerge.GD_MindMerge")
WeaponPackageInfo=(ItemType=eItem_Grapple,ArchetypeName="Weapon_Grapple.GD_Grapple")
WeaponPackageInfo=(ItemType=eItem_ZombieFist,ArchetypeName="Weapon_ZombieFist.GD_ZombieFist")
WeaponPackageInfo=(ItemType=eItem_SeekerTentacles,ArchetypeName="Weapon_SeekerTentacles.GD_SeekerTentacles")
WeaponPackageInfo=(ItemType=eItem_MutonBlade,ArchetypeName="Weapon_MutonBlade.GD_MutonBlade")
WeaponPackageInfo=(ItemType=eItem_FlashBang,ArchetypeName="Weapon_FlashBang.GD_FlashBang")
WeaponPackageInfo=(ItemType=eItem_OutsiderWeapon,ArchetypeName="Weapon_PlasmaRfLtOutsider.GD_PlasmaRifleLightOutsider")
WeaponPackageInfo=(ItemType=eItem_MimicBeacon,ArchetypeName="Weapon_Mimic_Beacon.GD_Mimic_Beacon")
WeaponPackageInfo=(ItemType=eItem_GasGrenade,ArchetypeName="Weapon_Gas_Grenade.GD_Gas_Grenade")
WeaponPackageInfo=(ItemType=eItem_GhostGrenade,ArchetypeName="Weapon_Ghost_Grenade.GD_Ghost_Grenade")
WeaponPackageInfo=(ItemType=eItem_NeedleGrenade,ArchetypeName="Weapon_Needle_Grenade.GD_Needle_Grenade")
WeaponPackageInfo=(ItemType=eItem_Chaingun,ArchetypeName="Weapon_MEC_Chaingun.GD_MEC_Chaingun")
WeaponPackageInfo=(ItemType=eItem_Railgun,ArchetypeName="Weapon_MEC_Railgun.GD_MEC_Railgun")
WeaponPackageInfo=(ItemType=eItem_ParticleBeam,ArchetypeName="Weapon_MEC_Particle_Beam.GD_MEC_Particle_Beam")
WeaponPackageInfo=(ItemType=eItem_MecFlameThrower,ArchetypeName="Weapon_MEC_Flamethrower.GD_MEC_Flamethrower")
WeaponPackageInfo=(ItemType=eItem_MecKineticArm,ArchetypeName="Weapon_MEC_Fist.GD_KineticStrike")
WeaponPackageInfo=(ItemType=eItem_MecProximityMineLauncher,ArchetypeName="Weapon_MEC_Launcher.GD_MEC_Proximity_Mine_Launcher")
WeaponPackageInfo=(ItemType=eItem_MecElectroPulse,ArchetypeName="Weapon_MEC_Electropulse.GD_ElectroPulse")
WeaponPackageInfo=(ItemType=eItem_MecGrenadeLauncher,ArchetypeName="Weapon_MEC_Launcher.GD_MEC_Frag_Grenade_Launcher")
WeaponPackageInfo=(ItemType=eItem_MecRestorativeMist,ArchetypeName="Weapon_MEC_RestorativeMist.GD_RestorativeMist")
WeaponPackageInfo=(ItemType=eItem_ExaltAssaultRifle,ArchetypeName="Weapon_ExaltAssaultRifle.GD_ExaltAssaultRifle")
WeaponPackageInfo=(ItemType=eItem_ExaltSniperRifle,ArchetypeName="Weapon_ExaltSniperRifle.GD_ExaltSniperRifle")
WeaponPackageInfo=(ItemType=eItem_ExaltLMG,ArchetypeName="Weapon_ExaltHeavyMG.GD_ExaltHeavyMG")
WeaponPackageInfo=(ItemType=eItem_ExaltLaserAssaultRifle,ArchetypeName="Weapon_ExaltLaserRifle.GD_ExaltLaserRifle")
WeaponPackageInfo=(ItemType=eItem_ExaltLaserSniperRifle,ArchetypeName="Weapon_ExaltLaserSniperRfl.GD_ExaltLaserSniperRifle")
WeaponPackageInfo=(ItemType=eItem_ExaltHeavyLaser,ArchetypeName="Weapon_ExaltHeavyLaser.GD_ExaltHeavyLaser")
WeaponPackageInfo=(ItemType=eItem_ExaltRocketLauncher,ArchetypeName="Weapon_ExaltRocketLauncher.GD_ExaltRocketLauncher")
;Shotguns
WeaponPackageInfo=(ItemType=eItem_BEGIN_WEAPONS,ArchetypeName="Weapon_LaserAssaultGun.GD_LaserAssaultGun")
WeaponPackageInfo=(ItemType=eItem_BEGIN_VEHICLES,ArchetypeName="Weapon_AlloyCannon.GD_AlloyCannon")
WeaponPackageInfo=(ItemType=eItem_END_VEHICLE_UPGRADES,ArchetypeName="Weapon_Shotgun.GD_Shotgun")
;MEC Weapons
; Laser Lance
WeaponPackageInfo=(ItemType=eItem_Railgun,ArchetypeName="Weapon_MEC_Railgun.GD_MEC_Railgun")
; Rail Gun
WeaponPackageInfo=(ItemType=eItem_XPACK_BEGIN_CORPSES,ArchetypeName="Weapon_MEC_Chaingun.GD_MEC_Chaingun")
; Pulse Lance
WeaponPackageInfo=(ItemType=eItem_XPACK_END_CORPSES,ArchetypeName="Weapon_MEC_Railgun.GD_MEC_Railgun")
;SHIV Laser
WeaponPackageInfo=(ItemType=eItem_BEGIN_CORPSES,ArchetypeName="Weapon_ShivLaser.GD_Shiv_Laser")
; Arc Laser
WeaponPackageInfo=(ItemType=eItem_END_INTERCEPTOR_CONSUMABLES,ArchetypeName="Weapon_ExaltLaserSniperRfl.GD_ExaltLaserSniperRifle")
;Carbine weapons
WeaponPackageInfo=(ItemType=eItem_SectopodArm,ArchetypeName="Weapon_ExaltAssaultRifle.GD_ExaltAssaultRifle")
WeaponPackageInfo=(ItemType=eItem_BEGIN_INTERCEPTOR_CONSUMABLES,ArchetypeName="Weapon_ExaltLaserRifle.GD_ExaltLaserRifle")
WeaponPackageInfo=(ItemType=eItem_SoldierNoWeapon,ArchetypeName="Weapon_AssaultRifle.GD_AssaultRifle")
WeaponPackageInfo=(ItemType=eItem_BEGIN_VEHICLE_UPGRADES,ArchetypeName="Weapon_LaserRifle.GD_LaserRifle")
;DM Rifle weapons
WeaponPackageInfo=(ItemType=eItem_MecArmor1_Kinetic,ArchetypeName="Weapon_ExaltSniperRifle.GD_ExaltSniperRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor1_Flamethrower,ArchetypeName="Weapon_ExaltLaserSniperRfl.GD_ExaltLaserSniperRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor2_Kinetic_Grenade,ArchetypeName="Weapon_SniperRifle.GD_SniperRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor2_Kinetic_Mist,ArchetypeName="Weapon_LaserSniperRifle.GD_LaserSniperRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor2_Flamethrower_Grenade,ArchetypeName="Weapon_PlasmaSniperRifle.GD_PlasmaSniperRifle")
;SMGs
WeaponPackageInfo=(ItemType=eItem_MecArmor2_Flamethrower_Mist,ArchetypeName="Weapon_ExaltAssaultRifle.GD_ExaltAssaultRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Kinetic_Grenade_Electro,ArchetypeName="Weapon_ExaltLaserRifle.GD_ExaltLaserRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Kinetic_Grenade_ProximityMine,ArchetypeName="Weapon_AssaultRifle.GD_AssaultRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Kinetic_Mist_Electro,ArchetypeName="Weapon_LaserRifle.GD_LaserRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Kinetic_Mist_ProximityMine,ArchetypeName="Weapon_PlasmaRifleLight.GD_PlasmaRifleLight")
;Machine Pistols
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Flamethrower_Grenade_Electro,ArchetypeName="Weapon_ExaltAssaultRifle.GD_ExaltAssaultRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Flamethrower_Grenade_ProximityMine,ArchetypeName="Weapon_ExaltLaserRifle.GD_ExaltLaserRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Flamethrower_Mist_Electro,ArchetypeName="Weapon_AssaultRifle.GD_AssaultRifle")
WeaponPackageInfo=(ItemType=eItem_MecArmor3_Flamethrower_Mist_ProximityMine,ArchetypeName="Weapon_LaserRifle.GD_LaserRifle")
WeaponPackageInfo=(ItemType=eItem_BEGIN_EXALT_COLLECTIBLES,ArchetypeName="Weapon_PlasmaRifleLight.GD_PlasmaRifleLight")
;Battle Rifles
WeaponPackageInfo=(ItemType=eItem_EXALTLoot1,ArchetypeName="Weapon_ExaltAssaultRifle.GD_ExaltAssaultRifle")
WeaponPackageInfo=(ItemType=eItem_EXALTLoot2,ArchetypeName="Weapon_ExaltLaserRifle.GD_ExaltLaserRifle")
WeaponPackageInfo=(ItemType=eItem_EXALTLoot3,ArchetypeName="Weapon_AssaultRifle.GD_AssaultRifle")
WeaponPackageInfo=(ItemType=eItem_BEGIN_EXALT_WEAPONS,ArchetypeName="Weapon_LaserRifle.GD_LaserRifle")
WeaponPackageInfo=(ItemType=eItem_END_EXALT_WEAPONS,ArchetypeName="Weapon_PlasmaRifle.GD_PlasmaRifle")
;LMGs
WeaponPackageInfo=(ItemType=eItem_BEGIN_MEC_ARMOR,ArchetypeName="Weapon_ExaltHeavyMG.GD_ExaltHeavyMG")
WeaponPackageInfo=(ItemType=eItem_END_MEC_ARMOR,ArchetypeName="Weapon_ExaltHeavyLaser.GD_ExaltHeavyLaser")
WeaponPackageInfo=(ItemType=eItem_CorpsePlaceholder2,ArchetypeName="Weapon_HeavyMG.GD_HeavyMG")
WeaponPackageInfo=(ItemType=eItem_END_CORPSES,ArchetypeName="Weapon_HeavyLaser.GD_HeavyLaser")
WeaponPackageInfo=(ItemType=eItem_BEGIN_CAPTIVES,ArchetypeName="Weapon_HeavyPlasma.GD_HeavyPlasma")

With this in mind does it mean that the number representation in each of the functions(BuildTechs, BuildItems, etc.) is not actually needed and I can simply change the eItem_variable inside the .ini file to resolve the icon issue? Or do I have to change the value inside the .upk as well as in the .ini?
Link to comment
Share on other sites

A while back we converted the inventory, tech, and foundry images to be more easily configurable (only in LW currently) via ini edits.

 

In vanilla all of the images are dynamically bound from unreal package images into GFX images at run-time, but the image names were all hard-coded into the unrealscript, in XComGame.upk in UIUtilities class.

 

All images are now configured in DefaultContent.ini using a repurposed multiplayer config variable (MultiplayerLoadoutSlots)

 

The tech images are now configured via -- iPointValue=2 means it's a tech image, iIconType is the tech project:

 

 

; tech images
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Xenobiology", iPointValue=2, iIconType=1)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArcThrower", iPointValue=2, iIconType=2)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_OutsiderShard", iPointValue=2, iIconType=3)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_MindShield", iPointValue=2, iIconType=4)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Firestorm", iPointValue=2, iIconType=5)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsySectoidCommander", iPointValue=2, iIconType=6)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_HyperwaveCommunication", iPointValue=2, iIconType=7)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PsiLink", iPointValue=2, iIconType=8)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienWeaponFragments", iPointValue=2, iIconType=9)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienMaterials", iPointValue=2, iIconType=10)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ExperimentalWarfare", iPointValue=2, iIconType=11)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Elerium", iPointValue=2, iIconType=12)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_MeldTech", iPointValue=2, iIconType=13)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorPsi", iPointValue=2, iIconType=14)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorCarapace", iPointValue=2, iIconType=15)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorSkeleton", iPointValue=2, iIconType=16)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorTitan", iPointValue=2, iIconType=17)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorGhost", iPointValue=2, iIconType=18)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorArchangel", iPointValue=2, iIconType=19)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_LaserPistol", iPointValue=2, iIconType=20)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PrecisionLasers", iPointValue=2, iIconType=21)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_LaserCannon", iPointValue=2, iIconType=22)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaPistol", iPointValue=2, iIconType=23)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaLightRifle", iPointValue=2, iIconType=24)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaRifle", iPointValue=2, iIconType=25)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaHeavy", iPointValue=2, iIconType=26)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaSniper", iPointValue=2, iIconType=27)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Gauss_Weapons", iPointValue=2, iIconType=28)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaCannon", iPointValue=2, iIconType=29)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_FusionLance", iPointValue=2, iIconType=30)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaShotgun", iPointValue=2, iIconType=31)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_UFONavigation", iPointValue=2, iIconType=32)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_UFOPower", iPointValue=2, iIconType=33)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_EMPCannon", iPointValue=2, iIconType=34)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateSectoid", iPointValue=2, iIconType=35)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateFloater", iPointValue=2, iIconType=36)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateMuton", iPointValue=2, iIconType=37)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateSectoidCommander", iPointValue=2, iIconType=38)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateBerserker", iPointValue=2, iIconType=39)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateThinman", iPointValue=2, iIconType=40)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateFloaterHeavy", iPointValue=2, iIconType=41)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateMutonElite", iPointValue=2, iIconType=42)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterrogateElder", iPointValue=2, iIconType=43)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsySectoid", iPointValue=2, iIconType=44)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyFloater", iPointValue=2, iIconType=45)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyThinman", iPointValue=2, iIconType=46)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyMuton", iPointValue=2, iIconType=47)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyCryssalid", iPointValue=2, iIconType=48)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ShipLaserCannon", iPointValue=2, iIconType=49)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyCyberdisc", iPointValue=2, iIconType=50)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyBerserker", iPointValue=2, iIconType=51)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyFloaterHeavy", iPointValue=2, iIconType=52)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyElite", iPointValue=2, iIconType=53)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyDrone", iPointValue=2, iIconType=54)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsySectopod", iPointValue=2, iIconType=55)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyElder", iPointValue=2, iIconType=56)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyMechtoid", iPointValue=2, iIconType=57)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsySeeker", iPointValue=2, iIconType=58)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_SatelliteAssistedTargeting", iPointValue=2, iIconType=59)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Alien_BioCybernetics", iPointValue=2, iIconType=60)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Scout", iPointValue=2, iIconType=61)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Destroyer", iPointValue=2, iIconType=62)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Abductor", iPointValue=2, iIconType=63)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Transport", iPointValue=2, iIconType=64)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Battleship", iPointValue=2, iIconType=65)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Overseer", iPointValue=2, iIconType=66)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Fighter", iPointValue=2, iIconType=67)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Raider", iPointValue=2, iIconType=68)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_Harvester", iPointValue=2, iIconType=69)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_TerrorShip", iPointValue=2, iIconType=70)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_UFO_Analysis_AssaultCarrier", iPointValue=2, iIconType=71)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Improved_Body_Armor", iPointValue=2, iIconType=72)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Improved_Combat_ExoSkeletons", iPointValue=2, iIconType=73)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Mobile_Combat_ExoSkeletons", iPointValue=2, iIconType=74)
MultiplayerLoadoutSlots=(strUnitName="LongWar.TechImages.TI_Heavy_Combat_ExoSkeletons", iPointValue=2, iIconType=75)
 
;unused for techs
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_CombatStims", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_DefenseMatrix", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienGrenade", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_HackDrone", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_MedikitI", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_UFOFlight", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AutopsyZombie", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienConstruction", iPointValue=2, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ChitinPlating", iPointValue=2, iIconType=99)

 

 

 

Foundry images are configured -- iPointValue=3 means it's a foundry image, iIconType is the associated foundry project:

 

 

; Foundry images
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_Enhanced_Ballistic_Weaponry", iPointValue=3, iIconType=1)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Grenade", iPointValue=3, iIconType=2)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Medikit2", iPointValue=3, iIconType=3)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArcThrower2", iPointValue=3, iIconType=4)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_InterceptorRepair", iPointValue=3, iIconType=5)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_LaserCannon", iPointValue=3, iIconType=6)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaCannon", iPointValue=3, iIconType=7)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_HealShiv", iPointValue=3, iIconType=8)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_DroneCapture", iPointValue=3, iIconType=9)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_LaserCooling", iPointValue=3, iIconType=10)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ArmorArchangel", iPointValue=3, iIconType=11)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_ArmoredFighters", iPointValue=3, iIconType=12)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Pistol1", iPointValue=3, iIconType=13)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Pistol2", iPointValue=3, iIconType=14)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Pistol3", iPointValue=3, iIconType=15)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ShivSuppression", iPointValue=3, iIconType=16)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_StealthSatellite", iPointValue=3, iIconType=17)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ScopeUpgrade", iPointValue=3, iIconType=18)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_JelliedElerium", iPointValue=3, iIconType=19)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_MECCloseCombat", iPointValue=3, iIconType=20)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AdvancedServomotors", iPointValue=3, iIconType=21)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_ShapedArmor", iPointValue=3, iIconType=22)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_SentinelModule", iPointValue=3, iIconType=23)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_TacticalRigging", iPointValue=3, iIconType=24)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_Alien_Metallurgy", iPointValue=3, iIconType=25)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_AircraftBoosters", iPointValue=3, iIconType=26)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_WingtipSparrow", iPointValue=3, iIconType=27)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_PenetratorWeapons", iPointValue=3, iIconType=28)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_SHIV_Defenses", iPointValue=3, iIconType=29)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_AdvancedSurgery", iPointValue=3, iIconType=30)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_ImprovedAvionics", iPointValue=3, iIconType=31)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_ImprovedCountermeasures", iPointValue=3, iIconType=32)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_EleriumAfterburners", iPointValue=3, iIconType=33)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_SuperCapacitors", iPointValue=3, iIconType=34)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_UFOTracking", iPointValue=3, iIconType=35)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_MEC_Warfare_Systems", iPointValue=3, iIconType=36)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_SuperSkyranger", iPointValue=3, iIconType=37)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_AlienNucleonics", iPointValue=3, iIconType=38)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_Improved_Salvage_Techniques", iPointValue=3, iIconType=39)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_New_Combat_Systems", iPointValue=3, iIconType=40)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_Psi_Warfare_Systems", iPointValue=3, iIconType=41)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_SecurityTraining_Laser", iPointValue=3, iIconType=42)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_SecurityTraining_Phalanx", iPointValue=3, iIconType=43)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PlasmaBlasterLauncher", iPointValue=3, iIconType=44)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_UFOScanners", iPointValue=3, iIconType=45)
MultiplayerLoadoutSlots=(strUnitName="LongWar.FoundryImages.IC_QuenchGuns_DRx3", iPointValue=3, iIconType=46)
 
 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienConstruction", iPointValue=3, iIconType=99)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Shiv", iPointValue=3, iIconType=99)

 

 

 

Both tech and foundry have some vanilla images which weren't used, hence the '99'. I kept them in the config file for easier reference.

 

Inventory images (used in both Engineering and Soldier Loadout) are configured -- iPointValue=0 means it's an item/inventory image, iIconType is the item enum:

 

 

MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseShotgun", iPointValue=0, iIconType=1) ; T4 Scatter Blaster 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Pistol", iPointValue=0, iIconType=2) ; T1 Pistol 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AssaultRifleModern", iPointValue=0, iIconType=3) ; T3 Gauss Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shotgun", iPointValue=0, iIconType=4) ; T1 Shotgun
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_LMG", iPointValue=0, iIconType=5) ; T1 SAW
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SniperRifle", iPointValue=0, iIconType=6) ; T3 Gauss Long Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_RocketLauncher", iPointValue=0, iIconType=7) ; T3 Recoilless Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_LaserPistol", iPointValue=0, iIconType=8) ; T2 Laser Pistol
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_LaserRifle", iPointValue=0, iIconType=9) ; T4 Pulse Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserShotgun", iPointValue=0, iIconType=10) ; T2 Scatter Laser
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_LaserHeavy", iPointValue=0, iIconType=11) ; T4 Pulse Autoblaster
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_LaserSniper", iPointValue=0, iIconType=12) ; T4 Pulse Sniper Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaPistol", iPointValue=0, iIconType=13) ; T5 Plasma Pistol
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaRifleLight", iPointValue=0, iIconType=14) ; T5 Plasma Carbine
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaRifle", iPointValue=0, iIconType=15) ; T5 Plasma Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaShotgun", iPointValue=0, iIconType=16) ; T3 Alloy Cannon
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaHeavy", iPointValue=0, iIconType=17) ; T5 Plasma Novagun
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaSniper", iPointValue=0, iIconType=18) ; T5 Plasma Sniper Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaBlasterLauncher", iPointValue=0, iIconType=19)   ; T5 Blaster Launcher
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecKineticStrike",  iPointValue=0, iIconType=22) ; MEC Kinetic Strike Module
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecFlameThrower",  iPointValue=0, iIconType=23)   ; MEC Flamethrower
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecGrenadeLauncher",  iPointValue=0, iIconType=24)   ; MEC Grenade Launcher
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecRestorativeMist",  iPointValue=0, iIconType=25)   ; MEC Restorative Mist
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecElectroPulse",  iPointValue=0, iIconType=26)   ; MEC Electropulse
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecPMineLauncher",  iPointValue=0, iIconType=27) ; MEC Proximity Mine Launcher
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MECChainGun",  iPointValue=0, iIconType=28)   ; T1 MEC Minigun 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecLaserLance",  iPointValue=0, iIconType=29)   ; T2 MEC Laser Lance
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MECParticleCannon", iPointValue=0, iIconType=30)  ; T5 MEC Particle Cannon
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AlloyJacketedAmmo",  iPointValue=0, iIconType=31)   ; Alloy Jacketed Rounds
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticCarbine",  iPointValue=0, iIconType=32) ; T1 Assault Carbine
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MarksmansScope",  iPointValue=0, iIconType=34)   ; Marksman's Scope
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_GrappleHook",  iPointValue=0, iIconType=38)   ; Grapple
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_EnhancedBeamOptics",  iPointValue=0, iIconType=40)   ; Enhanced Beam Optics
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaPistol",  iPointValue=0, iIconType=41)   ; SectoidPlasmaPistol
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaRifleLight",  iPointValue=0, iIconType=42) ; PlasmaLightRifle_ThinMan
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaRifle",  iPointValue=0, iIconType=45)   ; PlasmaAssaultRifle_Muton
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_PlasmaHeavy",  iPointValue=0, iIconType=47)   ; HeavyPlasma_Muton
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaStellerator",  iPointValue=0, iIconType=48)   ; Plasma Stellerator
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussCarbine",  iPointValue=0, iIconType=53)   ; T3 Gauss Carbine
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorKevlar",  iPointValue=0, iIconType=57)   ; Tac Vest 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorSkeleton",  iPointValue=0, iIconType=58)   ; Banshee Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_TacArmor",  iPointValue=0, iIconType=59)   ; Tac Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorCarapace",  iPointValue=0, iIconType=60)   ; Carapace Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_CorsairArmor2",  iPointValue=0, iIconType=61)   ; Corsair Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorTitan",  iPointValue=0, iIconType=62)   ; Titan Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ArchangelArmor",  iPointValue=0, iIconType=63)   ; Archangel Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorGhost",  iPointValue=0, iIconType=64)   ; Shadow Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArmorPsi",  iPointValue=0, iIconType=65)   ; Vortex Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_SeraphimArmor",  iPointValue=0, iIconType=67)   ; Seraph Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AuroraArmor",  iPointValue=0, iIconType=68)   ; Aurora Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Medikit",  iPointValue=0, iIconType=69)   ; Medikit
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_CombatStims",  iPointValue=0, iIconType=70)   ; Combat Stims
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MindShield",  iPointValue=0, iIconType=71)   ; Mind Shield
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ChitinPlating",  iPointValue=0, iIconType=72)   ; Chitin Plating
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ArcThrower",  iPointValue=0, iIconType=73)   ; Arc Thrower
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Scope",  iPointValue=0, iIconType=74)   ; SCOPE
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_NanoFabricVest",  iPointValue=0, iIconType=75)   ; Alloy Plating
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_RespiratorImplant", iPointValue=0, iIconType=76)   ; Respirator Implant
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Rocket",  iPointValue=0, iIconType=77)   ; Rocket
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_DepletedEleriumAmmo",  iPointValue=0, iIconType=78)   ; Reaper Pack
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserSight",  iPointValue=0, iIconType=79)   ; Laser Sight
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_HiCapMags",  iPointValue=0, iIconType=80)   ; Hi Cap Mags
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_FragGrenade",  iPointValue=0, iIconType=81)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SmokeGrenade",  iPointValue=0, iIconType=82)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Flashbang",  iPointValue=0, iIconType=83)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AlienGrenade",  iPointValue=0, iIconType=84)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_GhostGrenade",  iPointValue=0, iIconType=85)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_GasGrenade",  iPointValue=0, iIconType=86)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_NeedleGrenade",  iPointValue=0, iIconType=87)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MimicBeacon",  iPointValue=0, iIconType=88)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_RocketShredder",  iPointValue=0, iIconType=89)   ; Shredder Rocket
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecBattleComputer",  iPointValue=0, iIconType=90)   ; Battle Computer (MEC) THIS IS FINAL USE OF THIS VANILLA IMAGE
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AlienGrenade",  iPointValue=0, iIconType=91)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AlienGrenade",  iPointValue=0, iIconType=92)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AlienGrenade",  iPointValue=0, iIconType=93)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ChameleonSuit",  iPointValue=0, iIconType=94)   ; Chameleon Suit
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_CeramicPlating2",  iPointValue=0, iIconType=95)   ; Ceramic Plates
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PsiFlashbang",  iPointValue=0, iIconType=96)   ; Psi Grenade 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_BattleScanner",  iPointValue=0, iIconType=97)   ; Battle Scanner
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AlienTrophies",  iPointValue=0, iIconType=98)   ; Alien Trophy
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaShotgun",  iPointValue=0, iIconType=99)   ; T5 Reflex Cannon
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv1",  iPointValue=0, iIconType=100)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv2",  iPointValue=0, iIconType=101)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv3",  iPointValue=0, iIconType=102)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Interceptor",  iPointValue=0, iIconType=103)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Firestorm",  iPointValue=0, iIconType=104) ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Satellite",  iPointValue=0, iIconType=106)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_HEATAmmo",  iPointValue=0, iIconType=107) ; HEAT Ammo (SHIV)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_HoloTargeter2",  iPointValue=0, iIconType=108) ; Holo-Targeter (M/S)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SHIVGattlingGun",  iPointValue=0, iIconType=109) ; T1 SHIV Autocannon
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivMinigun",  iPointValue=0, iIconType=110)   ; T3 SHIV Sentry
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SHIVLaserCannon",  iPointValue=0, iIconType=111)   ; T2 SHIV Laser
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivPlasma",  iPointValue=0, iIconType=112)   ; T5 SHIV Plasma
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv1",  iPointValue=0, iIconType=113)   ; SHIV Tread Deck 1
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv2",  iPointValue=0, iIconType=114)   ; SHIV Tread Deck 2
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv3",  iPointValue=0, iIconType=115)   ; SHIV Tread Deck 3
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_StingrayMissile",  iPointValue=0, iIconType=116)   ; Stingray Missiles
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorGunPod",  iPointValue=0, iIconType=117)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorMissilePod",iPointValue=0, iIconType=118)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorLaserCannon",iPointValue=0, iIconType=119)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorPlasmaCannon",iPointValue=0, iIconType=120) ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_EMPCannon",  iPointValue=0, iIconType=121)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorFusionLance",iPointValue=0, iIconType=122)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_DrumMags",  iPointValue=0, iIconType=123) ; Drum Mags
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivSmartshellPod",  iPointValue=0, iIconType=124)   ; Smartshell Pods (SHIV)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_DefenseMatrix",  iPointValue=0, iIconType=125)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_UFOTracking",  iPointValue=0, iIconType=126)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SatelliteTargeting",  iPointValue=0, iIconType=127)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivSupercoolers",  iPointValue=0, iIconType=128)   ; Weapon Supercoolers (SHIV)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Thumper",  iPointValue=0, iIconType=129) ; The Thumper (MEC)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivAutosentryTurret",  iPointValue=0, iIconType=130) ; AutoSentry Turret (SHIV)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivAdaptiveTrackingPod",  iPointValue=0, iIconType=131)   ; Adaptive Tracking Pods (SHIV)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_SHIVCoreArmoring",  iPointValue=0, iIconType=132) ; Core Armoring (SHIV)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivDamageControlPod",  iPointValue=0, iIconType=133) ; Damage Control Pod (SHIV)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Sectoid",  iPointValue=0, iIconType=134)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_SectoidCommander",  iPointValue=0, iIconType=135)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Floater",  iPointValue=0, iIconType=136)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_FloaterHeavy",  iPointValue=0, iIconType=137)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_ThinMan",  iPointValue=0, iIconType=138)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Muton",  iPointValue=0, iIconType=139)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_MutonElite",  iPointValue=0, iIconType=140)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Berserker",  iPointValue=0, iIconType=141)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Cyberdisc",  iPointValue=0, iIconType=142)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Elder",  iPointValue=0, iIconType=143)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Cryssalid",  iPointValue=0, iIconType=144)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec2", iPointValue=0, iIconType=145)   ; MEC-3
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Sectopod",  iPointValue=0, iIconType=146)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Drone",  iPointValue=0, iIconType=147)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec5",  iPointValue=0, iIconType=148) ; MEC-5
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShivLaser",  iPointValue=0, iIconType=149)   ; T2 Superheavy Laser (SHIV)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_Sectoid",  iPointValue=0, iIconType=150)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_SectoidCommander",  iPointValue=0, iIconType=151)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_Floater",  iPointValue=0, iIconType=152)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_FloaterHeavy",  iPointValue=0, iIconType=153)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_ThinMan",  iPointValue=0, iIconType=154)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_Muton",  iPointValue=0, iIconType=155)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_MutonElite",  iPointValue=0, iIconType=156)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_Berserker",  iPointValue=0, iIconType=157)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CaptiveIcons.Captive_Elder",  iPointValue=0, iIconType=158)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PhalanxArmor",  iPointValue=0, iIconType=159)   ; Phalanx Armor (light)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AegisArmor",  iPointValue=0, iIconType=160)   ; Aegis Armor (light)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_Elerium",  iPointValue=0, iIconType=161)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_AlienMaterials",  iPointValue=0, iIconType=162)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_AlienWeaponFragments",  iPointValue=0, iIconType=163)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Meld",  iPointValue=0, iIconType=164)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienEntertainment",  iPointValue=0, iIconType=165)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienFood",  iPointValue=0, iIconType=166)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_StasisTank",  iPointValue=0, iIconType=167)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_UFONav",  iPointValue=0, iIconType=168)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienSurgery",  iPointValue=0, iIconType=169)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_UFOPower",  iPointValue=0, iIconType=170)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_Hyperwave",  iPointValue=0, iIconType=171)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienEntertainmentDamaged",iPointValue=0, iIconType=172)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienFoodDamaged",  iPointValue=0, iIconType=173)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_StasisTankDamaged",  iPointValue=0, iIconType=174)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_UFONavDamaged",  iPointValue=0, iIconType=175)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_AlienSurgeryDamaged",  iPointValue=0, iIconType=176)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_UFOPowerDamaged",  iPointValue=0, iIconType=177)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_FuelCell",  iPointValue=0, iIconType=178)   ; Fuel Cell
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InterceptorImages.Inv_InterceptorFusionLance",iPointValue=0, iIconType=179)   ; UFO Fusion Launcher
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ScienceIcons.IC_PsiLink",  iPointValue=0, iIconType=180)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_ExaltIntel",  iPointValue=0, iIconType=181)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_KestrelArmor",  iPointValue=0, iIconType=182)   ; Kestrel Armor
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.ArtifactIcons.Item_BaseShard",  iPointValue=0, iIconType=183)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_SkeletonKey",  iPointValue=0, iIconType=184)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MECRailGun",  iPointValue=0, iIconType=186)   ; T3 Rail Gun(MEC)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Mechtoid",  iPointValue=0, iIconType=187)   ; 
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.CorpseIcons.Corpse_Seeker",  iPointValue=0, iIconType=188)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AlloyCarbidePlating",  iPointValue=0, iIconType=189)   ; Alloy Carbide Plating (M/S)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_MecPulseLance",  iPointValue=0, iIconType=190)   ; T4 Pulse Lance (MEC)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec6",  iPointValue=0, iIconType=191)   ; MEC-6
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_MecCivvies",  iPointValue=0, iIconType=192)   ; 
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec1",  iPointValue=0, iIconType=193)   ; MEC-1
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec4",  iPointValue=0, iIconType=194)   ; MEC-2
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec3",  iPointValue=0, iIconType=195)   ; MEC-4
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_AlloyBipod",  iPointValue=0, iIconType=196)   ; Alloy Bipod
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BreachingAmmo",  iPointValue=0, iIconType=197)   ; Breaching Ammo
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ArmorPenetratingAmmo",  iPointValue=0, iIconType=198)   ; Armor Piercing Ammo
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Autoloader",  iPointValue=0, iIconType=199)   ; Advanced Suppression Module
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ImpactVest",  iPointValue=0, iIconType=200)   ; Impact Vest
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_TacticalSensor",  iPointValue=0, iIconType=201) ; Tactical Sensors (MEC)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_WalkerGear2",  iPointValue=0, iIconType=202) ; Walker Gear
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_NeuralGunlink",  iPointValue=0, iIconType=203)   ; Neural Gunlink
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ShredderAmmo",  iPointValue=0, iIconType=204)   ; Shredder Ammo
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PsiShield",  iPointValue=0, iIconType=205) ; Psi Screen
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv1",  iPointValue=0, iIconType=206)   ; Rebuild SHIV1
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv2",  iPointValue=0, iIconType=207) ; Rebuild SHIV2
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_Shiv3",  iPointValue=0, iIconType=208)   ; Rebuild SHIV3
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_IlluminatorGunsight",  iPointValue=0, iIconType=209)   ; Illuminator Gunsight
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Mec7",  iPointValue=0, iIconType=210)   ; MEC-7
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_IncineratorModule",  iPointValue=0, iIconType=211) ; Incinerator Module (M/S)
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltAssaultRifle",  iPointValue=0, iIconType=212)   ; T1 Assault Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltSniperRifle",  iPointValue=0, iIconType=213)   ; T1 Sniper Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltHeavyMG",  iPointValue=0, iIconType=214)   ; T1 SAW
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltLaserAssaultRifle", iPointValue=0, iIconType=215) ; T2 Laser Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltLaserSniperRifle",  iPointValue=0, iIconType=216) ; T2 Laser Sniper Rifle
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltLaserHeavyMG",  iPointValue=0, iIconType=217)   ; T2 Autolaser
MultiplayerLoadoutSlots=(strUnitName="UILibrary_StrategyImages.InventoryIcons.Inv_ExaltRocketLauncher",  iPointValue=0, iIconType=218)   ; T1 Rocket Launcher
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_TargetingModule",  iPointValue=0, iIconType=219) ; Targeting Module
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_ReinforcedArmor",  iPointValue=0, iIconType=220)   ; Reinforced Armor
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_EleriumTurbos",  iPointValue=0, iIconType=221) ; Elerium Turbos (M/S)
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_SmartgunKit",  iPointValue=0, iIconType=222)   ; Motion Tracker
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_NeuralGunlink",  iPointValue=0, iIconType=223)   ; Cognitive Enhancer
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Neurostabilizer",  iPointValue=0, iIconType=224)   ; Neuroregulator
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_FlakAmmo",  iPointValue=0, iIconType=225) ; Flak Ammo
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticMarksman",  iPointValue=0, iIconType=226)   ; T1 Marksman's Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserMarksman",  iPointValue=0, iIconType=227)   ; T2 Laser Strike Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussMarksman",  iPointValue=0, iIconType=228)   ; T3 Alloy Strike Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseMarksman",  iPointValue=0, iIconType=229) ; T4 Blaster Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaMarksman",  iPointValue=0, iIconType=230) ; T5 Reflex Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticSMG",  iPointValue=0, iIconType=231)   ; T1 SMG
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserSMG",  iPointValue=0, iIconType=232)   ; T2 Laser Shatterray
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussSMG",  iPointValue=0, iIconType=233)   ; T3 Gauss Stuttergun
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseSMG",  iPointValue=0, iIconType=234)   ; T4 Pulse Stengun
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaSMG2",  iPointValue=0, iIconType=235)   ; T5 Plasma Stormgun
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticMachinePistol",  iPointValue=0, iIconType=236)   ; T1 Machine Pistol
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserMachinePistol",  iPointValue=0, iIconType=237)   ; T2 Heater
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussMachinePistol",  iPointValue=0, iIconType=238)   ; T3 Gauss AutoPistol
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseMachinePistol",  iPointValue=0, iIconType=239)   ; T4 Blaster
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaMachinePistol",  iPointValue=0, iIconType=240)   ; T5 Plasma Mauler
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticBattleRifle",  iPointValue=0, iIconType=241)   ; T1 Battle Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserBattleRifle",  iPointValue=0, iIconType=242) ; T2 Heavy Laser Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussBattleRifle",  iPointValue=0, iIconType=243)   ; T3 Heavy Gauss Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseBattleRifle",  iPointValue=0, iIconType=244)   ; T4 Heavy Pulse Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaBattlerifle",  iPointValue=0, iIconType=245)   ; T5 Heavy Plasma Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_BallisticLMG",  iPointValue=0, iIconType=246) ; T1 LMG
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserLMG",  iPointValue=0, iIconType=247)   ; T2 Gatling Laser
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_GaussLMG",  iPointValue=0, iIconType=248)   ; T3 Gauss Machine Gun
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseLMG",  iPointValue=0, iIconType=249)   ; T4 Gatling Pulser
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PlasmaLMG",  iPointValue=0, iIconType=250)   ; T5 Plasma Dragon
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_LaserCarbine",  iPointValue=0, iIconType=251) ; T2 Laser Carbine
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_PulseCarbine",  iPointValue=0, iIconType=252)   ; T4 Pulse Carbine
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_Arcrifle",  iPointValue=0, iIconType=253)   ; T2 Arc Rifle
MultiplayerLoadoutSlots=(strUnitName="LongWar.InventoryImages.Inv_SawedOffShotgun",  iPointValue=0, iIconType=254)   ; T1 Sawed-off Shotgun

 

 

 

------------------------

 

All of these config settings are a mixture of vanilla images and LW custom images.

 

The vanilla images are in the UICollection_Strategy_SF.upk. These are the ones references via e.g. "UILibrary_StrategyImages.InventoryIcons.Inv_Shiv3". Because the package is seek-free, the package name doesn't have to be prefixed. This image is in the "UILibrary_StrategyImages/InventoryIcons" folder, with the filename "Inv_Shiv3"

 

The LW images are in the LongWar.upk package we created using UDK. We didn't cook this package, let alone make it seek-free, so the package name has to be prefixed to the image string, e.g. "LongWar.InventoryImages.Inv_PlasmaLMG". This image is in the LongWar.upk package, in the InventoryImages folder, with the filename Inv_PlasmaLMG.

 

Note that this means that it's possible to load your own images into UDK and create another new package, and these images can be configured to be displayed from the custom package file.

Link to comment
Share on other sites

Related (and i hope you won't mind if i use this opportunity to mention this to Amineri, Dethraker)...

 

Seeing how easy it now is to simply create new UPK archives of custom & validated images while making them available to any game process and/or GFX functions, i've always wondered if an indirect code (function) could be used to discard the normal TexMod methods altogether.

We'd just have to supply alternate textures (as usual) but instead of using an injector of hash-tagged components -- we could package anything into some personal UPK and let the code handle various run-time switching of memory slots to dispatch such replacement items.

 

Considerably making the players lives easier via a smooth process operating "invisibly" that integrates these texturing switchs without any other pre-load program to use.

 

Possible?

Link to comment
Share on other sites

Thanks so much Amineri! Wish I would have known this before spending time hunting for the related images inside the upk files. This will speed things up considerably though, that's for sure.

 

And I don't mind one bit, we're all after the same things here, figuring out how to modify a game we already love into something we can enjoy even longer(and others too if they like our modifications).

Link to comment
Share on other sites

 

i've always wondered if an indirect code (function) could be used to discard the normal TexMod methods altogether.

 

Long answer incoming ...

 

I did do a little bit of experimenting with this, and had some limited success, but there were some issues I was unable to resolve.
The closest I got to having it working had the following flaws :
- All items sharing the same model would share the same texture -- even if they were different instances of the same model (e.g. Carbine and Assault Rifle)
- Worse, the texture swaps worked in the strategy game display, but not in the tactical game
The way I tried to go about this was to dynamically create a new MIC (material instance constant) based on the original one, and then to change a texture. During testing I tried to do this only for weapons, with the "hook" in XComUnitPawn.AttachItem. I created a helper function out of XComUnitPawn.DebugIK. In the hook I pass the MeshComponent and the index to a ini reference to utilize.
The helper function DebugIK was a bit complex, and didn't completely work properly :

simulated function DebugIK(MeshComponent kCanvas, int kCheatManager)
{
    local int vScreenPos;
    local MaterialInterface vLeftHandIKLoc;
    local string activePrefix;
    local name IKSocketName;
    local MaterialInstanceConstant PrimaryWeaponMeshComp[3];
 
    // End:0x6B1
    if(kCanvas != none)
    {
        vScreenPos = 0;
        J0x1B:
        // End:0x6B1 [Loop If]
        if(vScreenPos < kCanvas.GetNumElements())
        {
            PrimaryWeaponMeshComp[0] = MaterialInstanceConstant(kCanvas.GetMaterial(vScreenPos));
            // End:0x6A3
            if(PrimaryWeaponMeshComp[0] != none)
            {
                // End:0x17A
                if(InStr(string(PrimaryWeaponMeshComp[0].Name), "MaterialInstanceConstant") != -1)
                {
                    PrimaryWeaponMeshComp[1] = new (self) class'MaterialInstanceConstant';
                    PrimaryWeaponMeshComp[1].SetParent(PrimaryWeaponMeshComp[0]);
                    kCanvas.SetMaterial(vScreenPos, PrimaryWeaponMeshComp[1]);
                    PrimaryWeaponMeshComp[0] = PrimaryWeaponMeshComp[1];
                }
                vLeftHandIKLoc = PrimaryWeaponMeshComp[0].Parent;
                J0x1A5:
                // End:0x22F [Loop If]
                if(!vLeftHandIKLoc.IsA('Material'))
                {
                    PrimaryWeaponMeshComp[2] = MaterialInstanceConstant(ParentMat);
                    // End:0x229
                    if(PrimaryWeaponMeshComp[2] != none)
                    {
                        vLeftHandIKLoc = PrimaryWeaponMeshComp[2].Parent;
                    }
                    // End:0x22C
                    else
                    {
                        // [Explicit Break]
                        goto J0x22F;
                    }
                    J0x22F:
                    // [Loop Continue]
                    goto J0x1A5;
                }
                IKSocketName = vLeftHandIKLoc.Name;
                switch(IKSocketName)
                {
                    // End:0x276
                    case 'CHH_Hair':
                    // End:0x293
                    case 'CHH_HairMask':
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0x2B0
                    case 'CHH_SkinCustomizable':
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0x2BC
                    case 'CHH_SkinCustomizableBody':
                    // End:0x2D9
                    case 'CHH_SkinCustomizableBody_MeldVeins':
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0x2F6
                    case 'CHH_WeaponKits':
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0x302
                    case 'CHH_MECs':
                    // End:0x30E
                    case 'CHH_Soldiers':
                    // End:0x31A
                    case 'WPN_LaserWeapons':
                    // End:0x379
                    case 'WPN_PlasmaWeapons':
                        // End:0x376
                        if(class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].iPointValue != 8)
                        {
                            PrimaryWeaponMeshComp[0] = none;
                        }
                        // End:0x495
                        break;
                    // End:0x3DE
                    case name("WPN_Objects"):
                        // End:0x3DB
                        if(class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].iPointValue != 8)
                        {
                            PrimaryWeaponMeshComp[0] = none;
                        }
                        // End:0x495
                        break;
                    // End:0x442
                    case name("CHA_Aliens"):
                        // End:0x43F
                        if(class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].iPointValue != 9)
                        {
                            PrimaryWeaponMeshComp[0] = none;
                        }
                        // End:0x495
                        break;
                    // End:0x464
                    case name("VEH_Treads"):
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0x481
                    case 'CHH_CiviliansCustomizable':
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                    // End:0xFFFF
                    default:
                        PrimaryWeaponMeshComp[0] = none;
                        // End:0x495
                        break;
                }
                // End:0x6A3
                if(PrimaryWeaponMeshComp[0] != none)
                {
                    activePrefix = class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].strUnitName;
                    // End:0x54E
                    if(activePrefix != "")
                    {
                        PrimaryWeaponMeshComp[0].SetTextureParameterValue(name("Diffuse"), Texture2D(FindObject(activePrefix, class'Texture2D')));
                    }
                    activePrefix = class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].strClassName;
                    // End:0x5F4
                    if(activePrefix != "")
                    {
                        PrimaryWeaponMeshComp[0].SetTextureParameterValue(name("Normal"), Texture2D(FindObject(activePrefix, class'Texture2D')));
                    }
                    activePrefix = class'XComOnlineProfileSettings'.default.MultiplayerLoadoutSlots[kCheatManager].strArmorName;
                    // End:0x6A3
                    if(activePrefix != "")
                    {
                        PrimaryWeaponMeshComp[0].SetTextureParameterValue(name("Spc_Ems_Ref_Opc"), Texture2D(FindObject(activePrefix, class'Texture2D')));
                    }
                }
            }
            ++ vScreenPos;
            // [Loop Continue]
            goto J0x1B;
        }
    }
    return;                                                                
}

I based this heavily on the function XComHumanPawn.UpdateMeshMaterials. Of course, since that function is in XComHumanPawn, it only applies to XCOM soldiers (incl. MECs) -- but not aliens or SHIVs. In most cases, UpdateMeshMaterials is changing vector quantities (colors) for tinting purposes.
Also, many of the material types have only stubs -- I'd only done work to allow swapping of weapons and aliens.
-------------------------
Unfortunately, the only case where I've been able to successfully load textures from LongWar.upk and have them applied to 3D models is for the armor flags. This also has a cost because I didn't configure those flags to use LOD (level of detail), so they are always displayed at full resolution regardless of graphics settings. This probably wouldn't be workable as a general strategy.
Details on LOD issues:

For the most part, LOD images are cooked and put into the tfc (texture file cache) file. As of yet I've been unable to either cook and set up a usable tfc with UDK (when modding), or to set up LOD levels but not put them into a tfc -- that is, to leave the multiple textures within the upk file.

The flag texture was configured in a particular way to allow run-time code replacement. The key unreal codeline here is :
    MIC.SetTextureParameterValue(name("FlagTex"), Texture2D(FindObject(("LongWar.Flags_Armor.Flags" $ string(int(Flag.U))) $ "_DIF", class'Texture2D')));
There are two key requirements to do this :
1) The MIC (material instance constant) textures must be set as a particular type of texture
2) There must be a parameter name set for these textures
The first is true for most 3D object materials in XCOM, but the second is only sort of true. The way it's all set up is also a bit convoluted.
Most items use a "Master Material" within which textures are swapped.
- For example, weapons might use CHH_Soldiers (for regular ballistic, laser, plasma) or WPN_Objects (for SHIV weapons and EXALT weapons). Note that this is why color customizing applies to the first category of weapons and not the second.
- Soldier armors also use CHH_Soldiers as the Master Material.
- Alien units, from what I've looked at, use CHA_Aliens as the Master Material
Different Master Materials are set up differently.
For example, CHH_Soldiers is set up with 4 MaterialExpressionTextureSampleParameter2D variables :
- ParameterName=Reflect
- ParameterName=Diffuse
- ParameterName=Normal
- ParameterName=Spc_Ems_Ref_Opc
However CHA_Aliens has :
- ParameterName=Reflect
- ParameterName=Detail_Normal
- ParameterName=Diffuse
- ParameterName=Normal
- ParameterName=Spc_Ems_Ref_Skn
SHIV and EXALT weapons using WPN_Objects Master Material have :
- ParameterName=Diffuse
- ParameterName=Spc_Ems_Ref
- ParameterName=Normal
Soldier heads, on the other hand, use CHH_SkinCustomizable as their Master Material, which has it's own set of texture parameters.
In general, you can find the Master Material by decompressing the relevant upk file, opening it in UE Explorer, and then looking in GEN_MaterialParents/MasterMaterials. Note that Exalt weapons have both CHH_Soldiers and WPN_Objects in this location, but it's WPN_Objects which is used. In WP_ExaltWeapons_MOD/Materials/ExaltAssaultRifle, for example, is Parent=Material'GEN_MaterialParents.Master_Materials.WPN_Objects', which defines which Master Material is used as the parent material.
However, as in my above test code, the following line will replace a texture in a weapon MIC :
PrimaryWeaponMeshComp[0].SetTextureParameterValue(name("Diffuse"), Texture2D(FindObject(activePrefix, class'Texture2D')));
In this case the PrimaryWeaponMeshComp[0] holds the MIC. Previous code had already pulled the name of the texture string from an ini file and put it into activePrefix.
However, it didn't apply in the tactical game during my testing -- perhaps because the call hook in XComUnitPawn.AttachWeapon was happening before the XComHumanPawn.UpdateAllMeshMaterials call, which might have been overwriting it.
----------------
So, the short answer is that in theory it should be possible to swap any texture on any 3D model at run-time with a UDK-created asset.
Probably the "correct" place to put this hook would be in XComUnitPawn.UpdateAllMeshMaterials. Currently this method only does the following :
simulated function UpdateAllMeshMaterials()
{
    // End:0x3E
    if((m_kGameUnit != none) && m_kGameUnit.m_bHiding)
    {
        SetGhostFX(true);
    }
    //return;    
}
The version in XComHumanPawn calls UpdateMeshMaterials for a variety of different components. XComHumanPawn.UpdateMeshMaterials is much more sophisticated. In particular it duplicates the base MIC
newMIC = new (self) class'MaterialInstanceConstant';
newMIC.SetParent(MIC);
MeshComp.SetMaterial(Idx, newMIC);
I believe that this is done so that any tints applied are applied only to the particular unit (e.g. armor tints aren't common across all soldiers).
If basic texture swapping for all instances is the goal, the this MIC duplication shouldn't be necessary. However, my earlier research was shooting more for applying different textures as customizations. For example, applying different textures to aliens based upon their leader/navigator level, or applying different textures to different weapons sharing the same model based on item enum value.

 

Link to comment
Share on other sites

  • 2 weeks later...

Just realized I neglected my own thread for awhile. I've made considerable progress despite many restrictions on my personal time thanks to help from many of you in this community.

 

In regards to my concept, currently I have parts of it working but am still a good ways away from my first version release. Tracktwo's Jumpstart mod has been a huge help in testing different parts of my changes.

 

My new tree consists of a couple of different forks currently. If you choose beam weaponry you will be locked off from advanced ballistics, gauss, and fusion weapon trees. On the other end choosing advanced ballistics will lock off beam, pulse, and EMP.

 

Currently I've been considering two different things that my mod will have an impact on, first there will be significant changes to the DGC.ini to the point that it wont really be a simple 2W option. After downloading the Jumpstart mod and seeing the new .ini file where all input is pulled from it made me wonder if the same concept could be used for my additional foundry projects, and a few other changes within the DGC.ini.

 

My question is, from those of you who have toyed with DGC.ini already, would it break the game to have a mutator call a separate .ini file for additional foundry projects? I plan to add the additional foundry project enums through hex editing, but I'm referring to the information pulled from DGC.ini cost and item/research prereqs.

 

The other thing being adding damage/aim/etc. after finishing a research project rather than with a perk. I saw it done in ENHANCED PLASMA which was a LW addition. I know it's not in strategy and required a bit of a workaround but I was hoping the one that made that change could point me to the classes/methods used so I can try and replicate it.

Edited by Dethraker
Link to comment
Share on other sites

WTF... :ninja:

 

In general, you can find the Master Material by decompressing the relevant upk file, opening it in UE Explorer, and then looking in GEN_MaterialParents/MasterMaterials.

 

I suddenly realize how vastly important (to a tricky pet-project of mine) this key comment by Amineri truly is.

 

When X mentionned to me that the Grid, Move-Wires (Blue & Yellow turns), Covers (...etc) 3d models must be somehow "colored" by a Material instance -- it really didn't occur to me that some CHH style UPK could contain whatever is necessary to customize a few things to follow through on the Red-Green concept i'd like to integrate within Tactical assets.

 

For example, i was able to edit the pair of Unit-Flag "Turn-indicators" in such colors via their corresponding sprites by easy RGB corrections...

 

 

 

http://s23.postimg.org/o7dehfhcb/Example_TEST.png

 

Simple yet complex.. but the blue move wire would have to be defined as GREEN. While the safe-cover shields would use that greenish schema too.

Heck, i could even change my "X-Logo" (instead of the vanilla circles) into a bright "Purple-Violet" hue to match with the HP bars! :wink:

 

 

 

Now onto exploratory file(s) stuff... as it may lead me to the full scale battle with the rest of wanted gimmicky alterations. Whatever comes next, thank you Amineri.

 

And -- sorry for hi-jacking your thread Dethraker, but this is where the precious facts were hidden in plain sight. :wink:

Edited by Zyxpsilon
Link to comment
Share on other sites

As an update to my ongoing project I've made some more headway into implementing my alternate tech tree as a mutator. A few of the additions still make more sense being hexed in, so I have some things edited through Hex(May decide to change into my mutator once it's working successfully). I was able to get the game to read my mutator project inside the logs, and I can tell my function is being called in the game due to some changes, but still unsuccessful at this point.

 

My project is being added as an additional Second Wave option so in order to activate everything I mod in you'll have to select my Second Wave Option(AlternateTechTree #30). When the game loads without the 2W option selected everything works as it should with vanilla LW gameplay, however once I load in selecting my 2W option in the research UI there are no available techs, and the already researched techs are blank. If you click on them then it still shows the details and items/projects unlocked, but the names are blank(I'm using tracktwo's JumpStart mod in order to select different Techs to test my requirements easier).

 

Here is the Hex changes I've made:

 

 

 

UPK_FILE = xcomstrategygame.upk
OBJECT = XGTechTree.BuildTechs : AUTO
[REPLACEMENT_CODE]
07 [@label_op1] 1B <IsOptionEnabled> 24 1E 16 
07 [@label_mutate]
77 19 19 12 20 <Engine.Engine> [@] <Engine.Engine.GetCurrentWorldInfo.ReturnValue> 00 ( 1C <Engine.Engine.GetCurrentWorldInfo> 16 ) [@] <Engine.WorldInfo.Game> 00 ( 01 <Engine.WorldInfo.Game> ) [@] <Engine.GameInfo.BaseMutator> 00 ( 01 <Engine.GameInfo.BaseMutator> ) 2A 16
19 19 19 12 20 <Engine.Engine> [@] <Engine.Engine.GetCurrentWorldInfo.ReturnValue> 00 ( 1C <Engine.Engine.GetCurrentWorldInfo> 16 ) [@] <Engine.WorldInfo.Game> 00 ( 01 <Engine.WorldInfo.Game> ) [@] <Engine.GameInfo.BaseMutator> 00 ( 01 <Engine.GameInfo.BaseMutator> ) [@] <NullRef> 00 ( 1B <Mutate> 1F <%t "XGTechTree.BuildTechs"> 19 12 20 <Engine.Engine> [@] <Engine.Engine.GetCurrentWorldInfo.ReturnValue> 00 ( 1C <Engine.Engine.GetCurrentWorldInfo> 16 ) [@] <Engine.Actor.GetALocalPlayerController.ReturnValue> 00 ( 1C <Engine.Actor.GetALocalPlayerController> 16 ) 16 )
[#label_mutate]
06 [@label_noop][#label_op1]
1B <BuildTech> 2C 01 26 27 24 86 4A 2C 2A 4A 16 
1B <BuildTech> 2C 02 26 28 24 86 24 01 2C 03 4A 16 
1B <BuildTech> 2C 03 26 27 24 B7 24 04 2C 0A 4A 16 
1B <BuildTech> 2C 04 26 27 24 A4 24 02 2C 1A 4A 16 
1B <BuildTech> 2C 05 26 27 24 AA 24 21 2C 11 4A 16 
1B <BuildTech> 2C 06 26 27 24 87 24 0D 2C 41 4A 16 
1B <BuildTech> 2C 07 26 28 24 AB 24 02 2C 15 4A 16 
1B <BuildTech> 2C 08 26 28 24 B4 24 2B 2C 23 4A 16 
1B <BuildTech> 2C 09 26 28 4A 4A 2C 00 4A 16 
1B <BuildTech> 2C 0A 26 28 24 A4 4A 2C 01 4A 16 
1B <BuildTech> 2C 0B 26 28 4A 24 09 2C 10 4A 16 
1B <BuildTech> 2C 0C 26 28 4A 24 0A 2C 0E 4A 16 
1B <BuildTech> 2C 0D 26 28 24 A4 24 01 2C 44 4A 16 
1B <BuildTech> 2C 0E 26 27 24 A4 24 08 2C 09 4A 16 
1B <BuildTech> 2C 0F 26 28 4A 24 48 2C 05 4A 16 
1B <BuildTech> 2C 10 26 27 4A 24 0F 2C 07 4A 16 
1B <BuildTech> 2C 11 26 27 4A 24 10 2C 08 4A 16 
1B <BuildTech> 2C 12 26 27 4A 24 11 2C 06 4A 16 
1B <BuildTech> 2C 13 26 27 4A 24 11 2C 04 4A 16 
1B <BuildTech> 2C 14 26 28 4A 24 09 2C 17 4A 16 
1B <BuildTech> 2C 15 26 28 4A 24 14 2C 18 4A 16 
1B <BuildTech> 2C 16 26 27 4A 24 21 2C 16 4A 16 
1B <BuildTech> 2C 17 26 28 24 29 24 18 24 1F 4A 16 
1B <BuildTech> 2C 18 26 27 24 2A 24 3C 24 1E 4A 16 
1B <BuildTech> 2C 19 26 28 24 2D 24 18 24 20 4A 16 
1B <BuildTech> 2C 1A 26 28 24 2F 24 19 24 1D 4A 16 
1B <BuildTech> 2C 1B 26 28 24 2D 24 19 24 22 4A 16 
1B <BuildTech> 2C 1C 26 27 4A 24 0A 24 21 4A 16 
1B <BuildTech> 2C 1D 26 28 24 2D 24 19 24 1C 4A 16 
1B <BuildTech> 2C 1E 26 27 24 B3 24 1A 2C 12 4A 16 
1B <BuildTech> 2C 1F 26 28 4A 24 1C 2C 21 4A 16 
1B <BuildTech> 2C 20 26 28 24 A8 4A 2C 27 4A 16 
1B <BuildTech> 2C 21 26 27 24 AA 24 0C 2C 28 4A 16 
1B <BuildTech> 2C 22 26 27 4A 24 1F 2C 0F 4A 16 
1B <BuildTech> 2C 23 26 28 24 96 24 2C 2C 2B 24 06 16 
1B <BuildTech> 2C 24 26 28 24 98 24 2D 2C 2C 24 04 16 
1B <BuildTech> 2C 25 26 28 24 9B 24 2F 2C 2D 24 07 16 
1B <BuildTech> 2C 26 26 28 24 97 24 06 2C 33 24 08 16 
1B <BuildTech> 2C 27 26 28 24 9D 24 33 2C 30 24 05 16 
1B <BuildTech> 2C 28 26 28 24 9A 24 2E 2C 2E 24 01 16 
1B <BuildTech> 2C 29 26 28 24 99 24 34 2C 32 24 02 16 
1B <BuildTech> 2C 2A 26 28 24 9C 24 35 2C 31 24 03 16 
1B <BuildTech> 2C 2B 26 28 24 9E 24 38 2C 2F 24 09 16 
1B <BuildTech> 2C 2C 26 28 24 86 24 01 2C 34 4A 16 
1B <BuildTech> 2C 2D 26 28 24 88 24 3C 2C 35 4A 16 
1B <BuildTech> 2C 2E 26 28 24 8A 24 01 2C 37 4A 16 
1B <BuildTech> 2C 2F 26 28 24 8B 24 01 2C 36 4A 16 
1B <BuildTech> 2C 30 26 28 24 90 24 0D 2C 38 4A 16 
1B <BuildTech> 2C 31 26 28 4A 24 16 2C 25 4A 16 
1B <BuildTech> 2C 32 26 28 24 8E 24 3C 2C 3B 4A 16 
1B <BuildTech> 2C 33 26 27 24 8D 24 02 2C 3E 4A 16 
1B <BuildTech> 2C 34 26 28 24 89 24 2D 2C 40 4A 16 
1B <BuildTech> 2C 35 26 28 24 8C 24 2F 2C 3F 4A 16 
1B <BuildTech> 2C 36 26 28 24 93 24 20 2C 3C 4A 16 
1B <BuildTech> 2C 37 26 28 24 92 24 20 2C 3D 4A 16 
1B <BuildTech> 2C 38 26 28 24 8F 24 04 2C 3A 4A 16 
1B <BuildTech> 2C 39 26 27 24 BB 24 3C 2C 42 4A 16 
1B <BuildTech> 2C 3A 26 28 24 BC 24 20 2C 43 4A 16 
1B <BuildTech> 2C 3B 26 27 4A 24 0A 2C 24 4A 16 
1B <BuildTech> 2C 3C 26 27 24 A4 24 0D 2C 42 4A 16 
1B <BuildTech> 2C 3D 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 3E 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 3F 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 40 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 41 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 42 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 43 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 44 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 45 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 46 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 47 26 27 4A 24 0A 24 29 4A 16 
1B <BuildTech> 2C 48 26 28 4A 24 0A 24 05 4A 16 
1B <BuildTech> 2C 49 26 27 24 A4 24 3C 24 42 4A 16 
1B <BuildTech> 2C 4A 26 27 24 A4 24 49 24 42 4A 16 
1B <BuildTech> 2C 4B 26 27 24 A4 24 49 24 42 4A 16 
1B <BalanceTechs> 16 
[#label_noop]
04 0B 
53 


OBJECT = XGTechTree.HasPrereqs : AUTO
[REPLACEMENT_CODE]
0F 00 <.kTech> 1B <TECH> 00 <.iTech> 16 
07 [@label_0x006B] 81 2D 35 <XGStrategyActorNativeBase.TTech.bCustomReqs> <XGStrategyActorNativeBase.TTech> 00 00 00 <.kTech> 16 
04 82 1B <HasItemPrequisites> 00 <.iTech> 16 18 [@] ( 1B <HasTechPrequisites> 00 <.iTech> 16 16 ) 
[#label_0x006B]
07 [@label_0x052A] 82 1B <HasItemPrequisites> 00 <.iTech> 16 18 [@] ( 1B <HasTechPrequisites> 00 <.iTech> 16 16 ) 
07 [@label_op1] 1B <IsOptionEnabled> 24 1E 16
05 <.iTech> 00 00 <.iTech> 
0A [@label_op01] 26 
04 19 1B <STORAGE> 16 [@] <XGStorage.HasXenobiologyCorpse.ReturnValue> 00 ( 1B <HasXenobiologyCorpse> 16 ) 
[#label_op01]
0A [@label_op03] 2C 03 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.HasInterrogatedCaptive.ReturnValue> 00 ( 1B <HasInterrogatedCaptive> 16 ) 18 [@] ( 97 19 1B <STORAGE> 16 [@] <XGStorage.GetNumItemsAvailable.ReturnValue> 00 ( 1B <GetNumItemsAvailable> 2C B7 16 ) 25 16 16 ) 
[#label_op03]
0A [@label_op04] 2C 04 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2C 16 ) 
[#label_op04]
  0A [@label_op05] 2C 05 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_op05]
0A [@label_op06] 2C 06 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2C 16 ) 
[#label_op06]
0A [@label_op11] 2C 0B 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 36 16 ) 
[#label_op11]
0A [@label_op14] 2C 0E 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 11 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 16 ) 
[#label_op14]
0A [@label_op15] 2C 0F 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 09 16 ) 
[#label_op15]
0A [@label_op16] 2C 10 
  04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0F 16 ) 
[#label_op16]
0A [@label_op17] 2C 11 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 10 16 ) 
[#label_op17]
0A [@label_op18] 2C 12 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 11 16 ) 
[#label_op18]
0A [@label_op19] 2C 13 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 11 16 ) 
[#label_op19]
0A [@label_op20] 2C 14
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 1B 16 ) 
04 28
[#label_op20]
0A [@label_op21] 2C 15 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 17 16 ) 
[#label_op21]
0A [@label_op22] 2C 16 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 1A 16 ) 
[#label_op22]
0A [@label_op23] 2C 17 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_op23]
0A [@label_op24] 2C 18 
  04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 16 ) 
[#label_op24]
0A [@label_op26] 2C 1A 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 
[#label_op26]
0A [@label_op27] 2C 1B
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 14 16 ) 
04 28
[#label_op27]
0A [@label_op28] 2C 1C 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 1B 16 ) 
[#label_op28]
0A [@label_op29] 2C 1D 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 
[#label_op29]
0A [@label_op30] 2C 1E 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 1F 16 ) 
[#label_op30]
0A [@label_op31] 2C 1F 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 1C 16 ) 
[#label_op31]
0A [@label_op33] 2C 21 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_op33]
0A [@label_op49] 2C 31 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 
[#label_op49]
0A [@label_op51] 2C 33
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2F 16 ) 
[#label_op51]
0A [@label_op52] 2C 34 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 
[#label_op52]
0A [@label_op57] 2C 39 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 
[#label_op57]
0A [@label_op59] 2C 3B 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_op59]
0A [@label_op60] 2C 3C 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_op60]
0A [@label_op61] 2C 3D 
[#label_op61]
0A [@label_op62] 2C 3E 
[#label_op62]
  0A [@label_op63] 2C 3F 
  [#label_op63]
0A [@label_op64] 2C 40 
[#label_op64]
0A [@label_op65] 2C 41 
[#label_op65]
0A [@label_op66] 2C 42 
[#label_op66]
0A [@label_op67] 2C 43 
[#label_op67]
0A [@label_op68] 2C 44 
[#label_op68]
0A [@label_op69] 2C 45 
[#label_op69]
0A [@label_op70] 2C 46 
  [#label_op70]
0A [@label_op71] 2C 47 
04 9B 10 38 3D 93 00 <.iTech> 2C 39 16 19 1B <GEOSCAPE> 16 [@] <XGGeoscape.m_arrCraftEncounters> 00 ( 01 <XGGeoscape.m_arrCraftEncounters> ) 25 16 
[#label_op71]
0A [@label_op73] 2C 49 
07 [@label_op73a] 84 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 4A 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 4B 16 ) 16 )
04 28
06 [@label_op73b][#label_op73a]
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 
[#label_op73b]
[#label_op73]
  0A [@label_op74] 2C 4A 
  [#label_op74]
0A [@label_op75] 2C 4B 
07 [@label_op75a] 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 49 16 ) 
04 28
06 [@label_op75b][#label_op75a]
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 
[#label_op75b]
[#label_op75]
0A FF FF 
04 28 
06 [@label_0x052A][#label_op1]
05 <.iTech> 00 00 <.iTech> 
0A [@label_0x00D1] 26 
04 19 1B <STORAGE> 16 [@] <XGStorage.HasXenobiologyCorpse.ReturnValue> 00 ( 1B <HasXenobiologyCorpse> 16 ) 
[#label_0x00D1]
0A [@label_0x0121] 2C 03 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.HasInterrogatedCaptive.ReturnValue> 00 ( 1B <HasInterrogatedCaptive> 16 ) 18 [@] ( 97 19 1B <STORAGE> 16 [@] <XGStorage.GetNumItemsAvailable.ReturnValue> 00 ( 1B <GetNumItemsAvailable> 2C B7 16 ) 25 16 16 ) 
[#label_0x0121]
  0A [@label_0x0149] 2C 06 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2C 16 ) 
[#label_0x0149]
0A [@label_0x0171] 2C 05 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3B 16 ) 
[#label_0x0171]
0A [@label_0x0199] 2C 10 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0C 16 ) 
[#label_0x0199]
0A [@label_0x01C1] 2C 11 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 
[#label_0x01C1]
0A [@label_0x01E9] 2C 12 
  04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 07 16 ) 
[#label_0x01E9]
0A [@label_0x0211] 2C 13 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 05 16 ) 
[#label_0x0211]
0A [@label_0x0239] 2C 16 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 15 16 ) 
[#label_0x0239]
0A [@label_0x0288] 2C 18 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 21 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 09 16 ) 16 ) 
[#label_0x0288]
0A [@label_0x02B0] 2C 1C 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0B 16 ) 
[#label_0x02B0]
0A [@label_0x02D8] 2C 21 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 
[#label_0x02D8]
0A [@label_0x0300] 2C 22 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 31 16 ) 
[#label_0x0300]
0A [@label_0x0328] 2C 33 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2F 16 ) 
[#label_0x0328]
0A [@label_0x0350] 2C 39 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2C 16 ) 
[#label_0x0350]
0A [@label_0x0378] 2C 3B 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0B 16 ) 
[#label_0x0378]
0A [@label_0x03C7] 2C 3C 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 20 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0A 16 ) 16 ) 
[#label_0x03C7]
  0A [@label_0x0416] 2C 04 
04 82 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 0D 16 ) 18 [@] ( 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 2C 16 ) 16 ) 
[#label_0x0416]
0A [@label_0x043E] 2C 0E 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 3C 16 ) 
[#label_0x043E]
0A [@label_0x0466] 2C 1E 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 22 16 ) 
[#label_0x0466]
0A [@label_0x046B] 2C 3D 
[#label_0x046B]
0A [@label_0x0470] 2C 3E 
[#label_0x0470]
0A [@label_0x0475] 2C 3F 
[#label_0x0475]
0A [@label_0x047A] 2C 40 
[#label_0x047A]
0A [@label_0x047F] 2C 41 
[#label_0x047F]
0A [@label_0x0484] 2C 42 
[#label_0x0484]
0A [@label_0x0489] 2C 43 
[#label_0x0489]
0A [@label_0x048E] 2C 44 
[#label_0x048E]
0A [@label_0x0493] 2C 45 
  [#label_0x0493]
  0A [@label_0x0498] 2C 46 
[#label_0x0498]
0A [@label_0x04D0] 2C 47 
04 9B 10 38 3D 93 00 <.iTech> 2C 39 16 19 1B <GEOSCAPE> 16 [@] <XGGeoscape.m_arrCraftEncounters> 00 ( 01 <XGGeoscape.m_arrCraftEncounters> ) 25 16 
[#label_0x04D0]
0A [@label_0x04F8] 2C 49 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 10 16 ) 
[#label_0x04F8]
0A [@label_0x04FD] 2C 4A 
[#label_0x04FD]
0A [@label_0x0525] 2C 4B 
04 19 1B <LABS> 16 [@] <XGFacility_Labs.IsResearched.ReturnValue> 00 ( 1B <IsResearched> 2C 11 16 ) 
  [#label_0x0525]
0A FF FF 
04 28 
[#label_0x052A]
04 28 
53 

 

 

 

Here is my test code:

 

 

 

class AlternateTechTree extends XComMutator
    config(AltTree)
    hidecategories(Navigation);


function Mutate(string MutateString, PlayerController Sender)
{
if(MutateString == "XGTechTree.BuildTechs")
{
`Log("This Sucks");
BuildAltTechs();
}
super.Mutate(MutateString, Sender);
}


function XGTechTree TECHTREE()
{
`Log("This Is Alright");
    return XComHeadquartersGame(class'Engine'.static.GetCurrentWorldInfo().Game).GetGameCore().GetHQ().GetLabs().m_kTree;
    //return ReturnValue;    
}


function BuildAltTechs()
{
`Log("This Is Awesome");
    TECHTREE().BuildTech(1, 1, true, 134,, 42);
    TECHTREE().BuildTech(2, 1, false, 134, 1, 3);
    TECHTREE().BuildTech(3, 1, true, 183, 4, 10);
    TECHTREE().BuildTech(4, 1, true, 164, 1, 26);
    TECHTREE().BuildTech(5, 1, true, 170, 12, 17);
    TECHTREE().BuildTech(6, 1, true, 135, 13, 65);
    TECHTREE().BuildTech(7, 1, false, 171, 2, 21);
    TECHTREE().BuildTech(8, 1, false, 180, 43, 35);
    TECHTREE().BuildTech(9, 1, false,,, 0);
    TECHTREE().BuildTech(10, 1, false, 164,, 1);
    TECHTREE().BuildTech(11, 1, true,, 10, 16);
    TECHTREE().BuildTech(12, 1, false,, 10, 14);
    TECHTREE().BuildTech(13, 1, false, 164, 1, 68);
    TECHTREE().BuildTech(14, 1, true, 164, 3, 9);
    TECHTREE().BuildTech(15, 1, true,, 72, 5);
    TECHTREE().BuildTech(16, 1, true,, 12, 7);
    TECHTREE().BuildTech(17, 1, true,, 11, 8);
    TECHTREE().BuildTech(18, 1, true,, 7, 6);
    TECHTREE().BuildTech(19, 1, true,, 5, 4);
    TECHTREE().BuildTech(20, 1, true,, 9, 23);
    TECHTREE().BuildTech(21, 1, true,, 20, 24);
    TECHTREE().BuildTech(22, 1, true,, 21, 22);
    TECHTREE().BuildTech(23, 1, true, 41, 9, 31);
    TECHTREE().BuildTech(24, 1, true, 42, 9, 30);
    TECHTREE().BuildTech(25, 1, false, 45, 24, 32);
    TECHTREE().BuildTech(26, 1, true, 47, 10, 29);
    TECHTREE().BuildTech(27, 1, true, 45, 9, 34);
TECHTREE().BuildTech(28, 1, true,, 10, 33);
    TECHTREE().BuildTech(29, 1, true, 45, 30, 28);
    TECHTREE().BuildTech(30, 1, true, 179, 26, 18);
    TECHTREE().BuildTech(31, 1, true,, 23, 33);
    TECHTREE().BuildTech(32, 1, false, 168,, 39);
    TECHTREE().BuildTech(33, 1, true, 170, 12, 40);
    TECHTREE().BuildTech(34, 1, false,, 49, 15);
    TECHTREE().BuildTech(35, 1, false, 150, 44, 43, 6);
    TECHTREE().BuildTech(36, 1, false, 152, 45, 44, 4);
    TECHTREE().BuildTech(37, 1, false, 155, 47, 45, 7);
    TECHTREE().BuildTech(38, 1, false, 151, 6, 51, 8);
    TECHTREE().BuildTech(39, 1, false, 157, 51, 48, 5);
    TECHTREE().BuildTech(40, 1, false, 154, 46, 46, 1);
    TECHTREE().BuildTech(41, 1, false, 153, 52, 50, 2);
    TECHTREE().BuildTech(42, 1, false, 156, 53, 49, 3);
    TECHTREE().BuildTech(43, 1, false, 158, 56, 47, 9);
    TECHTREE().BuildTech(44, 1, false, 134, 1, 52);
    TECHTREE().BuildTech(45, 1, false, 136, 11, 53);
    TECHTREE().BuildTech(46, 1, false, 138, 1, 55);
    TECHTREE().BuildTech(47, 1, false, 139, 1, 54);
    TECHTREE().BuildTech(48, 1, false, 144, 13, 56);
    TECHTREE().BuildTech(49, 1, true,, 22, 37);
    TECHTREE().BuildTech(50, 1, false, 142, 11, 59);
    TECHTREE().BuildTech(51, 1, true, 141, 2, 62);
    TECHTREE().BuildTech(52, 1, true, 137, 45, 64);
    TECHTREE().BuildTech(53, 1, false, 140, 47, 63);
    TECHTREE().BuildTech(54, 1, false, 147, 32, 60);
    TECHTREE().BuildTech(55, 1, false, 146, 32, 61);
    TECHTREE().BuildTech(56, 1, false, 143, 4, 58);
    TECHTREE().BuildTech(57, 1, true, 187, 44, 66);
    TECHTREE().BuildTech(58, 1, false, 188, 32, 67);
    TECHTREE().BuildTech(59, 1, true,, 3, 36);
    TECHTREE().BuildTech(60, 1, true, 164, 11, 66);
    TECHTREE().BuildTech(61, 1, true,, 10, 41);
    TECHTREE().BuildTech(62, 1, true,, 10, 41);
    TECHTREE().BuildTech(63, 1, true,, 10, 41);
    TECHTREE().BuildTech(64, 1, true,, 10, 41);
    TECHTREE().BuildTech(65, 1, true,, 10, 41);
    TECHTREE().BuildTech(66, 1, true,, 10, 41);
    TECHTREE().BuildTech(67, 1, true,, 10, 41);
    TECHTREE().BuildTech(68, 1, true,, 10, 41);
    TECHTREE().BuildTech(69, 1, true,, 10, 41);
    TECHTREE().BuildTech(70, 1, true,, 10, 41);
    TECHTREE().BuildTech(71, 1, true,, 10, 41);
    TECHTREE().BuildTech(72, 1, false,, 10, 5);
    TECHTREE().BuildTech(73, 1, true, 164, 48, 66);
    TECHTREE().BuildTech(74, 1, true, 164, 17, 66);
    TECHTREE().BuildTech(75, 1, true, 164, 17, 66);
    //return;  
`Log("This Rocks");
}

 

I've added a few `Log() commands in my code in order to see if the code is being read, and it is. I am able to see all my `Log()s at some point in the Launch.Log so each part is being called by the game.

 

[0022.64] ScriptWarning: Accessed None 'm_kLabs'
AlternateTechTree Command1.TheWorld:PersistentLevel.AlternateTechTree_0
Function AlternateTechTree.AlternateTechTree:TECHTREE:0095
[0022.64] ScriptWarning: Accessed None
AlternateTechTree Command1.TheWorld:PersistentLevel.AlternateTechTree_0
Function AlternateTechTree.AlternateTechTree:BuildAltTechs:001F
[0022.64] ScriptLog: This Is Alright

This ScriptWarning in particular repeats itself 75 times, once for each of the ResearchTechs.

 

That's the update on my project so far, I'm currently a bit stumped, but will be continuing to troubleshoot as I have the time. If anyone has some advice I'm all ears :D.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...