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