From 399e451ada51fec36658e7143933e4fdb6247e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 13 Sep 2018 21:17:32 +0200 Subject: [PATCH] Add a DamagesConcreteWarhead to remove buildable concrete. --- OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj | 1 + .../Traits/World/BuildableTerrainLayer.cs | 23 +++++++++++++ .../Warheads/DamagesConcreteWarhead.cs | 34 +++++++++++++++++++ mods/d2k/weapons/debris.yaml | 6 ++++ mods/d2k/weapons/largeguns.yaml | 8 +++++ mods/d2k/weapons/missiles.yaml | 10 ++++++ mods/d2k/weapons/other.yaml | 16 +++++++++ mods/d2k/weapons/smallguns.yaml | 6 ++++ 8 files changed, 104 insertions(+) create mode 100644 OpenRA.Mods.D2k/Warheads/DamagesConcreteWarhead.cs diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index 85915b517e..51b52c10f7 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -83,6 +83,7 @@ + diff --git a/OpenRA.Mods.D2k/Traits/World/BuildableTerrainLayer.cs b/OpenRA.Mods.D2k/Traits/World/BuildableTerrainLayer.cs index dbe9ec94a5..94972b5dde 100644 --- a/OpenRA.Mods.D2k/Traits/World/BuildableTerrainLayer.cs +++ b/OpenRA.Mods.D2k/Traits/World/BuildableTerrainLayer.cs @@ -21,6 +21,9 @@ namespace OpenRA.Mods.D2k.Traits [Desc("Palette to render the layer sprites in.")] public readonly string Palette = TileSet.TerrainPaletteInternalName; + [Desc("The hitpoints, which can be reduced by the DamagesConcreteWarhead.")] + public readonly int MaxStrength = 9000; + public object Create(ActorInitializer init) { return new BuildableTerrainLayer(init.Self, this); } } @@ -29,6 +32,7 @@ namespace OpenRA.Mods.D2k.Traits readonly BuildableTerrainLayerInfo info; readonly Dictionary dirty = new Dictionary(); readonly Map map; + readonly CellLayer strength; TerrainSpriteLayer render; Theater theater; @@ -38,6 +42,7 @@ namespace OpenRA.Mods.D2k.Traits { this.info = info; map = self.World.Map; + strength = new CellLayer(self.World.Map); } public void WorldLoaded(World w, WorldRenderer wr) @@ -49,12 +54,30 @@ namespace OpenRA.Mods.D2k.Traits public void AddTile(CPos cell, TerrainTile tile) { map.CustomTerrain[cell] = map.Rules.TileSet.GetTerrainIndex(tile); + strength[cell] = info.MaxStrength; // Terrain tiles define their origin at the topleft var s = theater.TileSprite(tile); dirty[cell] = new Sprite(s.Sheet, s.Bounds, s.ZRamp, float2.Zero, s.Channel, s.BlendMode); } + public void HitTile(CPos cell, int damage) + { + if (strength[cell] == 0) + return; + + strength[cell] = strength[cell] - damage; + if (strength[cell] < 1) + RemoveTile(cell); + } + + public void RemoveTile(CPos cell) + { + map.CustomTerrain[cell] = byte.MaxValue; + strength[cell] = 0; + dirty[cell] = null; + } + void ITickRender.TickRender(WorldRenderer wr, Actor self) { var remove = new List(); diff --git a/OpenRA.Mods.D2k/Warheads/DamagesConcreteWarhead.cs b/OpenRA.Mods.D2k/Warheads/DamagesConcreteWarhead.cs new file mode 100644 index 0000000000..690839212e --- /dev/null +++ b/OpenRA.Mods.D2k/Warheads/DamagesConcreteWarhead.cs @@ -0,0 +1,34 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 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; +using OpenRA.Mods.Common.Warheads; +using OpenRA.Mods.D2k.Traits; +using OpenRA.Traits; + +namespace OpenRA.Mods.D2k.Warheads +{ + [Desc("Interacts with the BuildableTerrainLayer trait.")] + public class DamagesConcreteWarhead : Warhead + { + [Desc("How much damage to deal.")] + [FieldLoader.Require] + public readonly int Damage = 0; + + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) + { + var world = firedBy.World; + var layer = world.WorldActor.Trait(); + var cell = world.Map.CellContaining(target.CenterPosition); + layer.HitTile(cell, Damage); + } + } +} diff --git a/mods/d2k/weapons/debris.yaml b/mods/d2k/weapons/debris.yaml index e8de9d88b5..817d751701 100644 --- a/mods/d2k/weapons/debris.yaml +++ b/mods/d2k/weapons/debris.yaml @@ -32,6 +32,8 @@ Debris: Warhead@3Eff: CreateEffect Explosions: tiny_explosion ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 300 Debris2: Inherits: Debris @@ -56,6 +58,8 @@ Debris2: DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath Warhead@3Eff: CreateEffect Explosions: small_napalm + Warhead@4Concrete: DamagesConcrete + Damage: 2250 Debris3: Inherits: Debris2 @@ -64,6 +68,8 @@ Debris3: TrailImage: small_trail2 Warhead@1Dam: SpreadDamage Damage: 1500 + Warhead@4Concrete: DamagesConcrete + Damage: 1350 Debris4: Inherits: Debris2 diff --git a/mods/d2k/weapons/largeguns.yaml b/mods/d2k/weapons/largeguns.yaml index 9967618137..642be44ce9 100644 --- a/mods/d2k/weapons/largeguns.yaml +++ b/mods/d2k/weapons/largeguns.yaml @@ -26,6 +26,8 @@ Warhead@3Eff: CreateEffect Explosions: small_napalm ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 540 110mm_Gun: Inherits: ^Cannon @@ -37,6 +39,8 @@ Blockable: false Warhead@1Dam: SpreadDamage Damage: 2900 + Warhead@2Concrete: DamagesConcrete + Damage: 2900 80mm_A: Inherits: ^Cannon @@ -69,6 +73,8 @@ DevBullet: invulnerable: 0 cy: 40 harvester: 100 + Warhead@2Concrete: DamagesConcrete + Damage: 3250 Warhead@3Eff: CreateEffect Explosions: shockwave ImpactSounds: EXPLMD1.WAV @@ -101,6 +107,8 @@ DevBullet: cy: 20 harvester: 25 DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Concrete: DamagesConcrete + Damage: 5625 Warhead@3Eff: CreateEffect Explosions: med_explosion ImpactSounds: EXPLMD2.WAV diff --git a/mods/d2k/weapons/missiles.yaml b/mods/d2k/weapons/missiles.yaml index d79e342348..0e82be8811 100644 --- a/mods/d2k/weapons/missiles.yaml +++ b/mods/d2k/weapons/missiles.yaml @@ -32,6 +32,8 @@ Explosions: tiny_explosion ImpactActors: false ValidTargets: Ground, Air + Warhead@3Concrete: DamagesConcrete + Damage: 240 ^Missile: Inherits: ^Rocket @@ -62,6 +64,8 @@ invulnerable: 0 cy: 30 harvester: 50 + Warhead@2Concrete: DamagesConcrete + Damage: 720 Warhead@3Eff: CreateEffect Explosions: small_explosion ImpactSounds: EXPLSML1.WAV @@ -88,6 +92,8 @@ Rocket: invulnerable: 0 cy: 20 harvester: 50 + Warhead@2Concrete: DamagesConcrete + Damage: 625 Warhead@3Eff: CreateEffect Explosions: rocket_explosion ExplosionPalette: effect75alpha @@ -117,6 +123,8 @@ mtank_pri: Warhead@1Dam: SpreadDamage Damage: 6000 ValidTargets: Ground, Air + Warhead@2Concrete: DamagesConcrete + Damage: 900 DeviatorMissile: Inherits: ^Missile @@ -151,3 +159,5 @@ DeviatorMissile: Range: 512 Duration: 375 InvalidTargets: Infantry, Structure + Warhead@5Concrete: DamagesConcrete + Damage: 1000 diff --git a/mods/d2k/weapons/other.yaml b/mods/d2k/weapons/other.yaml index 0516ccd442..85c1e9663b 100644 --- a/mods/d2k/weapons/other.yaml +++ b/mods/d2k/weapons/other.yaml @@ -46,6 +46,8 @@ Sound: cy: 20 harvester: 50 DamageTypes: Prone50Percent, TriggerProne, SoundDeath + Warhead@3Concrete: DamagesConcrete + Damage: 1720 WormJaw: ReloadDelay: 10 @@ -86,6 +88,8 @@ OrniBomb: Explosions: large_explosion ImpactSounds: EXPLSML4.WAV ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 6750 Crush: Warhead@1Dam: SpreadDamage @@ -122,6 +126,8 @@ Atomic: Explosions: nuke ImpactSounds: EXPLLG2.WAV ImpactActors: false + Warhead@3Concrete: DamagesConcrete + Damage: 24300 CrateNuke: Inherits: Atomic @@ -152,6 +158,8 @@ CrateExplosion: Explosions: large_explosion ImpactSounds: EXPLSML4.WAV ImpactActors: false + Warhead@2Concrete: DamagesConcrete + Damage: 4500 UnitExplodeSmall: Warhead@1Eff: CreateEffect @@ -212,6 +220,8 @@ grenade: Explosions: med_explosion ImpactSounds: EXPLMD2.WAV ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 1875 GrenDeath: Warhead@1Dam: SpreadDamage @@ -233,6 +243,8 @@ GrenDeath: Explosions: building ImpactSounds: EXPLSML4.WAV ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 1875 SardDeath: Warhead@1Dam: SpreadDamage @@ -255,6 +267,8 @@ SardDeath: Explosions: small_napalm ImpactSounds: EXPLSML2.WAV ImpactActors: false + Warhead@4Concrete: DamagesConcrete + Damage: 450 SpiceExplosion: Projectile: Bullet @@ -323,3 +337,5 @@ PlasmaExplosion: SmudgeType: SandCrater Warhead@3Eff: CreateEffect Explosions: devastator + Warhead@4Concrete: DamagesConcrete + Damage: 20000 diff --git a/mods/d2k/weapons/smallguns.yaml b/mods/d2k/weapons/smallguns.yaml index a8c77afdca..a927d581ec 100644 --- a/mods/d2k/weapons/smallguns.yaml +++ b/mods/d2k/weapons/smallguns.yaml @@ -20,6 +20,8 @@ Warhead@2Eff: CreateEffect Explosions: piffs ImpactActors: false + Warhead@3Concrete: DamagesConcrete + Damage: 1250 LMG: Inherits: ^MG @@ -57,6 +59,8 @@ M_HMG: invulnerable: 0 cy: 20 harvester: 50 + Warhead@2Concrete: DamagesConcrete + Damage: 625 M_HMG_H: Inherits: M_HMG @@ -79,6 +83,8 @@ HMG: Spread: 160 Falloff: 100, 60, 30, 0 Damage: 1800 + Warhead@2Concrete: DamagesConcrete + Damage: 1800 HMGo: Inherits: HMG