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: +