From c48eb572e3b6d184e33526e52fa9e85db404e77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 8 Aug 2020 16:04:12 +0200 Subject: [PATCH] Remove MuzzleSplitFacings and expose MuzzleSequence to testing. --- OpenRA.Mods.Common/Traits/Armament.cs | 4 +- .../Traits/Attack/AttackGarrisoned.cs | 4 -- .../Traits/Render/WithMuzzleOverlay.cs | 3 -- .../20200503/RemoveMuzzleSplitFacings.cs | 51 +++++++++++++++++++ OpenRA.Mods.Common/UpdateRules/UpdatePath.cs | 1 + mods/ts/rules/gdi-support.yaml | 2 - mods/ts/rules/nod-vehicles.yaml | 1 - mods/ts/sequences/structures.yaml | 50 ++++++++---------- mods/ts/sequences/vehicles.yaml | 29 +++++++---- 9 files changed, 93 insertions(+), 52 deletions(-) create mode 100644 OpenRA.Mods.Common/UpdateRules/Rules/20200503/RemoveMuzzleSplitFacings.cs diff --git a/OpenRA.Mods.Common/Traits/Armament.cs b/OpenRA.Mods.Common/Traits/Armament.cs index e7a76f6857..f3f4ba3c57 100644 --- a/OpenRA.Mods.Common/Traits/Armament.cs +++ b/OpenRA.Mods.Common/Traits/Armament.cs @@ -53,6 +53,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Recoil recovery per-frame")] public readonly WDist RecoilRecovery = new WDist(9); + [SequenceReference] [Desc("Muzzle flash sequence to render")] public readonly string MuzzleSequence = null; @@ -60,9 +61,6 @@ namespace OpenRA.Mods.Common.Traits [Desc("Palette to render Muzzle flash sequence in")] public readonly string MuzzlePalette = "effect"; - [Desc("Use multiple muzzle images if non-zero")] - public readonly int MuzzleSplitFacings = 0; - [GrantedConditionReference] [Desc("Condition to grant while reloading.")] public readonly string ReloadingCondition = null; diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs b/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs index ed55167d4f..793587af6a 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackGarrisoned.cs @@ -173,10 +173,6 @@ namespace OpenRA.Mods.Common.Traits // Muzzle facing is fixed once the firing starts var muzzleAnim = new Animation(self.World, paxRender[a.Actor].GetImage(a.Actor), () => targetYaw); var sequence = a.Info.MuzzleSequence; - - if (a.Info.MuzzleSplitFacings > 0) - sequence += Util.IndexFacing(targetYaw, a.Info.MuzzleSplitFacings).ToString(); - var muzzleFlash = new AnimationWithOffset(muzzleAnim, () => PortOffset(self, port), () => false, diff --git a/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs index 45e033eafc..30a9a12d13 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithMuzzleOverlay.cs @@ -76,9 +76,6 @@ namespace OpenRA.Mods.Common.Traits.Render return; var sequence = a.Info.MuzzleSequence; - if (a.Info.MuzzleSplitFacings > 0) - sequence += Util.IndexFacing(getFacing(), a.Info.MuzzleSplitFacings).ToString(); - visible[barrel] = true; anims[barrel].Animation.PlayThen(sequence, () => visible[barrel] = false); } diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20200503/RemoveMuzzleSplitFacings.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20200503/RemoveMuzzleSplitFacings.cs new file mode 100644 index 0000000000..7e8dc7abb1 --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20200503/RemoveMuzzleSplitFacings.cs @@ -0,0 +1,51 @@ +#region Copyright & License Information +/* + * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; + +namespace OpenRA.Mods.Common.UpdateRules.Rules +{ + public class RemoveMuzzleSplitFacings : UpdateRule + { + public override string Name { get { return "Remove Armament.MuzzleSplitFacings."; } } + public override string Description + { + get + { + return "The legacy MuzzleSplitFacings option was removed from Armament.\n" + + "The same result can be created by using `Combine` in the sequence definitions to\n" + + "assemble the different facings sprites into a single sequence."; + } + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + foreach (var a in actorNode.ChildrenMatching("Armament")) + { + var muzzleSplitFacings = a.LastChildMatching("MuzzleSplitFacings"); + var sequenceNode = a.LastChildMatching("MuzzleSequence"); + if (muzzleSplitFacings != null && sequenceNode != null) + { + var sequence = sequenceNode.Value.Value; + var facings = muzzleSplitFacings.NodeValue() - 1; + var actor = actorNode.Key.ToLowerInvariant(); + yield return "The Armament muzzle effect has been removed from {0} ({1}).\n".F(actor, actorNode.Location.Filename) + + "If you would like to restore the muzzle effect you must redefine `MuzzleSequence: {0}`\n".F(sequence) + + "and replace the {0}0-{1} sequence definitions with a single `{0}` sequence that uses\n".F(sequence, facings) + + "the Combine syntax to assemble the different facing sprites."; + + a.RemoveNode(muzzleSplitFacings); + a.RemoveNode(sequenceNode); + } + } + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 5ba8a745c5..bc8b4e4a7a 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -72,6 +72,7 @@ namespace OpenRA.Mods.Common.UpdateRules new ReplaceFacingAngles(), new RenameSelfHealing(), new ReplaceBurns(), + new RemoveMuzzleSplitFacings(), }) }; diff --git a/mods/ts/rules/gdi-support.yaml b/mods/ts/rules/gdi-support.yaml index 36ebaeaa55..475396c31b 100644 --- a/mods/ts/rules/gdi-support.yaml +++ b/mods/ts/rules/gdi-support.yaml @@ -96,7 +96,6 @@ GACTWR: LocalOffset: 588,120,1358 MuzzleSequence: muzzle MuzzlePalette: effect-ignore-lighting - MuzzleSplitFacings: 8 Armament@VULCSECONDARY: RequiresCondition: tower.vulcan Name: secondary @@ -104,7 +103,6 @@ GACTWR: LocalOffset: 588,-120,1358 MuzzleSequence: muzzle MuzzlePalette: effect-ignore-lighting - MuzzleSplitFacings: 8 Armament@ROCKET: RequiresCondition: tower.rocket Weapon: RPGTower diff --git a/mods/ts/rules/nod-vehicles.yaml b/mods/ts/rules/nod-vehicles.yaml index 3f6b1874d6..a857ec90a7 100644 --- a/mods/ts/rules/nod-vehicles.yaml +++ b/mods/ts/rules/nod-vehicles.yaml @@ -30,7 +30,6 @@ BGGY: LocalOffset: 0,-61,543, 0,61,543 MuzzleSequence: muzzle MuzzlePalette: effect-ignore-lighting - MuzzleSplitFacings: 8 AttackFrontal: Voice: Attack PauseOnCondition: empdisable diff --git a/mods/ts/sequences/structures.yaml b/mods/ts/sequences/structures.yaml index 51a214c410..689661e324 100644 --- a/mods/ts/sequences/structures.yaml +++ b/mods/ts/sequences/structures.yaml @@ -1210,36 +1210,26 @@ gactwr: UseTilesetCode: false turret-sam: gtctwr_d Facings: 32 - muzzle0: mgun-n - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle1: mgun-nw - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle2: mgun-w - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle3: mgun-sw - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle4: mgun-s - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle5: mgun-se - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle6: mgun-e - Length: * - Offset: 0, 0, 12 - UseTilesetCode: false - muzzle7: mgun-ne - Length: * + muzzle: + Combine: + mgun-n: + Length: 6 + mgun-nw: + Length: 6 + mgun-w: + Length: 6 + mgun-sw: + Length: 6 + mgun-s: + Length: 6 + mgun-se: + Length: 6 + mgun-e: + Length: 6 + mgun-ne: + Length: 6 + Facings: 8 + Length: 6 Offset: 0, 0, 12 UseTilesetCode: false emp-overlay: emp_fx01 diff --git a/mods/ts/sequences/vehicles.yaml b/mods/ts/sequences/vehicles.yaml index 3a9c376783..646397a345 100644 --- a/mods/ts/sequences/vehicles.yaml +++ b/mods/ts/sequences/vehicles.yaml @@ -105,16 +105,27 @@ bike: bggy: Inherits: ^VehicleOverlays Defaults: - Length: * Offset: 0, 0, 24 - muzzle0: mgun-n - muzzle1: mgun-nw - muzzle2: mgun-w - muzzle3: mgun-sw - muzzle4: mgun-s - muzzle5: mgun-se - muzzle6: mgun-e - muzzle7: mgun-ne + muzzle: + Combine: + mgun-n: + Length: 6 + mgun-nw: + Length: 6 + mgun-w: + Length: 6 + mgun-sw: + Length: 6 + mgun-s: + Length: 6 + mgun-se: + Length: 6 + mgun-e: + Length: 6 + mgun-ne: + Length: 6 + Facings: 8 + Length: 6 icon: bggyicon Offset: 0, 0