Add a DamagesConcreteWarhead to remove buildable concrete.

This commit is contained in:
Matthias Mailänder
2018-09-13 21:17:32 +02:00
committed by abcdefg30
parent 7438af8266
commit 399e451ada
8 changed files with 104 additions and 0 deletions

View File

@@ -83,6 +83,7 @@
<Compile Include="Traits\World\D2kEditorResourceLayer.cs" /> <Compile Include="Traits\World\D2kEditorResourceLayer.cs" />
<Compile Include="Lint\CheckImportActors.cs" /> <Compile Include="Lint\CheckImportActors.cs" />
<Compile Include="PackageLoaders\D2kSoundResources.cs" /> <Compile Include="PackageLoaders\D2kSoundResources.cs" />
<Compile Include="Warheads\DamagesConcreteWarhead.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj"> <ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">

View File

@@ -21,6 +21,9 @@ namespace OpenRA.Mods.D2k.Traits
[Desc("Palette to render the layer sprites in.")] [Desc("Palette to render the layer sprites in.")]
public readonly string Palette = TileSet.TerrainPaletteInternalName; 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); } public object Create(ActorInitializer init) { return new BuildableTerrainLayer(init.Self, this); }
} }
@@ -29,6 +32,7 @@ namespace OpenRA.Mods.D2k.Traits
readonly BuildableTerrainLayerInfo info; readonly BuildableTerrainLayerInfo info;
readonly Dictionary<CPos, Sprite> dirty = new Dictionary<CPos, Sprite>(); readonly Dictionary<CPos, Sprite> dirty = new Dictionary<CPos, Sprite>();
readonly Map map; readonly Map map;
readonly CellLayer<int> strength;
TerrainSpriteLayer render; TerrainSpriteLayer render;
Theater theater; Theater theater;
@@ -38,6 +42,7 @@ namespace OpenRA.Mods.D2k.Traits
{ {
this.info = info; this.info = info;
map = self.World.Map; map = self.World.Map;
strength = new CellLayer<int>(self.World.Map);
} }
public void WorldLoaded(World w, WorldRenderer wr) public void WorldLoaded(World w, WorldRenderer wr)
@@ -49,12 +54,30 @@ namespace OpenRA.Mods.D2k.Traits
public void AddTile(CPos cell, TerrainTile tile) public void AddTile(CPos cell, TerrainTile tile)
{ {
map.CustomTerrain[cell] = map.Rules.TileSet.GetTerrainIndex(tile); map.CustomTerrain[cell] = map.Rules.TileSet.GetTerrainIndex(tile);
strength[cell] = info.MaxStrength;
// Terrain tiles define their origin at the topleft // Terrain tiles define their origin at the topleft
var s = theater.TileSprite(tile); var s = theater.TileSprite(tile);
dirty[cell] = new Sprite(s.Sheet, s.Bounds, s.ZRamp, float2.Zero, s.Channel, s.BlendMode); 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) void ITickRender.TickRender(WorldRenderer wr, Actor self)
{ {
var remove = new List<CPos>(); var remove = new List<CPos>();

View File

@@ -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<int> damageModifiers)
{
var world = firedBy.World;
var layer = world.WorldActor.Trait<BuildableTerrainLayer>();
var cell = world.Map.CellContaining(target.CenterPosition);
layer.HitTile(cell, Damage);
}
}
}

View File

@@ -32,6 +32,8 @@ Debris:
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: tiny_explosion Explosions: tiny_explosion
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 300
Debris2: Debris2:
Inherits: Debris Inherits: Debris
@@ -56,6 +58,8 @@ Debris2:
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: small_napalm Explosions: small_napalm
Warhead@4Concrete: DamagesConcrete
Damage: 2250
Debris3: Debris3:
Inherits: Debris2 Inherits: Debris2
@@ -64,6 +68,8 @@ Debris3:
TrailImage: small_trail2 TrailImage: small_trail2
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Damage: 1500 Damage: 1500
Warhead@4Concrete: DamagesConcrete
Damage: 1350
Debris4: Debris4:
Inherits: Debris2 Inherits: Debris2

View File

@@ -26,6 +26,8 @@
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: small_napalm Explosions: small_napalm
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 540
110mm_Gun: 110mm_Gun:
Inherits: ^Cannon Inherits: ^Cannon
@@ -37,6 +39,8 @@
Blockable: false Blockable: false
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Damage: 2900 Damage: 2900
Warhead@2Concrete: DamagesConcrete
Damage: 2900
80mm_A: 80mm_A:
Inherits: ^Cannon Inherits: ^Cannon
@@ -69,6 +73,8 @@ DevBullet:
invulnerable: 0 invulnerable: 0
cy: 40 cy: 40
harvester: 100 harvester: 100
Warhead@2Concrete: DamagesConcrete
Damage: 3250
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: shockwave Explosions: shockwave
ImpactSounds: EXPLMD1.WAV ImpactSounds: EXPLMD1.WAV
@@ -101,6 +107,8 @@ DevBullet:
cy: 20 cy: 20
harvester: 25 harvester: 25
DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath
Warhead@2Concrete: DamagesConcrete
Damage: 5625
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: med_explosion Explosions: med_explosion
ImpactSounds: EXPLMD2.WAV ImpactSounds: EXPLMD2.WAV

View File

