diff --git a/OpenRA.Mods.Cnc/Traits/Render/WithPermanentInjury.cs b/OpenRA.Mods.Cnc/Traits/Render/WithPermanentInjury.cs deleted file mode 100644 index b2d38ecad6..0000000000 --- a/OpenRA.Mods.Cnc/Traits/Render/WithPermanentInjury.cs +++ /dev/null @@ -1,47 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using OpenRA.Mods.Common.Traits; -using OpenRA.Traits; - -namespace OpenRA.Mods.Cnc.Traits.Render -{ - [Desc("Change the sprite after a certain amount of damage is taken, even when the hitpoints are regenerated.")] - public class WithPermanentInjuryInfo : ITraitInfo - { - public readonly DamageState TriggeringDamageStage = DamageState.Critical; - - public readonly string InjuredSequencePrefix = "crippled-"; - - public object Create(ActorInitializer init) { return new WithPermanentInjury(init, this); } - } - - public class WithPermanentInjury : INotifyDamage, IRenderInfantrySequenceModifier - { - readonly WithPermanentInjuryInfo info; - - bool isInjured; - - bool IRenderInfantrySequenceModifier.IsModifyingSequence { get { return isInjured; } } - string IRenderInfantrySequenceModifier.SequencePrefix { get { return info.InjuredSequencePrefix; } } - - public WithPermanentInjury(ActorInitializer init, WithPermanentInjuryInfo info) - { - this.info = info; - } - - void INotifyDamage.Damaged(Actor self, AttackInfo e) - { - if (e.DamageState == info.TriggeringDamageStage) - isInjured = true; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20191117/RemoveWithPermanentInjury.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20191117/RemoveWithPermanentInjury.cs new file mode 100644 index 0000000000..4709ee59fc --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20191117/RemoveWithPermanentInjury.cs @@ -0,0 +1,52 @@ +#region Copyright & License Information +/* + * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; + +namespace OpenRA.Mods.Common.UpdateRules.Rules +{ + public class RemoveWithPermanentInjury : UpdateRule + { + public override string Name { get { return "WithPermanentInjury trait has been removed."; } } + public override string Description + { + get + { + return "The WithPermanentInjury trait has been removed, and should be replaced by\n" + + "TakeCover with negative ProneTime value + GrantConditionOnDamageState/-Health.\n" + + "Affected actors are listed so that these traits can be defined."; + } + } + + readonly List locations = new List(); + + public override IEnumerable AfterUpdate(ModData modData) + { + if (locations.Any()) + yield return "The WithPermanentInjury trait has been removed from the following actors.\n" + + "You must manually define TakeCover with a negative ProneTime and use\n" + + "GrantConditionOnDamageState/-Health with 'GrantPermanently: true'\n" + + "to enable TakeCover at the desired damage state:\n" + + UpdateUtils.FormatMessageList(locations); + + locations.Clear(); + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + if (actorNode.RemoveNodes("WithPermanentInjury") > 0) + locations.Add("{0} ({1})".F(actorNode.Key, actorNode.Location.Filename)); + + yield break; + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 5e75b50f98..aff5214b67 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -145,6 +145,7 @@ namespace OpenRA.Mods.Common.UpdateRules new RemoveAirdropActorTypeDefault(), new RenameProneTime(), new ReplaceAttackTypeStrafe(), + new RemoveWithPermanentInjury(), }) };