Merge pull request #8727 from atlimit8/MultipleTargetableTraits
TargetTypes by Upgrade and Replacement of Targetable* by Targetable and ITargetablePositions
This commit is contained in:
@@ -125,8 +125,8 @@ namespace OpenRA.GameRules
|
|||||||
/// <summary>Checks if the weapon is valid against (can target) the actor.</summary>
|
/// <summary>Checks if the weapon is valid against (can target) the actor.</summary>
|
||||||
public bool IsValidAgainst(Actor victim, Actor firedBy)
|
public bool IsValidAgainst(Actor victim, Actor firedBy)
|
||||||
{
|
{
|
||||||
var targetable = victim.TraitOrDefault<ITargetable>();
|
var targetable = victim.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled);
|
||||||
if (targetable == null || !IsValidTarget(targetable.TargetTypes))
|
if (!IsValidTarget(targetable.SelectMany(t => t.TargetTypes)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Warheads.Any(w => w.IsValidAgainst(victim, firedBy)))
|
if (!Warheads.Any(w => w.IsValidAgainst(victim, firedBy)))
|
||||||
@@ -138,8 +138,7 @@ namespace OpenRA.GameRules
|
|||||||
/// <summary>Checks if the weapon is valid against (can target) the frozen actor.</summary>
|
/// <summary>Checks if the weapon is valid against (can target) the frozen actor.</summary>
|
||||||
public bool IsValidAgainst(FrozenActor victim, Actor firedBy)
|
public bool IsValidAgainst(FrozenActor victim, Actor firedBy)
|
||||||
{
|
{
|
||||||
var targetable = victim.Info.Traits.GetOrDefault<ITargetableInfo>();
|
if (!IsValidTarget(victim.TargetTypes))
|
||||||
if (targetable == null || !IsValidTarget(targetable.GetTargetTypes()))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Warheads.Any(w => w.IsValidAgainst(victim, firedBy)))
|
if (!Warheads.Any(w => w.IsValidAgainst(victim, firedBy)))
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace OpenRA.Traits
|
|||||||
public readonly PPos[] Footprint;
|
public readonly PPos[] Footprint;
|
||||||
public readonly WPos CenterPosition;
|
public readonly WPos CenterPosition;
|
||||||
public readonly Rectangle Bounds;
|
public readonly Rectangle Bounds;
|
||||||
|
public readonly string[] TargetTypes;
|
||||||
readonly IRemoveFrozenActor[] removeFrozenActors;
|
readonly IRemoveFrozenActor[] removeFrozenActors;
|
||||||
readonly Actor actor;
|
readonly Actor actor;
|
||||||
readonly Shroud shroud;
|
readonly Shroud shroud;
|
||||||
@@ -56,6 +57,7 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
CenterPosition = self.CenterPosition;
|
CenterPosition = self.CenterPosition;
|
||||||
Bounds = self.Bounds;
|
Bounds = self.Bounds;
|
||||||
|
TargetTypes = self.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled).SelectMany(t => t.TargetTypes).Distinct().ToArray();
|
||||||
|
|
||||||
UpdateVisibility();
|
UpdateVisibility();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
TargetType type;
|
TargetType type;
|
||||||
Actor actor;
|
Actor actor;
|
||||||
ITargetable targetable;
|
IEnumerable<ITargetable> targetable;
|
||||||
FrozenActor frozen;
|
FrozenActor frozen;
|
||||||
WPos pos;
|
WPos pos;
|
||||||
int generation;
|
int generation;
|
||||||
@@ -48,7 +48,7 @@ namespace OpenRA.Traits
|
|||||||
return new Target
|
return new Target
|
||||||
{
|
{
|
||||||
actor = a,
|
actor = a,
|
||||||
targetable = a.TraitOrDefault<ITargetable>(),
|
targetable = a.TraitsImplementing<ITargetable>(),
|
||||||
type = TargetType.Actor,
|
type = TargetType.Actor,
|
||||||
generation = a.Generation,
|
generation = a.Generation,
|
||||||
};
|
};
|
||||||
@@ -83,15 +83,18 @@ namespace OpenRA.Traits
|
|||||||
if (targeter == null || Type == TargetType.Invalid)
|
if (targeter == null || Type == TargetType.Invalid)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (targetable != null && !targetable.TargetableBy(actor, targeter))
|
var targeted = this.actor;
|
||||||
|
if (targeted != null && !targetable.Any(t => t.IsTraitEnabled() && t.TargetableBy(targeted, targeter)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Currently all or nothing.
|
||||||
|
// TODO: either replace based on target type or put in singleton trait
|
||||||
public bool RequiresForceFire
|
public bool RequiresForceFire
|
||||||
{
|
{
|
||||||
get { return targetable != null && targetable.RequiresForceFire; }
|
get { return targetable != null && targetable.Any(Exts.IsTraitEnabled) && targetable.Where(Exts.IsTraitEnabled).All(t => t.RequiresForceFire); }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Representative position - see Positions for the full set of targetable positions.
|
// Representative position - see Positions for the full set of targetable positions.
|
||||||
@@ -123,12 +126,19 @@ namespace OpenRA.Traits
|
|||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case TargetType.Actor:
|
case TargetType.Actor:
|
||||||
var targetable = actor.TraitOrDefault<ITargetable>();
|
var targetable = actor.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled);
|
||||||
if (targetable == null)
|
if (!targetable.Any())
|
||||||
return new[] { actor.CenterPosition };
|
return new[] { actor.CenterPosition };
|
||||||
|
|
||||||
var positions = targetable.TargetablePositions(actor);
|
var targetablePositions = actor.TraitOrDefault<ITargetablePositions>();
|
||||||
return positions.Any() ? positions : new[] { actor.CenterPosition };
|
if (targetablePositions != null)
|
||||||
|
{
|
||||||
|
var positions = targetablePositions.TargetablePositions(actor);
|
||||||
|
if (positions.Any())
|
||||||
|
return positions;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new[] { actor.CenterPosition };
|
||||||
case TargetType.FrozenActor:
|
case TargetType.FrozenActor:
|
||||||
return new[] { frozen.CenterPosition };
|
return new[] { frozen.CenterPosition };
|
||||||
case TargetType.Terrain:
|
case TargetType.Terrain:
|
||||||
|
|||||||
@@ -315,12 +315,17 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
public interface ITargetable
|
public interface ITargetable
|
||||||
{
|
{
|
||||||
|
// Check IsTraitEnabled or !IsTraitDisabled first
|
||||||
string[] TargetTypes { get; }
|
string[] TargetTypes { get; }
|
||||||
IEnumerable<WPos> TargetablePositions(Actor self);
|
|
||||||
bool TargetableBy(Actor self, Actor byActor);
|
bool TargetableBy(Actor self, Actor byActor);
|
||||||
bool RequiresForceFire { get; }
|
bool RequiresForceFire { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface ITargetablePositions
|
||||||
|
{
|
||||||
|
IEnumerable<WPos> TargetablePositions(Actor self);
|
||||||
|
}
|
||||||
|
|
||||||
public interface INotifyStanceChanged
|
public interface INotifyStanceChanged
|
||||||
{
|
{
|
||||||
void StanceChanged(Actor self, Player a, Player b,
|
void StanceChanged(Actor self, Player a, Player b,
|
||||||
|
|||||||
@@ -63,13 +63,13 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (!a.HasTrait<AttackBase>())
|
if (!a.HasTrait<AttackBase>())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var targetable = target.TraitOrDefault<ITargetable>();
|
var targetTypes = target.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled).SelectMany(t => t.TargetTypes);
|
||||||
if (targetable == null)
|
if (!targetTypes.Any())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var arms = a.TraitsImplementing<Armament>();
|
var arms = a.TraitsImplementing<Armament>();
|
||||||
foreach (var arm in arms)
|
foreach (var arm in arms)
|
||||||
if (arm.Weapon.IsValidTarget(targetable.TargetTypes))
|
if (arm.Weapon.IsValidTarget(targetTypes))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -125,14 +125,11 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (a == null)
|
if (a == null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
var targetable = a.TraitOrDefault<ITargetable>();
|
var targetable = a.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled);
|
||||||
if (targetable == null)
|
if (!targetable.Any(t => t.TargetableBy(a, firedBy.PlayerActor)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!targetable.TargetableBy(a, firedBy.PlayerActor))
|
if (Types.Intersect(targetable.SelectMany(t => t.TargetTypes)).Any())
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (Types.Intersect(targetable.TargetTypes).Any())
|
|
||||||
{
|
{
|
||||||
switch (TargetMetric)
|
switch (TargetMetric)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,8 +29,7 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
|
|
||||||
bool IsTargetable(Actor self, Actor viewer)
|
bool IsTargetable(Actor self, Actor viewer)
|
||||||
{
|
{
|
||||||
var targetable = self.TraitOrDefault<ITargetable>();
|
return self.TraitsImplementing<ITargetable>().Any(t => t.IsTraitEnabled() && t.TargetableBy(self, viewer));
|
||||||
return targetable != null && targetable.TargetableBy(self, viewer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Activity Tick(Actor self)
|
public override Activity Tick(Actor self)
|
||||||
|
|||||||
@@ -256,7 +256,6 @@
|
|||||||
<Compile Include="Traits\Air\Helicopter.cs" />
|
<Compile Include="Traits\Air\Helicopter.cs" />
|
||||||
<Compile Include="Traits\Air\Plane.cs" />
|
<Compile Include="Traits\Air\Plane.cs" />
|
||||||
<Compile Include="Traits\Air\ReturnOnIdle.cs" />
|
<Compile Include="Traits\Air\ReturnOnIdle.cs" />
|
||||||
<Compile Include="Traits\Air\TargetableAircraft.cs" />
|
|
||||||
<Compile Include="Traits\AppearsOnRadar.cs" />
|
<Compile Include="Traits\AppearsOnRadar.cs" />
|
||||||
<Compile Include="Traits\Armament.cs" />
|
<Compile Include="Traits\Armament.cs" />
|
||||||
<Compile Include="Traits\Armor.cs" />
|
<Compile Include="Traits\Armor.cs" />
|
||||||
@@ -293,7 +292,6 @@
|
|||||||
<Compile Include="Traits\Buildings\RepairableBuilding.cs" />
|
<Compile Include="Traits\Buildings\RepairableBuilding.cs" />
|
||||||
<Compile Include="Traits\Buildings\RepairsUnits.cs" />
|
<Compile Include="Traits\Buildings\RepairsUnits.cs" />
|
||||||
<Compile Include="Traits\Buildings\Reservable.cs" />
|
<Compile Include="Traits\Buildings\Reservable.cs" />
|
||||||
<Compile Include="Traits\Buildings\TargetableBuilding.cs" />
|
|
||||||
<Compile Include="Traits\Burns.cs" />
|
<Compile Include="Traits\Burns.cs" />
|
||||||
<Compile Include="Traits\C4Demolition.cs" />
|
<Compile Include="Traits\C4Demolition.cs" />
|
||||||
<Compile Include="Traits\VeteranProductionIconOverlay.cs" />
|
<Compile Include="Traits\VeteranProductionIconOverlay.cs" />
|
||||||
@@ -476,7 +474,7 @@
|
|||||||
<Compile Include="Traits\SupportPowers\SupportPower.cs" />
|
<Compile Include="Traits\SupportPowers\SupportPower.cs" />
|
||||||
<Compile Include="Traits\SupportPowers\SupportPowerManager.cs" />
|
<Compile Include="Traits\SupportPowers\SupportPowerManager.cs" />
|
||||||
<Compile Include="Traits\SupportPowers\SpawnActorPower.cs" />
|
<Compile Include="Traits\SupportPowers\SpawnActorPower.cs" />
|
||||||
<Compile Include="Traits\TargetableUnit.cs" />
|
<Compile Include="Traits\Targetable.cs" />
|
||||||
<Compile Include="Traits\ThrowsParticle.cs" />
|
<Compile Include="Traits\ThrowsParticle.cs" />
|
||||||
<Compile Include="Traits\Tooltip.cs" />
|
<Compile Include="Traits\Tooltip.cs" />
|
||||||
<Compile Include="Traits\TransformOnCapture.cs" />
|
<Compile Include="Traits\TransformOnCapture.cs" />
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ namespace OpenRA.Mods.Common.Orders
|
|||||||
|
|
||||||
public override bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor)
|
public override bool CanTargetActor(Actor self, Actor target, TargetModifiers modifiers, ref string cursor)
|
||||||
{
|
{
|
||||||
return target.TraitsImplementing<ITargetable>().Any(t => t.TargetTypes.Intersect(targetTypes).Any());
|
return target.TraitsImplementing<ITargetable>().Any(t => t.IsTraitEnabled() && t.TargetTypes.Intersect(targetTypes).Any());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CanTargetFrozenActor(Actor self, FrozenActor target, TargetModifiers modifiers, ref string cursor)
|
public override bool CanTargetFrozenActor(Actor self, FrozenActor target, TargetModifiers modifiers, ref string cursor)
|
||||||
{
|
{
|
||||||
return target.Info.Traits.WithInterface<ITargetableInfo>().Any(t => t.GetTargetTypes().Intersect(targetTypes).Any());
|
return target.TargetTypes.Intersect(targetTypes).Any();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public readonly int InitialFacing = 0;
|
public readonly int InitialFacing = 0;
|
||||||
public readonly int ROT = 255;
|
public readonly int ROT = 255;
|
||||||
public readonly int Speed = 1;
|
public readonly int Speed = 1;
|
||||||
|
|
||||||
|
[Desc("Minimum altitude where this aircraft is considered airborne")]
|
||||||
|
public readonly int MinAirborneAltitude = 1;
|
||||||
public readonly string[] LandableTerrainTypes = { };
|
public readonly string[] LandableTerrainTypes = { };
|
||||||
|
|
||||||
[Desc("Can the actor be ordered to move in to shroud?")]
|
[Desc("Can the actor be ordered to move in to shroud?")]
|
||||||
@@ -46,22 +49,52 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
[VoiceReference] public readonly string Voice = "Action";
|
[VoiceReference] public readonly string Voice = "Action";
|
||||||
|
|
||||||
|
[UpgradeGrantedReference]
|
||||||
|
[Desc("The upgrades to grant to self while airborne.")]
|
||||||
|
public readonly string[] AirborneUpgrades = { };
|
||||||
|
|
||||||
public IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { return new ReadOnlyDictionary<CPos, SubCell>(); }
|
public IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { return new ReadOnlyDictionary<CPos, SubCell>(); }
|
||||||
bool IOccupySpaceInfo.SharesCell { get { return false; } }
|
bool IOccupySpaceInfo.SharesCell { get { return false; } }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Aircraft : IFacing, IPositionable, ISync, IIssueOrder, IOrderVoice, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyActorDisposing
|
public class Aircraft : IFacing, IPositionable, ISync, IIssueOrder, IOrderVoice, INotifyAddedToWorld, INotifyRemovedFromWorld, INotifyCreated, INotifyActorDisposing
|
||||||
{
|
{
|
||||||
static readonly Pair<CPos, SubCell>[] NoCells = { };
|
static readonly Pair<CPos, SubCell>[] NoCells = { };
|
||||||
|
|
||||||
readonly AircraftInfo info;
|
readonly AircraftInfo info;
|
||||||
readonly Actor self;
|
readonly Actor self;
|
||||||
|
UpgradeManager um;
|
||||||
|
|
||||||
[Sync] public int Facing { get; set; }
|
[Sync] public int Facing { get; set; }
|
||||||
[Sync] public WPos CenterPosition { get; private set; }
|
[Sync] public WPos CenterPosition { get; private set; }
|
||||||
public CPos TopLeft { get { return self.World.Map.CellContaining(CenterPosition); } }
|
public CPos TopLeft { get { return self.World.Map.CellContaining(CenterPosition); } }
|
||||||
public IDisposable Reservation;
|
public IDisposable Reservation;
|
||||||
public int ROT { get { return info.ROT; } }
|
public int ROT { get { return info.ROT; } }
|
||||||
|
bool IsAirborne
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return airborne;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (airborne == value)
|
||||||
|
return;
|
||||||
|
airborne = value;
|
||||||
|
if (um != null)
|
||||||
|
{
|
||||||
|
if (airborne)
|
||||||
|
foreach (var u in info.AirborneUpgrades)
|
||||||
|
um.GrantUpgrade(self, u, this);
|
||||||
|
else
|
||||||
|
foreach (var u in info.AirborneUpgrades)
|
||||||
|
um.RevokeUpgrade(self, u, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool airborne = false;
|
||||||
|
|
||||||
public Aircraft(ActorInitializer init, AircraftInfo info)
|
public Aircraft(ActorInitializer init, AircraftInfo info)
|
||||||
{
|
{
|
||||||
@@ -77,6 +110,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
Facing = init.Contains<FacingInit>() ? init.Get<FacingInit, int>() : info.InitialFacing;
|
Facing = init.Contains<FacingInit>() ? init.Get<FacingInit, int>() : info.InitialFacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Created(Actor self) { um = self.TraitOrDefault<UpgradeManager>(); }
|
||||||
|
|
||||||
bool firstTick = true;
|
bool firstTick = true;
|
||||||
public virtual void Tick(Actor self)
|
public virtual void Tick(Actor self)
|
||||||
{
|
{
|
||||||
@@ -197,6 +232,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
self.World.ScreenMap.Update(self);
|
self.World.ScreenMap.Update(self);
|
||||||
self.World.ActorMap.UpdatePosition(self, this);
|
self.World.ActorMap.UpdatePosition(self, this);
|
||||||
|
IsAirborne = self.World.Map.DistanceAboveTerrain(CenterPosition).Length >= info.MinAirborneAltitude;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,6 +249,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
self.World.ActorMap.AddInfluence(self, this);
|
self.World.ActorMap.AddInfluence(self, this);
|
||||||
self.World.ActorMap.AddPosition(self, this);
|
self.World.ActorMap.AddPosition(self, this);
|
||||||
self.World.ScreenMap.Add(self);
|
self.World.ScreenMap.Add(self);
|
||||||
|
if (self.World.Map.DistanceAboveTerrain(CenterPosition).Length >= info.MinAirborneAltitude)
|
||||||
|
IsAirborne = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemovedFromWorld(Actor self)
|
public void RemovedFromWorld(Actor self)
|
||||||
@@ -221,6 +259,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
self.World.ActorMap.RemoveInfluence(self, this);
|
self.World.ActorMap.RemoveInfluence(self, this);
|
||||||
self.World.ActorMap.RemovePosition(self, this);
|
self.World.ActorMap.RemovePosition(self, this);
|
||||||
self.World.ScreenMap.Remove(self);
|
self.World.ScreenMap.Remove(self);
|
||||||
|
IsAirborne = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AircraftCanEnter(Actor a)
|
public bool AircraftCanEnter(Actor a)
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
#region Copyright & License Information
|
|
||||||
/*
|
|
||||||
* Copyright 2007-2015 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 OpenRA.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Traits
|
|
||||||
{
|
|
||||||
public class TargetableAircraftInfo : TargetableUnitInfo
|
|
||||||
{
|
|
||||||
public readonly string[] GroundedTargetTypes = { };
|
|
||||||
public override object Create(ActorInitializer init) { return new TargetableAircraft(init.Self, this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TargetableAircraft : TargetableUnit
|
|
||||||
{
|
|
||||||
readonly TargetableAircraftInfo info;
|
|
||||||
readonly Actor self;
|
|
||||||
|
|
||||||
public TargetableAircraft(Actor self, TargetableAircraftInfo info)
|
|
||||||
: base(self, info)
|
|
||||||
{
|
|
||||||
this.info = info;
|
|
||||||
this.self = self;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string[] TargetTypes
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return IsTraitDisabled ? None
|
|
||||||
: (self.CenterPosition.Z > 0 ? info.TargetTypes : info.GroundedTargetTypes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -116,7 +116,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
bool IOccupySpaceInfo.SharesCell { get { return false; } }
|
bool IOccupySpaceInfo.SharesCell { get { return false; } }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Building : IOccupySpace, INotifySold, INotifyTransform, ISync, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld
|
public class Building : IOccupySpace, INotifySold, INotifyTransform, ISync, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld, ITargetablePositions
|
||||||
{
|
{
|
||||||
public readonly BuildingInfo Info;
|
public readonly BuildingInfo Info;
|
||||||
public bool BuildComplete { get; private set; }
|
public bool BuildComplete { get; private set; }
|
||||||
@@ -157,6 +157,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
Pair<CPos, SubCell>[] occupiedCells;
|
Pair<CPos, SubCell>[] occupiedCells;
|
||||||
public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { return occupiedCells; }
|
public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { return occupiedCells; }
|
||||||
|
|
||||||
|
public IEnumerable<WPos> TargetablePositions(Actor self)
|
||||||
|
{
|
||||||
|
return OccupiedCells().Select(c => self.World.Map.CenterOfCell(c.First));
|
||||||
|
}
|
||||||
|
|
||||||
public void Created(Actor self)
|
public void Created(Actor self)
|
||||||
{
|
{
|
||||||
if (SkipMakeAnimation || !self.HasTrait<WithMakeAnimation>())
|
if (SkipMakeAnimation || !self.HasTrait<WithMakeAnimation>())
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
#region Copyright & License Information
|
|
||||||
/*
|
|
||||||
* Copyright 2007-2015 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.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Traits
|
|
||||||
{
|
|
||||||
public class TargetableBuildingInfo : ITraitInfo, ITargetableInfo, Requires<BuildingInfo>
|
|
||||||
{
|
|
||||||
[FieldLoader.Require]
|
|
||||||
public readonly string[] TargetTypes = { };
|
|
||||||
public string[] GetTargetTypes() { return TargetTypes; }
|
|
||||||
|
|
||||||
public bool RequiresForceFire = false;
|
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new TargetableBuilding(init.Self, this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TargetableBuilding : ITargetable
|
|
||||||
{
|
|
||||||
readonly TargetableBuildingInfo info;
|
|
||||||
readonly Building building;
|
|
||||||
|
|
||||||
public TargetableBuilding(Actor self, TargetableBuildingInfo info)
|
|
||||||
{
|
|
||||||
this.info = info;
|
|
||||||
building = self.Trait<Building>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] TargetTypes { get { return info.TargetTypes; } }
|
|
||||||
public bool TargetableBy(Actor self, Actor byActor) { return true; }
|
|
||||||
|
|
||||||
public IEnumerable<WPos> TargetablePositions(Actor self)
|
|
||||||
{
|
|
||||||
return building.OccupiedCells().Select(c => self.World.Map.CenterOfCell(c.First));
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RequiresForceFire { get { return info.RequiresForceFire; } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -38,13 +38,18 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public readonly string[] CloakTypes = { "Cloak" };
|
public readonly string[] CloakTypes = { "Cloak" };
|
||||||
|
|
||||||
|
[UpgradeGrantedReference]
|
||||||
|
[Desc("The upgrades to grant to self while cloaked.")]
|
||||||
|
public readonly string[] WhileCloakedUpgrades = { };
|
||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new Cloak(init.Self, this); }
|
public override object Create(ActorInitializer init) { return new Cloak(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Cloak : UpgradableTrait<CloakInfo>, IRenderModifier, INotifyDamageStateChanged, INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier
|
public class Cloak : UpgradableTrait<CloakInfo>, IRenderModifier, INotifyDamageStateChanged, INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated
|
||||||
{
|
{
|
||||||
[Sync] int remainingTime;
|
[Sync] int remainingTime;
|
||||||
[Sync] bool damageDisabled;
|
[Sync] bool damageDisabled;
|
||||||
|
UpgradeManager upgradeManager;
|
||||||
|
|
||||||
Actor self;
|
Actor self;
|
||||||
CPos? lastPos;
|
CPos? lastPos;
|
||||||
@@ -57,6 +62,17 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
remainingTime = info.InitialDelay;
|
remainingTime = info.InitialDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Created(Actor self)
|
||||||
|
{
|
||||||
|
upgradeManager = self.TraitOrDefault<UpgradeManager>();
|
||||||
|
if (remainingTime == 0)
|
||||||
|
{
|
||||||
|
if (upgradeManager != null)
|
||||||
|
foreach (var u in Info.WhileCloakedUpgrades)
|
||||||
|
upgradeManager.GrantUpgrade(self, u, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void UpgradeDisabled(Actor self)
|
protected override void UpgradeDisabled(Actor self)
|
||||||
{
|
{
|
||||||
Uncloak();
|
Uncloak();
|
||||||
@@ -68,7 +84,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public void Uncloak(int time)
|
public void Uncloak(int time)
|
||||||
{
|
{
|
||||||
if (Cloaked)
|
if (Cloaked)
|
||||||
|
{
|
||||||
Sound.Play(Info.UncloakSound, self.CenterPosition);
|
Sound.Play(Info.UncloakSound, self.CenterPosition);
|
||||||
|
if (upgradeManager != null)
|
||||||
|
foreach (var u in Info.WhileCloakedUpgrades)
|
||||||
|
upgradeManager.RevokeUpgrade(self, u, this);
|
||||||
|
}
|
||||||
|
|
||||||
remainingTime = Math.Max(remainingTime, time);
|
remainingTime = Math.Max(remainingTime, time);
|
||||||
}
|
}
|
||||||
@@ -106,7 +127,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (remainingTime > 0 && !IsTraitDisabled && !damageDisabled && --remainingTime <= 0)
|
if (remainingTime > 0 && !IsTraitDisabled && !damageDisabled && --remainingTime <= 0)
|
||||||
|
{
|
||||||
Sound.Play(Info.CloakSound, self.CenterPosition);
|
Sound.Play(Info.CloakSound, self.CenterPosition);
|
||||||
|
if (upgradeManager != null)
|
||||||
|
foreach (var u in Info.WhileCloakedUpgrades)
|
||||||
|
upgradeManager.GrantUpgrade(self, u, this);
|
||||||
|
}
|
||||||
|
|
||||||
if (self.IsDisabled())
|
if (self.IsDisabled())
|
||||||
Uncloak();
|
Uncloak();
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (info.ValidFactions.Any() && !info.ValidFactions.Contains(collector.Owner.Faction.InternalName))
|
if (info.ValidFactions.Any() && !info.ValidFactions.Contains(collector.Owner.Faction.InternalName))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var targetable = collector.Info.Traits.GetOrDefault<ITargetableInfo>();
|
var targetable = collector.TraitsImplementing<ITargetable>();
|
||||||
if (targetable == null || !info.ValidTargets.Intersect(targetable.GetTargetTypes()).Any())
|
if (!info.ValidTargets.Intersect(targetable.SelectMany(t => t.TargetTypes)).Any())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var positionable = collector.TraitOrDefault<IPositionable>();
|
var positionable = collector.TraitOrDefault<IPositionable>();
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
|||||||
namespace OpenRA.Mods.Common.Traits
|
namespace OpenRA.Mods.Common.Traits
|
||||||
{
|
{
|
||||||
[Desc("Actor can be targeted.")]
|
[Desc("Actor can be targeted.")]
|
||||||
public class TargetableUnitInfo : UpgradableTraitInfo, ITargetableInfo
|
public class TargetableInfo : UpgradableTraitInfo, ITargetableInfo
|
||||||
{
|
{
|
||||||
[Desc("Target type. Used for filtering (in)valid targets.")]
|
[Desc("Target type. Used for filtering (in)valid targets.")]
|
||||||
public readonly string[] TargetTypes = { };
|
public readonly string[] TargetTypes = { };
|
||||||
@@ -22,15 +22,15 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public bool RequiresForceFire = false;
|
public bool RequiresForceFire = false;
|
||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new TargetableUnit(init.Self, this); }
|
public override object Create(ActorInitializer init) { return new Targetable(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TargetableUnit : UpgradableTrait<TargetableUnitInfo>, ITargetable
|
public class Targetable : UpgradableTrait<TargetableInfo>, ITargetable
|
||||||
{
|
{
|
||||||
protected static readonly string[] None = new string[] { };
|
protected static readonly string[] None = new string[] { };
|
||||||
protected Cloak cloak;
|
protected Cloak cloak;
|
||||||
|
|
||||||
public TargetableUnit(Actor self, TargetableUnitInfo info)
|
public Targetable(Actor self, TargetableInfo info)
|
||||||
: base(info)
|
: base(info)
|
||||||
{
|
{
|
||||||
cloak = self.TraitOrDefault<Cloak>();
|
cloak = self.TraitOrDefault<Cloak>();
|
||||||
@@ -46,12 +46,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return cloak.IsVisible(self, viewer.Owner);
|
return cloak.IsVisible(self, viewer.Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual string[] TargetTypes { get { return IsTraitDisabled ? None : Info.TargetTypes; } }
|
public virtual string[] TargetTypes { get { return Info.TargetTypes; } }
|
||||||
|
|
||||||
public virtual IEnumerable<WPos> TargetablePositions(Actor self)
|
|
||||||
{
|
|
||||||
yield return self.CenterPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RequiresForceFire { get { return Info.RequiresForceFire; } }
|
public bool RequiresForceFire { get { return Info.RequiresForceFire; } }
|
||||||
}
|
}
|
||||||
@@ -1965,6 +1965,92 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineVersion < 20150902)
|
||||||
|
{
|
||||||
|
if (depth == 1)
|
||||||
|
{
|
||||||
|
if (node.Key == "TargetableUnit" || node.Key == "TargetableBuilding")
|
||||||
|
node.Key = "Targetable";
|
||||||
|
else if (node.Key == "-TargetableUnit" || node.Key == "-TargetableBuilding")
|
||||||
|
node.Key = "-Targetable";
|
||||||
|
}
|
||||||
|
else if (depth == 0)
|
||||||
|
{
|
||||||
|
// Split TargetableSubmarine into two Targetable traits
|
||||||
|
var targetableSubmarine = node.Value.Nodes.FirstOrDefault(n => n.Key == "TargetableSubmarine");
|
||||||
|
if (targetableSubmarine != null)
|
||||||
|
{
|
||||||
|
node.Value.Nodes.RemoveAll(n => n.Key == "-Targetable");
|
||||||
|
targetableSubmarine.Key = "Targetable";
|
||||||
|
targetableSubmarine.Value.Nodes.Add(new MiniYamlNode("UpgradeTypes", "underwater"));
|
||||||
|
targetableSubmarine.Value.Nodes.Add(new MiniYamlNode("UpgradeMaxEnabledLevel", "0"));
|
||||||
|
var cloakedTargetTypes = targetableSubmarine.Value.Nodes.FirstOrDefault(n => n.Key == "CloakedTargetTypes");
|
||||||
|
if (cloakedTargetTypes != null)
|
||||||
|
{
|
||||||
|
targetableSubmarine.Value.Nodes.Remove(cloakedTargetTypes);
|
||||||
|
cloakedTargetTypes.Key = "TargetTypes";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cloakedTargetTypes = new MiniYamlNode("TargetTypes", "");
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("Targetable@UNDERWATER", "", new List<MiniYamlNode> {
|
||||||
|
cloakedTargetTypes,
|
||||||
|
new MiniYamlNode("UpgradeTypes", "underwater"),
|
||||||
|
new MiniYamlNode("UpgradeMinEnabledLevel", "1")
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add `WhileCloakedUpgrades: underwater` to Cloak trait if `CloakTypes: Underwater`
|
||||||
|
var cloak = node.Value.Nodes.FirstOrDefault(n => (n.Key == "Cloak" || n.Key.StartsWith("Cloak@"))
|
||||||
|
&& n.Value.Nodes.Any(p => p.Key == "CloakTypes" && p.Value.Value == "Underwater"));
|
||||||
|
if (cloak != null)
|
||||||
|
cloak.Value.Nodes.Add(new MiniYamlNode("WhileCloakedUpgrades", "underwater"));
|
||||||
|
|
||||||
|
// Remove split traits if TargetableSubmarine was removed
|
||||||
|
var untargetableSubmarine = node.Value.Nodes.FirstOrDefault(n => n.Key == "-TargetableSubmarine");
|
||||||
|
if (untargetableSubmarine != null)
|
||||||
|
{
|
||||||
|
untargetableSubmarine.Key = "-Targetable";
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-Targetable@UNDERWATER", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Split TargetableAircraft into two Targetable traits
|
||||||
|
var targetableAircraft = node.Value.Nodes.FirstOrDefault(n => n.Key == "TargetableAircraft");
|
||||||
|
if (targetableAircraft != null)
|
||||||
|
{
|
||||||
|
node.Value.Nodes.RemoveAll(n => n.Key == "-Targetable");
|
||||||
|
targetableAircraft.Key = "Targetable@AIRBORNE";
|
||||||
|
targetableAircraft.Value.Nodes.Add(new MiniYamlNode("UpgradeTypes", "airborne"));
|
||||||
|
targetableAircraft.Value.Nodes.Add(new MiniYamlNode("UpgradeMinEnabledLevel", "1"));
|
||||||
|
var groundTargetTypes = targetableAircraft.Value.Nodes.FirstOrDefault(n => n.Key == "GroundedTargetTypes");
|
||||||
|
if (groundTargetTypes != null)
|
||||||
|
{
|
||||||
|
targetableAircraft.Value.Nodes.Remove(groundTargetTypes);
|
||||||
|
groundTargetTypes.Key = "TargetTypes";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
groundTargetTypes = new MiniYamlNode("TargetTypes", "");
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("Targetable@GROUND", "", new List<MiniYamlNode> {
|
||||||
|
groundTargetTypes,
|
||||||
|
new MiniYamlNode("UpgradeTypes", "airborne"),
|
||||||
|
new MiniYamlNode("UpgradeMaxEnabledLevel", "0")
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add `AirborneUpgrades: airborne` to Plane and Helicopter
|
||||||
|
var aircraft = node.Value.Nodes.FirstOrDefault(n => n.Key == "Plane" || n.Key == "Helicopter");
|
||||||
|
if (aircraft != null)
|
||||||
|
aircraft.Value.Nodes.Add(new MiniYamlNode("AirborneUpgrades", "airborne"));
|
||||||
|
|
||||||
|
// Remove split traits if TargetableAircraft was removed
|
||||||
|
var untargetableAircraft = node.Value.Nodes.FirstOrDefault(n => n.Key == "-TargetableAircraft");
|
||||||
|
if (untargetableAircraft != null)
|
||||||
|
{
|
||||||
|
untargetableAircraft.Key = "-TargetableUnit@GROUND";
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-TargetableUnit@AIRBORNE", ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Warheads
|
namespace OpenRA.Mods.Common.Warheads
|
||||||
@@ -58,8 +59,8 @@ namespace OpenRA.Mods.Common.Warheads
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// A target type is valid if it is in the valid targets list, and not in the invalid targets list.
|
// A target type is valid if it is in the valid targets list, and not in the invalid targets list.
|
||||||
var targetable = victim.TraitOrDefault<ITargetable>();
|
var targetable = victim.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled);
|
||||||
if (targetable == null || !IsValidTarget(targetable.TargetTypes))
|
if (!IsValidTarget(targetable.SelectMany(t => t.TargetTypes)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -74,8 +75,7 @@ namespace OpenRA.Mods.Common.Warheads
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// A target type is valid if it is in the valid targets list, and not in the invalid targets list.
|
// A target type is valid if it is in the valid targets list, and not in the invalid targets list.
|
||||||
var targetable = victim.Info.Traits.GetOrDefault<ITargetableInfo>();
|
if (!IsValidTarget(victim.TargetTypes))
|
||||||
if (targetable == null || !IsValidTarget(targetable.GetTargetTypes()))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -112,7 +112,6 @@
|
|||||||
<Compile Include="Traits\SupportPowers\GpsPower.cs" />
|
<Compile Include="Traits\SupportPowers\GpsPower.cs" />
|
||||||
<Compile Include="Traits\SupportPowers\ParatroopersPower.cs" />
|
<Compile Include="Traits\SupportPowers\ParatroopersPower.cs" />
|
||||||
<Compile Include="Traits\SpawnActorOnDeath.cs" />
|
<Compile Include="Traits\SpawnActorOnDeath.cs" />
|
||||||
<Compile Include="Traits\TargetableSubmarine.cs" />
|
|
||||||
<Compile Include="Scripting\Properties\ChronosphereProperties.cs" />
|
<Compile Include="Scripting\Properties\ChronosphereProperties.cs" />
|
||||||
<Compile Include="Scripting\Properties\ParadropProperties.cs" />
|
<Compile Include="Scripting\Properties\ParadropProperties.cs" />
|
||||||
<Compile Include="Scripting\Properties\ParatroopersProperties.cs" />
|
<Compile Include="Scripting\Properties\ParatroopersProperties.cs" />
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
if (order.ExtraData == 0 && order.TargetActor == null)
|
if (order.ExtraData == 0 && order.TargetActor == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ActorInfo ai;
|
IEnumerable<string> targetTypes;
|
||||||
|
|
||||||
if (order.ExtraData != 0)
|
if (order.ExtraData != 0)
|
||||||
{
|
{
|
||||||
@@ -74,13 +74,13 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
if (frozen == null)
|
if (frozen == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ai = frozen.Info;
|
targetTypes = frozen.TargetTypes;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ai = order.TargetActor.Info;
|
targetTypes = order.TargetActor.TraitsImplementing<ITargetable>().Where(Exts.IsTraitEnabled)
|
||||||
|
.SelectMany(t => t.TargetTypes);
|
||||||
|
|
||||||
var i = ai.Traits.GetOrDefault<ITargetableInfo>();
|
return targetTypes.Intersect(Info.Types).Any();
|
||||||
return i != null && i.GetTargetTypes().Intersect(Info.Types).Any();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
public string VoicePhraseForOrder(Actor self, Order order)
|
||||||
@@ -95,7 +95,8 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var target = self.ResolveFrozenActorOrder(order, Color.Red);
|
var target = self.ResolveFrozenActorOrder(order, Color.Red);
|
||||||
if (target.Type != TargetType.Actor)
|
if (target.Type != TargetType.Actor
|
||||||
|
|| target.Actor.TraitsImplementing<ITargetable>().SelectMany(t => t.TargetTypes).Intersect(Info.Types).Any())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!order.Queued)
|
if (!order.Queued)
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
#region Copyright & License Information
|
|
||||||
/*
|
|
||||||
* Copyright 2007-2015 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 OpenRA.Mods.Common.Traits;
|
|
||||||
using OpenRA.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Traits
|
|
||||||
{
|
|
||||||
public class TargetableSubmarineInfo : TargetableUnitInfo, Requires<CloakInfo>
|
|
||||||
{
|
|
||||||
public readonly string[] CloakedTargetTypes = { };
|
|
||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new TargetableSubmarine(init.Self, this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TargetableSubmarine : TargetableUnit
|
|
||||||
{
|
|
||||||
readonly TargetableSubmarineInfo info;
|
|
||||||
|
|
||||||
public TargetableSubmarine(Actor self, TargetableSubmarineInfo info)
|
|
||||||
: base(self, info)
|
|
||||||
{
|
|
||||||
this.info = info;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string[] TargetTypes
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return IsTraitDisabled ? None
|
|
||||||
: (cloak.Cloaked ? info.CloakedTargetTypes : info.TargetTypes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -511,7 +511,7 @@ Rules:
|
|||||||
Buildable:
|
Buildable:
|
||||||
Prerequisites: ~disabled
|
Prerequisites: ~disabled
|
||||||
A10:
|
A10:
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ TRAN:
|
|||||||
InitialFacing: 0
|
InitialFacing: 0
|
||||||
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach,Tiberium,BlueTiberium
|
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach,Tiberium,BlueTiberium
|
||||||
AltitudeVelocity: 0c100
|
AltitudeVelocity: 0c100
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 90
|
HP: 90
|
||||||
Armor:
|
Armor:
|
||||||
@@ -56,6 +57,7 @@ HELI:
|
|||||||
RearmBuildings: hpad
|
RearmBuildings: hpad
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 125
|
HP: 125
|
||||||
Armor:
|
Armor:
|
||||||
@@ -107,6 +109,7 @@ ORCA:
|
|||||||
RearmBuildings: hpad
|
RearmBuildings: hpad
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 90
|
HP: 90
|
||||||
Armor:
|
Armor:
|
||||||
@@ -152,6 +155,7 @@ C17:
|
|||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 326
|
Speed: 326
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
Armor:
|
Armor:
|
||||||
@@ -188,6 +192,7 @@ A10:
|
|||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 373
|
Speed: 373
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 150
|
HP: 150
|
||||||
Armor:
|
Armor:
|
||||||
@@ -219,6 +224,7 @@ TRAN.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 140
|
Speed: 140
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 8c0
|
Range: 8c0
|
||||||
Type: CenterPosition
|
Type: CenterPosition
|
||||||
@@ -236,6 +242,7 @@ HELI.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 10c0
|
Range: 10c0
|
||||||
Type: CenterPosition
|
Type: CenterPosition
|
||||||
@@ -251,6 +258,7 @@ ORCA.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 10c0
|
Range: 10c0
|
||||||
Type: CenterPosition
|
Type: CenterPosition
|
||||||
|
|||||||
@@ -374,7 +374,7 @@ BRIDGEHUT:
|
|||||||
CustomSelectionSize:
|
CustomSelectionSize:
|
||||||
CustomBounds: 48,48
|
CustomBounds: 48,48
|
||||||
BridgeHut:
|
BridgeHut:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: BridgeHut, C4
|
TargetTypes: BridgeHut, C4
|
||||||
|
|
||||||
C1:
|
C1:
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Repairable:
|
Repairable:
|
||||||
Passenger:
|
Passenger:
|
||||||
@@ -116,9 +116,14 @@
|
|||||||
Inherits@2: ^GainsExperience
|
Inherits@2: ^GainsExperience
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
UseLocation: yes
|
UseLocation: yes
|
||||||
TargetableAircraft:
|
Targetable@GROUND:
|
||||||
|
TargetTypes: Ground, Vehicle
|
||||||
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@AIRBORNE:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground, Vehicle
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
@@ -126,6 +131,7 @@
|
|||||||
RepairBuildings: hpad
|
RepairBuildings: hpad
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
LandWhenIdle: false
|
LandWhenIdle: false
|
||||||
|
AirborneUpgrades: airborne
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
Type: CenterPosition
|
Type: CenterPosition
|
||||||
ActorLostNotification:
|
ActorLostNotification:
|
||||||
@@ -172,7 +178,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,17,0,-6
|
Bounds: 12,17,0,-6
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
QuantizeFacingsFromSequence:
|
QuantizeFacingsFromSequence:
|
||||||
@@ -302,7 +308,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
QuantizeFacingsFromSequence:
|
QuantizeFacingsFromSequence:
|
||||||
@@ -346,7 +352,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
ScanRadius: 5
|
ScanRadius: 5
|
||||||
@@ -405,7 +411,7 @@
|
|||||||
Water: 100
|
Water: 100
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
ActorLostNotification:
|
ActorLostNotification:
|
||||||
@@ -421,7 +427,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Priority: 3
|
Priority: 3
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, Structure
|
TargetTypes: Ground, C4, Structure
|
||||||
Armor:
|
Armor:
|
||||||
Type: Wood
|
Type: Wood
|
||||||
@@ -520,7 +526,7 @@
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Field
|
Name: Field
|
||||||
-WithBuildingExplosion:
|
-WithBuildingExplosion:
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
-Demolishable:
|
-Demolishable:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Palette: terrain
|
Palette: terrain
|
||||||
@@ -553,7 +559,7 @@
|
|||||||
BuildSounds: hvydoor1.aud
|
BuildSounds: hvydoor1.aud
|
||||||
Adjacent: 7
|
Adjacent: 7
|
||||||
TerrainTypes: Clear,Road
|
TerrainTypes: Clear,Road
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Wall
|
TargetTypes: Ground, Wall
|
||||||
Crushable:
|
Crushable:
|
||||||
CrushClasses: wall
|
CrushClasses: wall
|
||||||
@@ -662,7 +668,7 @@
|
|||||||
AllowedTerrain: Clear, Rough, Road, Tiberium, BlueTiberium, Beach
|
AllowedTerrain: Clear, Rough, Road, Tiberium, BlueTiberium, Beach
|
||||||
Burns:
|
Burns:
|
||||||
Interval: 2
|
Interval: 2
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
RequiresForceFire: yes
|
RequiresForceFire: yes
|
||||||
TargetTypes: Ground, Husk
|
TargetTypes: Ground, Husk
|
||||||
Capturable:
|
Capturable:
|
||||||
@@ -692,7 +698,7 @@
|
|||||||
AlwaysVisible:
|
AlwaysVisible:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Bridge
|
Name: Bridge
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
RequiresForceFire: yes
|
RequiresForceFire: yes
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
Health:
|
Health:
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ STNK:
|
|||||||
AttackFrontal:
|
AttackFrontal:
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
InitialStance: HoldFire
|
InitialStance: HoldFire
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
SpawnActorOnDeath:
|
SpawnActorOnDeath:
|
||||||
Actor: STNK.Husk
|
Actor: STNK.Husk
|
||||||
-MustBeDestroyed:
|
-MustBeDestroyed:
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ carryall.reinforce:
|
|||||||
Repulsable: False
|
Repulsable: False
|
||||||
LandAltitude: 100
|
LandAltitude: 100
|
||||||
LandWhenIdle: False
|
LandWhenIdle: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
SpawnActorOnDeath:
|
SpawnActorOnDeath:
|
||||||
Actor: carryall.husk
|
Actor: carryall.husk
|
||||||
Carryall:
|
Carryall:
|
||||||
@@ -53,6 +54,7 @@ carryall.infantry:
|
|||||||
RepairBuildings: repair
|
RepairBuildings: repair
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Cargo:
|
Cargo:
|
||||||
MaxWeight: 5
|
MaxWeight: 5
|
||||||
Types: Infantry
|
Types: Infantry
|
||||||
@@ -77,6 +79,7 @@ frigate:
|
|||||||
RepairBuildings: repair
|
RepairBuildings: repair
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 500
|
HP: 500
|
||||||
-AppearsOnRadar:
|
-AppearsOnRadar:
|
||||||
@@ -116,14 +119,20 @@ orni:
|
|||||||
Speed: 280
|
Speed: 280
|
||||||
RepairBuildings: repair
|
RepairBuildings: repair
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
AirborneUpgrades: airborne
|
||||||
SpawnActorOnDeath:
|
SpawnActorOnDeath:
|
||||||
Actor: orni.husk
|
Actor: orni.husk
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 32,32
|
Bounds: 32,32
|
||||||
TargetableAircraft:
|
Targetable@GROUND:
|
||||||
|
TargetTypes: Ground, Vehicle
|
||||||
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@AIRBORNE:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground, Vehicle
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: GenericVoice
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
@@ -142,6 +151,7 @@ orni.bomber:
|
|||||||
RepairBuildings: repair
|
RepairBuildings: repair
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AmmoPool:
|
AmmoPool:
|
||||||
Ammo: 5
|
Ammo: 5
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -161,6 +171,7 @@ orni.husk:
|
|||||||
Speed: 280
|
Speed: 280
|
||||||
RepairBuildings:
|
RepairBuildings:
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: orni
|
Image: orni
|
||||||
|
|
||||||
@@ -173,6 +184,7 @@ orni.bomber.husk:
|
|||||||
Speed: 350
|
Speed: 350
|
||||||
RepairBuildings:
|
RepairBuildings:
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: orni
|
Image: orni
|
||||||
|
|
||||||
@@ -185,6 +197,7 @@ carryall.husk:
|
|||||||
Speed: 210
|
Speed: 210
|
||||||
RepairBuildings:
|
RepairBuildings:
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: carryall
|
Image: carryall
|
||||||
|
|
||||||
@@ -197,6 +210,7 @@ carryall.infantry.husk:
|
|||||||
Speed: 280
|
Speed: 280
|
||||||
RepairBuildings:
|
RepairBuildings:
|
||||||
RearmBuildings:
|
RearmBuildings:
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: carryall
|
Image: carryall
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ sandworm:
|
|||||||
Sand: 100
|
Sand: 100
|
||||||
Dune: 100
|
Dune: 100
|
||||||
Spice: 100
|
Spice: 100
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
WithFacingSpriteBody:
|
WithFacingSpriteBody:
|
||||||
WithAttackOverlay:
|
WithAttackOverlay:
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 32,32
|
Bounds: 32,32
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle, C4
|
TargetTypes: Ground, Vehicle, C4
|
||||||
Passenger:
|
Passenger:
|
||||||
CargoType: Vehicle
|
CargoType: Vehicle
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
AllowedTerrain: Sand, Rock, Transition, Concrete, Spice, SpiceBlobs, Dune
|
AllowedTerrain: Sand, Rock, Transition, Concrete, Spice, SpiceBlobs, Dune
|
||||||
Burns:
|
Burns:
|
||||||
Interval: 4
|
Interval: 4
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
RequiresForceFire: yes
|
RequiresForceFire: yes
|
||||||
Capturable:
|
Capturable:
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,18,0,-6
|
Bounds: 12,18,0,-6
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
UpgradeTypes: parachute
|
UpgradeTypes: parachute
|
||||||
UpgradeMaxEnabledLevel: 0
|
UpgradeMaxEnabledLevel: 0
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Priority: 2
|
Priority: 2
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, Structure
|
TargetTypes: Ground, C4, Structure
|
||||||
Building:
|
Building:
|
||||||
Dimensions: 1,1
|
Dimensions: 1,1
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ waypoint:
|
|||||||
Inherits: carryall
|
Inherits: carryall
|
||||||
Helicopter:
|
Helicopter:
|
||||||
InitialFacing: 104
|
InitialFacing: 104
|
||||||
|
AirborneUpgrades: airborne
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: carryall
|
Image: carryall
|
||||||
Palette: colorpicker
|
Palette: colorpicker
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ wall:
|
|||||||
NodeTypes: wall, turret
|
NodeTypes: wall, turret
|
||||||
LineBuildNode:
|
LineBuildNode:
|
||||||
Types: wall
|
Types: wall
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Wall
|
TargetTypes: Ground, Wall
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
WithWallSpriteBody:
|
WithWallSpriteBody:
|
||||||
|
|||||||
@@ -1382,21 +1382,19 @@ Rules:
|
|||||||
-ExternalCaptures:
|
-ExternalCaptures:
|
||||||
Captures:
|
Captures:
|
||||||
CaptureTypes: building
|
CaptureTypes: building
|
||||||
Cloak@JAIL:
|
Targetable:
|
||||||
UpgradeTypes: jail
|
UpgradeTypes: jail
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMaxEnabledLevel: 0
|
||||||
InitialDelay: 0
|
Targetable@PRISONER:
|
||||||
CloakDelay: 0
|
TargetTypes: Prisoner
|
||||||
Palette:
|
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: E6
|
Image: E6
|
||||||
MEDI:
|
MEDI:
|
||||||
Cloak@JAIL:
|
Targetable:
|
||||||
UpgradeTypes: jail
|
UpgradeTypes: jail
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMaxEnabledLevel: 0
|
||||||
InitialDelay: 0
|
Targetable@PRISONER:
|
||||||
CloakDelay: 0
|
TargetTypes: Prisoner
|
||||||
Palette:
|
|
||||||
E7.noautotarget:
|
E7.noautotarget:
|
||||||
Inherits: E7
|
Inherits: E7
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
@@ -1544,6 +1542,9 @@ Sequences:
|
|||||||
VoxelSequences:
|
VoxelSequences:
|
||||||
|
|
||||||
Weapons:
|
Weapons:
|
||||||
|
BarrelExplode:
|
||||||
|
Warhead@1Dam:
|
||||||
|
ValidTargets: Ground, Prisoner
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
|
|
||||||
|
|||||||
@@ -1278,21 +1278,19 @@ Rules:
|
|||||||
Captures:
|
Captures:
|
||||||
CaptureTypes: building
|
CaptureTypes: building
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
Cloak@JAIL:
|
Targetable:
|
||||||
UpgradeTypes: jail
|
UpgradeTypes: jail
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMaxEnabledLevel: 0
|
||||||
InitialDelay: 0
|
Targetable@PRISONER:
|
||||||
CloakDelay: 0
|
TargetTypes: Prisoner
|
||||||
Palette:
|
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: E6
|
Image: E6
|
||||||
MEDI:
|
MEDI:
|
||||||
Cloak@JAIL:
|
Targetable:
|
||||||
UpgradeTypes: jail
|
UpgradeTypes: jail
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMaxEnabledLevel: 0
|
||||||
InitialDelay: 0
|
Targetable@PRISONER:
|
||||||
CloakDelay: 0
|
TargetTypes: Prisoner
|
||||||
Palette:
|
|
||||||
E7.noautotarget:
|
E7.noautotarget:
|
||||||
Inherits: E7
|
Inherits: E7
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
@@ -1385,7 +1383,7 @@ Rules:
|
|||||||
-Selectable:
|
-Selectable:
|
||||||
-Demolishable:
|
-Demolishable:
|
||||||
-Huntable:
|
-Huntable:
|
||||||
-TargetableUnit:
|
-Targetable:
|
||||||
-Armament:
|
-Armament:
|
||||||
-WithMuzzleFlash:
|
-WithMuzzleFlash:
|
||||||
Cargo:
|
Cargo:
|
||||||
@@ -1432,6 +1430,9 @@ Weapons:
|
|||||||
FireballLauncher:
|
FireballLauncher:
|
||||||
Projectile:
|
Projectile:
|
||||||
High: True
|
High: True
|
||||||
|
BarrelExplode:
|
||||||
|
Warhead@1Dam:
|
||||||
|
ValidTargets: Ground, Prisoner
|
||||||
|
|
||||||
Voices:
|
Voices:
|
||||||
|
|
||||||
|
|||||||
@@ -1651,7 +1651,7 @@ Rules:
|
|||||||
Prerequisites: ~disabled
|
Prerequisites: ~disabled
|
||||||
LST:
|
LST:
|
||||||
-Selectable:
|
-Selectable:
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
Tooltip:
|
Tooltip:
|
||||||
GenericVisibility: Enemy
|
GenericVisibility: Enemy
|
||||||
@@ -1668,8 +1668,8 @@ Rules:
|
|||||||
Range: 4c0
|
Range: 4c0
|
||||||
Tooltip:
|
Tooltip:
|
||||||
ShowOwnerRow: false
|
ShowOwnerRow: false
|
||||||
TargetableAircraft:
|
Targetable@GROUND:
|
||||||
GroundedTargetTypes: Ground
|
TargetTypes: Ground
|
||||||
TRAN.IN:
|
TRAN.IN:
|
||||||
Inherits: TRAN
|
Inherits: TRAN
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
@@ -1696,13 +1696,13 @@ Rules:
|
|||||||
ShowOwnerRow: false
|
ShowOwnerRow: false
|
||||||
WEAP:
|
WEAP:
|
||||||
-InfiltrateForSupportPower:
|
-InfiltrateForSupportPower:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives
|
TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives
|
||||||
MISS:
|
MISS:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Prison
|
Name: Prison
|
||||||
ShowOwnerRow: False
|
ShowOwnerRow: False
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives
|
TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives
|
||||||
E7.noautotarget:
|
E7.noautotarget:
|
||||||
Inherits: E7
|
Inherits: E7
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ Rules:
|
|||||||
DamageMultiplier@INVULNERABLE:
|
DamageMultiplier@INVULNERABLE:
|
||||||
Modifier: 0
|
Modifier: 0
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
Player:
|
Player:
|
||||||
StrategicVictoryConditions:
|
StrategicVictoryConditions:
|
||||||
TicksToHold: 3000
|
TicksToHold: 3000
|
||||||
|
|||||||
@@ -2241,7 +2241,7 @@ Rules:
|
|||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: DOME
|
Image: DOME
|
||||||
-InfiltrateForExploration:
|
-InfiltrateForExploration:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, MissionObjective
|
TargetTypes: Ground, C4, DetonateAttack, MissionObjective
|
||||||
SPY:
|
SPY:
|
||||||
Infiltrates:
|
Infiltrates:
|
||||||
|
|||||||
@@ -1282,7 +1282,7 @@ Rules:
|
|||||||
Power:
|
Power:
|
||||||
Amount: 0
|
Amount: 0
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
-GivesBuildableArea:
|
-GivesBuildableArea:
|
||||||
-Huntable:
|
-Huntable:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ BADR:
|
|||||||
Speed: 149
|
Speed: 149
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
MaximumPitch: 56
|
MaximumPitch: 56
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Cargo:
|
Cargo:
|
||||||
MaxWeight: 10
|
MaxWeight: 10
|
||||||
-Selectable:
|
-Selectable:
|
||||||
@@ -49,6 +50,7 @@ BADR.Bomber:
|
|||||||
Speed: 149
|
Speed: 149
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
MaximumPitch: 56
|
MaximumPitch: 56
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AmmoPool:
|
AmmoPool:
|
||||||
Ammo: 7
|
Ammo: 7
|
||||||
-Selectable:
|
-Selectable:
|
||||||
@@ -106,6 +108,7 @@ MIG:
|
|||||||
RearmBuildings: afld
|
RearmBuildings: afld
|
||||||
RepulsionSpeed: 40
|
RepulsionSpeed: 40
|
||||||
MaximumPitch: 56
|
MaximumPitch: 56
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
TargetWhenIdle: false
|
TargetWhenIdle: false
|
||||||
TargetWhenDamaged: false
|
TargetWhenDamaged: false
|
||||||
@@ -167,6 +170,7 @@ YAK:
|
|||||||
Speed: 178
|
Speed: 178
|
||||||
RepulsionSpeed: 40
|
RepulsionSpeed: 40
|
||||||
MaximumPitch: 56
|
MaximumPitch: 56
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
TargetWhenIdle: false
|
TargetWhenIdle: false
|
||||||
TargetWhenDamaged: false
|
TargetWhenDamaged: false
|
||||||
@@ -215,6 +219,7 @@ TRAN:
|
|||||||
Speed: 112
|
Speed: 112
|
||||||
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach
|
LandableTerrainTypes: Clear,Rough,Road,Ore,Beach
|
||||||
AltitudeVelocity: 0c100
|
AltitudeVelocity: 0c100
|
||||||
|
AirborneUpgrades: airborne
|
||||||
WithRotor@PRIMARY:
|
WithRotor@PRIMARY:
|
||||||
Offset: -597,0,341
|
Offset: -597,0,341
|
||||||
Sequence: rotor2
|
Sequence: rotor2
|
||||||
@@ -261,6 +266,7 @@ HELI:
|
|||||||
InitialFacing: 20
|
InitialFacing: 20
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 149
|
Speed: 149
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
InitialStance: HoldFire
|
InitialStance: HoldFire
|
||||||
WithRotor:
|
WithRotor:
|
||||||
@@ -312,6 +318,7 @@ HIND:
|
|||||||
InitialFacing: 20
|
InitialFacing: 20
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 112
|
Speed: 112
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
InitialStance: HoldFire
|
InitialStance: HoldFire
|
||||||
WithRotor:
|
WithRotor:
|
||||||
@@ -341,10 +348,11 @@ U2:
|
|||||||
Speed: 373
|
Speed: 373
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
MaximumPitch: 56
|
MaximumPitch: 56
|
||||||
|
AirborneUpgrades: airborne
|
||||||
AttackBomber:
|
AttackBomber:
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-Voiced:
|
-Voiced:
|
||||||
-TargetableAircraft:
|
-Targetable@AIRBORNE:
|
||||||
-GainsExperience:
|
-GainsExperience:
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
Offset: -725,683,0
|
Offset: -725,683,0
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ V19.Husk:
|
|||||||
Sequence: fire-loop
|
Sequence: fire-loop
|
||||||
-Health:
|
-Health:
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
-Demolishable:
|
-Demolishable:
|
||||||
|
|
||||||
BARL:
|
BARL:
|
||||||
@@ -259,7 +259,7 @@ BARL:
|
|||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
Armor:
|
Armor:
|
||||||
Type: None
|
Type: None
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, DemoTruck
|
TargetTypes: Ground, DemoTruck
|
||||||
-ShakeOnDeath:
|
-ShakeOnDeath:
|
||||||
-SoundOnDamageTransition:
|
-SoundOnDamageTransition:
|
||||||
@@ -279,7 +279,7 @@ BRL3:
|
|||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
Armor:
|
Armor:
|
||||||
Type: None
|
Type: None
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, DemoTruck
|
TargetTypes: Ground, DemoTruck
|
||||||
-ShakeOnDeath:
|
-ShakeOnDeath:
|
||||||
-SoundOnDamageTransition:
|
-SoundOnDamageTransition:
|
||||||
@@ -497,7 +497,7 @@ BRIDGEHUT:
|
|||||||
CustomSelectionSize:
|
CustomSelectionSize:
|
||||||
CustomBounds: 48,48
|
CustomBounds: 48,48
|
||||||
BridgeHut:
|
BridgeHut:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: BridgeHut, C4
|
TargetTypes: BridgeHut, C4
|
||||||
|
|
||||||
BRIDGEHUT.small:
|
BRIDGEHUT.small:
|
||||||
@@ -508,7 +508,7 @@ BRIDGEHUT.small:
|
|||||||
CustomSelectionSize:
|
CustomSelectionSize:
|
||||||
CustomBounds: 24,24
|
CustomBounds: 24,24
|
||||||
BridgeHut:
|
BridgeHut:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: BridgeHut, C4
|
TargetTypes: BridgeHut, C4
|
||||||
|
|
||||||
V20:
|
V20:
|
||||||
|
|||||||
@@ -77,7 +77,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24, 24
|
Bounds: 24, 24
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Repair, Vehicle
|
TargetTypes: Ground, Repair, Vehicle
|
||||||
UpgradeTypes: parachute
|
UpgradeTypes: parachute
|
||||||
UpgradeMaxEnabledLevel: 0
|
UpgradeMaxEnabledLevel: 0
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
Ore: 70
|
Ore: 70
|
||||||
Gems: 70
|
Gems: 70
|
||||||
Beach: 70
|
Beach: 70
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, Repair, Tank
|
TargetTypes: Ground, C4, Repair, Tank
|
||||||
ProximityCaptor:
|
ProximityCaptor:
|
||||||
Types: Tank
|
Types: Tank
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 12,18,0,-8
|
Bounds: 12,18,0,-8
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry, Disguise
|
TargetTypes: Ground, Infantry, Disguise
|
||||||
UpgradeTypes: parachute
|
UpgradeTypes: parachute
|
||||||
UpgradeMaxEnabledLevel: 0
|
UpgradeMaxEnabledLevel: 0
|
||||||
@@ -299,7 +299,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Water, Repair
|
TargetTypes: Ground, Water, Repair
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
AttackMove:
|
AttackMove:
|
||||||
@@ -339,9 +339,14 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 24,24
|
Bounds: 24,24
|
||||||
TargetableAircraft:
|
Targetable@GROUND:
|
||||||
|
TargetTypes: Ground, Repair, Vehicle
|
||||||
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@AIRBORNE:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground, Repair, Vehicle
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
Type: CenterPosition
|
Type: CenterPosition
|
||||||
AttackMove:
|
AttackMove:
|
||||||
@@ -385,7 +390,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Selectable:
|
Selectable:
|
||||||
Priority: 3
|
Priority: 3
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure
|
TargetTypes: Ground, C4, DetonateAttack, Structure
|
||||||
Building:
|
Building:
|
||||||
Dimensions: 1,1
|
Dimensions: 1,1
|
||||||
@@ -433,7 +438,7 @@
|
|||||||
|
|
||||||
^Defense:
|
^Defense:
|
||||||
Inherits: ^Building
|
Inherits: ^Building
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, Defense
|
TargetTypes: Ground, C4, DetonateAttack, Structure, Defense
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
RequiredForShortGame: false
|
RequiredForShortGame: false
|
||||||
@@ -462,7 +467,7 @@
|
|||||||
NodeTypes: wall
|
NodeTypes: wall
|
||||||
LineBuildNode:
|
LineBuildNode:
|
||||||
Types: wall
|
Types: wall
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, DetonateAttack, Wall
|
TargetTypes: Ground, DetonateAttack, Wall
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Palette: effect
|
Palette: effect
|
||||||
@@ -518,7 +523,7 @@
|
|||||||
AutoTargetIgnore:
|
AutoTargetIgnore:
|
||||||
Armor:
|
Armor:
|
||||||
Type: Light
|
Type: Light
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, DetonateAttack
|
TargetTypes: Ground, DetonateAttack
|
||||||
|
|
||||||
^CivBuilding:
|
^CivBuilding:
|
||||||
@@ -533,7 +538,7 @@
|
|||||||
-Selectable:
|
-Selectable:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Field
|
Name: Field
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
-Demolishable:
|
-Demolishable:
|
||||||
ProximityCaptor:
|
ProximityCaptor:
|
||||||
Types: CivilianField
|
Types: CivilianField
|
||||||
@@ -598,7 +603,7 @@
|
|||||||
TransformOnCapture:
|
TransformOnCapture:
|
||||||
ForceHealthPercentage: 25
|
ForceHealthPercentage: 25
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Husk
|
TargetTypes: Ground, Husk
|
||||||
RequiresForceFire: true
|
RequiresForceFire: true
|
||||||
Chronoshiftable:
|
Chronoshiftable:
|
||||||
@@ -625,7 +630,7 @@
|
|||||||
AlwaysVisible:
|
AlwaysVisible:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Bridge
|
Name: Bridge
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
RequiresForceFire: true
|
RequiresForceFire: true
|
||||||
Building:
|
Building:
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ SYRF:
|
|||||||
GenericName: Shipyard
|
GenericName: Shipyard
|
||||||
GenericVisibility: Enemy
|
GenericVisibility: Enemy
|
||||||
GenericStancePrefix: False
|
GenericStancePrefix: False
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
Building:
|
Building:
|
||||||
Footprint: xxx xxx xxx
|
Footprint: xxx xxx xxx
|
||||||
@@ -73,7 +73,7 @@ SYRF:
|
|||||||
|
|
||||||
SPEF:
|
SPEF:
|
||||||
Inherits: ^FakeBuilding
|
Inherits: ^FakeBuilding
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Water
|
TargetTypes: Ground, Water
|
||||||
Buildable:
|
Buildable:
|
||||||
BuildPaletteOrder: 910
|
BuildPaletteOrder: 910
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ TRAN.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 149
|
Speed: 149
|
||||||
|
AirborneUpgrades: airborne
|
||||||
WithRotor@PRIMARY:
|
WithRotor@PRIMARY:
|
||||||
Offset: -597,0,341
|
Offset: -597,0,341
|
||||||
WithRotor@SECONDARY:
|
WithRotor@SECONDARY:
|
||||||
@@ -119,6 +120,7 @@ BADR.Husk:
|
|||||||
Plane:
|
Plane:
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 149
|
Speed: 149
|
||||||
|
AirborneUpgrades: airborne
|
||||||
SmokeTrailWhenDamaged@0:
|
SmokeTrailWhenDamaged@0:
|
||||||
Offset: -432,560,0
|
Offset: -432,560,0
|
||||||
Interval: 2
|
Interval: 2
|
||||||
@@ -141,6 +143,7 @@ MIG.Husk:
|
|||||||
Plane:
|
Plane:
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
SmokeTrailWhenDamaged:
|
SmokeTrailWhenDamaged:
|
||||||
Offset: -853,0,171
|
Offset: -853,0,171
|
||||||
Interval: 2
|
Interval: 2
|
||||||
@@ -160,6 +163,7 @@ YAK.Husk:
|
|||||||
Plane:
|
Plane:
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 149
|
Speed: 149
|
||||||
|
AirborneUpgrades: airborne
|
||||||
SmokeTrailWhenDamaged:
|
SmokeTrailWhenDamaged:
|
||||||
Offset: -853,0,0
|
Offset: -853,0,0
|
||||||
Interval: 2
|
Interval: 2
|
||||||
@@ -177,6 +181,7 @@ HELI.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 149
|
Speed: 149
|
||||||
|
AirborneUpgrades: airborne
|
||||||
WithRotor:
|
WithRotor:
|
||||||
Offset: 0,0,85
|
Offset: 0,0,85
|
||||||
SmokeTrailWhenDamaged:
|
SmokeTrailWhenDamaged:
|
||||||
@@ -195,6 +200,7 @@ HIND.Husk:
|
|||||||
Helicopter:
|
Helicopter:
|
||||||
ROT: 4
|
ROT: 4
|
||||||
Speed: 112
|
Speed: 112
|
||||||
|
AirborneUpgrades: airborne
|
||||||
WithRotor:
|
WithRotor:
|
||||||
SmokeTrailWhenDamaged:
|
SmokeTrailWhenDamaged:
|
||||||
Offset: -427,0,0
|
Offset: -427,0,0
|
||||||
@@ -210,6 +216,7 @@ U2.Husk:
|
|||||||
Plane:
|
Plane:
|
||||||
ROT: 7
|
ROT: 7
|
||||||
Speed: 373
|
Speed: 373
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
Offset: -725,683,0
|
Offset: -725,683,0
|
||||||
Contrail@2:
|
Contrail@2:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ DOG:
|
|||||||
Voice: Attack
|
Voice: Attack
|
||||||
AttackMove:
|
AttackMove:
|
||||||
Voice: Move
|
Voice: Move
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
WithInfantryBody:
|
WithInfantryBody:
|
||||||
AttackSequence: shoot
|
AttackSequence: shoot
|
||||||
@@ -587,7 +587,7 @@ Ant:
|
|||||||
AttackSequence: bite
|
AttackSequence: bite
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: mandible
|
Weapon: mandible
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
WithDeathAnimation:
|
WithDeathAnimation:
|
||||||
UseDeathTypeSuffix: false
|
UseDeathTypeSuffix: false
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ MINP:
|
|||||||
Name: Mine
|
Name: Mine
|
||||||
ProximityCaptor:
|
ProximityCaptor:
|
||||||
Types: Mine
|
Types: Mine
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
QuantizedFacings: 1
|
QuantizedFacings: 1
|
||||||
@@ -53,7 +53,7 @@ MINV:
|
|||||||
Name: Mine
|
Name: Mine
|
||||||
ProximityCaptor:
|
ProximityCaptor:
|
||||||
Types: Mine
|
Types: Mine
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
QuantizedFacings: 1
|
QuantizedFacings: 1
|
||||||
@@ -431,5 +431,5 @@ CTFLAG:
|
|||||||
DamageMultiplier@INVULNERABLE:
|
DamageMultiplier@INVULNERABLE:
|
||||||
Modifier: 0
|
Modifier: 0
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-Targetable:
|
||||||
|
|
||||||
|
|||||||
@@ -19,16 +19,21 @@ SS:
|
|||||||
Speed: 71
|
Speed: 71
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 6c0
|
Range: 6c0
|
||||||
-TargetableUnit:
|
Targetable:
|
||||||
TargetableSubmarine:
|
|
||||||
TargetTypes: Ground, Water, Repair
|
TargetTypes: Ground, Water, Repair
|
||||||
CloakedTargetTypes: Underwater, Repair
|
UpgradeTypes: underwater
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@UNDERWATER:
|
||||||
|
TargetTypes: Underwater, Repair
|
||||||
|
UpgradeTypes: underwater
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
Cloak:
|
Cloak:
|
||||||
CloakTypes: Underwater
|
CloakTypes: Underwater
|
||||||
InitialDelay: 0
|
InitialDelay: 0
|
||||||
CloakDelay: 50
|
CloakDelay: 50
|
||||||
CloakSound: subshow1.aud
|
CloakSound: subshow1.aud
|
||||||
UncloakSound: subshow1.aud
|
UncloakSound: subshow1.aud
|
||||||
|
WhileCloakedUpgrades: underwater
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: TorpTube
|
Weapon: TorpTube
|
||||||
LocalOffset: 0,-171,0, 0,171,0
|
LocalOffset: 0,-171,0, 0,171,0
|
||||||
@@ -68,16 +73,21 @@ MSUB:
|
|||||||
Speed: 42
|
Speed: 42
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 6c0
|
Range: 6c0
|
||||||
-TargetableUnit:
|
Targetable:
|
||||||
TargetableSubmarine:
|
|
||||||
TargetTypes: Ground, Water, Repair
|
TargetTypes: Ground, Water, Repair
|
||||||
CloakedTargetTypes: Underwater, Repair
|
UpgradeTypes: underwater
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@UNDERWATER:
|
||||||
|
TargetTypes: Underwater, Repair
|
||||||
|
UpgradeTypes: underwater
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
Cloak:
|
Cloak:
|
||||||
CloakTypes: Underwater
|
CloakTypes: Underwater
|
||||||
InitialDelay: 0
|
InitialDelay: 0
|
||||||
CloakDelay: 100
|
CloakDelay: 100
|
||||||
CloakSound: subshow1.aud
|
CloakSound: subshow1.aud
|
||||||
UncloakSound: subshow1.aud
|
UncloakSound: subshow1.aud
|
||||||
|
WhileCloakedUpgrades: underwater
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: SubMissile
|
Weapon: SubMissile
|
||||||
LocalOffset: 0,-171,0, 0,171,0
|
LocalOffset: 0,-171,0, 0,171,0
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ SPEN:
|
|||||||
Queue: Building
|
Queue: Building
|
||||||
BuildPaletteOrder: 50
|
BuildPaletteOrder: 50
|
||||||
Prerequisites: anypower, ~structures.soviet, ~techlevel.low
|
Prerequisites: anypower, ~structures.soviet, ~techlevel.low
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate
|
||||||
Building:
|
Building:
|
||||||
Footprint: xxx xxx xxx
|
Footprint: xxx xxx xxx
|
||||||
@@ -181,7 +181,7 @@ SYRD:
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Shipyard
|
Name: Shipyard
|
||||||
Description: Produces and repairs ships\nand transports.
|
Description: Produces and repairs ships\nand transports.
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate
|
||||||
Building:
|
Building:
|
||||||
Footprint: xxx xxx xxx
|
Footprint: xxx xxx xxx
|
||||||
@@ -476,7 +476,7 @@ DOME:
|
|||||||
Building:
|
Building:
|
||||||
Footprint: xx xx
|
Footprint: xx xx
|
||||||
Dimensions: 2,2
|
Dimensions: 2,2
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
RequiresPower:
|
RequiresPower:
|
||||||
CanPowerDown:
|
CanPowerDown:
|
||||||
@@ -823,7 +823,7 @@ WEAP:
|
|||||||
Power:
|
Power:
|
||||||
Amount: -30
|
Amount: -30
|
||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||||
InfiltrateForSupportPower:
|
InfiltrateForSupportPower:
|
||||||
Proxy: vehicles.upgraded
|
Proxy: vehicles.upgraded
|
||||||
@@ -920,7 +920,7 @@ PROC:
|
|||||||
Bounds: 72,50,0,12
|
Bounds: 72,50,0,12
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
VisualBounds: 72,70,0,-2
|
VisualBounds: 72,70,0,-2
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
Health:
|
Health:
|
||||||
HP: 900
|
HP: 900
|
||||||
@@ -1050,7 +1050,7 @@ HPAD:
|
|||||||
RequiresPrerequisites: structures.germany
|
RequiresPrerequisites: structures.germany
|
||||||
Prerequisite: aircraft.germany
|
Prerequisite: aircraft.germany
|
||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||||
InfiltrateForSupportPower:
|
InfiltrateForSupportPower:
|
||||||
Proxy: aircraft.upgraded
|
Proxy: aircraft.upgraded
|
||||||
@@ -1159,7 +1159,7 @@ AFLD:
|
|||||||
Power:
|
Power:
|
||||||
Amount: -20
|
Amount: -20
|
||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||||
InfiltrateForSupportPower:
|
InfiltrateForSupportPower:
|
||||||
Proxy: aircraft.upgraded
|
Proxy: aircraft.upgraded
|
||||||
@@ -1191,7 +1191,7 @@ POWR:
|
|||||||
Amount: 100
|
Amount: 100
|
||||||
InfiltrateForPowerOutage:
|
InfiltrateForPowerOutage:
|
||||||
AffectedByPowerOutage:
|
AffectedByPowerOutage:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
ScalePowerWithHealth:
|
ScalePowerWithHealth:
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
@@ -1232,7 +1232,7 @@ APWR:
|
|||||||
Amount: 200
|
Amount: 200
|
||||||
InfiltrateForPowerOutage:
|
InfiltrateForPowerOutage:
|
||||||
AffectedByPowerOutage:
|
AffectedByPowerOutage:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
ScalePowerWithHealth:
|
ScalePowerWithHealth:
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
@@ -1332,7 +1332,7 @@ BARR:
|
|||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
InfiltrateForSupportPower:
|
InfiltrateForSupportPower:
|
||||||
Proxy: barracks.upgraded
|
Proxy: barracks.upgraded
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||||
|
|
||||||
KENN:
|
KENN:
|
||||||
@@ -1439,7 +1439,7 @@ TENT:
|
|||||||
ProvidesPrerequisite@buildingname:
|
ProvidesPrerequisite@buildingname:
|
||||||
InfiltrateForSupportPower:
|
InfiltrateForSupportPower:
|
||||||
Proxy: barracks.upgraded
|
Proxy: barracks.upgraded
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate
|
||||||
|
|
||||||
FIX:
|
FIX:
|
||||||
|
|||||||
@@ -699,7 +699,7 @@ QTNK:
|
|||||||
VisualBounds: 44,38,0,-4
|
VisualBounds: 44,38,0,-4
|
||||||
MadTank:
|
MadTank:
|
||||||
-EjectOnDeath:
|
-EjectOnDeath:
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, MADTank, Repair
|
TargetTypes: Ground, MADTank, Repair
|
||||||
|
|
||||||
STNK:
|
STNK:
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ DPOD:
|
|||||||
Speed: 149
|
Speed: 149
|
||||||
InitialFacing: 0
|
InitialFacing: 0
|
||||||
LandableTerrainTypes: Clear
|
LandableTerrainTypes: Clear
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 60
|
HP: 60
|
||||||
Armor:
|
Armor:
|
||||||
@@ -47,6 +48,7 @@ DSHP:
|
|||||||
LandableTerrainTypes: Clear
|
LandableTerrainTypes: Clear
|
||||||
TakeoffSound: dropup1.aud
|
TakeoffSound: dropup1.aud
|
||||||
LandingSound: dropdwn1.aud
|
LandingSound: dropdwn1.aud
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
Armor:
|
Armor:
|
||||||
@@ -78,6 +80,7 @@ ORCA:
|
|||||||
RearmBuildings: gahpad, nahpad
|
RearmBuildings: gahpad, nahpad
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 186
|
Speed: 186
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
Armor:
|
Armor:
|
||||||
@@ -117,6 +120,7 @@ ORCAB:
|
|||||||
MaximumPitch: 120
|
MaximumPitch: 120
|
||||||
ROT: 3
|
ROT: 3
|
||||||
Speed: 96
|
Speed: 96
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 260
|
HP: 260
|
||||||
Armor:
|
Armor:
|
||||||
@@ -159,6 +163,7 @@ ORCATRAN:
|
|||||||
LandableTerrainTypes: Clear
|
LandableTerrainTypes: Clear
|
||||||
TakeoffSound: dropup1.aud
|
TakeoffSound: dropup1.aud
|
||||||
LandingSound: dropdwn1.aud
|
LandingSound: dropdwn1.aud
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
Armor:
|
Armor:
|
||||||
@@ -193,6 +198,7 @@ TRNSPORT:
|
|||||||
TakeoffSound: dropup1.aud
|
TakeoffSound: dropup1.aud
|
||||||
LandingSound: dropdwn1.aud
|
LandingSound: dropdwn1.aud
|
||||||
AltitudeVelocity: 64
|
AltitudeVelocity: 64
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 175
|
HP: 175
|
||||||
Armor:
|
Armor:
|
||||||
@@ -224,6 +230,7 @@ SCRIN:
|
|||||||
MaximumPitch: 90
|
MaximumPitch: 90
|
||||||
ROT: 3
|
ROT: 3
|
||||||
Speed: 168
|
Speed: 168
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 280
|
HP: 280
|
||||||
Armor:
|
Armor:
|
||||||
@@ -262,6 +269,7 @@ APACHE:
|
|||||||
RearmBuildings: gahpad, nahpad
|
RearmBuildings: gahpad, nahpad
|
||||||
ROT: 5
|
ROT: 5
|
||||||
Speed: 130
|
Speed: 130
|
||||||
|
AirborneUpgrades: airborne
|
||||||
Health:
|
Health:
|
||||||
HP: 225
|
HP: 225
|
||||||
Armor:
|
Armor:
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ DOGGIE:
|
|||||||
Speed: 113
|
Speed: 113
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: Fiend
|
VoiceSet: Fiend
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: FiendShard
|
Weapon: FiendShard
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Selectable:
|
||||||
Priority: 3
|
Priority: 3
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Building, C4
|
TargetTypes: Ground, Building, C4
|
||||||
Building:
|
Building:
|
||||||
Dimensions: 1,1
|
Dimensions: 1,1
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
NodeTypes: wall
|
NodeTypes: wall
|
||||||
LineBuildNode:
|
LineBuildNode:
|
||||||
Types: wall
|
Types: wall
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Wall, C4
|
TargetTypes: Ground, Wall, C4
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
AutoSelectionSize:
|
AutoSelectionSize:
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
Bounds: 14,23,-1,-9
|
Bounds: 14,23,-1,-9
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: Infantry
|
VoiceSet: Infantry
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Infantry
|
TargetTypes: Ground, Infantry
|
||||||
QuantizeFacingsFromSequence:
|
QuantizeFacingsFromSequence:
|
||||||
Sequence: stand
|
Sequence: stand
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
Palette: pips
|
Palette: pips
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: Vehicle
|
VoiceSet: Vehicle
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle, Repair
|
TargetTypes: Ground, Vehicle, Repair
|
||||||
Repairable:
|
Repairable:
|
||||||
RepairBuildings: gadept
|
RepairBuildings: gadept
|
||||||
@@ -453,9 +453,14 @@
|
|||||||
DrawLineToTarget:
|
DrawLineToTarget:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
UseLocation: yes
|
UseLocation: yes
|
||||||
TargetableAircraft:
|
Targetable@GROUND:
|
||||||
|
TargetTypes: Ground
|
||||||
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMaxEnabledLevel: 0
|
||||||
|
Targetable@AIRBORNE:
|
||||||
TargetTypes: Air
|
TargetTypes: Air
|
||||||
GroundedTargetTypes: Ground
|
UpgradeTypes: airborne
|
||||||
|
UpgradeMinEnabledLevel: 1
|
||||||
Selectable:
|
Selectable:
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
@@ -484,6 +489,7 @@
|
|||||||
LandWhenIdle: no
|
LandWhenIdle: no
|
||||||
CruiseAltitude: 2048
|
CruiseAltitude: 2048
|
||||||
Voice: Move
|
Voice: Move
|
||||||
|
AirborneUpgrades: airborne
|
||||||
|
|
||||||
^Plane:
|
^Plane:
|
||||||
Inherits: ^Aircraft
|
Inherits: ^Aircraft
|
||||||
@@ -493,6 +499,7 @@
|
|||||||
LandWhenIdle: no
|
LandWhenIdle: no
|
||||||
CruiseAltitude: 2560
|
CruiseAltitude: 2560
|
||||||
Voice: Move
|
Voice: Move
|
||||||
|
AirborneUpgrades: airborne
|
||||||
ReturnOnIdle:
|
ReturnOnIdle:
|
||||||
|
|
||||||
^Viceroid:
|
^Viceroid:
|
||||||
@@ -520,7 +527,7 @@
|
|||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 26,26,0,-3
|
Bounds: 26,26,0,-3
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground
|
TargetTypes: Ground
|
||||||
AttackMove:
|
AttackMove:
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -651,7 +658,7 @@
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
Palette: pips
|
Palette: pips
|
||||||
Selectable:
|
Selectable:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, Repair
|
TargetTypes: Ground, Repair
|
||||||
Guardable:
|
Guardable:
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
@@ -681,7 +688,7 @@
|
|||||||
Palette: pips
|
Palette: pips
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: Vehicle
|
VoiceSet: Vehicle
|
||||||
TargetableUnit:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
Passenger:
|
Passenger:
|
||||||
CargoType: Infantry
|
CargoType: Infantry
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ GAPOWR:
|
|||||||
Amount: 100
|
Amount: 100
|
||||||
InfiltrateForPowerOutage:
|
InfiltrateForPowerOutage:
|
||||||
AffectedByPowerOutage:
|
AffectedByPowerOutage:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
ScalePowerWithHealth:
|
ScalePowerWithHealth:
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
@@ -288,7 +288,7 @@ GARADR:
|
|||||||
WithIdleOverlay@DISH:
|
WithIdleOverlay@DISH:
|
||||||
Sequence: idle-dish
|
Sequence: idle-dish
|
||||||
PauseOnLowPower: yes
|
PauseOnLowPower: yes
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, SpyInfiltrate
|
TargetTypes: Ground, C4, SpyInfiltrate
|
||||||
Power:
|
Power:
|
||||||
Amount: -50
|
Amount: -50
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ NAPOWR:
|
|||||||
Amount: 100
|
Amount: 100
|
||||||
InfiltrateForPowerOutage:
|
InfiltrateForPowerOutage:
|
||||||
AffectedByPowerOutage:
|
AffectedByPowerOutage:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
ScalePowerWithHealth:
|
ScalePowerWithHealth:
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
@@ -65,7 +65,7 @@ NAAPWR:
|
|||||||
Amount: 200
|
Amount: 200
|
||||||
InfiltrateForPowerOutage:
|
InfiltrateForPowerOutage:
|
||||||
AffectedByPowerOutage:
|
AffectedByPowerOutage:
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
TargetTypes: Ground, C4, DetonateAttack, SpyInfiltrate
|
||||||
ScalePowerWithHealth:
|
ScalePowerWithHealth:
|
||||||
DisabledOverlay:
|
DisabledOverlay:
|
||||||
@@ -243,7 +243,7 @@ NARADR:
|
|||||||
WithIdleOverlay@DISH:
|
WithIdleOverlay@DISH:
|
||||||
Sequence: idle-dish
|
Sequence: idle-dish
|
||||||
PauseOnLowPower: yes
|
PauseOnLowPower: yes
|
||||||
TargetableBuilding:
|
Targetable:
|
||||||
TargetTypes: Ground, C4, SpyInfiltrate
|
TargetTypes: Ground, C4, SpyInfiltrate
|
||||||
Power:
|
Power:
|
||||||
Amount: -50
|
Amount: -50
|
||||||
|
|||||||
Reference in New Issue
Block a user