From e0b77a85178ae4e7a68d2c1858f820ae6f313a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Apr 2016 19:35:17 +0200 Subject: [PATCH 1/5] Add configurable DamageState/Type filters to WithSmoke. --- OpenRA.Mods.Common/Traits/Render/WithSmoke.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs b/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs index 94323f4fe1..3ad2cfd0a6 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs @@ -9,20 +9,30 @@ */ #endregion +using System.Collections.Generic; using OpenRA.Graphics; +using OpenRA.Mods.Common.Warheads; using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits.Render { [Desc("Renders an overlay when the actor is taking heavy damage.")] - public class WithSmokeInfo : ITraitInfo, Requires + public class WithSmokeInfo : ITraitInfo, Requires // TODO: rename to WithDamageOverlay { - public readonly string Sequence = "smoke_m"; + public readonly string Sequence = "smoke_m"; // TODO: rename to image [SequenceReference("Sequence")] public readonly string IdleSequence = "idle"; [SequenceReference("Sequence")] public readonly string LoopSequence = "loop"; [SequenceReference("Sequence")] public readonly string EndSequence = "end"; + [Desc("Damage types that this should be used for (defined on the warheads).", + "Leave empty to disable all filtering.")] + public readonly HashSet DamageTypes = new HashSet(); + + [Desc("Trigger when Undamaged, Light, Medium, Heavy, Critical or Dead.")] + public readonly DamageState MinimumDamageState = DamageState.Heavy; + public readonly DamageState MaximumDamageState = DamageState.Dead; + public object Create(ActorInitializer init) { return new WithSmoke(init.Self, this); } } @@ -45,9 +55,14 @@ namespace OpenRA.Mods.Common.Traits.Render public void Damaged(Actor self, AttackInfo e) { + var warhead = e.Warhead as DamageWarhead; + if (info.DamageTypes.Count > 0 && (warhead != null && !warhead.DamageTypes.Overlaps(info.DamageTypes))) + return; + if (isSmoking) return; if (e.Damage < 0) return; /* getting healed */ - if (e.DamageState < DamageState.Heavy) return; + if (e.DamageState < info.MinimumDamageState) return; + if (e.DamageState > info.MaximumDamageState) return; isSmoking = true; anim.PlayThen(info.IdleSequence, From 2567d59af488dbc8d84949dcd8b96a8abb3afdf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Apr 2016 20:27:59 +0200 Subject: [PATCH 2/5] Let TD trees burn and carbonate on incendiary weapons. --- mods/cnc/rules/defaults.yaml | 30 +++++ mods/cnc/rules/trees.yaml | 189 ++++++++++++++++++++++++++++ mods/cnc/sequences/decorations.yaml | 180 ++++++++++++++++++++++---- mods/cnc/sequences/misc.yaml | 41 +++++- mods/cnc/weapons/other.yaml | 14 ++- mods/cnc/weapons/superweapons.yaml | 22 ++-- 6 files changed, 437 insertions(+), 39 deletions(-) diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 008078518e..458b62d1f9 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -634,10 +634,40 @@ HP: 500 Armor: Type: Wood + Targetable: + TargetTypes: Trees + WithSmoke@SmallBurn: + DamageType: Incendiary + Sequence: burn-s + MinimumDamageState: Light + MaximumDamageState: Medium + WithSmoke@MediumBurn: + DamageType: Incendiary + Sequence: burn-m + MinimumDamageState: Medium + MaximumDamageState: Heavy + WithSmoke@LargeBurn: + DamageType: Incendiary + Sequence: burn-l + MinimumDamageState: Heavy + MaximumDamageState: Dead AutoTargetIgnore: HiddenUnderShroud: ScriptTriggers: +^TreeHusk: + Inherits@1: ^SpriteActor + AppearsOnRadar: + Building: + Footprint: __ x_ + Dimensions: 2,2 + WithSpriteBody: + Tooltip: + Name: Tree (Burnt) + ShowOwnerRow: false + FrozenUnderFog: + ScriptTriggers: + ^TibTree: Inherits@1: ^SpriteActor Tooltip: diff --git a/mods/cnc/rules/trees.yaml b/mods/cnc/rules/trees.yaml index eaefa4a9a7..0f97deacef 100644 --- a/mods/cnc/rules/trees.yaml +++ b/mods/cnc/rules/trees.yaml @@ -69,42 +69,99 @@ T01: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T01.Husk + +T01.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T02: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T02.Husk + +T02.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T03: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T03.Husk + +T03.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T04: Inherits: ^Tree EditorTilesetFilter: RequireTilesets: DESERT + SpawnActorOnDeath: + Actor: T04.Husk + +T04.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + RequireTilesets: DESERT T05: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T05.Husk + +T05.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T06: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T06.Husk + +T06.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T07: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T07.Husk + +T07.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T08: Inherits: ^Tree Building: Footprint: x_ Dimensions: 2,1 + SpawnActorOnDeath: + Actor: T08.Husk + +T08.Husk: + Inherits: ^TreeHusk + Building: + Footprint: x_ + Dimensions: 2,1 T09: Inherits: ^Tree @@ -113,6 +170,16 @@ T09: Dimensions: 2,1 EditorTilesetFilter: RequireTilesets: DESERT + SpawnActorOnDeath: + Actor: T09.Husk + +T09.Husk: + Inherits: ^TreeHusk + Building: + Footprint: x_ + Dimensions: 2,1 + EditorTilesetFilter: + ExcludeTilesets: DESERT T10: Inherits: ^Tree @@ -120,6 +187,15 @@ T10: Footprint: __ xx EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T10.Husk + +T10.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ xx + EditorTilesetFilter: + ExcludeTilesets: DESERT T11: Inherits: ^Tree @@ -127,21 +203,53 @@ T11: Footprint: __ xx EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T11.Husk + +T11.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ xx + EditorTilesetFilter: + ExcludeTilesets: DESERT T12: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T12.Husk + +T12.Husk: + Inherits: ^TreeHusk + Building: + EditorTilesetFilter: + ExcludeTilesets: DESERT T13: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T13.Husk + +T13.Husk: + Inherits: ^TreeHusk + Building: + EditorTilesetFilter: + ExcludeTilesets: DESERT T14: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T14.Husk + +T14.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T15: Inherits: ^Tree @@ -150,21 +258,52 @@ T15: Dimensions: 3,2 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T15.Husk + +T15.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT T16: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T16.Husk + +T16.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T17: Inherits: ^Tree EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: T17.Husk + +T17.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: DESERT T18: Inherits: ^Tree EditorTilesetFilter: RequireTilesets: DESERT + SpawnActorOnDeath: + Actor: T18.Husk + +T18.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + RequireTilesets: DESERT TC01: Inherits: ^Tree @@ -173,6 +312,16 @@ TC01: Dimensions: 3,2 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: TC01.Husk + +TC01.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT TC02: Inherits: ^Tree @@ -181,6 +330,16 @@ TC02: Dimensions: 3,2 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: TC02.Husk + +TC02.Husk: + Inherits: ^TreeHusk + Building: + Footprint: _x_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT TC03: Inherits: ^Tree @@ -189,6 +348,16 @@ TC03: Dimensions: 3,2 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: TC03.Husk + +TC03.Husk: + Inherits: ^TreeHusk + Building: + Footprint: _x_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT TC04: Inherits: ^Tree @@ -197,6 +366,16 @@ TC04: Dimensions: 4,3 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: TC04.Husk + +TC04.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ____ xxx_ x___ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT TC05: Inherits: ^Tree @@ -205,3 +384,13 @@ TC05: Dimensions: 4,3 EditorTilesetFilter: ExcludeTilesets: DESERT + SpawnActorOnDeath: + Actor: TC05.Husk + +TC05.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __x_ xxx_ _xx_ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT diff --git a/mods/cnc/sequences/decorations.yaml b/mods/cnc/sequences/decorations.yaml index 5ff5cd8da9..b55dd65bdb 100644 --- a/mods/cnc/sequences/decorations.yaml +++ b/mods/cnc/sequences/decorations.yaml @@ -60,6 +60,14 @@ tc04: idle: damaged-idle: Start: 1 + +tc04.husk: + Defaults: tc04 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: + Start: 2 dead: Start: 2 Length: 8 @@ -73,6 +81,14 @@ tc05: idle: damaged-idle: Start: 1 + +tc05.husk: + Defaults: tc05 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: + Start: 2 dead: Start: 2 Length: 8 @@ -84,7 +100,13 @@ tc03: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +tc03.husk: + Defaults: tc03 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -97,7 +119,13 @@ tc02: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +tc02.husk: + Defaults: tc02 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -110,7 +138,13 @@ tc01: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +tc01.husk: + Defaults: tc01 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -121,7 +155,11 @@ t18: Defaults: AddExtension: false idle: t18.des - damaged-idle: t18.des + +t18.husk: + Defaults: t18 + AddExtension: false + idle: t18.des Start: 1 dead: t18.des Start: 2 @@ -134,7 +172,13 @@ t17: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t17.husk: + Defaults: t17 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -147,7 +191,13 @@ t16: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t16.husk: + Defaults: t16 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -160,7 +210,13 @@ t15: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t15.husk: + Defaults: t15 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -173,7 +229,13 @@ t14: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t14.husk: + Defaults: t14 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -186,7 +248,13 @@ t13: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t13.husk: + Defaults: t13 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -199,7 +267,13 @@ t12: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t12.husk: + Defaults: t12 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -212,7 +286,13 @@ t11: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t11.husk: + Defaults: t11 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -225,7 +305,13 @@ t10: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t10.husk: + Defaults: t10 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -236,7 +322,11 @@ t09: Defaults: AddExtension: false idle: t09.des - damaged-idle: t09.des + +t09.husk: + Defaults: t09 + AddExtension: false + idle: t09.des Start: 1 dead: t09.des Start: 2 @@ -247,7 +337,13 @@ t08: Defaults: UseTilesetExtension: true idle: - damaged-idle: + +t08.husk: + Defaults: t08 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -260,7 +356,13 @@ t07: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t07.husk: + Defaults: t07 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -273,7 +375,13 @@ t06: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t06.husk: + Defaults: t06 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -286,7 +394,13 @@ t05: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t05.husk: + Defaults: t05 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -297,7 +411,11 @@ t04: Defaults: AddExtension: false idle: t04.des - damaged-idle: t04.des + +t04.husk: + Defaults: t04 + AddExtension: false + idle: t04.des Start: 1 dead: t04.des Start: 2 @@ -310,7 +428,13 @@ t03: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t03.husk: + Defaults: t03 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -323,7 +447,13 @@ t02: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t02.husk: + Defaults: t02 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -336,7 +466,13 @@ t01: TilesetOverrides: DESERT: TEMPERAT idle: - damaged-idle: + +t01.husk: + Defaults: t01 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + idle: Start: 1 dead: Start: 2 @@ -913,4 +1049,4 @@ arco: arco.husk: idle: arco - Start: 1 \ No newline at end of file + Start: 1 diff --git a/mods/cnc/sequences/misc.yaml b/mods/cnc/sequences/misc.yaml index 420264f17e..b0019d68dc 100644 --- a/mods/cnc/sequences/misc.yaml +++ b/mods/cnc/sequences/misc.yaml @@ -13,6 +13,45 @@ fire: Offset: 0,-3 ZOffset: 1023 +burn-l: + idle: + Length: * + ZOffset: 512 + loop: + Start: 16 + Length: 44 + ZOffset: 512 + end: + Start: 60 + Length: 6 + ZOffset: 512 + +burn-m: + idle: + Length: * + ZOffset: 512 + loop: + Start: 16 + Length: 44 + ZOffset: 512 + end: + Start: 60 + Length: 6 + ZOffset: 512 + +burn-s: + idle: + Length: * + ZOffset: 512 + loop: + Start: 12 + Length: 46 + ZOffset: 512 + end: + Start: 59 + Length: 5 + ZOffset: 512 + 120mm: idle: ZOffset: 1023 @@ -385,4 +424,4 @@ smokland: Start: 60 Length: 32 Tick: 120 - ZOffset: 1023 \ No newline at end of file + ZOffset: 1023 diff --git a/mods/cnc/weapons/other.yaml b/mods/cnc/weapons/other.yaml index 86a513eae0..ee7c1b339b 100644 --- a/mods/cnc/weapons/other.yaml +++ b/mods/cnc/weapons/other.yaml @@ -1,4 +1,5 @@ Flamethrower: + ValidTargets: Ground, Trees ReloadDelay: 55 Range: 2c512 InvalidTargets: Wall @@ -8,13 +9,14 @@ Flamethrower: Warhead@1Dam: SpreadDamage Spread: 341 Damage: 40 + ValidTargets: Ground, Trees InvalidTargets: Wall Versus: None: 100 Wood: 100 Light: 100 Heavy: 20 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -22,6 +24,7 @@ Flamethrower: ImpactSounds: flamer2.aud BigFlamer: + ValidTargets: Ground, Trees ReloadDelay: 50 Range: 3c512 InvalidTargets: Wall @@ -34,12 +37,13 @@ BigFlamer: Spread: 341 Damage: 75 InvalidTargets: Wall + ValidTargets: Ground, Trees Versus: None: 100 Wood: 100 Light: 67 Heavy: 25 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -93,7 +97,7 @@ Grenade: ImpactSounds: xplos.aud Napalm: - ValidTargets: Ground, Water + ValidTargets: Ground, Water, Trees ReloadDelay: 4 Range: 2c0 Burst: 2 @@ -104,13 +108,13 @@ Napalm: Spread: 341 Damage: 30 Falloff: 1000, 368, 135, 50, 18, 7, 0 - ValidTargets: Ground, Water + ValidTargets: Ground, Water, Trees Versus: None: 100 Wood: 100 Light: 100 Heavy: 80 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect diff --git a/mods/cnc/weapons/superweapons.yaml b/mods/cnc/weapons/superweapons.yaml index e40d0c2127..d79adafb5f 100644 --- a/mods/cnc/weapons/superweapons.yaml +++ b/mods/cnc/weapons/superweapons.yaml @@ -1,17 +1,17 @@ Atomic: - ValidTargets: Ground, Air + ValidTargets: Ground, Air, Trees Report: nukemisl.aud Warhead@1Dam_impact: SpreadDamage Spread: 1c0 Damage: 150 Falloff: 1000, 368, 135, 50, 18, 7, 0 - ValidTargets: Ground, Air + ValidTargets: Ground, Air, Trees Versus: None: 100 Wood: 100 Light: 60 Heavy: 50 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@2Eff_impact: CreateEffect Explosions: nuke_explosion ImpactSounds: nukexplo.aud @@ -26,7 +26,7 @@ Atomic: Wood: 100 Light: 60 Heavy: 50 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@4Res_areanukea: DestroyResource Size: 3 Delay: 3 @@ -42,13 +42,13 @@ Atomic: Damage: 50 Falloff: 1000, 368, 135, 50, 18, 7, 0 Delay: 6 - ValidTargets: Ground, Air + ValidTargets: Ground, Air, Trees Versus: None: 100 Wood: 100 Light: 60 Heavy: 50 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@8Res_areanukeb: DestroyResource Size: 4 Delay: 6 @@ -61,13 +61,13 @@ Atomic: Damage: 20 Falloff: 1000, 368, 135, 50, 18, 7, 0 Delay: 9 - ValidTargets: Ground, Air + ValidTargets: Ground, Air, Trees Versus: None: 100 Wood: 100 Light: 60 Heavy: 50 - DamageTypes: Prone50Percent, TriggerProne, FireDeath + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@11Res_areanukec: DestroyResource Size: 5 Delay: 9 @@ -77,13 +77,13 @@ Atomic: Delay: 9 IonCannon: - ValidTargets: Ground, Air + ValidTargets: Ground, Air, Trees Warhead@1Dam_impact: SpreadDamage Range: 0, 1c1, 2c1, 2c512 Damage: 100 Falloff: 1000, 1000, 250, 100 - ValidTargets: Ground, Air - DamageTypes: Prone50Percent, TriggerProne, FireDeath + ValidTargets: Ground, Air, Trees + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary Warhead@2Smu_impact: LeaveSmudge SmudgeType: Scorch Warhead@3Smu_area: LeaveSmudge From 99c7989ebcb46b1ac12849128aa9d7a124615683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Apr 2016 19:48:41 +0200 Subject: [PATCH 3/5] Rename WithSmoke into a more generic WithDamageOverlay trait. Rename Sequence parameter to Image to avoid confusion. --- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 2 +- .../{WithSmoke.cs => WithDamageOverlay.cs} | 20 +++++++++---------- .../UtilityCommands/UpgradeRules.cs | 16 +++++++++++++++ mods/cnc/rules/defaults.yaml | 16 +++++++-------- mods/ra/rules/defaults.yaml | 4 ++-- 5 files changed, 37 insertions(+), 21 deletions(-) rename OpenRA.Mods.Common/Traits/Render/{WithSmoke.cs => WithDamageOverlay.cs} (73%) diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index e817174245..c9edc3b685 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -431,6 +431,7 @@ + @@ -447,7 +448,6 @@ - diff --git a/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs b/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs similarity index 73% rename from OpenRA.Mods.Common/Traits/Render/WithSmoke.cs rename to OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs index 3ad2cfd0a6..19f24b3c7f 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSmoke.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs @@ -17,13 +17,13 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits.Render { [Desc("Renders an overlay when the actor is taking heavy damage.")] - public class WithSmokeInfo : ITraitInfo, Requires // TODO: rename to WithDamageOverlay + public class WithDamageOverlayInfo : ITraitInfo, Requires { - public readonly string Sequence = "smoke_m"; // TODO: rename to image + public readonly string Image = "smoke_m"; - [SequenceReference("Sequence")] public readonly string IdleSequence = "idle"; - [SequenceReference("Sequence")] public readonly string LoopSequence = "loop"; - [SequenceReference("Sequence")] public readonly string EndSequence = "end"; + [SequenceReference("Image")] public readonly string IdleSequence = "idle"; + [SequenceReference("Image")] public readonly string LoopSequence = "loop"; + [SequenceReference("Image")] public readonly string EndSequence = "end"; [Desc("Damage types that this should be used for (defined on the warheads).", "Leave empty to disable all filtering.")] @@ -33,23 +33,23 @@ namespace OpenRA.Mods.Common.Traits.Render public readonly DamageState MinimumDamageState = DamageState.Heavy; public readonly DamageState MaximumDamageState = DamageState.Dead; - public object Create(ActorInitializer init) { return new WithSmoke(init.Self, this); } + public object Create(ActorInitializer init) { return new WithDamageOverlay(init.Self, this); } } - public class WithSmoke : INotifyDamage + public class WithDamageOverlay : INotifyDamage { - readonly WithSmokeInfo info; + readonly WithDamageOverlayInfo info; readonly Animation anim; bool isSmoking; - public WithSmoke(Actor self, WithSmokeInfo info) + public WithDamageOverlay(Actor self, WithDamageOverlayInfo info) { this.info = info; var rs = self.Trait(); - anim = new Animation(self.World, info.Sequence); + anim = new Animation(self.World, info.Image); rs.Add(new AnimationWithOffset(anim, null, () => !isSmoking)); } diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 4fa6ad33ba..2222cf84a7 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -788,6 +788,22 @@ namespace OpenRA.Mods.Common.UtilityCommands n.Key = "DetonationDelay"; } + // WithSmoke was refactored to become more generic and Sequence/Image notation has been unified. + if (engineVersion < 20160528) + { + if (depth == 1 && node.Key.StartsWith("WithSmoke")) + { + var s = node.Value.Nodes.FirstOrDefault(n => n.Key == "Sequence"); + if (s != null) + s.Key = "Image"; + + var parts = node.Key.Split('@'); + node.Key = "WithDamageOverlay"; + if (parts.Length > 1) + node.Key += "@" + parts[1]; + } + } + UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); } } diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 458b62d1f9..572863ffd2 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -79,7 +79,7 @@ HiddenUnderFog: AttackMove: DrawLineToTarget: - WithSmoke: + WithDamageOverlay: WithFacingSpriteBody: Explodes: Weapon: UnitExplodeSmall @@ -446,7 +446,7 @@ ActorLostNotification: AttackMove: DrawLineToTarget: - WithSmoke: + WithDamageOverlay: Explodes: Weapon: UnitExplodeShip EmptyWeapon: UnitExplodeShip @@ -636,19 +636,19 @@ Type: Wood Targetable: TargetTypes: Trees - WithSmoke@SmallBurn: + WithDamageOverlay@SmallBurn: DamageType: Incendiary - Sequence: burn-s + Image: burn-s MinimumDamageState: Light MaximumDamageState: Medium - WithSmoke@MediumBurn: + WithDamageOverlay@MediumBurn: DamageType: Incendiary - Sequence: burn-m + Image: burn-m MinimumDamageState: Medium MaximumDamageState: Heavy - WithSmoke@LargeBurn: + WithDamageOverlay@LargeBurn: DamageType: Incendiary - Sequence: burn-l + Image: burn-l MinimumDamageState: Heavy MaximumDamageState: Dead AutoTargetIgnore: diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 3fa6559fa0..74bc12c931 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -99,7 +99,7 @@ GivesBounty: GpsDot: String: Vehicle - WithSmoke: + WithDamageOverlay: Guard: Guardable: Tooltip: @@ -325,7 +325,7 @@ RepairableNear: GpsDot: String: Ship - WithSmoke: + WithDamageOverlay: Explodes: Weapon: UnitExplodeShip EmptyWeapon: UnitExplodeShip From 13cf193640911fe0f3e569bce764c8af075b3d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 24 Apr 2016 20:24:28 +0200 Subject: [PATCH 4/5] Lint check for invalid building footprint definitions. --- .../Lint/CheckBuildingFootprint.cs | 36 +++++++++++++++++++ OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + 2 files changed, 37 insertions(+) create mode 100644 OpenRA.Mods.Common/Lint/CheckBuildingFootprint.cs diff --git a/OpenRA.Mods.Common/Lint/CheckBuildingFootprint.cs b/OpenRA.Mods.Common/Lint/CheckBuildingFootprint.cs new file mode 100644 index 0000000000..2e96d8bd0d --- /dev/null +++ b/OpenRA.Mods.Common/Lint/CheckBuildingFootprint.cs @@ -0,0 +1,36 @@ +#region Copyright & License Information +/* + * Copyright 2007-2016 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; +using System.Linq; +using OpenRA.Mods.Common.Traits; +using OpenRA.Traits; + +namespace OpenRA.Mods.Common.Lint +{ + class CheckBuildingFootprint : ILintRulesPass + { + public void Run(Action emitError, Action emitWarning, Ruleset rules) + { + foreach (var actorInfo in rules.Actors) + { + var building = actorInfo.Value.TraitInfoOrDefault(); + if (building == null) + continue; + + var footprint = building.Footprint.Where(x => !char.IsWhiteSpace(x)).ToArray(); + var dimension = building.Dimensions; + if (footprint.Length != dimension.X * dimension.Y) + emitError("Invalid building footprint/dimension for " + actorInfo.Key); + } + } + } +} diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index c9edc3b685..480cd2fdf8 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -179,6 +179,7 @@ + From d1022671c08ad506413c02a3013b5af57bfb085a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 1 May 2016 12:56:01 +0200 Subject: [PATCH 5/5] Define the reverse playback at sequence level. --- OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs | 2 +- mods/cnc/sequences/misc.yaml | 3 ++- mods/ra/sequences/misc.yaml | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs b/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs index 19f24b3c7f..ddb8f23695 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithDamageOverlay.cs @@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits.Render isSmoking = true; anim.PlayThen(info.IdleSequence, () => anim.PlayThen(info.LoopSequence, - () => anim.PlayBackwardsThen(info.EndSequence, + () => anim.PlayThen(info.EndSequence, () => isSmoking = false))); } } diff --git a/mods/cnc/sequences/misc.yaml b/mods/cnc/sequences/misc.yaml index b0019d68dc..e1a6412312 100644 --- a/mods/cnc/sequences/misc.yaml +++ b/mods/cnc/sequences/misc.yaml @@ -67,7 +67,8 @@ smoke_m: Offset: 2, -5 ZOffset: 512 end: - Length: 26 + Start: 26 + Length: -26 Offset: 2, -5 ZOffset: 512 diff --git a/mods/ra/sequences/misc.yaml b/mods/ra/sequences/misc.yaml index 0993ad96b9..36cbfdb11f 100644 --- a/mods/ra/sequences/misc.yaml +++ b/mods/ra/sequences/misc.yaml @@ -132,7 +132,8 @@ smoke_m: Offset: 2, -5 ZOffset: 512 end: - Length: 26 + Start: 26 + Length: -26 Offset: 2, -5 ZOffset: 512