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