@@ -32,6 +32,8 @@
Explosions: tiny_explosion Explosions: tiny_explosion
ImpactActors: false ImpactActors: false
ValidTargets: Ground, Air ValidTargets: Ground, Air
Warhead@3Concrete: DamagesConcrete
Damage: 240
^Missile: ^Missile:
Inherits: ^Rocket Inherits: ^Rocket
@@ -62,6 +64,8 @@
invulnerable: 0 invulnerable: 0
cy: 30 cy: 30
harvester: 50 harvester: 50
Warhead@2Concrete: DamagesConcrete
Damage: 720
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: small_explosion Explosions: small_explosion
ImpactSounds: EXPLSML1.WAV ImpactSounds: EXPLSML1.WAV
@@ -88,6 +92,8 @@ Rocket:
invulnerable: 0 invulnerable: 0
cy: 20 cy: 20
harvester: 50 harvester: 50
Warhead@2Concrete: DamagesConcrete
Damage: 625
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: rocket_explosion Explosions: rocket_explosion
ExplosionPalette: effect75alpha ExplosionPalette: effect75alpha
@@ -117,6 +123,8 @@ mtank_pri:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Damage: 6000 Damage: 6000
ValidTargets: Ground, Air ValidTargets: Ground, Air
Warhead@2Concrete: DamagesConcrete
Damage: 900
DeviatorMissile: DeviatorMissile:
Inherits: ^Missile Inherits: ^Missile
@@ -151,3 +159,5 @@ DeviatorMissile:
Range: 512 Range: 512
Duration: 375 Duration: 375
InvalidTargets: Infantry, Structure InvalidTargets: Infantry, Structure
Warhead@5Concrete: DamagesConcrete
Damage: 1000

View File

@@ -46,6 +46,8 @@ Sound:
cy: 20 cy: 20
harvester: 50 harvester: 50
DamageTypes: Prone50Percent, TriggerProne, SoundDeath DamageTypes: Prone50Percent, TriggerProne, SoundDeath
Warhead@3Concrete: DamagesConcrete
Damage: 1720
WormJaw: WormJaw:
ReloadDelay: 10 ReloadDelay: 10
@@ -86,6 +88,8 @@ OrniBomb:
Explosions: large_explosion Explosions: large_explosion
ImpactSounds: EXPLSML4.WAV ImpactSounds: EXPLSML4.WAV
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 6750
Crush: Crush:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
@@ -122,6 +126,8 @@ Atomic:
Explosions: nuke Explosions: nuke
ImpactSounds: EXPLLG2.WAV ImpactSounds: EXPLLG2.WAV
ImpactActors: false ImpactActors: false
Warhead@3Concrete: DamagesConcrete
Damage: 24300
CrateNuke: CrateNuke:
Inherits: Atomic Inherits: Atomic
@@ -152,6 +158,8 @@ CrateExplosion:
Explosions: large_explosion Explosions: large_explosion
ImpactSounds: EXPLSML4.WAV ImpactSounds: EXPLSML4.WAV
ImpactActors: false ImpactActors: false
Warhead@2Concrete: DamagesConcrete
Damage: 4500
UnitExplodeSmall: UnitExplodeSmall:
Warhead@1Eff: CreateEffect Warhead@1Eff: CreateEffect
@@ -212,6 +220,8 @@ grenade:
Explosions: med_explosion Explosions: med_explosion
ImpactSounds: EXPLMD2.WAV ImpactSounds: EXPLMD2.WAV
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 1875
GrenDeath: GrenDeath:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
@@ -233,6 +243,8 @@ GrenDeath:
Explosions: building Explosions: building
ImpactSounds: EXPLSML4.WAV ImpactSounds: EXPLSML4.WAV
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 1875
SardDeath: SardDeath:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
@@ -255,6 +267,8 @@ SardDeath:
Explosions: small_napalm Explosions: small_napalm
ImpactSounds: EXPLSML2.WAV ImpactSounds: EXPLSML2.WAV
ImpactActors: false ImpactActors: false
Warhead@4Concrete: DamagesConcrete
Damage: 450
SpiceExplosion: SpiceExplosion:
Projectile: Bullet Projectile: Bullet
@@ -323,3 +337,5 @@ PlasmaExplosion:
SmudgeType: SandCrater SmudgeType: SandCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosions: devastator Explosions: devastator
Warhead@4Concrete: DamagesConcrete
Damage: 20000

View File

@@ -20,6 +20,8 @@
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosions: piffs Explosions: piffs
ImpactActors: false ImpactActors: false
Warhead@3Concrete: DamagesConcrete
Damage: 1250
LMG: LMG:
Inherits: ^MG Inherits: ^MG
@@ -57,6 +59,8 @@ M_HMG:
invulnerable: 0 invulnerable: 0
cy: 20 cy: 20
harvester: 50 harvester: 50
Warhead@2Concrete: DamagesConcrete
Damage: 625
M_HMG_H: M_HMG_H:
Inherits: M_HMG Inherits: M_HMG
@@ -79,6 +83,8 @@ HMG:
Spread: 160 Spread: 160
Falloff: 100, 60, 30, 0 Falloff: 100, 60, 30, 0
Damage: 1800 Damage: 1800
Warhead@2Concrete: DamagesConcrete
Damage: 1800
HMGo: HMGo:
Inherits: HMG Inherits: HMG