Skip to content

Commit

Permalink
Add TS mobile EMP
Browse files Browse the repository at this point in the history
  • Loading branch information
PunkPun committed Jun 21, 2023
1 parent 2dc21c8 commit 24e0fa0
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 0 deletions.
89 changes: 89 additions & 0 deletions OpenRA.Mods.Common/Traits/FireWarheads.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#region Copyright & License Information
/*
* Copyright (c) The OpenRA Developers and Contributors
* 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;
using System.Linq;
using OpenRA.GameRules;
using OpenRA.Traits;

namespace OpenRA.Mods.Common.Traits
{
[Desc("Detonate defined warheads at the current location at a set interval.")]
public class FireWarheadsInfo : PausableConditionalTraitInfo, Requires<IMoveInfo>, IRulesetLoaded
{
[WeaponReference]
[FieldLoader.Require]
[Desc("Weapons to fire.")]
public readonly string[] Weapons = Array.Empty<string>();

[Desc("How long (in ticks) to wait before the first detonation.")]
public readonly int StartCooldown = 0;

[Desc("How long (in ticks) to wait after a detonation.")]
public readonly int Interval = 1;

public override object Create(ActorInitializer init) { return new FireWarheads(this); }

public WeaponInfo[] WeaponInfos { get; private set; }

public override void RulesetLoaded(Ruleset rules, ActorInfo ai)
{
base.RulesetLoaded(rules, ai);

WeaponInfos = Weapons.Select(w =>
{
var weaponToLower = w.ToLowerInvariant();
if (!rules.Weapons.TryGetValue(weaponToLower, out var weapon))
throw new YamlException($"Weapons Ruleset does not contain an entry '{weaponToLower}'");
return weapon;
}).ToArray();
}
}

public class FireWarheads : PausableConditionalTrait<FireWarheadsInfo>, ITick
{
[Sync]
int cooldown = 0;

public FireWarheads(FireWarheadsInfo info)
: base(info)
{
cooldown = info.StartCooldown;
}

void ITick.Tick(Actor self)
{
if (IsTraitDisabled || IsTraitPaused)
return;

if (cooldown > 0)
cooldown--;
else
{
cooldown = Info.Interval;
foreach (var wep in Info.WeaponInfos)
{
wep.Impact(Target.FromPos(self.CenterPosition), self);
self.World.AddFrameEndTask(world =>
{
if (wep.Report != null && wep.Report.Length > 0)
Game.Sound.Play(SoundType.World, wep.Report, world, self.CenterPosition);
});
}
}
}

protected override void TraitDisabled(Actor self)
{
cooldown = Info.StartCooldown;
}
}
}
32 changes: 32 additions & 0 deletions mods/ts/rules/gdi-vehicles.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -425,3 +425,35 @@ JUGG:
ArmamentNames: deployed
Selectable:
DecorationBounds: 1448, 2413, 0, -482

MOBILEMP:
Inherits: ^Tank
Inherits@VOXELS: ^VoxelActor
Inherits@selection: ^SelectableSupportUnit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 130
Prerequisites: ~factory, napuls, ~techlevel.superweapons
Description: Fires a pulse blast which disables\nall mechanical units in the area.
Valued:
Cost: 1000
Tooltip:
Name: Mobile EMP Cannon
Health:
HP: 80000
Armor:
Type: Heavy
Mobile:
Speed: 85
RevealsShroud:
RequiresCondition: !inside-tunnel
Range: 6c0
MaxHeightDelta: 3
GrantConditionOnDeployWithCharge:
Voice: Move
Charge: 750
DeployedCondition: deployed
PauseOnCondition: empdisable
FireWarheads:
Weapons: MEMPulse
RequiresCondition: deployed && !empdisable
3 changes: 3 additions & 0 deletions mods/ts/rules/shared-support.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ NAPULS:
nod: napuls.nod
ProvidesPrerequisite@gdi:
ResetOnOwnerChange: true
ProvidesPrerequisite@gdi:
Factions: gdi
Prerequisite: napuls
AttackOrderPower:
PauseOnCondition: empdisable || disabled
Cursor: emp
Expand Down
5 changes: 5 additions & 0 deletions mods/ts/sequences/misc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,11 @@ explosion:
BlendMode: Additive
ZRamp: 1
Tick: 80
pulse_explosion_small:
Filename: mempfx.shp
BlendMode: Additive
ZRamp: 1
Tick: 11
small_watersplash:
Filename: h2o_exp2.shp
IgnoreWorldTint: False
Expand Down
5 changes: 5 additions & 0 deletions mods/ts/sequences/vehicles.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,11 @@ smech:
icon:
Filename: smchicon.shp

mobilemp:
Inherits: ^VehicleOverlays
icon:
Filename: mempicon.shp

trucka:
Inherits: ^VehicleOverlays

Expand Down
3 changes: 3 additions & 0 deletions mods/ts/sequences/voxels.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ sonic:
idle:
turret: sonictur

mobilemp:
idle: m_emp

#truk: # TODO: unused
# idle:

Expand Down
11 changes: 11 additions & 0 deletions mods/ts/weapons/superweapons.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,14 @@ EMPulseCannon:
Duration: 250
Condition: empdisable
ValidTargets: Ground, Water, Air, Underground

MEMPulse:
Report: mobemp1.aud
Warhead@1Eff: CreateEffect
Explosions: pulse_explosion_small
ImpactActors: false
Warhead@emp: GrantExternalCondition
Range: 6c0
Duration: 250
Condition: empdisable
ValidTargets: Ground, Water, Air, Underground

0 comments on commit 24e0fa0

Please sign in to comment.