wghost81 Posted July 20, 2015 Share Posted July 20, 2015 (edited) 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 July 20, 2015 by wghost81 Link to comment Share on other sites More sharing options...
Dethraker Posted July 26, 2015 Author Share Posted July 26, 2015 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") ;ShotgunsWeaponPackageInfo=(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 LanceWeaponPackageInfo=(ItemType=eItem_Railgun,ArchetypeName="Weapon_MEC_Railgun.GD_MEC_Railgun"); Rail GunWeaponPackageInfo=(ItemType=eItem_XPACK_BEGIN_CORPSES,ArchetypeName="Weapon_MEC_Chaingun.GD_MEC_Chaingun"); Pulse LanceWeaponPackageInfo=(ItemType=eItem_XPACK_END_CORPSES,ArchetypeName="Weapon_MEC_Railgun.GD_MEC_Railgun") ;SHIV LaserWeaponPackageInfo=(ItemType=eItem_BEGIN_CORPSES,ArchetypeName="Weapon_ShivLaser.GD_Shiv_Laser") ; Arc LaserWeaponPackageInfo=(ItemType=eItem_END_INTERCEPTOR_CONSUMABLES,ArchetypeName="Weapon_ExaltLaserSniperRfl.GD_ExaltLaserSniperRifle") ;Carbine weaponsWeaponPackageInfo=(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 weaponsWeaponPackageInfo=(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") ;SMGsWeaponPackageInfo=(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 PistolsWeaponPackageInfo=(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 RiflesWeaponPackageInfo=(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") ;LMGsWeaponPackageInfo=(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 More sharing options...
Amineri Posted July 26, 2015 Share Posted July 26, 2015 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 More sharing options...
Zyxpsilon Posted July 26, 2015 Share Posted July 26, 2015 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 More sharing options...
Dethraker Posted July 27, 2015 Author Share Posted July 27, 2015 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 More sharing options...
Amineri Posted July 27, 2015 Share Posted July 27, 2015 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 texture2) 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 More sharing options...
Dethraker Posted August 10, 2015 Author Share Posted August 10, 2015 (edited) 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 August 12, 2015 by Dethraker Link to comment Share on other sites More sharing options...
Krazyguy75 Posted August 10, 2015 Share Posted August 10, 2015 (edited) Edit: Delete this post please? I don't know how... Edited August 11, 2015 by Krazyguy75 Link to comment Share on other sites More sharing options...
Zyxpsilon Posted August 10, 2015 Share Posted August 10, 2015 (edited) 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 August 10, 2015 by Zyxpsilon Link to comment Share on other sites More sharing options...
Dethraker Posted August 18, 2015 Author Share Posted August 18, 2015 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 AlrightThis 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 More sharing options...
Recommended Posts