diff --git a/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Ability_SpecialistAbilitySet.uc b/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Ability_SpecialistAbilitySet.uc
index 01e470dbe..1d9dfdda2 100644
--- a/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Ability_SpecialistAbilitySet.uc
+++ b/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Ability_SpecialistAbilitySet.uc
@@ -712,6 +712,7 @@ static function X2AbilityTemplate RevivalProtocol()
local X2AbilityCost_ActionPoints ActionPointCost;
local X2AbilityCost_Charges ChargeCost;
local X2AbilityCharges Charges;
+ local X2Effect_RestoreActionPoints RestoreAPEffect;
`CREATE_X2ABILITY_TEMPLATE(Template, 'RevivalProtocol');
@@ -733,10 +734,15 @@ static function X2AbilityTemplate RevivalProtocol()
Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
Template.AddShooterEffectExclusions();
- Template.AbilityTargetConditions.AddItem(new class'X2Condition_RevivalProtocol');
-
+ //Call recover from stun
+ Template.AddTargetEffect(class'X2StatusEffects'.static.CreateStunRecoverEffect());
+
Template.AddTargetEffect(RemoveAdditionalEffectsForRevivalProtocolAndRestorativeMist());
- Template.AddTargetEffect(new class'X2Effect_RestoreActionPoints'); // put the unit back to full actions
+ Template.AbilityTargetConditions.AddItem(new class'X2Condition_RevivalProtocol');
+
+ RestoreAPEffect = new class'X2Effect_RestoreActionPoints'; // put the unit back to full actions
+ RestoreAPEffect.TargetConditions.AddItem(new class'X2Condition_RevivalProtocolAP');
+ Template.AddTargetEffect(RestoreAPEffect);
Template.AbilityTriggers.AddItem(default.PlayerInputTrigger);
@@ -1213,11 +1219,13 @@ static function X2AbilityTemplate RestorativeMist()
Template.AddMultiTargetEffect(MedikitHeal);
RestoreEffect = new class'X2Effect_RestoreActionPoints';
- RestoreEffect.TargetConditions.AddItem(new class'X2Condition_RevivalProtocol');
+ RestoreEffect.TargetConditions.AddItem(new class'X2Condition_RevivalProtocolAP');
Template.AddMultiTargetEffect(RestoreEffect);
Template.AddMultiTargetEffect(RemoveAdditionalEffectsForRevivalProtocolAndRestorativeMist());
-
+ // Call Stun Recover
+ Template.AddMultiTargetEffect(class'X2StatusEffects'.static.CreateStunRecoverEffect());
+
//Typical path to build gamestate, but a (very crazy) special-case visualization
Template.BuildNewGameStateFn = SendGremlinToOwnerLocation_BuildGameState;
Template.BuildVisualizationFn = GremlinRestoration_BuildVisualization;
@@ -2106,6 +2114,8 @@ static function X2Effect_RemoveEffects RemoveAdditionalEffectsForRevivalProtocol
RemoveEffects.EffectNamesToRemove.AddItem(class'X2AbilityTemplateManager'.default.ObsessedName);
RemoveEffects.EffectNamesToRemove.AddItem(class'X2AbilityTemplateManager'.default.BerserkName);
RemoveEffects.EffectNamesToRemove.AddItem(class'X2AbilityTemplateManager'.default.ShatteredName);
+ //Remove stunned
+ RemoveEffects.EffectNamesToRemove.AddItem(class'X2AbilityTemplateManager'.default.StunnedName);
foreach class'X2Ability_DefaultAbilitySet'.default.MedikitHealEffectTypes(HealType)
{
diff --git a/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Condition_RevivalProtocol.uc b/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Condition_RevivalProtocol.uc
index 10a7abbfd..b94dbbb86 100644
--- a/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Condition_RevivalProtocol.uc
+++ b/X2WOTCCommunityHighlander/Src/XComGame/Classes/X2Condition_RevivalProtocol.uc
@@ -17,8 +17,8 @@ event name CallMeetsCondition(XComGameState_BaseObject kTarget)
if (!TargetUnit.GetMyTemplate().bCanBeRevived || TargetUnit.IsBeingCarried() )
return 'AA_UnitIsImmune';
-
- if (TargetUnit.IsPanicked() || TargetUnit.IsUnconscious() || TargetUnit.IsDisoriented() || TargetUnit.IsDazed())
+ //Revival protocol can target stunned units
+ if (TargetUnit.IsPanicked() || TargetUnit.IsUnconscious() || TargetUnit.IsDisoriented() || TargetUnit.IsDazed() || TargetUnit.IsStunned())
return 'AA_Success';
return 'AA_UnitIsNotImpaired';
@@ -27,14 +27,19 @@ event name CallMeetsCondition(XComGameState_BaseObject kTarget)
event name CallMeetsConditionWithSource(XComGameState_BaseObject kTarget, XComGameState_BaseObject kSource)
{
local XComGameState_Unit SourceUnit, TargetUnit;
+ local XComGameState_Player SourceTeam, TargetTeam;
SourceUnit = XComGameState_Unit(kSource);
TargetUnit = XComGameState_Unit(kTarget);
+ SourceTeam = XComGameState_Player(`XCOMHISTORY.GetGameStateForObjectID(SourceUnit.GetAssociatedPlayerID()));
+ TargetTeam = XComGameState_Player(`XCOMHISTORY.GetGameStateForObjectID(TargetUnit.GetAssociatedPlayerID()));
+
if (SourceUnit == none || TargetUnit == none)
return 'AA_NotAUnit';
- if (SourceUnit.ControllingPlayer == TargetUnit.ControllingPlayer)
+ //Revival protocol can now target resistance forces
+ if (!SourceTeam.IsEnemyPlayer(TargetTeam))
return 'AA_Success';
return 'AA_UnitIsHostile';
diff --git a/X2WOTCCommunityHighlander/X2WOTCCommunityHighlander.x2proj b/X2WOTCCommunityHighlander/X2WOTCCommunityHighlander.x2proj
index f360d9b0f..9f7caf6b4 100644
--- a/X2WOTCCommunityHighlander/X2WOTCCommunityHighlander.x2proj
+++ b/X2WOTCCommunityHighlander/X2WOTCCommunityHighlander.x2proj
@@ -484,6 +484,9 @@
Content
+
+ Content
+
Content
@@ -511,6 +514,12 @@
Content
+
+ Content
+
+
+ Content
+
Content
@@ -544,9 +553,6 @@
Content
-
- Content
-
Content