diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index ee510261e8..903c3dda2a 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -48,6 +48,7 @@ + diff --git a/OpenRA.Mods.Cnc/PoisonedByTiberium.cs b/OpenRA.Mods.Cnc/PoisonedByTiberium.cs new file mode 100644 index 0000000000..76d34c5d81 --- /dev/null +++ b/OpenRA.Mods.Cnc/PoisonedByTiberium.cs @@ -0,0 +1,64 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it 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. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +using OpenRA.GameRules; +using OpenRA.Traits; + +namespace OpenRA.Mods.Cnc +{ + class PoisonedByTiberiumInfo : ITraitInfo + { + public readonly string Weapon = "Tiberium"; + + public object Create(Actor self) { return new PoisonedByTiberium(this); } + } + + class PoisonedByTiberium : ITick + { + PoisonedByTiberiumInfo info; + [Sync] int poisonTicks; + + public PoisonedByTiberium(PoisonedByTiberiumInfo info) { this.info = info; } + + public void Tick(Actor self) + { + if (--poisonTicks <= 0) + { + var rl = self.World.WorldActor.traits.Get(); + var r = rl.GetResource(self.Location); + + if (r != null) + Combat.DoImpacts(new ProjectileArgs + { + src = self.CenterLocation.ToInt2(), + dest = self.CenterLocation.ToInt2(), + srcAltitude = 0, + destAltitude = 0, + facing = 0, + firedBy = self, + target = self, + weapon = Rules.Weapons[info.Weapon.ToLowerInvariant()] + }, self.CenterLocation.ToInt2()); + + poisonTicks = Rules.Weapons[info.Weapon.ToLowerInvariant()].ROF; + } + } + } +} diff --git a/mods/cnc/defaults.yaml b/mods/cnc/defaults.yaml index e49bb475f9..07a709a1a7 100644 --- a/mods/cnc/defaults.yaml +++ b/mods/cnc/defaults.yaml @@ -25,6 +25,7 @@ AutoTarget: Passenger: HiddenUnderFog: + PoisonedByTiberium: ^Ship: Category: Ship diff --git a/mods/cnc/infantry.yaml b/mods/cnc/infantry.yaml index b81847ee77..5eff4bef0d 100644 --- a/mods/cnc/infantry.yaml +++ b/mods/cnc/infantry.yaml @@ -102,6 +102,7 @@ E5: -RenderInfantry: RenderInfantry: WithMuzzleFlash: + -PoisonedByTiberium: C1: Inherits: ^Infantry diff --git a/mods/cnc/weapons.yaml b/mods/cnc/weapons.yaml index c39f87b5d9..95b5e55711 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -479,3 +479,11 @@ HonestJohn: ImpactSound: flamer2 SmudgeType: Scorch Damage: 100 + +Tiberium: + ROF: 10 + Warhead: + Spread: 1 + Verses: 100%,100%,100%,100%,100% + InfDeath: 4 + Damage: 5