diff --git a/Assets/Inv_Augmentation_CyberClaws.png b/Assets/Inv_Augmentation_CyberClaws.png
new file mode 100644
index 0000000..062a3c1
Binary files /dev/null and b/Assets/Inv_Augmentation_CyberClaws.png differ
diff --git a/Assets/LoadoutAugmenations.xcf b/Assets/LoadoutAugmenations.xcf
index b68507c..18480cb 100644
Binary files a/Assets/LoadoutAugmenations.xcf and b/Assets/LoadoutAugmenations.xcf differ
diff --git a/Assets/TECH_Nanofiber_Materials.TGA b/Assets/TECH_Nanofiber_Materials.TGA
new file mode 100644
index 0000000..72bf639
Binary files /dev/null and b/Assets/TECH_Nanofiber_Materials.TGA differ
diff --git a/RPG.v12.XCOM_suo b/RPG.v12.XCOM_suo
index d115d51..29a6622 100644
Binary files a/RPG.v12.XCOM_suo and b/RPG.v12.XCOM_suo differ
diff --git a/RPG/Config/Augmentations/XComAugmentations.ini b/RPG/Config/Augmentations/XComAugmentations.ini
new file mode 100644
index 0000000..c07ee9c
--- /dev/null
+++ b/RPG/Config/Augmentations/XComAugmentations.ini
@@ -0,0 +1,25 @@
+[Augmentations.X2Ability_Augmentations_Abilities]
+AUGMENTATION_BASE_MITIGATION_AMOUNT=1
+
+[Augmentations.X2Item_Augmentations]
+CLAWS_BASEDAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=2, Shred=1, Tag="", DamageType="Melee")
+CLAWS_AIM=20
+CLAWS_CRITCHANCE=10
+CLAWS_ICLIPSIZE=0
+CLAWS_ISOUNDRANGE=0
+CLAWS_IENVIRONMENTDAMAGE=5
+CLAWS_UPGRADE_SLOTS=4
+
++AugmentationSlots = eInvSlot_AugmentationHead
++AugmentationSlots = eInvSlot_AugmentationTorso
++AugmentationSlots = eInvSlot_AugmentationArms
++AugmentationSlots = eInvSlot_AugmentationLegs
+
++SlotConfig = (InvSlot=eInvSlot_AugmentationHead, Category=augmentation_head)
++SlotConfig = (InvSlot=eInvSlot_AugmentationTorso,Category=augmentation_torso)
++SlotConfig = (InvSlot=eInvSlot_AugmentationArms, Category=augmentation_arms)
++SlotConfig = (InvSlot=eInvSlot_AugmentationLegs, Category=augmentation_legs)
+
+[Augmentations.X2DownloadableContentInfo_Augmentations]
++SocketReplacements=(TorsoName="Default", SocketMeshString="Sockets_Augmentions.Meshes.SM_Head_And_Sockets_M", Female=false)
++SocketReplacements=(TorsoName="Default", SocketMeshString="Sockets_Augmentions.Meshes.SM_Head_And_Sockets_F", Female=true)
diff --git a/RPG/Config/Augmentations/XComGameData.ini b/RPG/Config/Augmentations/XComGameData.ini
index 68745ca..06b3bd1 100644
--- a/RPG/Config/Augmentations/XComGameData.ini
+++ b/RPG/Config/Augmentations/XComGameData.ini
@@ -1,2 +1,19 @@
[XComGame.X2ItemTemplateManager]
-ItemCategories=augmentation
\ No newline at end of file
++ItemCategories=augmentation_head
++ItemCategories=augmentation_torso
++ItemCategories=augmentation_arms
++ItemCategories=augmentation_legs
+
++WeaponCategories=cyberclaws
+
+[XComGame.XGStrategy]
++DEBUG_StartingItems=AugmentationHead_Base_CV
+
++DEBUG_StartingItems=AugmentationTorso_Base_CV
+
++DEBUG_StartingItems=AugmentationLegs_Base_CV
+
++DEBUG_StartingItems=AugmentationArms_Base_CV
++DEBUG_StartingItems=AugmentationArms_Claws_MG
++DEBUG_StartingItems=AugmentationArms_Grapple_MG
+
diff --git a/RPG/Config/XComGameData.ini b/RPG/Config/XComGameData.ini
index cde34f9..debf14b 100644
--- a/RPG/Config/XComGameData.ini
+++ b/RPG/Config/XComGameData.ini
@@ -60,7 +60,3 @@
+DEBUG_StartingItems=AlloyBlade_Adv
+DEBUG_StartingItems=AlloyBlade_Sup
-+DEBUG_StartingItems=AugmentationHead
-+DEBUG_StartingItems=AugmentationTorso
-+DEBUG_StartingItems=AugmentationLegs
-+DEBUG_StartingItems=AugmentationArms
diff --git a/RPG/Config/XComGameData_SoldierSkills.ini b/RPG/Config/XComGameData_SoldierSkills.ini
index 146d0c0..0464115 100644
--- a/RPG/Config/XComGameData_SoldierSkills.ini
+++ b/RPG/Config/XComGameData_SoldierSkills.ini
@@ -1,2 +1,7 @@
[XComGame.X2Effect_TheLostHeadshot]
-+ValidHeadshotAbilities=AutoFireShot
\ No newline at end of file
++ValidHeadshotAbilities=AutoFireShot
+
+
+[XComGame.X2Ability_ReaperAbilitySet]
+-HomingMineRadius=2.5f
++HomingMineRadius=3.0f
\ No newline at end of file
diff --git a/RPG/Config/XComGameData_WeaponData.ini b/RPG/Config/XComGameData_WeaponData.ini
index 1b5372b..f7ab87c 100644
--- a/RPG/Config/XComGameData_WeaponData.ini
+++ b/RPG/Config/XComGameData_WeaponData.ini
@@ -1,6 +1,6 @@
[XComGame.X2Item_DefaultGrenades]
-FIREGRENADE_RADIUS=3
-+FIREGRENADE_RADIUS=4
++FIREGRENADE_RADIUS=3.5f
-FRAGGRENADE_RADIUS=3
+FRAGGRENADE_RADIUS=4
diff --git a/RPG/Config/XComRPG.ini b/RPG/Config/XComRPG.ini
index efb6e17..140aeae 100644
--- a/RPG/Config/XComRPG.ini
+++ b/RPG/Config/XComRPG.ini
@@ -73,7 +73,8 @@ AutoPistolCritChanceBonus=20
+AbilityWeaponCategoryRestrictions = (AbilityName=SwordSlice, WeaponCategories=(sword))
+AbilityWeaponCategoryRestrictions = (AbilityName=Blademaster, WeaponCategories=(sword))
-+AbilityWeaponCategoryRestrictions = (AbilityName=SkirmisherGrapple, WeaponCategories=(gauntlet))
++AbilityWeaponCategoryRestrictions = (AbilityName=Reckoning, WeaponCategories=(wristblade))
++AbilityWeaponCategoryRestrictions = (AbilityName=SkirmisherGrapple, WeaponCategories=(wristblade))
+AbilityWeaponCategoryRestrictions = (AbilityName=Justice, WeaponCategories=(wristblade))
+AbilityWeaponCategoryRestrictions = (AbilityName=SkirmisherVengeance, WeaponCategories=(wristblade))
+AbilityWeaponCategoryRestrictions = (AbilityName=Whiplash, WeaponCategories=(wristblade))
@@ -101,6 +102,7 @@ AutoPistolCritChanceBonus=20
+MutuallyExclusiveAbilities = (Abilities=(RunAndGun, LightEmUp))
+MutuallyExclusiveAbilities = (Abilities=(RpgZoneOfControl, HighNoon))
++MutuallyExclusiveAbilities = (Abilities=(EverVigilant, DeepCover))
VERY_SHORT_RANGE[0]=0
VERY_SHORT_RANGE[1]=40
diff --git a/RPG/Content/Augmentations/AnimationsMaster_Augmentations.upk b/RPG/Content/Augmentations/AnimationsMaster_Augmentations.upk
new file mode 100644
index 0000000..112153a
Binary files /dev/null and b/RPG/Content/Augmentations/AnimationsMaster_Augmentations.upk differ
diff --git a/RPG/Content/Augmentations/CyberClaws_Augmentations.upk b/RPG/Content/Augmentations/CyberClaws_Augmentations.upk
new file mode 100644
index 0000000..d5b513c
Binary files /dev/null and b/RPG/Content/Augmentations/CyberClaws_Augmentations.upk differ
diff --git a/RPG/Content/Augmentations/Sockets_Augmentions.upk b/RPG/Content/Augmentations/Sockets_Augmentions.upk
new file mode 100644
index 0000000..e4cd398
Binary files /dev/null and b/RPG/Content/Augmentations/Sockets_Augmentions.upk differ
diff --git a/RPG/Content/Augmentations/UILibrary_Augmentations.upk b/RPG/Content/Augmentations/UILibrary_Augmentations.upk
index ae59613..ab2408d 100644
Binary files a/RPG/Content/Augmentations/UILibrary_Augmentations.upk and b/RPG/Content/Augmentations/UILibrary_Augmentations.upk differ
diff --git a/RPG/Localization/Augmentations/XComGame.int b/RPG/Localization/Augmentations/XComGame.int
index df27e76..e37abf6 100644
--- a/RPG/Localization/Augmentations/XComGame.int
+++ b/RPG/Localization/Augmentations/XComGame.int
@@ -6,22 +6,47 @@ m_strInventoryLabels[eInvSlot_AugmentationTorso]=TORSO
m_strInventoryLabels[eInvSlot_AugmentationArms]=ARMS
m_strInventoryLabels[eInvSlot_AugmentationLegs]=LEGS
-[AugmentationHead X2EquipmentTemplate]
-FriendlyName="Cybernetic Skull"
-FriendlyNamePlural="Cybernetic Skull"
+[AugmentationHead_Base_CV X2EquipmentTemplate]
+FriendlyName="Cybernetic Skull"
+FriendlyNamePlural="Cybernetic Skull"
BriefSummary="Cybernetic Skull"
+TacticalText=""
-[AugmentationTorso X2EquipmentTemplate]
-FriendlyName="Cybernetic Torso"
-FriendlyNamePlural="Cybernetic Torsos"
+[AugmentationTorso_Base_CV X2EquipmentTemplate]
+FriendlyName="Cybernetic Torso"
+FriendlyNamePlural="Cybernetic Torsos"
BriefSummary="Cybernetic Torso"
+TacticalText=""
-[AugmentationArms X2EquipmentTemplate]
-FriendlyName="Cybernetic Arms"
-FriendlyNamePlural="Cybernetic Arms"
+[AugmentationArms_Base_CV X2EquipmentTemplate]
+FriendlyName="Cybernetic Arms"
+FriendlyNamePlural="Cybernetic Arms"
BriefSummary="Cybernetic Arms"
+TacticalText=""
-[AugmentationLegs X2EquipmentTemplate]
-FriendlyName="Cybernetic Legs"
-FriendlyNamePlural="Cybernetic Legs"
-BriefSummary="Cybernetic Legs"
\ No newline at end of file
+[AugmentationLegs_Base_CV X2EquipmentTemplate]
+FriendlyName="Cybernetic Legs"
+FriendlyNamePlural="Cybernetic Legs"
+BriefSummary="Cybernetic Legs"
+TacticalText=""
+
+[AugmentationArms_Grapple_MG X2EquipmentTemplate]
+FriendlyName="Cybernetic Grapple"
+FriendlyNamePlural="Cybernetic Grapple"
+BriefSummary="Cybernetic Grapple"
+TacticalText=""
+
+[AugmentationArms_Claws_MG X2PairedWeaponTemplate]
+FriendlyName="Cyberclaws"
+FriendlyNamePlural="Cyberclaws"
+BriefSummary=""
+TacticalText=""
+AbilityDescName="Cyberclaws"
+
+
+[ClawsSlash X2AbilityTemplate]
+LocFriendlyName="Claw Slash"
+LocLongDescription="Melee slash that does not end turn if you have action points left."
+LocHelpText="Melee slash that does not end turn if you have action points left."
+LocFlyOverText="Claw Slash"
+LocPromotionPopupText="Melee slash that does not end turn if you have action points left."
\ No newline at end of file
diff --git a/RPG/Localization/XComGame.int b/RPG/Localization/XComGame.int
index 919a874..be4a962 100644
Binary files a/RPG/Localization/XComGame.int and b/RPG/Localization/XComGame.int differ
diff --git a/RPG/RPG.x2proj b/RPG/RPG.x2proj
index 5e78ed5..f2c8d6a 100644
--- a/RPG/RPG.x2proj
+++ b/RPG/RPG.x2proj
@@ -52,6 +52,9 @@ tags=Gameplay, Soldier Class, Overhaul, RPG, Weapon, Item
+
+ Content
+
Content
@@ -94,6 +97,15 @@ tags=Gameplay, Soldier Class, Overhaul, RPG, Weapon, Item
Content
+
+ Content
+
+
+ Content
+
+
+ Content
+
Content
@@ -145,6 +157,12 @@ tags=Gameplay, Soldier Class, Overhaul, RPG, Weapon, Item
Content
+
+ Content
+
+
+ Content
+
Content
diff --git a/RPG/ReadMe.txt b/RPG/ReadMe.txt
index 8005dd7..5bd7672 100644
--- a/RPG/ReadMe.txt
+++ b/RPG/ReadMe.txt
@@ -5,7 +5,7 @@
- Replaces vanilla classes with a single class with 14 specializations with 7 ranks each for a total of 98 abilities to choose from
- The new class can choose from all primary and all secondary weapons (including LW2 secondaries). Every combination is possible.
- Dynamic class title / class icon based on your ability choices
-- 2 random starting abilties on squaddie
+- 2 random starting abilitieson squaddie
- Stats can be upgraded with ability points
- All secondary weapon abilities work regardless of the inventory slot (e.g fan fire with pistols in the utility slot).
- Weapon and Attachment mechanics got revamped to have a more focused role for each weapon
@@ -25,7 +25,7 @@ I recommend to play this mod with the following mods:
[h1]About this overhaul[/h1]
The idea of this mod was born out of my passion for oldschool rpg games.
-I thought it would be cool to develope every single soldier in every way you want and give it every weapon or item you want.
+I thought it would be cool to develop every single soldier in every way you want and give it every weapon or item you want.
So here it is. The mod replaces the vanilla class by one class starting as "Soldier".
@@ -33,9 +33,9 @@ The Soldier class can use every weapon (supporting Primary Secondaries, LW2 Seco
This class has 14 rows of abilities (named specializations) with 7 ranks each (98 abilities total) to choose from. I am planning to even expand on this.
-When your soldier evolves your class name and icon changes dynamicly to the specialization you have the most perks from.
+When your soldier evolves your class name and icon changes dynamicallyto the specialization you have the most perks from.
-On squaddie your soldier will get two random starting abilities from a pool to give each soldier an idea to where he/she could be deveveloped.
+On squaddie your soldier will get two random starting abilities from a pool to give each soldier an idea to where he/she could be developed.
Any combination of abilities and weapons are possible. For example you can create a cannon wielding medic, a gunslinging grenadier, sniper with ripjack or whatever you can imagine.
@@ -43,7 +43,7 @@ Most abilities work with each weapon, the secondary weapon abilities work with t
Another big change is the possibility to upgrade the soldiers stats with ability points. Therefor i designed a completely new ui screen.
-For overall balance and because i wanted to i overhauled the weapon mechanics and how most weapon attachements work.
+For overall balance and because i wanted to i overhauled the weapon mechanics and how most weapon attachments work.
[h1]Soldier AP[/h1]
Since you can raise stats with Soldier AP the rank up AP bonus is raised to 30
@@ -72,7 +72,7 @@ The ability point rewards are doubled and the mission cap is raised from 2 to 10
- All weapons get 3 upgrade slots
- Assault Rifles get Autofire ability (Fire a long burst at a target that does +1 damage per ammo left in the clip. The shot is less accurate against targets in cover, consumes full clip, destroys cover but cannot be dodged. Needs 2 action points and 3 ammo minimum to be activated.).
- Sniper Rifles give Squadsight ability and can be fired after moving (overwatch still needs 2 AP).
-- Cannons get Autofire and Supression ability, have increased damage and clip size but get a -25% mobility penalty.
+- Cannons get Autofire and Suppression ability, have increased damage and clip size but get a -25% mobility penalty.
- Shotguns are very accurate but *damage* drops of with distance and also get reduced by cover to a minimum 1 damage.
- Vektor rifles get the chance of staying concealed (they have a integrated basic suppressor)
- Bullpup Rifles get +1 clip size, get the Autofire ability and standard shots are not turn-ending
@@ -143,7 +143,7 @@ A full documentation of all abilities can be found [url=https://docs.google.com/
[h1]Credits[/h1]
Pavonis Interactive for all long war 2 perks i used and initial Detailed Soldier Lists.
-Robojumper for the stats icons i used in the stats upgrade screen, some class icons, controller support and coding assistence when i was stuck.
+Robojumper for the stats icons i used in the stats upgrade screen, some class icons, controller support and coding assistance when i was stuck.
xylthixlm for xmod base and the perk icon library. Fantastic work and a tremendous workload reduction.
creative xenos for being that crazy chaotic creative bunch of great people that they are.
bg for [WOTC] Detailed Soldier Lists
diff --git a/RPG/Src/Augmentations/Classes/UIArmory_Augmentations.uc b/RPG/Src/Augmentations/Classes/UIArmory_Augmentations.uc
index 8f57da3..2015701 100644
--- a/RPG/Src/Augmentations/Classes/UIArmory_Augmentations.uc
+++ b/RPG/Src/Augmentations/Classes/UIArmory_Augmentations.uc
@@ -1,7 +1,5 @@
class UIArmory_Augmentations extends UIArmory_Loadout;
-var protected array AugmentationSlots;
-
simulated function UpdateEquippedList()
{
local int i, numUtilityItems;
@@ -19,20 +17,14 @@ simulated function UpdateEquippedList()
// Clear out tooltips from removed list items
Movie.Pres.m_kTooltipMgr.RemoveTooltipsByPartialPath(string(EquippedList.MCPath));
- AugmentationSlots.Length = 0;
- AugmentationSlots.AddItem(eInvSlot_AugmentationHead);
- AugmentationSlots.AddItem(eInvSlot_AugmentationTorso);
- AugmentationSlots.AddItem(eInvSlot_AugmentationArms);
- AugmentationSlots.AddItem(eInvSlot_AugmentationLegs);
-
- En = class'CHUIItemSlotEnumerator'.static.CreateEnumerator(UpdatedUnit, CheckGameState,,,AugmentationSlots);
+ En = class'CHUIItemSlotEnumerator'.static.CreateEnumerator(UpdatedUnit, CheckGameState,,, class'X2Item_Augmentations'.default.AugmentationSlots);
while (En.HasNext())
{
En.Next();
`LOG(GetFuncName() @ En.Slot,, 'Augmentations');
- if (AugmentationSlots.Find(En.Slot) == INDEX_NONE)
+ if (class'X2Item_Augmentations'.default.AugmentationSlots.Find(En.Slot) == INDEX_NONE)
{
continue;
}
@@ -53,12 +45,19 @@ simulated function UpdateEquippedList()
simulated function bool ShowInLockerList(XComGameState_Item Item, EInventorySlot SelectedSlot)
{
local X2ItemTemplate ItemTemplate;
+ local int Index;
ItemTemplate = Item.GetMyTemplate();
if(MeetsAllStrategyRequirements(ItemTemplate.ArmoryDisplayRequirements) && MeetsDisplayRequirement(ItemTemplate))
{
- return AugmentationSlots.Find(SelectedSlot) != INDEX_NONE && ItemTemplate.ItemCat == 'augmentation';
+ Index = class'X2Item_Augmentations'.default.SlotConfig.Find('InvSlot', SelectedSlot);
+
+ if (Index != INDEX_NONE)
+ {
+ `LOG(GetFuncName() @ ItemTemplate.DataName @ ItemTemplate.ItemCat @ ItemTemplate.ItemCat == class'X2Item_Augmentations'.default.SlotConfig[Index].Category,, 'Augmentation');
+ return ItemTemplate.ItemCat == class'X2Item_Augmentations'.default.SlotConfig[Index].Category;
+ }
}
return false;
diff --git a/RPG/Src/Augmentations/Classes/X2Ability_Augmentations_Abilities.uc b/RPG/Src/Augmentations/Classes/X2Ability_Augmentations_Abilities.uc
new file mode 100644
index 0000000..0733e0a
--- /dev/null
+++ b/RPG/Src/Augmentations/Classes/X2Ability_Augmentations_Abilities.uc
@@ -0,0 +1,127 @@
+class X2Ability_Augmentations_Abilities extends X2Ability config (Augmentations);
+
+var config int AUGMENTATION_BASE_MITIGATION_AMOUNT;
+
+static function array CreateTemplates()
+{
+ local array Templates;
+
+ Templates.AddItem(CyberPunch());
+ Templates.AddItem(CyberPunchAnimSet());
+ Templates.AddItem(AugmentationBaseStats());
+ Templates.AddItem(ClawsSlash());
+
+
+ return Templates;
+}
+
+static function X2AbilityTemplate CyberPunch()
+{
+ local X2AbilityTemplate Template;
+ local X2Effect_Knockback KnockbackEffect;
+
+ Template = class'X2Ability_RangerAbilitySet'.static.AddSwordSliceAbility('CyberPunch');
+
+ Template.IconImage = "img:///CyberPunchIcon";
+
+ Template.CustomFireAnim = 'FF_MeleeCyberPunchA';
+ Template.CustomFireKillAnim = 'FF_MeleeCyberPunchA';
+ Template.CustomMovingFireAnim = 'MV_MeleeCyberPunchA';
+ Template.CustomMovingFireKillAnim = 'MV_MeleeCyberPunchA';
+ Template.CustomMovingTurnLeftFireAnim = 'MV_RunTurn90LeftMeleeCyberPunchA';
+ Template.CustomMovingTurnLeftFireKillAnim = 'MV_RunTurn90LeftMeleeCyberPunchA';
+ Template.CustomMovingTurnRightFireAnim = 'MV_RunTurn90RightMeleeCyberPunchA';
+ Template.CustomMovingTurnRightFireKillAnim = 'MV_RunTurn90RightMeleeCyberPunchA';
+
+ KnockbackEffect = new class'X2Effect_Knockback';
+ KnockbackEffect.KnockbackDistance = 10;
+ KnockbackEffect.bKnockbackDestroysNonFragile = true;
+ KnockbackEffect.OnlyOnDeath = false;
+ Template.AddTargetEffect(KnockbackEffect);
+ Template.bOverrideMeleeDeath = true;
+
+ Template.AdditionalAbilities.AddItem('CyberPunchAnimSet');
+
+ return Template;
+}
+
+static function X2AbilityTemplate CyberPunchAnimSet()
+{
+ local X2AbilityTemplate Template;
+ local X2Effect_AdditionalAnimSets AnimSets;
+
+ `CREATE_X2ABILITY_TEMPLATE(Template, 'CyberPunchAnimSet');
+
+ Template.AbilitySourceName = 'eAbilitySource_Item';
+ Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
+ Template.Hostility = eHostility_Neutral;
+ Template.bDisplayInUITacticalText = false;
+
+ Template.AbilityToHitCalc = default.DeadEye;
+ Template.AbilityTargetStyle = default.SelfTarget;
+ Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger);
+
+ AnimSets = new class'X2Effect_AdditionalAnimSets';
+ AnimSets.EffectName = 'CyberPunchAnimsets';
+ AnimSets.AddAnimSetWithPath("AnimationsMaster_Augmentations.Anims.AS_CyberPunch");
+ AnimSets.BuildPersistentEffect(1, true, false, false, eGameRule_TacticalGameStart);
+ AnimSets.DuplicateResponse = eDupe_Ignore;
+ Template.AddTargetEffect(AnimSets);
+
+ Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
+ Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
+
+ Template.bSkipFireAction = true;
+
+ return Template;
+}
+
+static function X2AbilityTemplate AugmentationBaseStats()
+{
+ local X2AbilityTemplate Template;
+ local X2Effect_PersistentStatChange PersistentStatChangeEffect;
+
+ `CREATE_X2ABILITY_TEMPLATE(Template, 'AugmentationBaseStats');
+
+ Template.AbilitySourceName = 'eAbilitySource_Item';
+ Template.Hostility = eHostility_Neutral;
+ Template.AbilityToHitCalc = default.DeadEye;
+ Template.AbilityTargetStyle = default.SelfTarget;
+ Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger);
+ Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
+ Template.bIsPassive = true;
+ Template.bCrossClassEligible = false;
+
+ PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange';
+ PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false);
+ PersistentStatChangeEffect.AddPersistentStatChange(eStat_ArmorMitigation, default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
+ Template.AddTargetEffect(PersistentStatChangeEffect);
+
+ Template.bDisplayInUITooltip = false;
+ Template.bDisplayInUITacticalText = false;
+ Template.bShowActivation = true;
+
+ return Template;
+}
+
+static function X2AbilityTemplate ClawsSlash()
+{
+ local X2AbilityTemplate Template;
+ local X2AbilityCost_ActionPoints ActionPointCost;
+ local X2AbilityCooldown Cooldown;
+ local int i;
+
+ Template = class'X2Ability_RangerAbilitySet'.static.AddSwordSliceAbility('ClawsSlash');
+ Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_chryssalid_slash";
+
+ Template.bFrameEvenWhenUnitIsHidden = true;
+
+ for (i = 0; i < Template.AbilityCosts.Length; ++i)
+ {
+ ActionPointCost = X2AbilityCost_ActionPoints(Template.AbilityCosts[i]);
+ if (ActionPointCost != none)
+ ActionPointCost.bConsumeAllPoints = false;
+ }
+
+ return Template;
+}
diff --git a/RPG/Src/Augmentations/Classes/X2DownloadableContentInfo_Augmentations.uc b/RPG/Src/Augmentations/Classes/X2DownloadableContentInfo_Augmentations.uc
new file mode 100644
index 0000000..d09e8fb
--- /dev/null
+++ b/RPG/Src/Augmentations/Classes/X2DownloadableContentInfo_Augmentations.uc
@@ -0,0 +1,55 @@
+class X2DownloadableContentInfo_Augmentations extends X2DownloadableContentInfo
+ config(Augmentations);
+
+struct SocketReplacementInfo
+{
+ var name TorsoName;
+ var string SocketMeshString;
+ var bool Female;
+};
+
+var config array SocketReplacements;
+
+
+static function string DLCAppendSockets(XComUnitPawn Pawn)
+{
+ local SocketReplacementInfo SocketReplacement;
+ local name TorsoName;
+ local bool bIsFemale;
+ local string DefaultString, ReturnString;
+ local XComHumanPawn HumanPawn;
+
+ `LOG("DLCAppendSockets" @ Pawn,, 'LegendaryGear');
+
+ HumanPawn = XComHumanPawn(Pawn);
+ if (HumanPawn == none) { return ""; }
+
+ TorsoName = HumanPawn.m_kAppearance.nmTorso;
+ bIsFemale = HumanPawn.m_kAppearance.iGender == eGender_Female;
+
+ `LOG("DLCAppendSockets: Torso= " $ TorsoName $ ", Female= " $ string(bIsFemale),, 'LegendaryGear');
+
+ foreach default.SocketReplacements(SocketReplacement)
+ {
+ if (TorsoName != 'None' && TorsoName == SocketReplacement.TorsoName && bIsFemale == SocketReplacement.Female)
+ {
+ ReturnString = SocketReplacement.SocketMeshString;
+ break;
+ }
+ else
+ {
+ if (SocketReplacement.TorsoName == 'Default' && SocketReplacement.Female == bIsFemale)
+ {
+ DefaultString = SocketReplacement.SocketMeshString;
+ }
+ }
+ }
+ if (ReturnString == "")
+ {
+ // did not find, so use default
+ ReturnString = DefaultString;
+ }
+ `LOG("Returning mesh string: " $ ReturnString,, 'LegendaryGear');
+
+ return ReturnString;
+}
\ No newline at end of file
diff --git a/RPG/Src/Augmentations/Classes/X2Item_Augmentations.uc b/RPG/Src/Augmentations/Classes/X2Item_Augmentations.uc
index 29e3b54..c74768e 100644
--- a/RPG/Src/Augmentations/Classes/X2Item_Augmentations.uc
+++ b/RPG/Src/Augmentations/Classes/X2Item_Augmentations.uc
@@ -1,30 +1,52 @@
-class X2Item_Augmentations extends X2Item;
+class X2Item_Augmentations extends X2Item config (Augmentations);
+
+struct SlotConfigMap
+{
+ var EInventorySlot InvSlot;
+ var name Category;
+};
+
+var config array AugmentationSlots;
+var config array SlotConfig;
+
+var config WeaponDamageValue CLAWS_BASEDAMAGE;
+var config int CLAWS_AIM;
+var config int CLAWS_CRITCHANCE;
+var config int CLAWS_ICLIPSIZE;
+var config int CLAWS_ISOUNDRANGE;
+var config int CLAWS_IENVIRONMENTDAMAGE;
+var config int CLAWS_UPGRADE_SLOTS;
static function array CreateTemplates()
{
local array Items;
- Items.AddItem(AugmentationHead());
- Items.AddItem(AugmentationTorso());
- Items.AddItem(AugmentationArms());
- Items.AddItem(AugmentationLegs());
+ Items.AddItem(AugmentationHead_Base_CV());
+ Items.AddItem(AugmentationTorso_Base_CV());
+ Items.AddItem(AugmentationArms_Base_CV());
+ Items.AddItem(AugmentationLegs_Base_CV());
+
+ Items.AddItem(AugmentationArms_Claws_MG());
+ Items.AddItem(AugmentationClaws_Left_MG());
+ Items.AddItem(AugmentationArms_Grapple_MG());
return Items;
}
-static function X2DataTemplate AugmentationHead()
+static function X2DataTemplate AugmentationHead_Base_CV()
{
local X2EquipmentTemplate Template;
local ArtifactCost Resources;
local ArtifactCost Artifacts;
- `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationHead');
- Template.ItemCat = 'augmentation';
+ `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationHead_Base_CV');
+ Template.ItemCat = 'augmentation_head';
Template.InventorySlot = eInvSlot_AugmentationHead;
Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentations_Head";
Template.EquipSound = "StrategyUI_Mindshield_Equip";
- //Template.Abilities.AddItem('');
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
Template.CanBeBuilt = true;
Template.TradingPostValue = 12;
@@ -48,19 +70,20 @@ static function X2DataTemplate AugmentationHead()
return Template;
}
-static function X2DataTemplate AugmentationTorso()
+static function X2DataTemplate AugmentationTorso_Base_CV()
{
local X2EquipmentTemplate Template;
local ArtifactCost Resources;
local ArtifactCost Artifacts;
- `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationTorso');
- Template.ItemCat = 'augmentation';
+ `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationTorso_Base_CV');
+ Template.ItemCat = 'augmentation_torso';
Template.InventorySlot = eInvSlot_AugmentationTorso;
Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_Torso";
Template.EquipSound = "StrategyUI_Mindshield_Equip";
- //Template.Abilities.AddItem('');
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
Template.CanBeBuilt = true;
Template.TradingPostValue = 12;
@@ -84,19 +107,22 @@ static function X2DataTemplate AugmentationTorso()
return Template;
}
-static function X2DataTemplate AugmentationArms()
+static function X2DataTemplate AugmentationArms_Base_CV()
{
local X2EquipmentTemplate Template;
local ArtifactCost Resources;
local ArtifactCost Artifacts;
- `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationArms');
- Template.ItemCat = 'augmentation';
+ `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationArms_Base_CV');
+ Template.ItemCat = 'augmentation_arms';
Template.InventorySlot = eInvSlot_AugmentationArms;
Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_Arm";
Template.EquipSound = "StrategyUI_Mindshield_Equip";
- //Template.Abilities.AddItem('');
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
+
+ Template.Abilities.AddItem('CyberPunch');
Template.CanBeBuilt = true;
Template.TradingPostValue = 12;
@@ -120,19 +146,21 @@ static function X2DataTemplate AugmentationArms()
return Template;
}
-static function X2DataTemplate AugmentationLegs()
+
+static function X2DataTemplate AugmentationLegs_Base_CV()
{
local X2EquipmentTemplate Template;
local ArtifactCost Resources;
local ArtifactCost Artifacts;
- `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationLegs');
- Template.ItemCat = 'augmentation';
+ `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationLegs_Base_CV');
+ Template.ItemCat = 'augmentation_legs';
Template.InventorySlot = eInvSlot_AugmentationLegs;
Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_Leg";
Template.EquipSound = "StrategyUI_Mindshield_Equip";
- //Template.Abilities.AddItem('');
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
Template.CanBeBuilt = true;
Template.TradingPostValue = 12;
@@ -154,4 +182,128 @@ static function X2DataTemplate AugmentationLegs()
//Template.Cost.ArtifactCosts.AddItem(Artifacts);
return Template;
+}
+
+
+static function X2DataTemplate AugmentationArms_Claws_MG()
+{
+ local X2PairedWeaponTemplate Template;
+
+ `CREATE_X2TEMPLATE(class'X2PairedWeaponTemplate', Template, 'AugmentationArms_Claws_MG');
+ Template.WeaponPanelImage = "_Pistol"; // used by the UI. Probably determines iconview of the weapon.
+ Template.PairedSlot = eInvSlot_TertiaryWeapon;
+ Template.PairedTemplateName = 'AugmentationClaws_Left_MG';
+
+ Template.ItemCat = 'augmentation_arms';
+ Template.WeaponCat = 'cyberclaws';
+ Template.WeaponTech = 'magnetic';
+ Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_CyberClaws";
+ Template.EquipSound = "StrategyUI_Mindshield_Equip";
+ Template.InventorySlot = eInvSlot_AugmentationArms;
+ Template.StowedLocation = eSlot_Claw_R;
+
+ Template.GameArchetype = "CyberClaws_Augmentations.Archetypes.WP_Claws_LG";
+ Template.Tier = 2;
+
+ Template.Abilities.AddItem('ClawsSlash');
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
+
+
+ Template.iRadius = 1;
+ Template.NumUpgradeSlots = default.CLAWS_UPGRADE_SLOTS;
+ Template.InfiniteAmmo = true;
+ Template.iPhysicsImpulse = 5;
+
+ Template.iRange = 0;
+ Template.BaseDamage = default.CLAWS_BASEDAMAGE;
+ Template.Aim = default.CLAWS_AIM;
+ Template.CritChance = default.CLAWS_CRITCHANCE;
+ Template.iSoundRange = default.CLAWS_ISOUNDRANGE;
+ Template.iEnvironmentDamage = default.CLAWS_IENVIRONMENTDAMAGE;
+ Template.BaseDamage.DamageType='Melee';
+
+ Template.CanBeBuilt = true;
+ Template.bInfiniteItem = false;
+
+ Template.DamageTypeTemplateName = 'Melee';
+
+ return Template;
+}
+
+static function X2DataTemplate AugmentationClaws_Left_MG()
+{
+ local X2WeaponTemplate Template;
+
+ `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'AugmentationClaws_Left_MG');
+ Template.WeaponPanelImage = "_Pistol"; // used by the UI. Probably determines iconview of the weapon.
+
+ Template.ItemCat = 'augmentation_arms';
+ Template.WeaponCat = 'cyberclaws';
+ Template.WeaponTech = 'magnetic';
+ Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_CyberClaws";
+ Template.EquipSound = "StrategyUI_Mindshield_Equip";
+ Template.InventorySlot = eInvSlot_TertiaryWeapon;
+ Template.StowedLocation = eSlot_Claw_L;
+ // This all the resources; sounds, animations, models, physics, the works.
+ Template.GameArchetype = "CyberClaws_Augmentations.Archetypes.WP_Claws_Left_LG";
+ Template.Tier = 2;
+
+ Template.iRadius = 1;
+ Template.iPhysicsImpulse = 5;
+
+ Template.iRange = 0;
+ Template.BaseDamage.DamageType='Melee';
+
+ Template.CanBeBuilt = false;
+ Template.bInfiniteItem = false;
+
+ Template.DamageTypeTemplateName = 'Melee';
+
+ return Template;
+}
+
+static function X2DataTemplate AugmentationArms_Grapple_MG()
+{
+ local X2EquipmentTemplate Template;
+ local ArtifactCost Resources;
+ local ArtifactCost Artifacts;
+
+ `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'AugmentationArms_Grapple_MG');
+ Template.ItemCat = 'augmentation_arms';
+ Template.InventorySlot = eInvSlot_AugmentationArms;
+ Template.strImage = "img:///UILibrary_Augmentations.Inv_Augmentation_Arm";
+ Template.EquipSound = "StrategyUI_Mindshield_Equip";
+
+ Template.Abilities.AddItem('AugmentationBaseStats');
+ Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_Augmentations_Abilities'.default.AUGMENTATION_BASE_MITIGATION_AMOUNT);
+
+ Template.Abilities.AddItem('CyberPunch');
+ Template.Abilities.AddItem('GrapplePowered');
+
+ Template.CanBeBuilt = true;
+ Template.TradingPostValue = 12;
+ Template.PointsToComplete = 0;
+ Template.Tier = 2;
+
+ Template.bShouldCreateDifficultyVariants = true;
+
+ //// Requirements
+ //Template.Requirements.RequiredTechs.AddItem('AutopsySectoid');
+ //
+ //// Cost
+ //Resources.ItemTemplateName = 'Supplies';
+ //Resources.Quantity = 45;
+ //Template.Cost.ResourceCosts.AddItem(Resources);
+ //
+ //Artifacts.ItemTemplateName = 'CorpseSectoid';
+ //Artifacts.Quantity = 1;
+ //Template.Cost.ArtifactCosts.AddItem(Artifacts);
+
+ return Template;
+}
+
+defaultproperties
+{
+ bShouldCreateDifficultyVariants = true
}
\ No newline at end of file
diff --git a/RPG/Src/Augmentations/Classes/X2StrategyElement_AugmentationSlots.uc b/RPG/Src/Augmentations/Classes/X2StrategyElement_AugmentationSlots.uc
index 46b371a..8bb97f8 100644
--- a/RPG/Src/Augmentations/Classes/X2StrategyElement_AugmentationSlots.uc
+++ b/RPG/Src/Augmentations/Classes/X2StrategyElement_AugmentationSlots.uc
@@ -34,10 +34,16 @@ static function X2DataTemplate CreateAugmentationHeadSlotTemplate(name TemplateN
Template.ShowItemInLockerListFn = ShowAugmentationItemInLockerList;
Template.ValidateLoadoutFn = AugmentationValidateLoadout;
Template.UnitShowSlotFn = UnitShowAugmentationSlot;
+ Template.GetSlotUnequipBehaviorFn = AugmentationSlotGetUnequipBehavior;
return Template;
}
+function ECHSlotUnequipBehavior AugmentationSlotGetUnequipBehavior(CHItemSlot Slot, ECHSlotUnequipBehavior DefaultBehavior, XComGameState_Unit Unit, XComGameState_Item ItemState, optional XComGameState CheckGameState)
+{
+ return eCHSUB_DontAllow;
+}
+
static function bool UnitShowAugmentationSlot(CHItemSlot Slot, XComGameState_Unit UnitState, optional XComGameState CheckGameState)
{
return false;
@@ -46,17 +52,25 @@ static function bool UnitShowAugmentationSlot(CHItemSlot Slot, XComGameState_Uni
static function bool CanAddItemToAugmentationSlot(CHItemSlot Slot, XComGameState_Unit Unit, X2ItemTemplate Template, optional XComGameState CheckGameState, optional int Quantity = 1, optional XComGameState_Item ItemState)
{
local string strDummy;
+ local int Index;
+
`log(GetFuncName() @ "called" @ Template.DataName @ Template.ItemCat,, 'Augmentations');
if (!Slot.UnitHasSlot(Unit, strDummy, CheckGameState) || Unit.GetItemInSlot(Slot.InvSlot, CheckGameState) != none)
{
return false;
}
- return Template.ItemCat == 'augmentation';
+
+ Index = class'X2Item_Augmentations'.default.SlotConfig.Find('InvSlot', Slot.InvSlot);
+ if (Index != INDEX_NONE)
+ {
+ return Template.ItemCat == class'X2Item_Augmentations'.default.SlotConfig[Index].Category;
+ }
+ return false;
}
static function bool HasAugmentationSlot(CHItemSlot Slot, XComGameState_Unit UnitState, out string LockedReason, optional XComGameState CheckGameState)
{
- `log(GetFuncName() @ "called",, 'Augmentations');
+ //`log(GetFuncName() @ "called",, 'Augmentations');
// @TODO check if soldier is augmented
return UnitState.IsSoldier() && !UnitState.IsRobotic();
}
@@ -69,7 +83,14 @@ static function int AugmentationGetPriority(CHItemSlot Slot, XComGameState_Unit
static function bool ShowAugmentationItemInLockerList(CHItemSlot Slot, XComGameState_Unit Unit, XComGameState_Item ItemState, X2ItemTemplate ItemTemplate, XComGameState CheckGameState)
{
- return ItemTemplate.ItemCat == 'defense';
+ local int Index;
+ `log(GetFuncName() @ "called",, 'Augmentations');
+ Index = class'X2Item_Augmentations'.default.SlotConfig.Find('InvSlot', Slot.InvSlot);
+ if (Index != INDEX_NONE)
+ {
+ return ItemTemplate.ItemCat == class'X2Item_Augmentations'.default.SlotConfig[Index].Category;
+ }
+ return false;
}
static function string GetAugmentationDisplayLetter(CHItemSlot Slot)
@@ -85,7 +106,7 @@ static function AugmentationValidateLoadout(CHItemSlot Slot, XComGameState_Unit
local bool HasSlot;
EquippedAugmentation = Unit.GetItemInSlot(Slot.InvSlot, NewGameState);
HasSlot = Slot.UnitHasSlot(Unit, strDummy, NewGameState);
- `log(GetFuncName() @ "called",, 'Augmentations');
+ //`log(GetFuncName() @ "called",, 'Augmentations');
if(EquippedAugmentation == none && HasSlot)
{
//EquippedSecondaryWeapon = GetBestSecondaryWeapon(NewGameState);
diff --git a/RPG/Src/ExtendedUpgrades/Classes/X2Ability_UpgradeAbilitySet.uc b/RPG/Src/ExtendedUpgrades/Classes/X2Ability_UpgradeAbilitySet.uc
index 58de1dc..a9eff2d 100644
--- a/RPG/Src/ExtendedUpgrades/Classes/X2Ability_UpgradeAbilitySet.uc
+++ b/RPG/Src/ExtendedUpgrades/Classes/X2Ability_UpgradeAbilitySet.uc
@@ -311,7 +311,6 @@ static function X2AbilityTemplate TriggerAttachment(name TemplateName, int HitBo
Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
- Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState;
Template.bDisplayInUITooltip = false;
Template.bDisplayInUITacticalText = false;
diff --git a/RPG/Src/XCOM2RPGOverhaul/Classes/X2Ability_LongWar.uc b/RPG/Src/XCOM2RPGOverhaul/Classes/X2Ability_LongWar.uc
index edefd93..d6708ac 100644
--- a/RPG/Src/XCOM2RPGOverhaul/Classes/X2Ability_LongWar.uc
+++ b/RPG/Src/XCOM2RPGOverhaul/Classes/X2Ability_LongWar.uc
@@ -69,7 +69,7 @@ static function X2AbilityTemplate Bombard()
{
local X2AbilityTemplate Template;
- `CREATE_X2ABILITY_TEMPLATE(Template, 'Bombard');
+ `CREATE_X2ABILITY_TEMPLATE(Template, 'RpgBombard');
Template.IconImage = "img:///UILibrary_RPG.LW_AbilityBombard";
Template.AbilitySourceName = 'eAbilitySource_Perk';
Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
diff --git a/RPG/Src/XCOM2RPGOverhaul/Classes/X2EventListener_RPG_TacticalListener.uc b/RPG/Src/XCOM2RPGOverhaul/Classes/X2EventListener_RPG_TacticalListener.uc
index 7553b7c..04c2a00 100644
--- a/RPG/Src/XCOM2RPGOverhaul/Classes/X2EventListener_RPG_TacticalListener.uc
+++ b/RPG/Src/XCOM2RPGOverhaul/Classes/X2EventListener_RPG_TacticalListener.uc
@@ -210,7 +210,7 @@ static function EventListenerReturn OnGetItemRangeBombard(Object EventData, Obje
//verify the owner has bombard
UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(Item.OwnerStateObject.ObjectID));
- if(!UnitState.HasSoldierAbility('Bombard'))
+ if(!UnitState.HasSoldierAbility('RpgBombard'))
return ELR_NoInterrupt;
if(Ability == none)
diff --git a/RPG/Src/XCOM2RPGOverhaul/Classes/X2TemplateHelper_RPGOverhaul.uc b/RPG/Src/XCOM2RPGOverhaul/Classes/X2TemplateHelper_RPGOverhaul.uc
index def3aa9..356cb12 100644
--- a/RPG/Src/XCOM2RPGOverhaul/Classes/X2TemplateHelper_RPGOverhaul.uc
+++ b/RPG/Src/XCOM2RPGOverhaul/Classes/X2TemplateHelper_RPGOverhaul.uc
@@ -187,6 +187,7 @@ static function PatchWeapons()
AddAbilityToGremlinTemplate(GremlinTemplate, 'AidProtocol');
break;
case 'rifle':
+ case 'sparkrifle':
AddAbilityToWeaponTemplate(WeaponTemplate, 'FullAutoFire');
if (InStr(string(WeaponTemplate.DataName), "CV") != INDEX_NONE)
WeaponTemplate.SetAnimationNameForAbility('FullAutoFire', 'FF_AutoFireConvA');
@@ -785,6 +786,7 @@ static function AddAbilityToWeaponTemplate(out X2WeaponTemplate Template, name A
{
//`LOG(GetFuncName() @ Template.DataName @ Ability,, 'RPG');
Template.Abilities.AddItem(Ability);
+ ShowInTacticalText(Ability);
}
}
@@ -794,5 +796,16 @@ static function AddAbilityToGremlinTemplate(out X2GremlinTemplate Template, name
{
//`LOG(GetFuncName() @ Template.DataName @ Ability,, 'RPG');
Template.Abilities.AddItem(Ability);
+ ShowInTacticalText(Ability);
}
+}
+
+static function ShowInTacticalText(name Ability)
+{
+ local X2AbilityTemplateManager TemplateManager;
+ local X2AbilityTemplate AbilityTemplate;
+
+ TemplateManager = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager();
+ AbilityTemplate = TemplateManager.FindAbilityTemplate(Ability);
+ AbilityTemplate.bDisplayInUITacticalText = true;
}
\ No newline at end of file