diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs index 7bf24fe8ea..571d6421d6 100644 --- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs +++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs @@ -26,6 +26,12 @@ namespace OpenRA.Mods.RA.Render [Desc("Armament name")] public readonly string Armament = "primary"; + [Desc("Are the muzzle facings split into multiple shps?")] + public readonly bool SplitFacings = false; + + [Desc("Number of separate facing images that are defined in the sequences.")] + public readonly int FacingCount = 8; + public object Create(ActorInitializer init) { return new WithMuzzleFlash(init.self, this); } } @@ -34,6 +40,7 @@ namespace OpenRA.Mods.RA.Render readonly WithMuzzleFlashInfo info; Dictionary visible = new Dictionary(); Dictionary anims = new Dictionary(); + Func getFacing; public WithMuzzleFlash(Actor self, WithMuzzleFlashInfo info) { @@ -50,7 +57,7 @@ namespace OpenRA.Mods.RA.Render var turreted = self.TraitsImplementing() .FirstOrDefault(t => t.Name == arm.Info.Turret); - var getFacing = turreted != null ? () => turreted.turretFacing : + getFacing = turreted != null ? () => turreted.turretFacing : facing != null ? (Func)(() => facing.Facing) : () => 0; var muzzleFlash = new Animation(render.GetImage(self), getFacing); @@ -69,7 +76,12 @@ namespace OpenRA.Mods.RA.Render return; visible[barrel] = true; - anims[barrel].Animation.PlayThen(info.Sequence, () => visible[barrel] = false); + var sequence = info.Sequence; + + if (info.SplitFacings) + sequence += Traits.Util.QuantizeFacing(getFacing(), info.FacingCount).ToString(); + + anims[barrel].Animation.PlayThen(sequence, () => visible[barrel] = false); } public IEnumerable Render(Actor self, WorldRenderer wr) diff --git a/mods/cnc/bits/chem.shp b/mods/cnc/bits/chem.shp deleted file mode 100644 index 8116e742c7..0000000000 Binary files a/mods/cnc/bits/chem.shp and /dev/null differ diff --git a/mods/cnc/bits/flame2.shp b/mods/cnc/bits/flame2.shp deleted file mode 100644 index ce3511b884..0000000000 Binary files a/mods/cnc/bits/flame2.shp and /dev/null differ diff --git a/mods/cnc/rules/infantry.yaml b/mods/cnc/rules/infantry.yaml index fa7afce410..78bfed67e0 100644 --- a/mods/cnc/rules/infantry.yaml +++ b/mods/cnc/rules/infantry.yaml @@ -101,10 +101,11 @@ E4: HP: 90 Armament: Weapon: Flamethrower - LocalOffset: 85,0,171 + LocalOffset: 341,0,256 FireDelay: 3 AttackFrontal: WithMuzzleFlash: + SplitFacings: true RenderInfantryProne: IdleAnimations: idle1,idle2 StandAnimations: stand, stand2 @@ -135,10 +136,11 @@ E5: HP: 90 Armament: Weapon: Chemspray - LocalOffset: 85,0,384 + LocalOffset: 341,0,256 FireDelay: 3 AttackFrontal: WithMuzzleFlash: + SplitFacings: true -PoisonedByTiberium: RenderInfantryProne: IdleAnimations: idle1,idle2 diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index 78b5ec938e..75ea6b0233 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -184,6 +184,7 @@ FTNK: RenderUnit: AutoTarget: WithMuzzleFlash: + SplitFacings: true Explodes: Weapon: FlametankExplode EmptyWeapon: FlametankExplode diff --git a/mods/cnc/sequences/infantry.yaml b/mods/cnc/sequences/infantry.yaml index 160383394b..b5e0560682 100644 --- a/mods/cnc/sequences/infantry.yaml +++ b/mods/cnc/sequences/infantry.yaml @@ -382,10 +382,38 @@ e4: Start: 16 Length: 4 Tick: 1600 - muzzle: flame2 + muzzle0: flame-n Start: 0 - Length: 13 - Facings: 8 + Length: * + Offset: 1,6 + muzzle1: flame-nw + Start: 0 + Length: * + Offset: 8,7 + muzzle2: flame-w + Start: 0 + Length: * + Offset: 8,2 + muzzle3: flame-sw + Start: 0 + Length: * + Offset: 7,-2 + muzzle4: flame-s + Start: 0 + Length: * + Offset: 1,-2 + muzzle5: flame-se + Start: 0 + Length: * + Offset: -5,-2 + muzzle6: flame-e + Start: 0 + Length: * + Offset: -7,2 + muzzle7: flame-ne + Start: 0 + Length: * + Offset: -7,8 icon: e4icnh Start: 0 @@ -475,10 +503,38 @@ e5: Start: 16 Length: 4 Tick: 1600 - muzzle: chem + muzzle0: chem-n Start: 0 - Length: 13 - Facings: 8 + Length: * + Offset: 1,2 + muzzle1: chem-nw + Start: 0 + Length: * + Offset: 8,2 + muzzle2: chem-w + Start: 0 + Length: * + Offset: 8,-3 + muzzle3: chem-sw + Start: 0 + Length: * + Offset: 7,-6 + muzzle4: chem-s + Start: 0 + Length: * + Offset: 1,-6 + muzzle5: chem-se + Start: 0 + Length: * + Offset: -5,-6 + muzzle6: chem-e + Start: 0 + Length: * + Offset: -7,-3 + muzzle7: chem-ne + Start: 0 + Length: * + Offset: -3,2 icon: e5icnh Start: 0 diff --git a/mods/cnc/sequences/vehicles.yaml b/mods/cnc/sequences/vehicles.yaml index 0a738cf4bc..9de638b790 100644 --- a/mods/cnc/sequences/vehicles.yaml +++ b/mods/cnc/sequences/vehicles.yaml @@ -101,10 +101,38 @@ ftnk: idle: Start: 0 Facings: 32 - muzzle: flame2 + muzzle0: flame-n Start: 0 - Length: 13 - Facings: 8 + Length: * + Offset: 3,8 + muzzle1: flame-nw + Start: 0 + Length: * + Offset: 4,6 + muzzle2: flame-w + Start: 0 + Length: * + Offset: 7,2 + muzzle3: flame-sw + Start: 0 + Length: * + Offset: 3,-2 + muzzle4: flame-s + Start: 0 + Length: * + Offset: 1,-2 + muzzle5: flame-se + Start: 0 + Length: * + Offset: -3,-1 + muzzle6: flame-e + Start: 0 + Length: * + Offset: -6,2 + muzzle7: flame-ne + Start: 0 + Length: * + Offset: -5,6 icon: ftnkicnh Start: 0