diff --git a/OpenRA.Mods.RA/DisableUpgrade.cs b/OpenRA.Mods.RA/DisableUpgrade.cs new file mode 100644 index 0000000000..b500518323 --- /dev/null +++ b/OpenRA.Mods.RA/DisableUpgrade.cs @@ -0,0 +1,48 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 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. For more information, + * see COPYING. + */ +#endregion + +using System; +using System.Collections.Generic; +using OpenRA.GameRules; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class DisableUpgradeInfo : ITraitInfo + { + public readonly string RequiresUpgrade = "disable"; + + public object Create(ActorInitializer init) { return new DisableUpgrade(this); } + } + + public class DisableUpgrade : IUpgradable, IDisable + { + readonly DisableUpgradeInfo info; + bool enabled; + + public DisableUpgrade(DisableUpgradeInfo info) + { + this.info = info; + } + + public bool AcceptsUpgrade(string type) + { + return type == info.RequiresUpgrade; + } + + public void UpgradeAvailable(Actor self, string type, bool available) + { + if (type == info.RequiresUpgrade) + enabled = available; + } + + public bool Disabled { get { return enabled; } } + } +} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index ca87819c27..04654f5bdb 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -565,9 +565,10 @@ - + + diff --git a/OpenRA.Mods.RA/Warheads/GrantUpgradeWarhead.cs b/OpenRA.Mods.RA/Warheads/GrantUpgradeWarhead.cs new file mode 100644 index 0000000000..9c99ef4551 --- /dev/null +++ b/OpenRA.Mods.RA/Warheads/GrantUpgradeWarhead.cs @@ -0,0 +1,54 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 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. For more information, + * see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; +using OpenRA.Effects; +using OpenRA.GameRules; +using OpenRA.Traits; +using OpenRA.Mods.RA.Effects; + +namespace OpenRA.Mods.RA +{ + public class GrantUpgradeWarhead : Warhead + { + [Desc("The upgrades to apply.")] + public readonly string[] Upgrades = { }; + + [Desc("Duration of the upgrade (in ticks). Set to 0 for a permanent upgrade.")] + public readonly int Duration = 0; + + public readonly WRange Range = WRange.FromCells(1); + + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) + { + var actors = target.Type == TargetType.Actor ? new [] { target.Actor } : + firedBy.World.FindActorsInCircle(target.CenterPosition, Range); + + foreach (var a in actors) + { + var um = a.TraitOrDefault(); + if (um == null) + return; + + foreach (var u in Upgrades) + { + if (!um.AcceptsUpgrade(a, u)) + continue; + + if (Duration > 0) + um.GrantTimedUpgrade(a, u, Duration); + else + um.GrantUpgrade(a, u, this); + } + } + } + } +} diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 18d25dab0f..6b06fa2593 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -245,6 +245,14 @@ Weapon: UnitExplodeSmall EmptyWeapon: UnitExplodeSmall UpgradeManager: + UpgradeOverlay@EMPDISABLE: + RequiresUpgrade: empdisable + Palette: disabled + DisableUpgrade@EMPDISABLE: + RequiresUpgrade: empdisable + TimedUpgradeBar@EMPDISABLE: + Upgrade: empdisable + Color: 255,255,255 ^Tank: AppearsOnRadar: @@ -305,6 +313,14 @@ Weapon: UnitExplodeSmall EmptyWeapon: UnitExplodeSmall UpgradeManager: + UpgradeOverlay@EMPDISABLE: + RequiresUpgrade: empdisable + Palette: disabled + DisableUpgrade@EMPDISABLE: + RequiresUpgrade: empdisable + TimedUpgradeBar@EMPDISABLE: + Upgrade: empdisable + Color: 255,255,255 ^Helicopter: AppearsOnRadar: diff --git a/mods/ts/rules/structures.yaml b/mods/ts/rules/structures.yaml index 94a831c7a0..31c567107d 100644 --- a/mods/ts/rules/structures.yaml +++ b/mods/ts/rules/structures.yaml @@ -1181,6 +1181,46 @@ NAOBEL: Power: Amount: -150 +NAPULS: + Inherits: ^Building + Valued: + Cost: 1000 + Tooltip: + Name: EMP Cannon + Description: Disables vehicles. \nRequires power to operate.\n Strong vs all ground units\n Cannot target Aircraft + Buildable: + Queue: Defense + BuildPaletteOrder: 90 + Prerequisites: radar + Owner: nod,gdi + Building: + Footprint: xx xx + Dimensions: 2,2 + RequiresPower: + DisabledOverlay: + -GivesBuildableArea: + Health: + HP: 500 + Armor: + Type: Heavy + RevealsShroud: + Range: 8c0 + Turreted: + ROT: 10 + InitialFacing: 300 + AttackTurreted: + Armament: + Weapon: EMPulseCannon + AutoTarget: + RenderRangeCircle: + RenderDetectionCircle: + DetectCloaked: + Range: 5 + WithTurret: + Sequence: turret + Power: + Amount: -150 + ANYPOWER: Tooltip: Name: Power Plant diff --git a/mods/ts/sequences/misc.yaml b/mods/ts/sequences/misc.yaml index 2eb2cbfa0c..35e9eb27c7 100644 --- a/mods/ts/sequences/misc.yaml +++ b/mods/ts/sequences/misc.yaml @@ -161,7 +161,6 @@ explosion: pulse_explosion: pulsefx2 Start: 0 Length: * - Tick: 160 BlendMode: Additive small_watersplash: h2o_exp2 Start: 0 @@ -279,6 +278,11 @@ canister: Start: 0 Length: * +pulsball: + idle: + Start: 0 + Length: * + dragon: idle: Start: 0 diff --git a/mods/ts/sequences/structures.yaml b/mods/ts/sequences/structures.yaml index 494b3fec57..5229507fc0 100644 --- a/mods/ts/sequences/structures.yaml +++ b/mods/ts/sequences/structures.yaml @@ -698,6 +698,26 @@ nasam: icon: samicon Start: 0 +napuls: + idle: ntpuls + Start: 0 + ShadowStart: 3 + damaged-idle: ntpuls + Start: 1 + ShadowStart: 4 + critical-idle: ntpuls + Start: 2 + ShadowStart: 5 + turret: ntpuls_a + Start: 0 + Facings: 32 + make: ntpulsmk + Start: 0 + Length: 20 + ShadowStart: 20 + icon: pulsicon + Start: 0 + gavulc: idle: gtctwr Start: 0 diff --git a/mods/ts/weapons.yaml b/mods/ts/weapons.yaml index 5a8651db15..6234cddebe 100644 --- a/mods/ts/weapons.yaml +++ b/mods/ts/weapons.yaml @@ -1114,6 +1114,27 @@ TurretLaser: Warhead@2Smu: LeaveSmudge SmudgeType: Scorch +EMPulseCannon: + ReloadDelay: 100 + Range: 10c0 + Report: PLSECAN2.AUD + Projectile: Bullet + Speed: 425 + High: yes + Shadow: true + Angle: 62 + Image: pulsball + Warhead@2Eff: CreateEffect + Explosion: pulse_explosion +# Dummy warhead to allow targeting + Warhead@target: SpreadDamage + Spread: 0 + Damage: 0 + Warhead@emp: GrantUpgrade + Range: 3c0 + Duration: 250 + Upgrades: empdisable + TiberiumExplosion: Warhead@1Dam: SpreadDamage Spread: 9