diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index b363c85d5e..63e1d1e8d8 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -72,7 +72,6 @@
-
diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
index f442976916..1b6be932f6 100644
--- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
+++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
@@ -364,6 +364,7 @@
+
@@ -386,6 +387,8 @@
+
+
@@ -405,6 +408,7 @@
+
diff --git a/OpenRA.Mods.Common/Traits/Render/AutoSelectionSize.cs b/OpenRA.Mods.Common/Traits/Render/AutoSelectionSize.cs
new file mode 100644
index 0000000000..ca00a4c077
--- /dev/null
+++ b/OpenRA.Mods.Common/Traits/Render/AutoSelectionSize.cs
@@ -0,0 +1,31 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2015 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. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.Common.Traits
+{
+ public class AutoSelectionSizeInfo : ITraitInfo, Requires
+ {
+ public object Create(ActorInitializer init) { return new AutoSelectionSize(this); }
+ }
+
+ public class AutoSelectionSize : IAutoSelectionSize
+ {
+ public AutoSelectionSize(AutoSelectionSizeInfo info) { }
+
+ public int2 SelectionSize(Actor self)
+ {
+ var rs = self.Trait();
+ return rs.AutoSelectionSize(self);
+ }
+ }
+}
diff --git a/OpenRA.Mods.Common/Traits/Render/RenderSimple.cs b/OpenRA.Mods.Common/Traits/Render/RenderSimple.cs
index dec1db4a4e..249a34ca34 100644
--- a/OpenRA.Mods.Common/Traits/Render/RenderSimple.cs
+++ b/OpenRA.Mods.Common/Traits/Render/RenderSimple.cs
@@ -16,7 +16,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
- [Desc("Basic render trait for immobile actors.")]
+ [Desc("Basic render trait for immobile actors. Deprecated, use RenderSprites + WithSpriteBody instead.")]
public class RenderSimpleInfo : RenderSpritesInfo, IRenderActorPreviewSpritesInfo, IQuantizeBodyOrientationInfo, Requires
{
public readonly string Sequence = "idle";
diff --git a/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs b/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs
index 06970f8f8f..ac31eaa169 100644
--- a/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs
+++ b/OpenRA.Mods.Common/Traits/Render/RenderSprites.cs
@@ -236,8 +236,8 @@ namespace OpenRA.Mods.Common.Traits
return sequence;
}
- // Required by RenderSimple
- protected int2 AutoSelectionSize(Actor self)
+ // Required by RenderSimple, WithSpriteBody and WithInfantryBody
+ public int2 AutoSelectionSize(Actor self)
{
return anims.Where(b => b.IsVisible
&& b.Animation.Animation.CurrentSequence != null)
diff --git a/OpenRA.Mods.Common/Traits/Render/RenderUnit.cs b/OpenRA.Mods.Common/Traits/Render/RenderUnit.cs
index 143daff2a5..832544bf63 100644
--- a/OpenRA.Mods.Common/Traits/Render/RenderUnit.cs
+++ b/OpenRA.Mods.Common/Traits/Render/RenderUnit.cs
@@ -13,7 +13,8 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
- [Desc("Render trait for non-animated actors that have sprites facing into each direction.")]
+ [Desc("Render trait for non-animated actors that have sprites facing into each direction.",
+ "Deprecated. This will soon be removed, use RenderSprites + WithFacingSpriteBody instead.")]
public class RenderUnitInfo : RenderSimpleInfo, Requires
{
public override object Create(ActorInitializer init) { return new RenderUnit(init, this); }
diff --git a/OpenRA.Mods.Common/Traits/Render/WithAttackAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithAttackAnimation.cs
new file mode 100644
index 0000000000..b6c9958969
--- /dev/null
+++ b/OpenRA.Mods.Common/Traits/Render/WithAttackAnimation.cs
@@ -0,0 +1,73 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2015 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. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Linq;
+using OpenRA.Mods.Common.Traits;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.RA.Traits
+{
+ public class WithAttackAnimationInfo : ITraitInfo, Requires, Requires, Requires
+ {
+ [Desc("Armament name")]
+ public readonly string Armament = "primary";
+
+ [Desc("Displayed while attacking.")]
+ public readonly string AttackSequence = null;
+
+ [Desc("Displayed while targeting.")]
+ public readonly string AimSequence = null;
+
+ [Desc("Shown while reloading.")]
+ public readonly string ReloadPrefix = null;
+
+ public object Create(ActorInitializer init) { return new WithAttackAnimation(init, this); }
+ }
+
+ public class WithAttackAnimation : ITick, INotifyAttack
+ {
+ readonly WithAttackAnimationInfo info;
+ readonly AttackBase attack;
+ readonly Armament armament;
+ readonly WithFacingSpriteBody wfsb;
+
+ public WithAttackAnimation(ActorInitializer init, WithAttackAnimationInfo info)
+ {
+ this.info = info;
+ attack = init.Self.Trait();
+ armament = init.Self.TraitsImplementing()
+ .Single(a => a.Info.Name == info.Armament);
+ wfsb = init.Self.Trait();
+ }
+
+ public void Attacking(Actor self, Target target, Armament a, Barrel barrel)
+ {
+ if (!string.IsNullOrEmpty(info.AttackSequence))
+ wfsb.PlayCustomAnimation(self, info.AttackSequence);
+ }
+
+ public void Tick(Actor self)
+ {
+ if (string.IsNullOrEmpty(info.AimSequence) && string.IsNullOrEmpty(info.ReloadPrefix))
+ return;
+
+ var sequence = wfsb.Info.Sequence;
+ if (!string.IsNullOrEmpty(info.AimSequence) && attack.IsAttacking)
+ sequence = info.AimSequence;
+
+ var prefix = (armament.IsReloading && !string.IsNullOrEmpty(info.ReloadPrefix)) ? info.ReloadPrefix : "";
+
+ if (!string.IsNullOrEmpty(prefix) && sequence != (prefix + sequence))
+ sequence = prefix + sequence;
+
+ wfsb.DefaultAnimation.ReplaceAnim(sequence);
+ }
+ }
+}
diff --git a/OpenRA.Mods.Common/Traits/Render/WithFacingSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithFacingSpriteBody.cs
new file mode 100644
index 0000000000..81622ae687
--- /dev/null
+++ b/OpenRA.Mods.Common/Traits/Render/WithFacingSpriteBody.cs
@@ -0,0 +1,46 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2015 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. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using OpenRA.Graphics;
+using OpenRA.Mods.Common.Graphics;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.Common.Traits
+{
+ public class WithFacingSpriteBodyInfo : WithSpriteBodyInfo, Requires, Requires
+ {
+ public override object Create(ActorInitializer init) { return new WithFacingSpriteBody(init, this); }
+
+ public override IEnumerable RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p)
+ {
+ var ifacing = init.Actor.Traits.GetOrDefault();
+ var facing = ifacing != null ? init.Contains() ? init.Get() : ifacing.GetInitialFacing() : 0;
+
+ var anim = new Animation(init.World, image, () => facing);
+ anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence));
+
+ yield return new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale);
+ }
+
+ public override int QuantizedBodyFacings(ActorInfo ai, SequenceProvider sequenceProvider, string race)
+ {
+ var rsi = ai.Traits.Get();
+ return sequenceProvider.GetSequence(rsi.GetImage(ai, sequenceProvider, race), Sequence).Facings;
+ }
+ }
+
+ public class WithFacingSpriteBody : WithSpriteBody
+ {
+ public WithFacingSpriteBody(ActorInitializer init, WithFacingSpriteBodyInfo info)
+ : base(init, info, RenderSprites.MakeFacingFunc(init.Self)) { }
+ }
+}
diff --git a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs
index 22322a1d22..7e03eb43fb 100644
--- a/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs
+++ b/OpenRA.Mods.Common/Traits/Render/WithHarvestAnimation.cs
@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits
var rs = self.Trait();
var body = self.Trait();
- anim = new Animation(self.World, rs.GetImage(self), RenderSimple.MakeFacingFunc(self));
+ anim = new Animation(self.World, rs.GetImage(self), RenderSprites.MakeFacingFunc(self));
anim.IsDecoration = true;
anim.Play(info.Sequence);
rs.Add(new AnimationWithOffset(anim,
diff --git a/OpenRA.Mods.Cnc/Traits/RenderUnitFlying.cs b/OpenRA.Mods.Common/Traits/Render/WithMoveAnimation.cs
similarity index 55%
rename from OpenRA.Mods.Cnc/Traits/RenderUnitFlying.cs
rename to OpenRA.Mods.Common/Traits/Render/WithMoveAnimation.cs
index a7ea686b2b..67b391ef23 100644
--- a/OpenRA.Mods.Cnc/Traits/RenderUnitFlying.cs
+++ b/OpenRA.Mods.Common/Traits/Render/WithMoveAnimation.cs
@@ -8,47 +8,47 @@
*/
#endregion
-using OpenRA.Mods.Common.Traits;
+using System.Linq;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc.Traits
+namespace OpenRA.Mods.Common.Traits
{
- class RenderUnitFlyingInfo : RenderUnitInfo, Requires
+ public class WithMoveAnimationInfo : ITraitInfo, Requires, Requires
{
+ [Desc("Displayed while moving.")]
public readonly string MoveSequence = "move";
- public override object Create(ActorInitializer init) { return new RenderUnitFlying(init, this); }
+ public object Create(ActorInitializer init) { return new WithMoveAnimation(init, this); }
}
- class RenderUnitFlying : RenderUnit, ITick
+ public class WithMoveAnimation : ITick
{
- readonly RenderUnitFlyingInfo info;
+ readonly WithMoveAnimationInfo info;
readonly IMove movement;
+ readonly WithFacingSpriteBody wfsb;
WPos cachedPosition;
- public RenderUnitFlying(ActorInitializer init, RenderUnitFlyingInfo info)
- : base(init, info)
+ public WithMoveAnimation(ActorInitializer init, WithMoveAnimationInfo info)
{
this.info = info;
movement = init.Self.Trait();
+ wfsb = init.Self.Trait();
cachedPosition = init.Self.CenterPosition;
}
- public override void Tick(Actor self)
+ public void Tick(Actor self)
{
- base.Tick(self);
-
var oldCachedPosition = cachedPosition;
cachedPosition = self.CenterPosition;
// Flying units set IsMoving whenever they are airborne, which isn't enough for our purposes
var isMoving = movement.IsMoving && !self.IsDead && (oldCachedPosition - cachedPosition).HorizontalLengthSquared != 0;
- if (isMoving ^ (DefaultAnimation.CurrentSequence.Name != info.MoveSequence))
+ if (isMoving ^ (wfsb.DefaultAnimation.CurrentSequence.Name != info.MoveSequence))
return;
- DefaultAnimation.ReplaceAnim(isMoving ? info.MoveSequence : info.Sequence);
+ wfsb.DefaultAnimation.ReplaceAnim(isMoving ? info.MoveSequence : wfsb.Info.Sequence);
}
}
}
diff --git a/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs b/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs
index d00cf49ae3..1aa72e50de 100644
--- a/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs
+++ b/OpenRA.Mods.Common/Traits/Render/WithSpriteBody.cs
@@ -9,13 +9,16 @@
#endregion
using System;
+using System.Collections.Generic;
using OpenRA.Graphics;
+using OpenRA.Mods.Common.Graphics;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Default trait for rendering sprite-based actors.")]
- class WithSpriteBodyInfo : UpgradableTraitInfo, ITraitInfo, Requires
+ public class WithSpriteBodyInfo : UpgradableTraitInfo, ITraitInfo, IRenderActorPreviewSpritesInfo, IQuantizeBodyOrientationInfo,
+ Requires
{
[Desc("Animation to play when the actor is created.")]
public readonly string StartSequence = null;
@@ -23,30 +26,54 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Animation to play when the actor is idle.")]
public readonly string Sequence = "idle";
- public object Create(ActorInitializer init) { return new WithSpriteBody(init, this); }
- }
+ public virtual object Create(ActorInitializer init) { return new WithSpriteBody(init, this); }
- class WithSpriteBody : UpgradableTrait, ISpriteBody
- {
- readonly Animation body;
- readonly WithSpriteBodyInfo info;
-
- public WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info)
- : base(info)
+ public virtual IEnumerable RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p)
{
- this.info = info;
+ var anim = new Animation(init.World, image);
+ anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence));
- var rs = init.Self.Trait();
- body = new Animation(init.Self.World, rs.GetImage(init.Self));
- PlayCustomAnimation(init.Self, info.StartSequence, () => body.PlayRepeating(info.Sequence));
- rs.Add(new AnimationWithOffset(body, null, () => IsTraitDisabled));
+ yield return new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale);
}
- public void PlayCustomAnimation(Actor self, string newAnimation, Action after)
+ public virtual int QuantizedBodyFacings(ActorInfo ai, SequenceProvider sequenceProvider, string race)
{
- body.PlayThen(newAnimation, () =>
+ return 1;
+ }
+ }
+
+ public class WithSpriteBody : UpgradableTrait, ISpriteBody
+ {
+ public readonly Animation DefaultAnimation;
+
+ public WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info)
+ : this(init, info, () => 0) { }
+
+ protected WithSpriteBody(ActorInitializer init, WithSpriteBodyInfo info, Func baseFacing)
+ : base(info)
+ {
+ var rs = init.Self.Trait();
+
+ DefaultAnimation = new Animation(init.World, rs.GetImage(init.Self), baseFacing);
+ rs.Add(new AnimationWithOffset(DefaultAnimation, null, () => IsTraitDisabled));
+
+ if (Info.StartSequence != null)
+ PlayCustomAnimation(init.Self, Info.StartSequence,
+ () => DefaultAnimation.PlayRepeating(NormalizeSequence(init.Self, Info.Sequence)));
+ else
+ DefaultAnimation.PlayRepeating(NormalizeSequence(init.Self, Info.Sequence));
+ }
+
+ public string NormalizeSequence(Actor self, string sequence)
+ {
+ return RenderSprites.NormalizeSequence(DefaultAnimation, self.GetDamageState(), sequence);
+ }
+
+ public void PlayCustomAnimation(Actor self, string name, Action after = null)
+ {
+ DefaultAnimation.PlayThen(NormalizeSequence(self, name), () =>
{
- body.Play(info.Sequence);
+ DefaultAnimation.Play(NormalizeSequence(self, Info.Sequence));
if (after != null)
after();
});
@@ -54,14 +81,15 @@ namespace OpenRA.Mods.Common.Traits
public void PlayCustomAnimationRepeating(Actor self, string name)
{
- body.PlayThen(name, () => PlayCustomAnimationRepeating(self, name));
+ DefaultAnimation.PlayThen(name,
+ () => PlayCustomAnimationRepeating(self, name));
}
- public void PlayCustomAnimationBackwards(Actor self, string name, Action after)
+ public void PlayCustomAnimationBackwards(Actor self, string name, Action after = null)
{
- body.PlayBackwardsThen(name, () =>
+ DefaultAnimation.PlayBackwardsThen(NormalizeSequence(self, name), () =>
{
- body.PlayRepeating(info.Sequence);
+ DefaultAnimation.PlayRepeating(NormalizeSequence(self, Info.Sequence));
if (after != null)
after();
});
diff --git a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs
index c9bad3e7a8..3aa7db2d70 100644
--- a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs
+++ b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs
@@ -13,7 +13,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
- class ThrowsParticleInfo : ITraitInfo, Requires, Requires
+ class ThrowsParticleInfo : ITraitInfo, Requires, Requires
{
public readonly string Anim = null;
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Traits
public ThrowsParticle(ActorInitializer init, ThrowsParticleInfo info)
{
var self = init.Self;
- var rs = self.Trait();
+ var rs = self.Trait();
var body = self.Trait();
// TODO: Carry orientation over from the parent instead of just facing
diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
index e6f442919f..09ffe25d62 100644
--- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
+++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
@@ -1016,6 +1016,75 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
+ if (engineVersion < 20150528)
+ {
+ // Note (stolen from WithInfantryBody upgrade rule):
+ // These rules are set up to do approximately the right thing for maps, but
+ // mods need additional manual tweaks. This is the best we can do without having
+ // much smarter rules parsing, because we currently can't reason about inherited traits.
+ if (depth == 0)
+ {
+ var childKeys = new[] { "Sequence" };
+
+ var ru = node.Value.Nodes.FirstOrDefault(n => n.Key == "RenderUnit");
+ if (ru != null)
+ {
+ ru.Key = "WithFacingSpriteBody";
+ node.Value.Nodes.Add(new MiniYamlNode("AutoSelectionSize", ""));
+
+ var rsNodes = ru.Value.Nodes.Where(n => !childKeys.Contains(n.Key)).ToList();
+ if (rsNodes.Any())
+ node.Value.Nodes.Add(new MiniYamlNode("RenderSprites", new MiniYaml("", rsNodes)));
+ else
+ node.Value.Nodes.Add(new MiniYamlNode("RenderSprites", ""));
+
+ ru.Value.Nodes.RemoveAll(n => rsNodes.Contains(n));
+ }
+
+ var rru = node.Value.Nodes.FirstOrDefault(n => n.Key == "-RenderUnit");
+ if (rru != null)
+ rru.Key = "-WithFacingSpriteBody";
+ }
+
+ // For RenderUnitReload
+ var rur = node.Value.Nodes.Where(x => x.Key == "RenderUnitReload");
+ if (rur.Any())
+ {
+ rur.Do(x => x.Key = "RenderSprites");
+ node.Value.Nodes.Add(new MiniYamlNode("AutoSelectionSize", ""));
+ node.Value.Nodes.Add(new MiniYamlNode("WithFacingSpriteBody", "", new List
+ {
+ new MiniYamlNode("Sequence", "idle")
+ }));
+ node.Value.Nodes.Add(new MiniYamlNode("WithAttackAnimation", "", new List
+ {
+ new MiniYamlNode("AimSequence", "aim"),
+ new MiniYamlNode("ReloadPrefix", "empty-")
+ }));
+
+ var rrur = node.Value.Nodes.FirstOrDefault(n => n.Key == "-RenderUnitReload");
+ if (rrur != null)
+ rrur.Key = "-WithFacingSpriteBody";
+ }
+
+ // For RenderUnitFlying
+ var ruf = node.Value.Nodes.Where(x => x.Key == "RenderUnitFlying");
+ if (ruf.Any())
+ {
+ ruf.Do(x => x.Key = "RenderSprites");
+ node.Value.Nodes.Add(new MiniYamlNode("AutoSelectionSize", ""));
+ node.Value.Nodes.Add(new MiniYamlNode("WithFacingSpriteBody", ""));
+ node.Value.Nodes.Add(new MiniYamlNode("WithMoveAnimation", "", new List
+ {
+ new MiniYamlNode("MoveSequence", "move")
+ }));
+
+ var rruf = node.Value.Nodes.FirstOrDefault(n => n.Key == "-RenderUnitFlying");
+ if (rruf != null)
+ rruf.Key = "-WithFacingSpriteBody";
+ }
+ }
+
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index afd27135f0..d4c2fb794c 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -88,7 +88,6 @@
-
diff --git a/OpenRA.Mods.RA/Traits/MadTank.cs b/OpenRA.Mods.RA/Traits/MadTank.cs
index 7082bb6052..c11e7098ae 100644
--- a/OpenRA.Mods.RA/Traits/MadTank.cs
+++ b/OpenRA.Mods.RA/Traits/MadTank.cs
@@ -22,7 +22,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Traits
{
- class MadTankInfo : ITraitInfo, Requires, Requires
+ class MadTankInfo : ITraitInfo, Requires, Requires
{
public readonly string ThumpSequence = "piston";
public readonly int ThumpInterval = 8;
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.RA.Traits
{
readonly Actor self;
readonly MadTankInfo info;
- readonly RenderUnit renderUnit;
+ readonly WithFacingSpriteBody wfsb;
readonly ScreenShaker screenShaker;
bool deployed;
int tick;
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.RA.Traits
{
this.self = self;
this.info = info;
- renderUnit = self.Trait();
+ wfsb = self.Trait();
screenShaker = self.World.WorldActor.Trait();
}
@@ -147,7 +147,7 @@ namespace OpenRA.Mods.RA.Traits
self.World.AddFrameEndTask(w => EjectDriver());
if (info.ThumpSequence != null)
- renderUnit.PlayCustomAnimationRepeating(self, info.ThumpSequence);
+ wfsb.PlayCustomAnimationRepeating(self, info.ThumpSequence);
deployed = true;
self.QueueActivity(new Wait(info.ChargeDelay, false));
self.QueueActivity(new CallFunc(() => Sound.Play(info.ChargeSound, self.CenterPosition)));
diff --git a/OpenRA.Mods.RA/Traits/Render/RenderUnitReload.cs b/OpenRA.Mods.RA/Traits/Render/RenderUnitReload.cs
deleted file mode 100644
index c26235c294..0000000000
--- a/OpenRA.Mods.RA/Traits/Render/RenderUnitReload.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2015 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. For more information,
- * see COPYING.
- */
-#endregion
-
-using System.Linq;
-using OpenRA.Mods.Common.Traits;
-using OpenRA.Traits;
-
-namespace OpenRA.Mods.RA.Traits
-{
- class RenderUnitReloadInfo : RenderUnitInfo, Requires, Requires
- {
- [Desc("Armament name")]
- public readonly string Armament = "primary";
-
- [Desc("Displayed while targeting.")]
- public readonly string AimSequence = "aim";
-
- [Desc("Shown while reloading.")]
- public readonly string EmptyPrefix = "empty-";
-
- public override object Create(ActorInitializer init) { return new RenderUnitReload(init, this); }
- }
-
- class RenderUnitReload : RenderUnit
- {
- readonly AttackBase attack;
- readonly Armament armament;
- readonly RenderUnitReloadInfo info;
-
- public RenderUnitReload(ActorInitializer init, RenderUnitReloadInfo info)
- : base(init, info)
- {
- this.info = info;
- attack = init.Self.Trait();
- armament = init.Self.TraitsImplementing()
- .Single(a => a.Info.Name == info.Armament);
- }
-
- public override void Tick(Actor self)
- {
- var sequence = (armament.IsReloading ? info.EmptyPrefix : "") + (attack.IsAttacking ? info.AimSequence : info.Sequence);
- if (sequence != DefaultAnimation.CurrentSequence.Name)
- DefaultAnimation.ReplaceAnim(sequence);
-
- base.Tick(self);
- }
- }
-}
diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml
index ffae216000..2e346a3fc7 100644
--- a/mods/cnc/rules/aircraft.yaml
+++ b/mods/cnc/rules/aircraft.yaml
@@ -24,7 +24,7 @@ TRAN:
Type: Light
RevealsShroud:
Range: 10c0
- RenderUnit:
+ WithFacingSpriteBody:
WithRotor@PRIMARY:
Offset: -597,0,171
Sequence: rotor2
@@ -40,6 +40,8 @@ TRAN:
Explodes:
Weapon: HeliExplode
EmptyWeapon: HeliExplode
+ AutoSelectionSize:
+ RenderSprites:
HELI:
Inherits: ^Helicopter
@@ -81,7 +83,7 @@ HELI:
SelfReloads: true
ReloadCount: 10
SelfReloadTicks: 200
- RenderUnit:
+ WithFacingSpriteBody:
WithRotor:
Offset: 0,0,85
WithMuzzleFlash:
@@ -91,6 +93,8 @@ HELI:
Explodes:
Weapon: HeliExplode
EmptyWeapon: HeliExplode
+ AutoSelectionSize:
+ RenderSprites:
ORCA:
Inherits: ^Helicopter
@@ -129,13 +133,17 @@ ORCA:
SelfReloads: true
ReloadCount: 2
SelfReloadTicks: 100
- RenderUnitFlying:
+ RenderSprites:
+ WithFacingSpriteBody:
LeavesHusk:
HuskActor: ORCA.Husk
AutoTarget:
Explodes:
Weapon: HeliExplode
EmptyWeapon: HeliExplode
+ AutoSelectionSize:
+ WithMoveAnimation:
+ MoveSequence: move
C17:
ParaDrop:
@@ -154,7 +162,7 @@ C17:
HP: 25
Armor:
Type: Heavy
- RenderUnit:
+ WithFacingSpriteBody:
Cargo:
MaxWeight: 10
PipCount: 10
@@ -176,6 +184,8 @@ C17:
Contrail@4:
Offset: -261,650,0
TrailLength: 15
+ AutoSelectionSize:
+ RenderSprites:
A10:
Inherits: ^Plane
@@ -192,7 +202,7 @@ A10:
HP: 150
Armor:
Type: Heavy
- RenderUnit:
+ WithFacingSpriteBody:
AttackBomber:
Armaments: gun, bombs
Guns: gun
@@ -217,6 +227,8 @@ A10:
Contrail@2:
Offset: -640,-171,0
TrailLength: 15
+ AutoSelectionSize:
+ RenderSprites:
TRAN.Husk:
Inherits: ^HelicopterHusk
@@ -231,7 +243,9 @@ TRAN.Husk:
Offset: -597,0,171
WithRotor@SECONDARY:
Offset: 597,0,85
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: tran
HELI.Husk:
@@ -245,7 +259,9 @@ HELI.Husk:
Range: 10c0
WithRotor:
Offset: 0,0,85
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: heli
ORCA.Husk:
@@ -257,6 +273,8 @@ ORCA.Husk:
Speed: 186
RevealsShroud:
Range: 10c0
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: orca
diff --git a/mods/cnc/rules/civilian.yaml b/mods/cnc/rules/civilian.yaml
index 75bb274ae2..0ed6a8ffd4 100644
--- a/mods/cnc/rules/civilian.yaml
+++ b/mods/cnc/rules/civilian.yaml
@@ -460,7 +460,7 @@ VICE:
WanderMoveRadius: 2
MinMoveDelayInTicks: 25
MaxMoveDelayInTicks: 45
- RenderUnit:
+ WithFacingSpriteBody:
WithMuzzleFlash:
SplitFacings: true
CombatDebugOverlay:
@@ -473,4 +473,6 @@ VICE:
Weapon: Heal
Voiced:
VoiceSet: DinoVoice
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/cnc/rules/husks.yaml b/mods/cnc/rules/husks.yaml
index ccd45b408e..d190157254 100644
--- a/mods/cnc/rules/husks.yaml
+++ b/mods/cnc/rules/husks.yaml
@@ -3,148 +3,176 @@ MCV.Husk:
Tooltip:
Name: Mobile Construction Vehicle (Destroyed)
Icon: mcvicnh
- RenderUnit:
- Image: mcv.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: mcv
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mcv.destroyed
HARV.Husk:
Inherits: ^Husk
Tooltip:
Name: Harvester (Destroyed)
Icon: harvicnh
- RenderUnit:
- Image: harv.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: harv
+ AutoSelectionSize:
+ RenderSprites:
+ Image: harv.destroyed
APC.Husk:
Inherits: ^Husk
Tooltip:
Name: APC (Destroyed)
Icon: apcicnh
- RenderUnit:
- Image: apc.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: apc
+ AutoSelectionSize:
+ RenderSprites:
+ Image: apc.destroyed
FTNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Flame Tank (Destroyed)
Icon: ftnkicnh
- RenderUnit:
- Image: ftnk.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: ftnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: ftnk.destroyed
ARTY.Husk:
Inherits: ^Husk
Tooltip:
Name: Artillery (Destroyed)
Icon: artyicnh
- RenderUnit:
- Image: arty.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: arty
+ AutoSelectionSize:
+ RenderSprites:
+ Image: arty.destroyed
BGGY.Husk:
Inherits: ^Husk
Tooltip:
Name: Nod Buggy (Destroyed)
Icon: bggyicnh
- RenderUnit:
- Image: bggy.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: bggy
+ AutoSelectionSize:
+ RenderSprites:
+ Image: bggy.destroyed
BIKE.Husk:
Inherits: ^Husk
Tooltip:
Name: Recon Bike (Destroyed)
Icon: bikeicnh
- RenderUnit:
- Image: bike.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: bike
+ AutoSelectionSize:
+ RenderSprites:
+ Image: bike.destroyed
JEEP.Husk:
Inherits: ^Husk
Tooltip:
Name: Hum-Vee (Destroyed)
Icon: jeepicnh
- RenderUnit:
- Image: jeep.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: jeep
+ AutoSelectionSize:
+ RenderSprites:
+ Image: jeep.destroyed
LTNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Light Tank (Destroyed)
Icon: ltnkicnh
- RenderUnit:
- Image: ltnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: ltnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: ltnk.destroyed
MTNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Medium Tank (Destroyed)
Icon: mtnkicnh
- RenderUnit:
- Image: mtnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: mtnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mtnk.destroyed
HTNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Mammoth Tank (Destroyed)
Icon: htnkicnh
- RenderUnit:
- Image: htnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: htnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: htnk.destroyed
MSAM.Husk:
Inherits: ^Husk
Tooltip:
Name: Rocket Launcher (Destroyed)
Icon: msamicnh
- RenderUnit:
- Image: msam.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: msam
+ AutoSelectionSize:
+ RenderSprites:
+ Image: msam.destroyed
MLRS.Husk:
Inherits: ^Husk
Tooltip:
Name: Mobile S.A.M. (Destroyed)
Icon: mlrsicnh
- RenderUnit:
- Image: mlrs.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: mlrs
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mlrs.destroyed
STNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Stealth Tank (Destroyed)
Icon: stnkicnh
- RenderUnit:
- Image: stnk.destroyed
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: stnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: stnk.destroyed
diff --git a/mods/cnc/rules/ships.yaml b/mods/cnc/rules/ships.yaml
index a293dbf7ac..0cf681618b 100644
--- a/mods/cnc/rules/ships.yaml
+++ b/mods/cnc/rules/ships.yaml
@@ -60,7 +60,7 @@ LST:
Type: Heavy
RevealsShroud:
Range: 7c0
- RenderUnit:
+ WithFacingSpriteBody:
WithRoof:
WithCargo:
DisplayTypes: Infantry, Vehicle
@@ -70,4 +70,6 @@ LST:
MaxWeight: 5
PipCount: 5
PassengerFacing: 0
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml
index ef279fb34f..28375f9e83 100644
--- a/mods/cnc/rules/vehicles.yaml
+++ b/mods/cnc/rules/vehicles.yaml
@@ -26,7 +26,7 @@ MCV:
Facing: 108
TransformSounds: constru2.aud, hvydoor1.aud
NoTransformNotification: BuildingCannotPlaceAudio
- RenderUnit:
+ WithFacingSpriteBody:
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
@@ -37,6 +37,8 @@ MCV:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
HARV:
Inherits: ^Tank
@@ -114,7 +116,7 @@ APC:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Cargo:
@@ -123,6 +125,8 @@ APC:
PipCount: 5
LeavesHusk:
HuskActor: APC.Husk
+ AutoSelectionSize:
+ RenderSprites:
ARTY:
Inherits: ^Tank
@@ -150,11 +154,13 @@ ARTY:
MuzzleSequence: muzzle
AttackFrontal:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
InitialStance: Defend
LeavesHusk:
HuskActor: ARTY.Husk
+ AutoSelectionSize:
+ RenderSprites:
FTNK:
Inherits: ^Tank
@@ -182,7 +188,7 @@ FTNK:
MuzzleSequence: muzzle
MuzzleSplitFacings: 8
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
WithMuzzleFlash:
SplitFacings: true
@@ -191,6 +197,8 @@ FTNK:
EmptyWeapon: FlametankExplode
LeavesHusk:
HuskActor: FTNK.Husk
+ AutoSelectionSize:
+ RenderSprites:
BGGY:
Inherits: ^Vehicle
@@ -221,11 +229,13 @@ BGGY:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
LeavesHusk:
HuskActor: BGGY.Husk
+ AutoSelectionSize:
+ RenderSprites:
BIKE:
Inherits: ^Vehicle
@@ -259,10 +269,12 @@ BIKE:
LocalOffset: -128, -170, 170, -128, 170, 170
LocalYaw: 100, -100
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
LeavesHusk:
HuskActor: BIKE.Husk
+ AutoSelectionSize:
+ RenderSprites:
JEEP:
Inherits: ^Vehicle
@@ -293,11 +305,13 @@ JEEP:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
LeavesHusk:
HuskActor: JEEP.Husk
+ AutoSelectionSize:
+ RenderSprites:
LTNK:
Inherits: ^Tank
@@ -329,7 +343,7 @@ LTNK:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
LeavesHusk:
@@ -337,6 +351,8 @@ LTNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
MTNK:
Inherits: ^Tank
@@ -367,7 +383,7 @@ MTNK:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
LeavesHusk:
@@ -377,6 +393,8 @@ MTNK:
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 28,28
+ AutoSelectionSize:
+ RenderSprites:
HTNK:
Inherits: ^Tank
@@ -416,7 +434,7 @@ HTNK:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
SelfHealing:
@@ -430,6 +448,8 @@ HTNK:
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 34,34,0,-3
+ AutoSelectionSize:
+ RenderSprites:
MSAM:
Inherits: ^Tank
@@ -461,12 +481,14 @@ MSAM:
Weapon: 227mm
LocalOffset: 213,-128,0, 213,128,0
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AimSequence: aim
AutoTarget:
LeavesHusk:
HuskActor: MSAM.Husk
+ AutoSelectionSize:
+ RenderSprites:
MLRS:
Inherits: ^Tank
@@ -496,7 +518,7 @@ MLRS:
Weapon: Patriot
LocalOffset: 0,-171,0, 0,171,0
AttackTurreted:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AimSequence: aim
AutoTarget:
@@ -507,6 +529,8 @@ MLRS:
RenderRangeCircle:
LeavesHusk:
HuskActor: MLRS.Husk
+ AutoSelectionSize:
+ RenderSprites:
STNK:
Inherits: ^Vehicle
@@ -539,13 +563,15 @@ STNK:
Weapon: 227mm.stnk
LocalOffset: 213,43,128, 213,-43,128
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
InitialStance: HoldFire
TargetableUnit:
LeavesHusk:
HuskActor: STNK.Husk
-MustBeDestroyed:
+ AutoSelectionSize:
+ RenderSprites:
MHQ:
Inherits: ^Vehicle
@@ -562,11 +588,13 @@ MHQ:
Speed: 85
RevealsShroud:
Range: 6c0
- RenderUnit:
+ WithFacingSpriteBody:
WithIdleOverlay@SPINNER:
Sequence: spinner
Offset: -256,0,256
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml
index d138ba5c32..bdc5bd81d3 100644
--- a/mods/d2k/rules/aircraft.yaml
+++ b/mods/d2k/rules/aircraft.yaml
@@ -20,8 +20,7 @@ carryall.reinforce:
Repulsable: False
LandAltitude: 100
LandWhenIdle: False
- RenderUnit:
- Image: carryall
+ WithFacingSpriteBody:
WithShadow:
LeavesHusk:
HuskActor: carryall.husk
@@ -29,6 +28,9 @@ carryall.reinforce:
-TargetableAircraft:
Carryall:
Automatic: False
+ AutoSelectionSize:
+ RenderSprites:
+ Image: carryall
carryall:
Inherits: carryall.reinforce
@@ -55,8 +57,7 @@ carryall.infantry:
RepairBuildings: repair
RearmBuildings:
Repulsable: False
- RenderUnit:
- Image: carryall
+ WithFacingSpriteBody:
WithShadow:
Cargo:
MaxWeight: 5
@@ -69,6 +70,9 @@ carryall.infantry:
LeavesHusk:
HuskActor: carryall.infantry.husk
RejectsOrders:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: carryall
carryall.husk:
Inherits: ^AircraftHusk
@@ -79,9 +83,11 @@ carryall.husk:
Speed: 210
RepairBuildings: repair
RearmBuildings:
- RenderUnit:
- Image: carryall
+ WithFacingSpriteBody:
WithShadow:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: carryall
frigate:
Inherits: ^Plane
@@ -137,12 +143,14 @@ orni:
Speed: 280
RepairBuildings: repair
RearmBuildings:
- RenderUnit:
+ WithFacingSpriteBody:
WithShadow:
Selectable:
Bounds: 38,32,0,0
LeavesHusk:
HuskActor: orni.husk
+ AutoSelectionSize:
+ RenderSprites:
orni.bomber:
AttackBomber:
@@ -161,8 +169,7 @@ orni.bomber:
Repulsable: False
AmmoPool:
Ammo: 5
- RenderUnit:
- Image: orni
+ WithFacingSpriteBody:
WithShadow:
-Selectable:
-GainsExperience:
@@ -171,6 +178,9 @@ orni.bomber:
LeavesHusk:
HuskActor: orni.bomber.husk
RejectsOrders:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: orni
orni.husk:
Inherits: ^AircraftHusk
@@ -181,9 +191,11 @@ orni.husk:
Speed: 280
RepairBuildings: repair
RearmBuildings:
- RenderUnit:
- Image: orni
+ WithFacingSpriteBody:
WithShadow:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: orni
orni.bomber.husk:
Inherits: ^AircraftHusk
@@ -194,9 +206,11 @@ orni.bomber.husk:
Speed: 350
RepairBuildings: repair
RearmBuildings:
- RenderUnit:
- Image: orni
+ WithFacingSpriteBody:
WithShadow:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: orni
carryall.infantry.husk:
Inherits: ^AircraftHusk
@@ -207,6 +221,9 @@ carryall.infantry.husk:
Speed: 280
RepairBuildings: repair
RearmBuildings:
- RenderUnit:
- Image: carryall
+ WithFacingSpriteBody:
WithShadow:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: carryall
+
diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml
index 2de2213aec..220497ec6b 100644
--- a/mods/d2k/rules/defaults.yaml
+++ b/mods/d2k/rules/defaults.yaml
@@ -32,7 +32,7 @@
Guard:
Voice: Guard
Guardable:
- RenderUnit:
+ WithFacingSpriteBody:
BodyOrientation:
UpdatesPlayerStatistics:
Huntable:
@@ -58,6 +58,8 @@
Image: pips
Sequence: pickup-indicator
Offset: -12, -12
+ AutoSelectionSize:
+ RenderSprites:
^Tank:
AppearsOnRadar:
@@ -93,7 +95,7 @@
Guard:
Voice: Guard
Guardable:
- RenderUnit:
+ WithFacingSpriteBody:
BodyOrientation:
UpdatesPlayerStatistics:
Huntable:
@@ -119,6 +121,8 @@
Image: pips
Sequence: pickup-indicator
Offset: -12, -12
+ AutoSelectionSize:
+ RenderSprites:
^Husk:
Health:
@@ -147,7 +151,9 @@
ForceHealthPercentage: 25
DisabledOverlay:
ScriptTriggers:
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
^TowerHusk:
Health:
@@ -295,9 +301,11 @@
UpgradeManager:
AnnounceOnSeen:
Notification: EnemyUnitsDetected
- RenderUnit:
Voiced:
VoiceSet: GenericVoice
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
^Helicopter:
Inherits: ^Plane
diff --git a/mods/d2k/rules/husks.yaml b/mods/d2k/rules/husks.yaml
index 2c0e877832..b6e6519df8 100644
--- a/mods/d2k/rules/husks.yaml
+++ b/mods/d2k/rules/husks.yaml
@@ -24,9 +24,11 @@ siegetank.husk:
missiletank.husk:
Inherits: ^Husk
- RenderUnit:
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: missiletank
+ AutoSelectionSize:
+ RenderSprites:
sonictank.husk:
Inherits: ^Husk
diff --git a/mods/d2k/rules/misc.yaml b/mods/d2k/rules/misc.yaml
index 84e4262787..2e6426df5a 100644
--- a/mods/d2k/rules/misc.yaml
+++ b/mods/d2k/rules/misc.yaml
@@ -128,11 +128,13 @@ waypoint:
^carryall.colorpicker:
Inherits: carryall
- RenderUnit:
- Image: carryall
- Palette: colorpicker
+ WithFacingSpriteBody:
Helicopter:
InitialFacing: 104
+ AutoSelectionSize:
+ RenderSprites:
+ Image: carryall
+ Palette: colorpicker
camera:
Immobile:
diff --git a/mods/d2k/rules/starport.yaml b/mods/d2k/rules/starport.yaml
index 51db9ef7f2..9a66de1dba 100644
--- a/mods/d2k/rules/starport.yaml
+++ b/mods/d2k/rules/starport.yaml
@@ -5,7 +5,9 @@ mcv.starport:
Queue: Starport
Valued:
Cost: 2500
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: mcv
harvester.starport:
@@ -24,7 +26,9 @@ trike.starport:
Prerequisites: starport
Valued:
Cost: 315
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: trike
quad.starport:
@@ -33,7 +37,9 @@ quad.starport:
Queue: Starport
Valued:
Cost: 500
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: quad
siegetank.starport:
@@ -42,7 +48,9 @@ siegetank.starport:
Queue: Starport
Valued:
Cost: 1075
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: siegetank
missiletank.starport:
@@ -51,7 +59,9 @@ missiletank.starport:
Queue: Starport
Valued:
Cost: 1250
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: missiletank
combata.starport:
@@ -61,7 +71,9 @@ combata.starport:
Queue: Starport
Valued:
Cost: 875
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: combata
combath.starport:
@@ -71,7 +83,9 @@ combath.starport:
Queue: Starport
Valued:
Cost: 875
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: combath
combato.starport:
@@ -81,7 +95,9 @@ combato.starport:
Queue: Starport
Valued:
Cost: 875
- RenderUnit:
+ WithFacingSpriteBody:
+ AutoSelectionSize:
+ RenderSprites:
Image: combato
carryall.starport:
diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml
index 7579a09ccd..f03413add4 100644
--- a/mods/d2k/rules/vehicles.yaml
+++ b/mods/d2k/rules/vehicles.yaml
@@ -75,6 +75,10 @@ harvester:
EmptyWeapon: UnitExplodeScale
LeavesHusk:
HuskActor: Harvester.Husk
+ RenderUnit:
+ -RenderSprites:
+ -WithFacingSpriteBody:
+ -AutoSelectionSize:
WithHarvestAnimation:
Palette: effect50alpha
AttractsWorms:
@@ -102,7 +106,7 @@ trike:
Speed: 128
RevealsShroud:
Range: 7c0
- RenderUnit:
+ WithFacingSpriteBody:
WithMuzzleFlash:
Armament:
Weapon: HMG
@@ -115,6 +119,8 @@ trike:
EmptyWeapon: UnitExplodeTiny
AttractsWorms:
Intensity: 420
+ AutoSelectionSize:
+ RenderSprites:
quad:
Inherits: ^Vehicle
@@ -181,8 +187,7 @@ siegetank:
MuzzleSequence: muzzle
AttackFrontal:
WithMuzzleFlash:
- RenderUnit:
- Image: SIEGETANK
+ WithFacingSpriteBody:
WithTurret:
Explodes:
Weapon: UnitExplodeScale
@@ -195,6 +200,9 @@ siegetank:
HuskActor: siegetank.husk
AttractsWorms:
Intensity: 600
+ AutoSelectionSize:
+ RenderSprites:
+ Image: SIEGETANK
missiletank:
Inherits: ^Tank
@@ -289,7 +297,7 @@ devast:
Crushes: crate, infantry
RevealsShroud:
Range: 7c0
- RenderUnit:
+ WithFacingSpriteBody:
Armament:
Weapon: DevBullet
LocalOffset: 640,0,32
@@ -307,6 +315,8 @@ devast:
HuskActor: devast.husk
AttractsWorms:
Intensity: 700
+ AutoSelectionSize:
+ RenderSprites:
raider:
Inherits: ^Vehicle
@@ -382,7 +392,7 @@ deviatortank:
Type: Light
RevealsShroud:
Range: 5c0
- RenderUnit:
+ WithFacingSpriteBody:
Armament:
Weapon: NerveGasMissile
LocalOffset: -299,0,85
@@ -398,6 +408,8 @@ deviatortank:
HuskActor: deviatortank.husk
AttractsWorms:
Intensity: 600
+ AutoSelectionSize:
+ RenderSprites:
^combat:
Inherits: ^Tank
@@ -430,7 +442,7 @@ deviatortank:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -440,6 +452,8 @@ deviatortank:
Bounds: 30,30
AttractsWorms:
Intensity: 520
+ AutoSelectionSize:
+ RenderSprites:
combata:
Inherits: ^combat
diff --git a/mods/ra/maps/allies-01/map.yaml b/mods/ra/maps/allies-01/map.yaml
index 7d6a547f66..5b8f562102 100644
--- a/mods/ra/maps/allies-01/map.yaml
+++ b/mods/ra/maps/allies-01/map.yaml
@@ -480,8 +480,7 @@ Rules:
PanelName: MISSION_OBJECTIVES
TRAN.Extraction:
Inherits: TRAN
- RenderUnit:
- Image: tran
+ WithFacingSpriteBody:
RevealsShroud:
Range: 0c0
RejectsOrders:
@@ -489,12 +488,17 @@ Rules:
Cargo:
Types: Einstein
MaxWeight: 1
+ AutoSelectionSize:
+ RenderSprites:
+ Image: tran
TRAN.Insertion:
Inherits: TRAN.Extraction
- RenderUnit:
- Image: tran
+ WithFacingSpriteBody:
Cargo:
MaxWeight: 0
+ AutoSelectionSize:
+ RenderSprites:
+ Image: tran
EINSTEIN:
Passenger:
CargoType: Einstein
diff --git a/mods/ra/maps/allies-03b/map.yaml b/mods/ra/maps/allies-03b/map.yaml
index 1216778cde..17128701b1 100644
--- a/mods/ra/maps/allies-03b/map.yaml
+++ b/mods/ra/maps/allies-03b/map.yaml
@@ -1377,8 +1377,7 @@ Rules:
ShowOwnerRow: false
JEEP.mission:
Inherits: JEEP
- RenderUnit:
- Image: JEEP
+ WithFacingSpriteBody:
-Selectable:
-Demolishable:
-Huntable:
@@ -1389,6 +1388,9 @@ Rules:
Types: ~disabled
RevealsShroud:
Range: 0c0
+ AutoSelectionSize:
+ RenderSprites:
+ Image: JEEP
E3:
Buildable:
Prerequisites: ~disabled
diff --git a/mods/ra/maps/allies-05a/map.yaml b/mods/ra/maps/allies-05a/map.yaml
index 9eb7d0e522..cc20ce373b 100644
--- a/mods/ra/maps/allies-05a/map.yaml
+++ b/mods/ra/maps/allies-05a/map.yaml
@@ -1656,10 +1656,12 @@ Rules:
Inherits: TRUK
Buildable:
Prerequisites: ~disabled
- RenderUnit:
- Image: TRUK
+ WithFacingSpriteBody:
-LeavesHusk:
-EjectOnDeath:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: TRUK
SPY:
Infiltrates:
Types: Mission Objectives
diff --git a/mods/ra/maps/bomber-john/map.yaml b/mods/ra/maps/bomber-john/map.yaml
index a5b5e9d072..e1aa8eeaf1 100644
--- a/mods/ra/maps/bomber-john/map.yaml
+++ b/mods/ra/maps/bomber-john/map.yaml
@@ -829,8 +829,7 @@ Rules:
ROT: 900
RevealsShroud:
Range: 40c0
- RenderUnit:
- Image: MNLY
+ WithFacingSpriteBody:
MustBeDestroyed:
RequiredForShortGame: true
Transforms:
@@ -840,6 +839,9 @@ Rules:
CashTrickler:
Period: 150
Amount: 20
+ AutoSelectionSize:
+ RenderSprites:
+ Image: MNLY
FTUR:
Health:
HP: 1000
diff --git a/mods/ra/maps/fort-lonestar/map.yaml b/mods/ra/maps/fort-lonestar/map.yaml
index a742fb703c..175e16a0ee 100644
--- a/mods/ra/maps/fort-lonestar/map.yaml
+++ b/mods/ra/maps/fort-lonestar/map.yaml
@@ -684,14 +684,16 @@ Rules:
Speed: 280
AmmoPool:
Ammo: 30
- RenderUnit:
- Image: mig
+ WithFacingSpriteBody:
WithShadow:
-Selectable:
-GainsExperience:
Tooltip:
Name: Mig Bomber
-EjectOnDeath:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mig
BRIK:
Buildable:
Prerequisites: ~disabled
diff --git a/mods/ra/maps/monster-tank-madness/map.yaml b/mods/ra/maps/monster-tank-madness/map.yaml
index c31e309ae6..e196f57b93 100644
--- a/mods/ra/maps/monster-tank-madness/map.yaml
+++ b/mods/ra/maps/monster-tank-madness/map.yaml
@@ -2210,8 +2210,7 @@ Rules:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
- Image: 4TNK
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -2227,16 +2226,21 @@ Rules:
Selectable:
Bounds: 44,38,0,-4
-EjectOnDeath:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 4TNK
5TNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (Super Tank)
- RenderUnit:
- Image: 4TNK
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
Health:
HP: 2000
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 4TNK
DOME.NoInfiltrate:
Inherits: DOME
Buildable:
@@ -2253,16 +2257,20 @@ Rules:
Inherits: 3TNK
Buildable:
Prerequisites: ~disabled
- RenderUnit:
- Image: 3TNK
+ WithFacingSpriteBody:
-EjectOnDeath:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 3TNK
BADTRUK:
Inherits: TRUK
Buildable:
Prerequisites: ~disabled
- RenderUnit:
- Image: TRUK
+ WithFacingSpriteBody:
-EjectOnDeath:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: TRUK
SS:
Buildable:
Prerequisites: ~disabled
diff --git a/mods/ra/rules/aircraft.yaml b/mods/ra/rules/aircraft.yaml
index 8b844040db..d5e01b21bd 100644
--- a/mods/ra/rules/aircraft.yaml
+++ b/mods/ra/rules/aircraft.yaml
@@ -10,7 +10,7 @@ BADR:
ROT: 5
Speed: 149
Repulsable: False
- RenderUnit:
+ WithFacingSpriteBody:
Cargo:
MaxWeight: 10
-Selectable:
@@ -33,6 +33,8 @@ BADR:
-GpsDot:
RejectsOrders:
-AnnounceOnSeen:
+ AutoSelectionSize:
+ RenderSprites:
BADR.Bomber:
Inherits: ^Plane
@@ -49,8 +51,7 @@ BADR.Bomber:
Repulsable: False
AmmoPool:
Ammo: 7
- RenderUnit:
- Image: badr
+ WithFacingSpriteBody:
-Selectable:
-GainsExperience:
Tooltip:
@@ -70,6 +71,9 @@ BADR.Bomber:
-EjectOnDeath:
-GpsDot:
RejectsOrders:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: badr
MIG:
Inherits: ^Plane
@@ -105,8 +109,7 @@ MIG:
TargetWhenIdle: false
TargetWhenDamaged: false
EnableStances: false
- RenderUnit:
- CameraPitch: 99
+ WithFacingSpriteBody:
AmmoPool:
Ammo: 8
ReturnOnIdle:
@@ -121,6 +124,9 @@ MIG:
SmokeTrailWhenDamaged:
Offset: -853,0,171
Interval: 2
+ AutoSelectionSize:
+ RenderSprites:
+ CameraPitch: 99
YAK:
Inherits: ^Plane
@@ -161,8 +167,7 @@ YAK:
TargetWhenIdle: false
TargetWhenDamaged: false
EnableStances: false
- RenderUnit:
- CameraPitch: 99
+ WithFacingSpriteBody:
AmmoPool:
Ammo: 18
PipCount: 6
@@ -178,6 +183,9 @@ YAK:
SmokeTrailWhenDamaged:
Offset: -853,0,0
Interval: 2
+ AutoSelectionSize:
+ RenderSprites:
+ CameraPitch: 99
TRAN:
Inherits: ^Helicopter
@@ -205,7 +213,7 @@ TRAN:
Speed: 112
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach
AltitudeVelocity: 0c100
- RenderUnit:
+ WithFacingSpriteBody:
WithRotor@PRIMARY:
Offset: -597,0,341
Sequence: rotor2
@@ -218,6 +226,8 @@ TRAN:
PipCount: 8
LeavesHusk:
HuskActor: TRAN.Husk
+ AutoSelectionSize:
+ RenderSprites:
HELI:
Inherits: ^Helicopter
@@ -254,7 +264,7 @@ HELI:
Speed: 149
AutoTarget:
InitialStance: HoldFire
- RenderUnit:
+ WithFacingSpriteBody:
WithRotor:
Offset: 0,0,85
AmmoPool:
@@ -265,6 +275,8 @@ HELI:
HuskActor: HELI.Husk
SmokeTrailWhenDamaged:
Offset: -427,0,0
+ AutoSelectionSize:
+ RenderSprites:
HIND:
Inherits: ^Helicopter
@@ -304,7 +316,7 @@ HIND:
Speed: 112
AutoTarget:
InitialStance: HoldFire
- RenderUnit:
+ WithFacingSpriteBody:
WithRotor:
AmmoPool:
Ammo: 24
@@ -317,6 +329,8 @@ HIND:
HuskActor: HIND.Husk
SmokeTrailWhenDamaged:
Offset: -427,0,0
+ AutoSelectionSize:
+ RenderSprites:
U2:
Inherits: ^Plane
@@ -329,7 +343,7 @@ U2:
Speed: 373
Repulsable: False
MaximumPitch: 56
- RenderUnit:
+ WithFacingSpriteBody:
AttackBomber:
-Selectable:
-TargetableAircraft:
@@ -345,4 +359,6 @@ U2:
Interval: 2
RejectsOrders:
-AnnounceOnSeen:
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml
index d42732d996..79a9940f5e 100644
--- a/mods/ra/rules/defaults.yaml
+++ b/mods/ra/rules/defaults.yaml
@@ -536,7 +536,7 @@
^Husk:
Husk:
AllowedTerrain: Clear, Rough, Road, Ore, Gems, Beach
- RenderUnit:
+ WithFacingSpriteBody:
Health:
HP: 280
Armor:
@@ -562,6 +562,8 @@
ForceHealthPercentage: 25
DisabledOverlay:
ScriptTriggers:
+ AutoSelectionSize:
+ RenderSprites:
^HelicopterHusk:
Inherits: ^Husk
diff --git a/mods/ra/rules/husks.yaml b/mods/ra/rules/husks.yaml
index ba6e3fadf8..75c2cb5e41 100644
--- a/mods/ra/rules/husks.yaml
+++ b/mods/ra/rules/husks.yaml
@@ -2,91 +2,106 @@
Inherits: ^Husk
Tooltip:
Name: Husk (Light Tank)
- RenderUnit:
- Image: 1tnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: 1tnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 1tnk.destroyed
2TNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (Medium Tank)
- RenderUnit:
- Image: 2tnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: 2tnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 2tnk.destroyed
3TNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (Heavy Tank)
- RenderUnit:
- Image: 3tnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: 3tnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 3tnk.destroyed
4TNK.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (Mammoth Tank)
- RenderUnit:
- Image: 4tnk.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@turret:
Anim: turret
TransformOnCapture:
IntoActor: 4tnk
+ AutoSelectionSize:
+ RenderSprites:
+ Image: 4tnk.destroyed
HARV.FullHusk:
Inherits: ^Husk
Tooltip:
Name: Husk (Harvester)
- RenderUnit:
- Image: hhusk
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: harv
+ AutoSelectionSize:
+ RenderSprites:
+ Image: hhusk
HARV.EmptyHusk:
Inherits: ^Husk
Tooltip:
Name: Husk (Harvester)
- RenderUnit:
- Image: hhusk2
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: harv
+ AutoSelectionSize:
+ RenderSprites:
+ Image: hhusk2
MCV.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (MCV)
- RenderUnit:
- Image: mcvhusk
+ WithFacingSpriteBody:
TransformOnCapture:
IntoActor: mcv
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mcvhusk
MGG.Husk:
Inherits: ^Husk
Tooltip:
Name: Husk (Mobile Gap Generator)
- RenderUnit:
- Image: mgg.destroyed
+ WithFacingSpriteBody:
ThrowsParticle@spinner:
Anim: spinner-idle
Offset: -299,0,171
TransformOnCapture:
IntoActor: mgg
+ AutoSelectionSize:
+ RenderSprites:
+ Image: mgg.destroyed
TRAN.Husk:
Inherits: ^HelicopterHusk
Tooltip:
Name: Transport Helicopter
- RenderUnit:
- Image: tran
+ WithFacingSpriteBody:
WithShadow:
Helicopter:
ROT: 4
@@ -97,33 +112,39 @@ TRAN.Husk:
Offset: 597,0,213
RevealsShroud:
Range: 12c0
+ AutoSelectionSize:
+ RenderSprites:
+ Image: tran
TRAN.Husk1:
Inherits: ^Husk
Tooltip:
Name: Husk (Transport Helicopter)
- RenderUnit:
- Image: tran1husk
+ WithFacingSpriteBody:
-TargetableUnit:
-Capturable:
-TransformOnCapture:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: tran1husk
TRAN.Husk2:
Inherits: ^Husk
Tooltip:
Name: Husk (Transport Helicopter)
- RenderUnit:
- Image: tran2husk
+ WithFacingSpriteBody:
-TargetableUnit:
-Capturable:
-TransformOnCapture:
+ AutoSelectionSize:
+ RenderSprites:
+ Image: tran2husk
BADR.Husk:
Inherits: ^PlaneHusk
Tooltip:
Name: Badger
- RenderUnit:
- Image: badr
+ WithFacingSpriteBody:
WithShadow:
Plane:
ROT: 5
@@ -136,14 +157,15 @@ BADR.Husk:
Offset: -432,-560,0
Interval: 2
MinDamage: Undamaged
+ AutoSelectionSize:
+ RenderSprites:
+ Image: badr
MIG.Husk:
Inherits: ^PlaneHusk
Tooltip:
Name: Mig Attack Plane
- RenderUnit:
- CameraPitch: 99
- Image: mig
+ WithFacingSpriteBody:
WithShadow:
Contrail@1:
Offset: -598,-683,0
@@ -158,14 +180,16 @@ MIG.Husk:
MinDamage: Undamaged
RevealsShroud:
Range: 12c0
+ AutoSelectionSize:
+ RenderSprites:
+ CameraPitch: 99
+ Image: mig
YAK.Husk:
Inherits: ^PlaneHusk
Tooltip:
Name: Yak Attack Plane
- RenderUnit:
- CameraPitch: 99
- Image: yak
+ WithFacingSpriteBody:
WithShadow:
Contrail:
Offset: -853,0,0
@@ -178,13 +202,16 @@ YAK.Husk:
MinDamage: Undamaged
RevealsShroud:
Range: 10c0
+ AutoSelectionSize:
+ RenderSprites:
+ CameraPitch: 99
+ Image: yak
HELI.Husk:
Inherits: ^HelicopterHusk
Tooltip:
Name: Longbow
- RenderUnit:
- Image: heli
+ WithFacingSpriteBody:
WithShadow:
Helicopter:
ROT: 4
@@ -196,13 +223,15 @@ HELI.Husk:
MinDamage: Undamaged
RevealsShroud:
Range: 12c0
+ AutoSelectionSize:
+ RenderSprites:
+ Image: heli
HIND.Husk:
Inherits: ^HelicopterHusk
Tooltip:
Name: Hind
- RenderUnit:
- Image: hind
+ WithFacingSpriteBody:
WithShadow:
Helicopter:
ROT: 4
@@ -213,11 +242,13 @@ HIND.Husk:
MinDamage: Undamaged
RevealsShroud:
Range: 10c0
+ AutoSelectionSize:
+ RenderSprites:
+ Image: hind
U2.Husk:
Inherits: ^PlaneHusk
- RenderUnit:
- Image: u2
+ WithFacingSpriteBody:
WithShadow:
Plane:
ROT: 7
@@ -230,4 +261,7 @@ U2.Husk:
Offset: -1c43,0,0
Interval: 2
MinDamage: Undamaged
+ AutoSelectionSize:
+ RenderSprites:
+ Image: u2
diff --git a/mods/ra/rules/ships.yaml b/mods/ra/rules/ships.yaml
index c7d0d07a9a..eac2f92c86 100644
--- a/mods/ra/rules/ships.yaml
+++ b/mods/ra/rules/ships.yaml
@@ -23,7 +23,7 @@ SS:
TargetableSubmarine:
TargetTypes: Ground, Water, Repair
CloakedTargetTypes: Underwater, Repair
- RenderUnit:
+ WithFacingSpriteBody:
Cloak:
CloakTypes: Underwater
InitialDelay: 0
@@ -49,6 +49,8 @@ SS:
Weapon: UnitExplodeSubmarine
EmptyWeapon: UnitExplodeSubmarine
-MustBeDestroyed:
+ AutoSelectionSize:
+ RenderSprites:
MSUB:
Inherits: ^Ship
@@ -71,7 +73,7 @@ MSUB:
Speed: 42
RevealsShroud:
Range: 6c0
- RenderUnit:
+ WithFacingSpriteBody:
-TargetableUnit:
TargetableSubmarine:
TargetTypes: Ground, Water, Repair
@@ -101,6 +103,8 @@ MSUB:
Weapon: UnitExplodeSubmarine
EmptyWeapon: UnitExplodeSubmarine
-MustBeDestroyed:
+ AutoSelectionSize:
+ RenderSprites:
DD:
Inherits: ^Ship
@@ -141,7 +145,7 @@ DD:
AttackTurreted:
Selectable:
Bounds: 38,38
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Chronoshiftable:
@@ -153,6 +157,8 @@ DD:
Explodes:
Weapon: UnitExplodeShip
EmptyWeapon: UnitExplodeShip
+ AutoSelectionSize:
+ RenderSprites:
CA:
Inherits: ^Ship
@@ -202,7 +208,7 @@ CA:
WithMuzzleFlash:
Selectable:
Bounds: 44,44
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret@PRIMARY:
Turret: primary
WithTurret@SECONDARY:
@@ -213,6 +219,8 @@ CA:
Explodes:
Weapon: UnitExplodeShip
EmptyWeapon: UnitExplodeShip
+ AutoSelectionSize:
+ RenderSprites:
LST:
Inherits: ^Ship
@@ -282,7 +290,7 @@ PT:
WithMuzzleFlash:
Selectable:
Bounds: 32,32
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Chronoshiftable:
@@ -294,4 +302,6 @@ PT:
Explodes:
Weapon: UnitExplodeShip
EmptyWeapon: UnitExplodeShip
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml
index 07d661a39b..580c894ac7 100644
--- a/mods/ra/rules/vehicles.yaml
+++ b/mods/ra/rules/vehicles.yaml
@@ -20,11 +20,17 @@ V2RL:
Armament:
Weapon: SCUD
AttackFrontal:
- RenderUnitReload:
+ RenderSprites:
AutoTarget:
Explodes:
Weapon: SCUD
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ WithFacingSpriteBody:
+ Sequence: idle
+ WithAttackAnimation:
+ AimSequence: aim
+ ReloadPrefix: empty-
1TNK:
Inherits: ^Tank
@@ -56,7 +62,7 @@ V2RL:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -64,6 +70,8 @@ V2RL:
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
HuskActor: 1TNK.Husk
+ AutoSelectionSize:
+ RenderSprites:
2TNK:
Inherits: ^Tank
@@ -95,7 +103,7 @@ V2RL:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -105,6 +113,8 @@ V2RL:
HuskActor: 2TNK.Husk
Selectable:
Bounds: 30,30
+ AutoSelectionSize:
+ RenderSprites:
3TNK:
Inherits: ^Tank
@@ -136,7 +146,7 @@ V2RL:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -146,6 +156,8 @@ V2RL:
HuskActor: 3TNK.Husk
Selectable:
Bounds: 30,30
+ AutoSelectionSize:
+ RenderSprites:
4TNK:
Inherits: ^Tank
@@ -186,7 +198,7 @@ V2RL:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -201,6 +213,8 @@ V2RL:
DamageCooldown: 150
Selectable:
Bounds: 44,38,0,-4
+ AutoSelectionSize:
+ RenderSprites:
ARTY:
Inherits: ^Tank
@@ -228,11 +242,13 @@ ARTY:
MuzzleSequence: muzzle
AttackFrontal:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
Explodes:
Weapon: UnitExplode
Chance: 75
AutoTarget:
+ AutoSelectionSize:
+ RenderSprites:
HARV:
Inherits: ^Vehicle
@@ -309,7 +325,7 @@ MCV:
Facing: 96
TransformSounds: placbldg.aud, build5.aud
NoTransformNotification: BuildingCannotPlaceAudio
- RenderUnit:
+ WithFacingSpriteBody:
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
@@ -318,6 +334,8 @@ MCV:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
JEEP:
Inherits: ^Vehicle
@@ -347,7 +365,7 @@ JEEP:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Cargo:
@@ -357,6 +375,8 @@ JEEP:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
APC:
Inherits: ^Tank
@@ -383,7 +403,7 @@ APC:
LocalOffset: 0,0,171
MuzzleSequence: muzzle
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
WithMuzzleFlash:
AutoTarget:
Cargo:
@@ -393,6 +413,8 @@ APC:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
MNLY.AP:
Inherits: ^Tank
@@ -414,8 +436,7 @@ MNLY.AP:
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 5c0
- RenderUnit:
- Image: MNLY
+ WithFacingSpriteBody:
Minelayer:
Mine: MINP
MineImmune:
@@ -428,6 +449,9 @@ MNLY.AP:
RenderDetectionCircle:
Explodes:
Weapon: APMine
+ AutoSelectionSize:
+ RenderSprites:
+ Image: MNLY
MNLY.AT:
Inherits: ^Tank
@@ -449,8 +473,7 @@ MNLY.AT:
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 5c0
- RenderUnit:
- Image: MNLY
+ WithFacingSpriteBody:
Minelayer:
Mine: MINV
MineImmune:
@@ -463,6 +486,9 @@ MNLY.AT:
RenderDetectionCircle:
Explodes:
Weapon: ATMine
+ AutoSelectionSize:
+ RenderSprites:
+ Image: MNLY
TRUK:
Inherits: ^Vehicle
@@ -483,7 +509,7 @@ TRUK:
Speed: 128
RevealsShroud:
Range: 3c0
- RenderUnit:
+ WithFacingSpriteBody:
SupplyTruck:
Payload: 500
Explodes:
@@ -491,6 +517,8 @@ TRUK:
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
HuskActor: moneycrate
+ AutoSelectionSize:
+ RenderSprites:
MGG:
Inherits: ^Vehicle
@@ -509,7 +537,7 @@ MGG:
Type: Heavy
Mobile:
Speed: 85
- RenderUnit:
+ WithFacingSpriteBody:
WithIdleOverlay@SPINNER:
Offset: -299,0,171
Sequence: spinner
@@ -523,6 +551,8 @@ MGG:
EmptyWeapon: UnitExplodeSmall
LeavesHusk:
HuskActor: MGG.Husk
+ AutoSelectionSize:
+ RenderSprites:
MRJ:
Inherits: ^Vehicle
@@ -543,7 +573,7 @@ MRJ:
Speed: 85
RevealsShroud:
Range: 6c0
- RenderUnit:
+ WithFacingSpriteBody:
WithIdleOverlay@SPINNER:
Sequence: spinner
Offset: -256,0,256
@@ -558,6 +588,8 @@ MRJ:
RenderJammerCircle:
DetectCloaked:
Range: 6
+ AutoSelectionSize:
+ RenderSprites:
TTNK:
Inherits: ^Tank
@@ -583,7 +615,7 @@ TTNK:
Weapon: TTankZap
LocalOffset: 0,0,213
AttackFrontal:
- RenderUnit:
+ WithFacingSpriteBody:
WithIdleOverlay@SPINNER:
Sequence: spinner
Selectable:
@@ -592,6 +624,8 @@ TTNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
FTRK:
Inherits: ^Vehicle
@@ -623,7 +657,7 @@ FTRK:
MuzzleSequence: muzzle
AttackTurreted:
WithMuzzleFlash:
- RenderUnit:
+ WithFacingSpriteBody:
WithTurret:
AutoTarget:
Explodes:
@@ -631,6 +665,8 @@ FTRK:
EmptyWeapon: UnitExplodeSmall
Selectable:
Bounds: 28,28,0,0
+ AutoSelectionSize:
+ RenderSprites:
DTRK:
Inherits: ^Vehicle
@@ -651,7 +687,7 @@ DTRK:
Speed: 85
RevealsShroud:
Range: 3c0
- RenderUnit:
+ WithFacingSpriteBody:
Explodes:
Weapon: MiniNuke
EmptyWeapon: MiniNuke
@@ -662,6 +698,8 @@ DTRK:
UpgradeMinEnabledLevel: 1
Chronoshiftable:
ExplodeInstead: yes
+ AutoSelectionSize:
+ RenderSprites:
CTNK:
Inherits: ^Vehicle
@@ -685,7 +723,7 @@ CTNK:
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 6c0
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
Armament@PRIMARY:
Weapon: APTusk
@@ -700,6 +738,8 @@ CTNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
+ AutoSelectionSize:
+ RenderSprites:
QTNK:
Inherits: ^Tank
@@ -723,13 +763,15 @@ QTNK:
Range: 6c0
Selectable:
Bounds: 44,38,0,-4
- RenderUnit:
+ WithFacingSpriteBody:
Explodes:
Weapon: UnitExplodeSmall
MadTank:
-EjectOnDeath:
TargetableUnit:
TargetTypes: Ground, MADTank, Repair
+ AutoSelectionSize:
+ RenderSprites:
STNK:
Inherits: ^Vehicle
@@ -753,7 +795,7 @@ STNK:
Crushes: wall, mine, crate, infantry
RevealsShroud:
Range: 6c0
- RenderUnit:
+ WithFacingSpriteBody:
AutoTarget:
InitialStance: ReturnFire
Armament:
@@ -778,4 +820,6 @@ STNK:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
-MustBeDestroyed:
+ AutoSelectionSize:
+ RenderSprites:
diff --git a/mods/ts/rules/civilian-infantry.yaml b/mods/ts/rules/civilian-infantry.yaml
index 675266253a..663c93b870 100644
--- a/mods/ts/rules/civilian-infantry.yaml
+++ b/mods/ts/rules/civilian-infantry.yaml
@@ -233,6 +233,8 @@ VISSML:
WanderMoveRadius: 2
MinMoveDelayInTicks: 30
MaxMoveDelayInTicks: 60
+ WithFacingSpriteBody:
+ AutoSelectionSize:
VISLRG:
Inherits: ^Viceroid
@@ -250,6 +252,8 @@ VISLRG:
MaxMoveDelayInTicks: 45
Mobile:
Crushes: crate, infantry
+ WithFacingSpriteBody:
+ AutoSelectionSize:
CIV1:
Inherits: ^CivilianInfantry
diff --git a/mods/ts/rules/gdi-vehicles.yaml b/mods/ts/rules/gdi-vehicles.yaml
index b6b18e0ad8..c3cc680dfd 100644
--- a/mods/ts/rules/gdi-vehicles.yaml
+++ b/mods/ts/rules/gdi-vehicles.yaml
@@ -105,9 +105,14 @@ SMECH:
Armament:
Weapon: AssaultCannon
RenderSprites:
- WithInfantryBody:
Voiced:
VoiceSet: Mech
+ WithFacingSpriteBody:
+ Sequence: stand
+ WithAttackAnimation:
+ AttackSequence: shoot
+ WithMoveAnimation:
+ MoveSequence: run
Selectable:
Bounds: 20, 32, 0, -8
diff --git a/mods/ts/rules/shared-vehicles.yaml b/mods/ts/rules/shared-vehicles.yaml
index e5d72ca927..bdbc0b43a7 100644
--- a/mods/ts/rules/shared-vehicles.yaml
+++ b/mods/ts/rules/shared-vehicles.yaml
@@ -129,8 +129,11 @@ GGHUNT:
Type: Light
RevealsShroud:
Range: 7c0
- RenderUnit:
+ WithFacingSpriteBody:
DemoTruck:
Explodes:
Weapon: SuicideBomb
EmptyWeapon: SuicideBomb
+ AutoSelectionSize:
+ RenderSprites:
+