Merge pull request #12477 from pchote/conditions-lint
Add a conditions lint rule + other rules fixes.
This commit is contained in:
@@ -46,11 +46,11 @@ namespace OpenRA.Traits
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Field)]
|
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||||
public sealed class UpgradeGrantedReferenceAttribute : Attribute { }
|
public sealed class GrantedConditionReferenceAttribute : Attribute { }
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Field)]
|
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
|
||||||
public sealed class UpgradeUsedReferenceAttribute : Attribute { }
|
public sealed class ConsumedConditionReferenceAttribute : Attribute { }
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Field)]
|
[AttributeUsage(AttributeTargets.Field)]
|
||||||
public sealed class PaletteDefinitionAttribute : Attribute
|
public sealed class PaletteDefinitionAttribute : Attribute
|
||||||
|
|||||||
72
OpenRA.Mods.Common/Lint/CheckConditions.cs
Normal file
72
OpenRA.Mods.Common/Lint/CheckConditions.cs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2016 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, either version 3 of
|
||||||
|
* the License, or (at your option) any later version. For more
|
||||||
|
* information, see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Mods.Common.Traits;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Lint
|
||||||
|
{
|
||||||
|
public class CheckConditions : ILintRulesPass
|
||||||
|
{
|
||||||
|
public void Run(Action<string> emitError, Action<string> emitWarning, Ruleset rules)
|
||||||
|
{
|
||||||
|
foreach (var actorInfo in rules.Actors)
|
||||||
|
{
|
||||||
|
if (actorInfo.Key.StartsWith("^", StringComparison.Ordinal))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var granted = new HashSet<string>();
|
||||||
|
var consumed = new HashSet<string>();
|
||||||
|
|
||||||
|
foreach (var trait in actorInfo.Value.TraitInfos<ITraitInfo>())
|
||||||
|
{
|
||||||
|
var fieldConsumed = trait.GetType().GetFields()
|
||||||
|
.Where(x => x.HasAttribute<ConsumedConditionReferenceAttribute>())
|
||||||
|
.SelectMany(f => LintExts.GetFieldValues(trait, f, emitError));
|
||||||
|
|
||||||
|
var propertyConsumed = trait.GetType().GetProperties()
|
||||||
|
.Where(x => x.HasAttribute<ConsumedConditionReferenceAttribute>())
|
||||||
|
.SelectMany(p => LintExts.GetPropertyValues(trait, p, emitError));
|
||||||
|
|
||||||
|
var fieldGranted = trait.GetType().GetFields()
|
||||||
|
.Where(x => x.HasAttribute<GrantedConditionReferenceAttribute>())
|
||||||
|
.SelectMany(f => LintExts.GetFieldValues(trait, f, emitError));
|
||||||
|
|
||||||
|
var propertyGranted = trait.GetType().GetProperties()
|
||||||
|
.Where(x => x.HasAttribute<GrantedConditionReferenceAttribute>())
|
||||||
|
.SelectMany(f => LintExts.GetPropertyValues(trait, f, emitError));
|
||||||
|
|
||||||
|
foreach (var c in fieldConsumed.Concat(propertyConsumed))
|
||||||
|
if (!string.IsNullOrEmpty(c))
|
||||||
|
consumed.Add(c);
|
||||||
|
|
||||||
|
foreach (var g in fieldGranted.Concat(propertyGranted))
|
||||||
|
if (!string.IsNullOrEmpty(g))
|
||||||
|
granted.Add(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
var unconsumed = granted.Except(consumed);
|
||||||
|
if (unconsumed.Any())
|
||||||
|
emitWarning("Actor type `{0}` grants conditions that are not consumed: {1}".F(actorInfo.Key, unconsumed.JoinWith(", ")));
|
||||||
|
|
||||||
|
var ungranted = consumed.Except(granted);
|
||||||
|
if (ungranted.Any())
|
||||||
|
emitError("Actor type `{0}` consumes conditions that are not granted: {1}".F(actorInfo.Key, ungranted.JoinWith(", ")));
|
||||||
|
|
||||||
|
if ((consumed.Any() || granted.Any()) && actorInfo.Value.TraitInfoOrDefault<UpgradeManagerInfo>() == null)
|
||||||
|
emitError("Actor type `{0}` defines conditions but does not include an UpgradeManager".F(actorInfo.Key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -24,20 +25,37 @@ namespace OpenRA.Mods.Common.Lint
|
|||||||
var type = fieldInfo.FieldType;
|
var type = fieldInfo.FieldType;
|
||||||
if (type == typeof(string))
|
if (type == typeof(string))
|
||||||
return new[] { (string)fieldInfo.GetValue(ruleInfo) };
|
return new[] { (string)fieldInfo.GetValue(ruleInfo) };
|
||||||
if (type == typeof(string[]))
|
|
||||||
return (string[])fieldInfo.GetValue(ruleInfo);
|
if (typeof(IEnumerable<string>).IsAssignableFrom(type))
|
||||||
if (type == typeof(HashSet<string>))
|
return fieldInfo.GetValue(ruleInfo) as IEnumerable<string>;
|
||||||
return (HashSet<string>)fieldInfo.GetValue(ruleInfo);
|
|
||||||
if (type == typeof(BooleanExpression))
|
if (type == typeof(BooleanExpression))
|
||||||
{
|
{
|
||||||
var expr = (BooleanExpression)fieldInfo.GetValue(ruleInfo);
|
var expr = (BooleanExpression)fieldInfo.GetValue(ruleInfo);
|
||||||
return expr != null ? expr.Variables : Enumerable.Empty<string>();
|
return expr != null ? expr.Variables : Enumerable.Empty<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
emitError("Bad type for reference on {0}.{1}. Supported types: string, string[], HashSet<string>, BooleanExpression"
|
throw new InvalidOperationException("Bad type for reference on {0}.{1}. Supported types: string, IEnumerable<string>, BooleanExpression"
|
||||||
.F(ruleInfo.GetType().Name, fieldInfo.Name));
|
.F(ruleInfo.GetType().Name, fieldInfo.Name));
|
||||||
|
}
|
||||||
|
|
||||||
return new string[] { };
|
public static IEnumerable<string> GetPropertyValues(object ruleInfo, PropertyInfo propertyInfo, Action<string> emitError)
|
||||||
|
{
|
||||||
|
var type = propertyInfo.PropertyType;
|
||||||
|
if (type == typeof(string))
|
||||||
|
return new[] { (string)propertyInfo.GetValue(ruleInfo) };
|
||||||
|
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(type))
|
||||||
|
return (IEnumerable<string>)propertyInfo.GetValue(ruleInfo);
|
||||||
|
|
||||||
|
if (type == typeof(BooleanExpression))
|
||||||
|
{
|
||||||
|
var expr = (BooleanExpression)propertyInfo.GetValue(ruleInfo);
|
||||||
|
return expr != null ? expr.Variables : Enumerable.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidOperationException("Bad type for reference on {0}.{1}. Supported types: string, IEnumerable<string>, BooleanExpression"
|
||||||
|
.F(ruleInfo.GetType().Name, propertyInfo.Name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,6 +181,7 @@
|
|||||||
<Compile Include="Lint\CheckDeathTypes.cs" />
|
<Compile Include="Lint\CheckDeathTypes.cs" />
|
||||||
<Compile Include="Lint\CheckRangeLimit.cs" />
|
<Compile Include="Lint\CheckRangeLimit.cs" />
|
||||||
<Compile Include="Lint\CheckVoiceReferences.cs" />
|
<Compile Include="Lint\CheckVoiceReferences.cs" />
|
||||||
|
<Compile Include="Lint\CheckConditions.cs" />
|
||||||
<Compile Include="Lint\CheckTargetHealthRadius.cs" />
|
<Compile Include="Lint\CheckTargetHealthRadius.cs" />
|
||||||
<Compile Include="Lint\LintBuildablePrerequisites.cs" />
|
<Compile Include="Lint\LintBuildablePrerequisites.cs" />
|
||||||
<Compile Include="Lint\LintExts.cs" />
|
<Compile Include="Lint\LintExts.cs" />
|
||||||
|
|||||||
@@ -52,11 +52,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
[VoiceReference] public readonly string Voice = "Action";
|
[VoiceReference] public readonly string Voice = "Action";
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while airborne.")]
|
[Desc("The condition to grant to self while airborne.")]
|
||||||
public readonly string AirborneCondition = null;
|
public readonly string AirborneCondition = null;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while at cruise altitude.")]
|
[Desc("The condition to grant to self while at cruise altitude.")]
|
||||||
public readonly string CruisingCondition = null;
|
public readonly string CruisingCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Used together with ClassicProductionQueue.")]
|
[Desc("Used together with ClassicProductionQueue.")]
|
||||||
public class PrimaryBuildingInfo : ITraitInfo
|
public class PrimaryBuildingInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while this is the primary building.")]
|
[Desc("The condition to grant to self while this is the primary building.")]
|
||||||
public readonly string PrimaryCondition = null;
|
public readonly string PrimaryCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -55,20 +55,22 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Cursor to display when unable to unload the passengers.")]
|
[Desc("Cursor to display when unable to unload the passengers.")]
|
||||||
public readonly string UnloadBlockedCursor = "deploy-blocked";
|
public readonly string UnloadBlockedCursor = "deploy-blocked";
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while waiting for cargo to load.")]
|
[Desc("The condition to grant to self while waiting for cargo to load.")]
|
||||||
public readonly string LoadingCondition = null;
|
public readonly string LoadingCondition = null;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while passengers are loaded.",
|
[Desc("The condition to grant to self while passengers are loaded.",
|
||||||
"Condition can stack with multiple passengers.")]
|
"Condition can stack with multiple passengers.")]
|
||||||
public readonly string LoadedCondition = null;
|
public readonly string LoadedCondition = null;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
|
||||||
[Desc("Conditions to grant when specified actors are loaded inside the transport.",
|
[Desc("Conditions to grant when specified actors are loaded inside the transport.",
|
||||||
"A dictionary of [actor id]: [condition].")]
|
"A dictionary of [actor id]: [condition].")]
|
||||||
public readonly Dictionary<string, string> PassengerConditions = new Dictionary<string, string>();
|
public readonly Dictionary<string, string> PassengerConditions = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
[GrantedConditionReference]
|
||||||
|
public IEnumerable<string> LinterPassengerConditions { get { return PassengerConditions.Values; } }
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new Cargo(init, this); }
|
public object Create(ActorInitializer init) { return new Cargo(init, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Can be carried by actors with the `Carryall` trait.")]
|
[Desc("Can be carried by actors with the `Carryall` trait.")]
|
||||||
public class CarryableInfo : UpgradableTraitInfo
|
public class CarryableInfo : UpgradableTraitInfo
|
||||||
{
|
{
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while a carryall has been reserved.")]
|
[Desc("The condition to grant to self while a carryall has been reserved.")]
|
||||||
public readonly string ReservedCondition = null;
|
public readonly string ReservedCondition = null;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while being carried.")]
|
[Desc("The condition to grant to self while being carried.")]
|
||||||
public readonly string CarriedCondition = null;
|
public readonly string CarriedCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public readonly HashSet<string> CloakTypes = new HashSet<string> { "Cloak" };
|
public readonly HashSet<string> CloakTypes = new HashSet<string> { "Cloak" };
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while cloaked.")]
|
[Desc("The condition to grant to self while cloaked.")]
|
||||||
public readonly string CloakedCondition = null;
|
public readonly string CloakedCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
"Value is a list of the upgrade types to grant")]
|
"Value is a list of the upgrade types to grant")]
|
||||||
public readonly Dictionary<int, string> Conditions = null;
|
public readonly Dictionary<int, string> Conditions = null;
|
||||||
|
|
||||||
|
[GrantedConditionReference]
|
||||||
|
public IEnumerable<string> LinterConditions { get { return Conditions.Values; } }
|
||||||
|
|
||||||
[Desc("Palette for the level up sprite.")]
|
[Desc("Palette for the level up sprite.")]
|
||||||
[PaletteReference] public readonly string LevelUpPalette = "effect";
|
[PaletteReference] public readonly string LevelUpPalette = "effect";
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class GrantConditionOnPrerequisiteInfo : ITraitInfo
|
public class GrantConditionOnPrerequisiteInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant.")]
|
[Desc("The condition to grant.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public readonly int FallRate = 13;
|
public readonly int FallRate = 13;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while parachuting.")]
|
[Desc("The condition to grant to self while parachuting.")]
|
||||||
public readonly string ParachutingCondition = null;
|
public readonly string ParachutingCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -20,10 +20,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public readonly CVec Offset = CVec.Zero;
|
public readonly CVec Offset = CVec.Zero;
|
||||||
|
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
|
||||||
[Desc("Conditions to grant for each accepted plug type.")]
|
[Desc("Conditions to grant for each accepted plug type.")]
|
||||||
public readonly Dictionary<string, string> Conditions = null;
|
public readonly Dictionary<string, string> Conditions = null;
|
||||||
|
|
||||||
|
[GrantedConditionReference]
|
||||||
|
public IEnumerable<string> LinterConditions { get { return Conditions.Values; } }
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new Pluggable(init, this); }
|
public object Create(ActorInitializer init) { return new Pluggable(init, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
"Externally granted conditions that aren't explicitly whitelisted will be silently ignored.")]
|
"Externally granted conditions that aren't explicitly whitelisted will be silently ignored.")]
|
||||||
public class ExternalConditionsInfo : TraitInfo<ExternalConditions>
|
public class ExternalConditionsInfo : TraitInfo<ExternalConditions>
|
||||||
{
|
{
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
public readonly string[] Conditions = { };
|
public readonly string[] Conditions = { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
class GrantConditionInfo : UpgradableTraitInfo
|
class GrantConditionInfo : UpgradableTraitInfo
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("Condition to grant.")]
|
[Desc("Condition to grant.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class GrantConditionOnDamageStateInfo : ITraitInfo, Requires<HealthInfo>
|
public class GrantConditionOnDamageStateInfo : ITraitInfo, Requires<HealthInfo>
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("Condition to grant.")]
|
[Desc("Condition to grant.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
public class GrantConditionOnDeployInfo : ITraitInfo
|
public class GrantConditionOnDeployInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant while the actor is undeployed.")]
|
[Desc("The condition to grant while the actor is undeployed.")]
|
||||||
public readonly string UndeployedCondition = null;
|
public readonly string UndeployedCondition = null;
|
||||||
|
|
||||||
[UpgradeGrantedReference, FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant after deploying and revoke before undeploying.")]
|
[Desc("The condition to grant after deploying and revoke before undeploying.")]
|
||||||
public readonly string DeployedCondition = null;
|
public readonly string DeployedCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class GrantConditionOnMovementInfo : UpgradableTraitInfo, Requires<IMoveInfo>
|
public class GrantConditionOnMovementInfo : UpgradableTraitInfo, Requires<IMoveInfo>
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("Condition to grant.")]
|
[Desc("Condition to grant.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class GrantConditionOnTerrainInfo : ITraitInfo
|
public class GrantConditionOnTerrainInfo : ITraitInfo
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("Condition to grant.")]
|
[Desc("Condition to grant.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public class StackedConditionInfo : TraitInfo<StackedCondition>
|
public class StackedConditionInfo : TraitInfo<StackedCondition>
|
||||||
{
|
{
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeUsedReference]
|
[ConsumedConditionReference]
|
||||||
[Desc("Condition to monitor.")]
|
[Desc("Condition to monitor.")]
|
||||||
public readonly string Condition = null;
|
public readonly string Condition = null;
|
||||||
|
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("Conditions to grant when the monitored condition is granted multiple times.",
|
[Desc("Conditions to grant when the monitored condition is granted multiple times.",
|
||||||
"The first entry is activated at 2x grants, second entry at 3x grants, and so on.")]
|
"The first entry is activated at 2x grants, second entry at 3x grants, and so on.")]
|
||||||
public readonly string[] StackedConditions = { };
|
public readonly string[] StackedConditions = { };
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
static readonly IReadOnlyDictionary<string, bool> NoConditions = new ReadOnlyDictionary<string, bool>(new Dictionary<string, bool>());
|
static readonly IReadOnlyDictionary<string, bool> NoConditions = new ReadOnlyDictionary<string, bool>(new Dictionary<string, bool>());
|
||||||
|
|
||||||
[UpgradeUsedReference]
|
[ConsumedConditionReference]
|
||||||
[Desc("Boolean expression defining the condition to enable this trait.")]
|
[Desc("Boolean expression defining the condition to enable this trait.")]
|
||||||
public readonly BooleanExpression RequiresCondition = null;
|
public readonly BooleanExpression RequiresCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
[Desc("The number of ticks it takes to get in place under the target to attack.")]
|
[Desc("The number of ticks it takes to get in place under the target to attack.")]
|
||||||
public readonly int AttackDelay = 30;
|
public readonly int AttackDelay = 30;
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while attacking.")]
|
[Desc("The condition to grant to self while attacking.")]
|
||||||
public readonly string AttackingCondition = null;
|
public readonly string AttackingCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA.Traits
|
|||||||
{
|
{
|
||||||
[VoiceReference] public readonly string Voice = "Action";
|
[VoiceReference] public readonly string Voice = "Action";
|
||||||
|
|
||||||
[UpgradeGrantedReference]
|
[GrantedConditionReference]
|
||||||
[Desc("The condition to grant to self while disguised.")]
|
[Desc("The condition to grant to self while disguised.")]
|
||||||
public readonly string DisguisedCondition = null;
|
public readonly string DisguisedCondition = null;
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ TRAN:
|
|||||||
|
|
||||||
HELI:
|
HELI:
|
||||||
Inherits: ^Helicopter
|
Inherits: ^Helicopter
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1200
|
Cost: 1200
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -111,6 +112,7 @@ HELI:
|
|||||||
|
|
||||||
ORCA:
|
ORCA:
|
||||||
Inherits: ^Helicopter
|
Inherits: ^Helicopter
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1200
|
Cost: 1200
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -167,7 +169,6 @@ C17:
|
|||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 326
|
Speed: 326
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
AirborneCondition: airborne
|
|
||||||
MaximumPitch: 36
|
MaximumPitch: 36
|
||||||
Health:
|
Health:
|
||||||
HP: 25
|
HP: 25
|
||||||
@@ -206,7 +207,6 @@ A10:
|
|||||||
TurnSpeed: 4
|
TurnSpeed: 4
|
||||||
Speed: 373
|
Speed: 373
|
||||||
Repulsable: False
|
Repulsable: False
|
||||||
AirborneCondition: airborne
|
|
||||||
Health:
|
Health:
|
||||||
HP: 150
|
HP: 150
|
||||||
Armor:
|
Armor:
|
||||||
|
|||||||
@@ -116,9 +116,18 @@
|
|||||||
RequiresCondition: rank-elite
|
RequiresCondition: rank-elite
|
||||||
ZOffset: 256
|
ZOffset: 256
|
||||||
|
|
||||||
|
^AcceptsCloakCrate:
|
||||||
|
Cloak:
|
||||||
|
InitialDelay: 15
|
||||||
|
CloakDelay: 90
|
||||||
|
CloakSound: trans1.aud
|
||||||
|
UncloakSound: trans1.aud
|
||||||
|
RequiresCondition: cloak
|
||||||
|
ExternalConditions@CLOAK:
|
||||||
|
Conditions: cloak
|
||||||
|
|
||||||
^Vehicle:
|
^Vehicle:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
Inherits@2: ^GainsExperience
|
|
||||||
Inherits@3: ^SpriteActor
|
Inherits@3: ^SpriteActor
|
||||||
Huntable:
|
Huntable:
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -153,14 +162,6 @@
|
|||||||
Guardable:
|
Guardable:
|
||||||
Tooltip:
|
Tooltip:
|
||||||
GenericName: Vehicle
|
GenericName: Vehicle
|
||||||
Cloak:
|
|
||||||
InitialDelay: 15
|
|
||||||
CloakDelay: 90
|
|
||||||
CloakSound: trans1.aud
|
|
||||||
UncloakSound: trans1.aud
|
|
||||||
RequiresCondition: cloak
|
|
||||||
ExternalConditions@CLOAK:
|
|
||||||
Conditions: cloak
|
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: VehicleVoice
|
VoiceSet: VehicleVoice
|
||||||
@@ -184,7 +185,6 @@
|
|||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
Inherits@2: ^GainsExperience
|
|
||||||
Inherits@3: ^SpriteActor
|
Inherits@3: ^SpriteActor
|
||||||
Huntable:
|
Huntable:
|
||||||
AppearsOnRadar:
|
AppearsOnRadar:
|
||||||
@@ -231,7 +231,6 @@
|
|||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
Inherits@2: ^GainsExperience
|
|
||||||
Inherits@3: ^SpriteActor
|
Inherits@3: ^SpriteActor
|
||||||
Huntable:
|
Huntable:
|
||||||
Health:
|
Health:
|
||||||
@@ -517,7 +516,6 @@
|
|||||||
|
|
||||||
^Ship:
|
^Ship:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
Inherits@2: ^GainsExperience
|
|
||||||
Inherits@3: ^SpriteActor
|
Inherits@3: ^SpriteActor
|
||||||
Huntable:
|
Huntable:
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -839,7 +837,6 @@
|
|||||||
Offset: 43, 128, 0
|
Offset: 43, 128, 0
|
||||||
ZOffset: -129
|
ZOffset: -129
|
||||||
Aircraft:
|
Aircraft:
|
||||||
AirborneCondition: airborne
|
|
||||||
CanHover: True
|
CanHover: True
|
||||||
FallsToEarth:
|
FallsToEarth:
|
||||||
Spins: True
|
Spins: True
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
E1:
|
E1:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 100
|
Cost: 100
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -21,6 +22,7 @@ E1:
|
|||||||
|
|
||||||
E2:
|
E2:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 160
|
Cost: 160
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -48,6 +50,7 @@ E2:
|
|||||||
|
|
||||||
E3:
|
E3:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 300
|
Cost: 300
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -72,6 +75,7 @@ E3:
|
|||||||
|
|
||||||
E4:
|
E4:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 200
|
Cost: 200
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -97,6 +101,7 @@ E4:
|
|||||||
|
|
||||||
E5:
|
E5:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 300
|
Cost: 300
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -148,10 +153,10 @@ E6:
|
|||||||
CaptureTypes: building, husk
|
CaptureTypes: building, husk
|
||||||
PlayerExperience: 50
|
PlayerExperience: 50
|
||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
-GainsExperience:
|
|
||||||
|
|
||||||
RMBO:
|
RMBO:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
BOAT:
|
BOAT:
|
||||||
Inherits: ^Ship
|
Inherits: ^Ship
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 300
|
Cost: 300
|
||||||
Tooltip:
|
Tooltip:
|
||||||
|
|||||||
@@ -31,13 +31,12 @@ MCV:
|
|||||||
BaseBuilding:
|
BaseBuilding:
|
||||||
SpawnActorOnDeath:
|
SpawnActorOnDeath:
|
||||||
Actor: MCV.Husk
|
Actor: MCV.Husk
|
||||||
-GainsExperience:
|
|
||||||
-Cloak:
|
|
||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
VisualBounds: 36,36
|
VisualBounds: 36,36
|
||||||
|
|
||||||
HARV:
|
HARV:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -68,7 +67,6 @@ HARV:
|
|||||||
Range: 4c0
|
Range: 4c0
|
||||||
SpawnActorOnDeath:
|
SpawnActorOnDeath:
|
||||||
Actor: HARV.Husk
|
Actor: HARV.Husk
|
||||||
-GainsExperience:
|
|
||||||
WithHarvestAnimation:
|
WithHarvestAnimation:
|
||||||
WithDockingAnimation:
|
WithDockingAnimation:
|
||||||
Explodes:
|
Explodes:
|
||||||
@@ -78,6 +76,8 @@ HARV:
|
|||||||
|
|
||||||
APC:
|
APC:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -126,6 +126,8 @@ APC:
|
|||||||
|
|
||||||
ARTY:
|
ARTY:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -161,6 +163,8 @@ ARTY:
|
|||||||
|
|
||||||
FTNK:
|
FTNK:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -194,6 +198,8 @@ FTNK:
|
|||||||
|
|
||||||
BGGY:
|
BGGY:
|
||||||
Inherits: ^Vehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 300
|
Cost: 300
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -228,6 +234,8 @@ BGGY:
|
|||||||
|
|
||||||
BIKE:
|
BIKE:
|
||||||
Inherits: ^Vehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 500
|
Cost: 500
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -264,6 +272,8 @@ BIKE:
|
|||||||
|
|
||||||
JEEP:
|
JEEP:
|
||||||
Inherits: ^Vehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 400
|
Cost: 400
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -298,6 +308,8 @@ JEEP:
|
|||||||
|
|
||||||
LTNK:
|
LTNK:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 700
|
Cost: 700
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -333,6 +345,8 @@ LTNK:
|
|||||||
|
|
||||||
MTNK:
|
MTNK:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 800
|
Cost: 800
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -369,6 +383,8 @@ MTNK:
|
|||||||
|
|
||||||
HTNK:
|
HTNK:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1500
|
Cost: 1500
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -418,6 +434,8 @@ HTNK:
|
|||||||
|
|
||||||
MSAM:
|
MSAM:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -454,6 +472,8 @@ MSAM:
|
|||||||
|
|
||||||
MLRS:
|
MLRS:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
|
Inherits@CLOAK: ^AcceptsCloakCrate
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -496,6 +516,7 @@ MLRS:
|
|||||||
|
|
||||||
STNK:
|
STNK:
|
||||||
Inherits: ^Vehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 900
|
Cost: 900
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -516,7 +537,6 @@ STNK:
|
|||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 7c0
|
Range: 7c0
|
||||||
Cloak:
|
Cloak:
|
||||||
-RequiresCondition:
|
|
||||||
InitialDelay: 90
|
InitialDelay: 90
|
||||||
CloakDelay: 90
|
CloakDelay: 90
|
||||||
CloakSound: trans1.aud
|
CloakSound: trans1.aud
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ World:
|
|||||||
Type: LightningStrike
|
Type: LightningStrike
|
||||||
LuaScript:
|
LuaScript:
|
||||||
Scripts: fort-lonestar.lua, fort-lonestar-AI.lua
|
Scripts: fort-lonestar.lua, fort-lonestar-AI.lua
|
||||||
ExternalConditions:
|
|
||||||
Conditions: invulnerability
|
|
||||||
MapBuildRadius:
|
MapBuildRadius:
|
||||||
AllyBuildRadiusLocked: True
|
AllyBuildRadiusLocked: True
|
||||||
AllyBuildRadiusEnabled: True
|
AllyBuildRadiusEnabled: True
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ V05:
|
|||||||
Actor: healcrate
|
Actor: healcrate
|
||||||
|
|
||||||
DOG:
|
DOG:
|
||||||
|
# HACK: Disable experience without killing the linter
|
||||||
-GainsExperience:
|
-GainsExperience:
|
||||||
|
ExternalConditions@EXPERIENCE:
|
||||||
|
Conditions: rank-veteran-1, rank-veteran-2, rank-veteran-3, rank-elite
|
||||||
|
|
||||||
SPY:
|
SPY:
|
||||||
Mobile:
|
Mobile:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
BADR:
|
BADR:
|
||||||
Inherits: ^Plane
|
Inherits: ^NeutralPlane
|
||||||
ParaDrop:
|
ParaDrop:
|
||||||
DropRange: 4c0
|
DropRange: 4c0
|
||||||
Health:
|
Health:
|
||||||
@@ -18,7 +18,6 @@ BADR:
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
RenderSelectionBars: False
|
RenderSelectionBars: False
|
||||||
-Voiced:
|
-Voiced:
|
||||||
-GainsExperience:
|
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Badger
|
Name: Badger
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
@@ -39,7 +38,7 @@ BADR:
|
|||||||
Experience: 1000
|
Experience: 1000
|
||||||
|
|
||||||
BADR.Bomber:
|
BADR.Bomber:
|
||||||
Inherits: ^Plane
|
Inherits: ^NeutralPlane
|
||||||
AttackBomber:
|
AttackBomber:
|
||||||
Armament:
|
Armament:
|
||||||
Weapon: ParaBomb
|
Weapon: ParaBomb
|
||||||
@@ -59,7 +58,6 @@ BADR.Bomber:
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
RenderSelectionBars: False
|
RenderSelectionBars: False
|
||||||
-Voiced:
|
-Voiced:
|
||||||
-GainsExperience:
|
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Badger
|
Name: Badger
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
@@ -358,7 +356,7 @@ HIND:
|
|||||||
Prerequisites: aircraft.upgraded
|
Prerequisites: aircraft.upgraded
|
||||||
|
|
||||||
U2:
|
U2:
|
||||||
Inherits: ^Plane
|
Inherits: ^NeutralPlane
|
||||||
Health:
|
Health:
|
||||||
HP: 2000
|
HP: 2000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -377,7 +375,6 @@ U2:
|
|||||||
RenderSelectionBars: False
|
RenderSelectionBars: False
|
||||||
-Voiced:
|
-Voiced:
|
||||||
-Targetable@AIRBORNE:
|
-Targetable@AIRBORNE:
|
||||||
-GainsExperience:
|
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
Offset: -725,683,0
|
Offset: -725,683,0
|
||||||
Contrail@2:
|
Contrail@2:
|
||||||
|
|||||||
@@ -410,9 +410,8 @@
|
|||||||
VoiceSet: VehicleVoice
|
VoiceSet: VehicleVoice
|
||||||
WithFacingSpriteBody:
|
WithFacingSpriteBody:
|
||||||
|
|
||||||
^Plane:
|
^NeutralPlane:
|
||||||
Inherits@1: ^ExistsInWorld
|
Inherits@1: ^ExistsInWorld
|
||||||
Inherits@2: ^GainsExperience
|
|
||||||
Inherits@3: ^IronCurtainable
|
Inherits@3: ^IronCurtainable
|
||||||
Inherits@4: ^SpriteActor
|
Inherits@4: ^SpriteActor
|
||||||
Huntable:
|
Huntable:
|
||||||
@@ -428,7 +427,6 @@
|
|||||||
RepairBuildings: fix
|
RepairBuildings: fix
|
||||||
RearmBuildings: afld
|
RearmBuildings: afld
|
||||||
AirborneCondition: airborne
|
AirborneCondition: airborne
|
||||||
CruisingCondition: cruising
|
|
||||||
Targetable@GROUND:
|
Targetable@GROUND:
|
||||||
TargetTypes: Ground, Repair, Vehicle
|
TargetTypes: Ground, Repair, Vehicle
|
||||||
RequiresCondition: !airborne
|
RequiresCondition: !airborne
|
||||||
@@ -463,6 +461,10 @@
|
|||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: GenericVoice
|
VoiceSet: GenericVoice
|
||||||
|
|
||||||
|
^Plane:
|
||||||
|
Inherits: ^NeutralPlane
|
||||||
|
Inherits@2: ^GainsExperience
|
||||||
|
|
||||||
^Helicopter:
|
^Helicopter:
|
||||||
Inherits: ^Plane
|
Inherits: ^Plane
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -470,6 +472,7 @@
|
|||||||
Aircraft:
|
Aircraft:
|
||||||
RearmBuildings: hpad
|
RearmBuildings: hpad
|
||||||
CanHover: True
|
CanHover: True
|
||||||
|
CruisingCondition: cruising
|
||||||
GpsDot:
|
GpsDot:
|
||||||
String: Helicopter
|
String: Helicopter
|
||||||
Hovers@CRUISING:
|
Hovers@CRUISING:
|
||||||
@@ -798,8 +801,6 @@
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
GenericName: Destroyed Plane
|
GenericName: Destroyed Plane
|
||||||
Aircraft:
|
Aircraft:
|
||||||
AirborneCondition: airborne
|
|
||||||
CruisingCondition: cruising
|
|
||||||
FallsToEarth:
|
FallsToEarth:
|
||||||
Spins: False
|
Spins: False
|
||||||
Moves: True
|
Moves: True
|
||||||
@@ -813,8 +814,6 @@
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
GenericName: Destroyed Helicopter
|
GenericName: Destroyed Helicopter
|
||||||
Aircraft:
|
Aircraft:
|
||||||
AirborneCondition: airborne
|
|
||||||
CruisingCondition: cruising
|
|
||||||
CanHover: True
|
CanHover: True
|
||||||
FallsToEarth:
|
FallsToEarth:
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ DSHP:
|
|||||||
|
|
||||||
ORCA:
|
ORCA:
|
||||||
Inherits: ^Helicopter
|
Inherits: ^Helicopter
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -104,7 +105,8 @@ ORCA:
|
|||||||
Actor: ORCA.Husk
|
Actor: ORCA.Husk
|
||||||
|
|
||||||
ORCAB:
|
ORCAB:
|
||||||
Inherits: ^Plane
|
Inherits: ^Aircraft
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1600
|
Cost: 1600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -121,10 +123,11 @@ ORCAB:
|
|||||||
MaximumPitch: 120
|
MaximumPitch: 120
|
||||||
TurnSpeed: 3
|
TurnSpeed: 3
|
||||||
Speed: 96
|
Speed: 96
|
||||||
AirborneCondition: airborne
|
CruisingCondition: cruising
|
||||||
MoveIntoShroud: false
|
MoveIntoShroud: false
|
||||||
TakeoffSound: orcaup1.aud
|
TakeoffSound: orcaup1.aud
|
||||||
LandingSound: orcadwn1.aud
|
LandingSound: orcadwn1.aud
|
||||||
|
ReturnOnIdle:
|
||||||
Health:
|
Health:
|
||||||
HP: 260
|
HP: 260
|
||||||
Armor:
|
Armor:
|
||||||
@@ -225,7 +228,8 @@ TRNSPORT:
|
|||||||
Actor: TRNSPORT.Husk
|
Actor: TRNSPORT.Husk
|
||||||
|
|
||||||
SCRIN:
|
SCRIN:
|
||||||
Inherits: ^Plane
|
Inherits: ^Aircraft
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1500
|
Cost: 1500
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -240,6 +244,7 @@ SCRIN:
|
|||||||
Voiced:
|
Voiced:
|
||||||
VoiceSet: Scrin
|
VoiceSet: Scrin
|
||||||
Aircraft:
|
Aircraft:
|
||||||
|
CruiseAltitude: 2560
|
||||||
MaximumPitch: 90
|
MaximumPitch: 90
|
||||||
TurnSpeed: 3
|
TurnSpeed: 3
|
||||||
Speed: 168
|
Speed: 168
|
||||||
@@ -247,6 +252,7 @@ SCRIN:
|
|||||||
MoveIntoShroud: false
|
MoveIntoShroud: false
|
||||||
TakeoffSound: dropup1.aud
|
TakeoffSound: dropup1.aud
|
||||||
LandingSound: dropdwn1.aud
|
LandingSound: dropdwn1.aud
|
||||||
|
ReturnOnIdle:
|
||||||
Health:
|
Health:
|
||||||
HP: 280
|
HP: 280
|
||||||
Armor:
|
Armor:
|
||||||
@@ -273,6 +279,7 @@ SCRIN:
|
|||||||
|
|
||||||
APACHE:
|
APACHE:
|
||||||
Inherits: ^Helicopter
|
Inherits: ^Helicopter
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -319,7 +326,6 @@ APACHE:
|
|||||||
Actor: APACHE.Husk
|
Actor: APACHE.Husk
|
||||||
|
|
||||||
HUNTER:
|
HUNTER:
|
||||||
Inherits@1: ^GainsExperience
|
|
||||||
Inherits@2: ^ExistsInWorld
|
Inherits@2: ^ExistsInWorld
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1000
|
Cost: 1000
|
||||||
@@ -338,6 +344,7 @@ HUNTER:
|
|||||||
Speed: 355
|
Speed: 355
|
||||||
CruiseAltitude: 256
|
CruiseAltitude: 256
|
||||||
CanHover: True
|
CanHover: True
|
||||||
|
CruisingCondition: cruising
|
||||||
Targetable:
|
Targetable:
|
||||||
TargetTypes: Ground, Vehicle
|
TargetTypes: Ground, Vehicle
|
||||||
HiddenUnderFog:
|
HiddenUnderFog:
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ WEEDGUY:
|
|||||||
UMAGON:
|
UMAGON:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
Inherits@2: ^HealsOnTiberium
|
Inherits@2: ^HealsOnTiberium
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 400
|
Cost: 400
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -82,6 +83,7 @@ CHAMSPY:
|
|||||||
MUTANT:
|
MUTANT:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
Inherits@2: ^HealsOnTiberium
|
Inherits@2: ^HealsOnTiberium
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 100
|
Cost: 100
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -106,6 +108,7 @@ MUTANT:
|
|||||||
MWMN:
|
MWMN:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
Inherits@2: ^HealsOnTiberium
|
Inherits@2: ^HealsOnTiberium
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 100
|
Cost: 100
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -130,6 +133,7 @@ MWMN:
|
|||||||
MUTANT3:
|
MUTANT3:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
Inherits@2: ^HealsOnTiberium
|
Inherits@2: ^HealsOnTiberium
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 100
|
Cost: 100
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -210,6 +214,7 @@ DOGGIE:
|
|||||||
Inherits@1: ^Infantry
|
Inherits@1: ^Infantry
|
||||||
Inherits@2: ^RegularInfantryDeath
|
Inherits@2: ^RegularInfantryDeath
|
||||||
Inherits@3: ^HealsOnTiberium
|
Inherits@3: ^HealsOnTiberium
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Tiberian Fiend
|
Name: Tiberian Fiend
|
||||||
Health:
|
Health:
|
||||||
@@ -258,6 +263,7 @@ VISC_SML:
|
|||||||
|
|
||||||
VISC_LRG:
|
VISC_LRG:
|
||||||
Inherits: ^Visceroid
|
Inherits: ^Visceroid
|
||||||
|
Inherits@CRATESTATS: ^CrateStatModifiers
|
||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Adult Visceroid
|
Name: Adult Visceroid
|
||||||
Health:
|
Health:
|
||||||
|
|||||||
@@ -1264,6 +1264,7 @@ GALITE:
|
|||||||
SelectionDecorations:
|
SelectionDecorations:
|
||||||
VisualBounds: 25, 35, 0, -12
|
VisualBounds: 25, 35, 0, -12
|
||||||
-Cloak@EXTERNALCLOAK:
|
-Cloak@EXTERNALCLOAK:
|
||||||
|
-ExternalConditions@EXTERNALCLOAK:
|
||||||
|
|
||||||
TSTLAMP:
|
TSTLAMP:
|
||||||
Inherits: GALITE
|
Inherits: GALITE
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
4TNK:
|
4TNK:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1700
|
Cost: 1700
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -90,6 +92,7 @@ BUS:
|
|||||||
Mobile:
|
Mobile:
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 113
|
Speed: 113
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Armor:
|
Armor:
|
||||||
@@ -114,6 +117,7 @@ PICK:
|
|||||||
Mobile:
|
Mobile:
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 113
|
Speed: 113
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Armor:
|
Armor:
|
||||||
@@ -138,6 +142,7 @@ CAR:
|
|||||||
Mobile:
|
Mobile:
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 113
|
Speed: 113
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Armor:
|
Armor:
|
||||||
@@ -162,6 +167,7 @@ WINI:
|
|||||||
Mobile:
|
Mobile:
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 113
|
Speed: 113
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
Armor:
|
Armor:
|
||||||
|
|||||||
@@ -21,22 +21,22 @@
|
|||||||
500: rank-veteran
|
500: rank-veteran
|
||||||
1000: rank-elite
|
1000: rank-elite
|
||||||
FirepowerMultiplier@VETERAN:
|
FirepowerMultiplier@VETERAN:
|
||||||
RequiresCondition: (rank-veteran && !rank-elite) || crate-firepower
|
RequiresCondition: rank-veteran && !rank-elite
|
||||||
Modifier: 110
|
Modifier: 110
|
||||||
FirepowerMultiplier@ELITE:
|
FirepowerMultiplier@ELITE:
|
||||||
RequiresCondition: rank-elite || (rank-veteran && crate-firepower)
|
RequiresCondition: rank-elite
|
||||||
Modifier: 130
|
Modifier: 130
|
||||||
DamageMultiplier@VETERAN:
|
DamageMultiplier@VETERAN:
|
||||||
RequiresCondition: (rank-veteran && !rank-elite) || crate-damage
|
RequiresCondition: rank-veteran && !rank-elite
|
||||||
Modifier: 90
|
Modifier: 90
|
||||||
DamageMultiplier@ELITE:
|
DamageMultiplier@ELITE:
|
||||||
RequiresCondition: rank-elite || (rank-veteran && crate-damage)
|
RequiresCondition: rank-elite
|
||||||
Modifier: 75
|
Modifier: 75
|
||||||
SpeedMultiplier@VETERAN:
|
SpeedMultiplier@VETERAN:
|
||||||
RequiresCondition: (rank-veteran && !rank-elite) || crate-speed
|
RequiresCondition: rank-veteran && !rank-elite
|
||||||
Modifier: 120
|
Modifier: 120
|
||||||
SpeedMultiplier@ELITE:
|
SpeedMultiplier@ELITE:
|
||||||
RequiresCondition: rank-elite || (rank-veteran && crate-speed)
|
RequiresCondition: rank-elite
|
||||||
Modifier: 140
|
Modifier: 140
|
||||||
ReloadDelayMultiplier@VETERAN:
|
ReloadDelayMultiplier@VETERAN:
|
||||||
RequiresCondition: rank-veteran && !rank-elite
|
RequiresCondition: rank-veteran && !rank-elite
|
||||||
@@ -64,8 +64,19 @@
|
|||||||
ReferencePoint: Bottom, Right
|
ReferencePoint: Bottom, Right
|
||||||
RequiresCondition: rank-elite
|
RequiresCondition: rank-elite
|
||||||
ZOffset: 256
|
ZOffset: 256
|
||||||
|
|
||||||
|
^CrateStatModifiers:
|
||||||
|
FirepowerMultiplier@CRATES:
|
||||||
|
RequiresCondition: crate-firepower
|
||||||
|
Modifier: 200
|
||||||
|
DamageMultiplier@CRATES:
|
||||||
|
RequiresCondition: crate-damage
|
||||||
|
Modifier: 50
|
||||||
|
SpeedMultiplier@CRATES:
|
||||||
|
RequiresCondition: crate-speed
|
||||||
|
Modifier: 170
|
||||||
ExternalConditions@CRATES:
|
ExternalConditions@CRATES:
|
||||||
Conditions: crate-firepower, crate-damage, crate-speed, crate-cloak
|
Conditions: crate-firepower, crate-damage, crate-speed
|
||||||
|
|
||||||
^EmpDisable:
|
^EmpDisable:
|
||||||
UpgradeOverlay@EMPDISABLE:
|
UpgradeOverlay@EMPDISABLE:
|
||||||
@@ -88,11 +99,6 @@
|
|||||||
ExternalConditions@EMPDISABLE:
|
ExternalConditions@EMPDISABLE:
|
||||||
Conditions: empdisable
|
Conditions: empdisable
|
||||||
|
|
||||||
^EmpDisableMobile:
|
|
||||||
Inherits: ^EmpDisable
|
|
||||||
Mobile:
|
|
||||||
RequiresCondition: !empdisable && !deployed && !loading
|
|
||||||
|
|
||||||
^Cloakable:
|
^Cloakable:
|
||||||
Cloak@EXTERNALCLOAK:
|
Cloak@EXTERNALCLOAK:
|
||||||
RequiresCondition: cloakgenerator || crate-cloak
|
RequiresCondition: cloakgenerator || crate-cloak
|
||||||
@@ -257,10 +263,10 @@
|
|||||||
RenderSprites:
|
RenderSprites:
|
||||||
|
|
||||||
^Infantry:
|
^Infantry:
|
||||||
Inherits@1: ^GainsExperience
|
|
||||||
Inherits@2: ^ExistsInWorld
|
Inherits@2: ^ExistsInWorld
|
||||||
Inherits@3: ^SpriteActor
|
Inherits@3: ^SpriteActor
|
||||||
Inherits@4: ^Cloakable
|
Inherits@4: ^Cloakable
|
||||||
|
Inherits@CRATESTATS: ^CrateStatModifiers
|
||||||
Huntable:
|
Huntable:
|
||||||
DrawLineToTarget:
|
DrawLineToTarget:
|
||||||
Health:
|
Health:
|
||||||
@@ -401,7 +407,7 @@
|
|||||||
|
|
||||||
^Cyborg:
|
^Cyborg:
|
||||||
Inherits@1: ^Infantry
|
Inherits@1: ^Infantry
|
||||||
Inherits@2: ^EmpDisableMobile
|
Inherits@2: ^EmpDisable
|
||||||
Inherits@3: ^HealsOnTiberium
|
Inherits@3: ^HealsOnTiberium
|
||||||
ExplosionOnDamageTransition:
|
ExplosionOnDamageTransition:
|
||||||
Weapon: CyborgExplode
|
Weapon: CyborgExplode
|
||||||
@@ -425,6 +431,8 @@
|
|||||||
SpeedMultiplier@CRITICAL:
|
SpeedMultiplier@CRITICAL:
|
||||||
RequiresCondition: criticalspeed
|
RequiresCondition: criticalspeed
|
||||||
Modifier: 50
|
Modifier: 50
|
||||||
|
Mobile:
|
||||||
|
RequiresCondition: !empdisable
|
||||||
|
|
||||||
^CivilianInfantry:
|
^CivilianInfantry:
|
||||||
Inherits@1: ^Infantry
|
Inherits@1: ^Infantry
|
||||||
@@ -439,11 +447,11 @@
|
|||||||
MaxMoveDelay: 750
|
MaxMoveDelay: 750
|
||||||
|
|
||||||
^Vehicle:
|
^Vehicle:
|
||||||
Inherits@1: ^GainsExperience
|
|
||||||
Inherits@2: ^ExistsInWorld
|
Inherits@2: ^ExistsInWorld
|
||||||
Inherits@3: ^EmpDisableMobile
|
Inherits@3: ^EmpDisable
|
||||||
Inherits@4: ^Cloakable
|
Inherits@4: ^Cloakable
|
||||||
Inherits@5: ^DamagedByVeins
|
Inherits@5: ^DamagedByVeins
|
||||||
|
Inherits@CRATESTATS: ^CrateStatModifiers
|
||||||
Huntable:
|
Huntable:
|
||||||
DrawLineToTarget:
|
DrawLineToTarget:
|
||||||
Mobile:
|
Mobile:
|
||||||
@@ -461,6 +469,7 @@
|
|||||||
PathingCost: 90
|
PathingCost: 90
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Voice: Move
|
Voice: Move
|
||||||
|
RequiresCondition: !empdisable
|
||||||
Selectable:
|
Selectable:
|
||||||
Bounds: 40,24
|
Bounds: 40,24
|
||||||
WithTextControlGroupDecoration:
|
WithTextControlGroupDecoration:
|
||||||
@@ -527,22 +536,15 @@
|
|||||||
BlueTiberium: 70
|
BlueTiberium: 70
|
||||||
Veins: 70
|
Veins: 70
|
||||||
|
|
||||||
^VoxelVehicle:
|
^VoxelActor:
|
||||||
Inherits: ^Vehicle
|
|
||||||
BodyOrientation:
|
|
||||||
QuantizedFacings: 0
|
|
||||||
RenderVoxels:
|
|
||||||
WithVoxelBody:
|
|
||||||
|
|
||||||
^VoxelTank:
|
|
||||||
Inherits: ^Tank
|
|
||||||
BodyOrientation:
|
BodyOrientation:
|
||||||
QuantizedFacings: 0
|
QuantizedFacings: 0
|
||||||
RenderVoxels:
|
RenderVoxels:
|
||||||
WithVoxelBody:
|
WithVoxelBody:
|
||||||
|
|
||||||
^CivilianVoxelVehicle:
|
^CivilianVoxelVehicle:
|
||||||
Inherits: ^VoxelVehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits: ^VoxelActor
|
||||||
-MustBeDestroyed:
|
-MustBeDestroyed:
|
||||||
|
|
||||||
^CivilianVoxelCrusher:
|
^CivilianVoxelCrusher:
|
||||||
@@ -551,7 +553,6 @@
|
|||||||
Crushes: wall, crate, infantry
|
Crushes: wall, crate, infantry
|
||||||
|
|
||||||
^Aircraft:
|
^Aircraft:
|
||||||
Inherits@1: ^GainsExperience
|
|
||||||
Inherits@2: ^ExistsInWorld
|
Inherits@2: ^ExistsInWorld
|
||||||
Inherits@3: ^Cloakable
|
Inherits@3: ^Cloakable
|
||||||
Huntable:
|
Huntable:
|
||||||
@@ -570,7 +571,6 @@
|
|||||||
Palette: pips
|
Palette: pips
|
||||||
Aircraft:
|
Aircraft:
|
||||||
AirborneCondition: airborne
|
AirborneCondition: airborne
|
||||||
CruisingCondition: cruising
|
|
||||||
RepairBuildings: gadept
|
RepairBuildings: gadept
|
||||||
RearmBuildings: gahpad, nahpad
|
RearmBuildings: gahpad, nahpad
|
||||||
LandWhenIdle: false
|
LandWhenIdle: false
|
||||||
@@ -598,15 +598,10 @@
|
|||||||
Aircraft:
|
Aircraft:
|
||||||
CruiseAltitude: 2048
|
CruiseAltitude: 2048
|
||||||
CanHover: True
|
CanHover: True
|
||||||
|
CruisingCondition: cruising
|
||||||
Hovers@CRUISING:
|
Hovers@CRUISING:
|
||||||
RequiresCondition: cruising
|
RequiresCondition: cruising
|
||||||
|
|
||||||
^Plane:
|
|
||||||
Inherits: ^Aircraft
|
|
||||||
Aircraft:
|
|
||||||
CruiseAltitude: 2560
|
|
||||||
ReturnOnIdle:
|
|
||||||
|
|
||||||
^AircraftHusk:
|
^AircraftHusk:
|
||||||
RenderVoxels:
|
RenderVoxels:
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
@@ -615,8 +610,6 @@
|
|||||||
QuantizedFacings: 0
|
QuantizedFacings: 0
|
||||||
CameraPitch: 90
|
CameraPitch: 90
|
||||||
Aircraft:
|
Aircraft:
|
||||||
AirborneCondition: airborne
|
|
||||||
CruisingCondition: cruising
|
|
||||||
Health:
|
Health:
|
||||||
HP: 280
|
HP: 280
|
||||||
Armor:
|
Armor:
|
||||||
@@ -755,36 +748,8 @@
|
|||||||
DetectCloaked:
|
DetectCloaked:
|
||||||
Range: 5c0
|
Range: 5c0
|
||||||
|
|
||||||
^DeployedVehicle:
|
|
||||||
Inherits@1: ^GainsExperience
|
|
||||||
Inherits@2: ^ExistsInWorld
|
|
||||||
Inherits@3: ^SpriteActor
|
|
||||||
Huntable:
|
|
||||||
Voiced:
|
|
||||||
VoiceSet: Vehicle
|
|
||||||
AttackTurreted:
|
|
||||||
Voice: Attack
|
|
||||||
AutoTarget:
|
|
||||||
RenderRangeCircle:
|
|
||||||
DrawLineToTarget:
|
|
||||||
Building:
|
|
||||||
Dimensions: 1,1
|
|
||||||
Footprint: x
|
|
||||||
TerrainTypes: Clear, Road, DirtRoad, Rough
|
|
||||||
WithSpriteBody:
|
|
||||||
WithMakeAnimation:
|
|
||||||
WithTextControlGroupDecoration:
|
|
||||||
SelectionDecorations:
|
|
||||||
Palette: pips
|
|
||||||
Selectable:
|
|
||||||
Targetable:
|
|
||||||
TargetTypes: Ground, Building, Repair
|
|
||||||
Guardable:
|
|
||||||
HiddenUnderFog:
|
|
||||||
ActorLostNotification:
|
|
||||||
|
|
||||||
^Train:
|
^Train:
|
||||||
Inherits@1: ^EmpDisableMobile
|
Inherits@1: ^EmpDisable
|
||||||
Inherits@2: ^ExistsInWorld
|
Inherits@2: ^ExistsInWorld
|
||||||
Inherits@3: ^Cloakable
|
Inherits@3: ^Cloakable
|
||||||
Huntable:
|
Huntable:
|
||||||
@@ -799,10 +764,10 @@
|
|||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Voice: Move
|
Voice: Move
|
||||||
Speed: 113
|
Speed: 113
|
||||||
|
RequiresCondition: !empdisable
|
||||||
Cargo:
|
Cargo:
|
||||||
Types: Infantry
|
Types: Infantry
|
||||||
UnloadVoice: Unload
|
UnloadVoice: Unload
|
||||||
LoadingCondition: loading
|
|
||||||
Health:
|
Health:
|
||||||
HP: 100
|
HP: 100
|
||||||
Armor:
|
Armor:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
E2:
|
E2:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Infantry
|
Queue: Infantry
|
||||||
BuildPaletteOrder: 20
|
BuildPaletteOrder: 20
|
||||||
@@ -26,6 +27,7 @@ E2:
|
|||||||
|
|
||||||
MEDIC:
|
MEDIC:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -61,6 +63,7 @@ MEDIC:
|
|||||||
|
|
||||||
JUMPJET:
|
JUMPJET:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -95,6 +98,7 @@ JUMPJET:
|
|||||||
|
|
||||||
GHOST:
|
GHOST:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Inherits@2: ^HealsOnTiberium
|
Inherits@2: ^HealsOnTiberium
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1750
|
Cost: 1750
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
APC:
|
APC:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 800
|
Cost: 800
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -14,6 +15,7 @@ APC:
|
|||||||
Speed: 113
|
Speed: 113
|
||||||
TerrainSpeeds:
|
TerrainSpeeds:
|
||||||
Water: 80
|
Water: 80
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 200
|
HP: 200
|
||||||
Armor:
|
Armor:
|
||||||
@@ -46,7 +48,9 @@ APC:
|
|||||||
MovingInterval: 6
|
MovingInterval: 6
|
||||||
|
|
||||||
HVR:
|
HVR:
|
||||||
Inherits: ^VoxelVehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 900
|
Cost: 900
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -100,6 +104,7 @@ HVR:
|
|||||||
|
|
||||||
SMECH:
|
SMECH:
|
||||||
Inherits: ^Vehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 500
|
Cost: 500
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -142,6 +147,7 @@ SMECH:
|
|||||||
|
|
||||||
MMCH:
|
MMCH:
|
||||||
Inherits: ^Tank
|
Inherits: ^Tank
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 800
|
Cost: 800
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -189,7 +195,9 @@ MMCH:
|
|||||||
LocalOffset: 0, 0, 408
|
LocalOffset: 0, 0, 408
|
||||||
|
|
||||||
HMEC:
|
HMEC:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 3000
|
Cost: 3000
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -230,7 +238,9 @@ HMEC:
|
|||||||
LocalOffset: 0, 0, 360
|
LocalOffset: 0, 0, 360
|
||||||
|
|
||||||
SONIC:
|
SONIC:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1300
|
Cost: 1300
|
||||||
Tooltip:
|
Tooltip:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
E3:
|
E3:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Infantry
|
Queue: Infantry
|
||||||
BuildPaletteOrder: 20
|
BuildPaletteOrder: 20
|
||||||
@@ -27,6 +28,7 @@ E3:
|
|||||||
|
|
||||||
CYBORG:
|
CYBORG:
|
||||||
Inherits: ^Cyborg
|
Inherits: ^Cyborg
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Armor:
|
Armor:
|
||||||
Type: Light
|
Type: Light
|
||||||
Valued:
|
Valued:
|
||||||
@@ -60,6 +62,7 @@ CYBORG:
|
|||||||
|
|
||||||
CYC2:
|
CYC2:
|
||||||
Inherits: ^Cyborg
|
Inherits: ^Cyborg
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Armor:
|
Armor:
|
||||||
Type: Heavy
|
Type: Heavy
|
||||||
Valued:
|
Valued:
|
||||||
|
|||||||
@@ -160,7 +160,32 @@ NASAM:
|
|||||||
VisualBounds: 40, 36, -3, -8
|
VisualBounds: 40, 36, -3, -8
|
||||||
|
|
||||||
GAARTY:
|
GAARTY:
|
||||||
Inherits@1: ^DeployedVehicle
|
Inherits@1: ^GainsExperience
|
||||||
|
Inherits@2: ^ExistsInWorld
|
||||||
|
Inherits@3: ^SpriteActor
|
||||||
|
Huntable:
|
||||||
|
Voiced:
|
||||||
|
VoiceSet: Vehicle
|
||||||
|
AttackTurreted:
|
||||||
|
Voice: Attack
|
||||||
|
AutoTarget:
|
||||||
|
RenderRangeCircle:
|
||||||
|
DrawLineToTarget:
|
||||||
|
Building:
|
||||||
|
Dimensions: 1,1
|
||||||
|
Footprint: x
|
||||||
|
TerrainTypes: Clear, Road, DirtRoad, Rough
|
||||||
|
WithSpriteBody:
|
||||||
|
WithMakeAnimation:
|
||||||
|
WithTextControlGroupDecoration:
|
||||||
|
SelectionDecorations:
|
||||||
|
Palette: pips
|
||||||
|
Selectable:
|
||||||
|
Targetable:
|
||||||
|
TargetTypes: Ground, Building, Repair
|
||||||
|
Guardable:
|
||||||
|
HiddenUnderFog:
|
||||||
|
ActorLostNotification:
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 975
|
Cost: 975
|
||||||
Tooltip:
|
Tooltip:
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
BGGY:
|
BGGY:
|
||||||
Inherits: ^VoxelVehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 500
|
Cost: 500
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -33,7 +35,9 @@ BGGY:
|
|||||||
-WithIdleOverlay@VEINS:
|
-WithIdleOverlay@VEINS:
|
||||||
|
|
||||||
BIKE:
|
BIKE:
|
||||||
Inherits: ^VoxelVehicle
|
Inherits: ^Vehicle
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 600
|
Cost: 600
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -66,7 +70,9 @@ BIKE:
|
|||||||
AutoTarget:
|
AutoTarget:
|
||||||
|
|
||||||
TTNK:
|
TTNK:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 800
|
Cost: 800
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -84,6 +90,7 @@ TTNK:
|
|||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 85
|
Speed: 85
|
||||||
Crushes: wall, crate, infantry
|
Crushes: wall, crate, infantry
|
||||||
|
RequiresCondition: !empdisable && undeployed
|
||||||
Health:
|
Health:
|
||||||
HP: 350
|
HP: 350
|
||||||
Armor:
|
Armor:
|
||||||
@@ -160,7 +167,9 @@ TTNK:
|
|||||||
RequiresCondition: undeployed
|
RequiresCondition: undeployed
|
||||||
|
|
||||||
ART2:
|
ART2:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 975
|
Cost: 975
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -190,7 +199,8 @@ ART2:
|
|||||||
Voice: Move
|
Voice: Move
|
||||||
|
|
||||||
REPAIR:
|
REPAIR:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Vehicle
|
Queue: Vehicle
|
||||||
BuildPaletteOrder: 70
|
BuildPaletteOrder: 70
|
||||||
@@ -218,7 +228,8 @@ REPAIR:
|
|||||||
Voice: Attack
|
Voice: Attack
|
||||||
|
|
||||||
WEED:
|
WEED:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1400
|
Cost: 1400
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -254,13 +265,13 @@ WEED:
|
|||||||
MaxHeightDelta: 3
|
MaxHeightDelta: 3
|
||||||
-WithVoxelBody:
|
-WithVoxelBody:
|
||||||
WithVoxelUnloadBody:
|
WithVoxelUnloadBody:
|
||||||
-GainsExperience:
|
|
||||||
-DamagedByTerrain@VEINS:
|
-DamagedByTerrain@VEINS:
|
||||||
-GrantConditionOnTerrain@VEINS:
|
-GrantConditionOnTerrain@VEINS:
|
||||||
-WithIdleOverlay@VEINS:
|
-WithIdleOverlay@VEINS:
|
||||||
|
|
||||||
SAPC:
|
SAPC:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 800
|
Cost: 800
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -273,6 +284,7 @@ SAPC:
|
|||||||
Mobile:
|
Mobile:
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
Speed: 71
|
Speed: 71
|
||||||
|
RequiresCondition: !empdisable && !loading
|
||||||
Health:
|
Health:
|
||||||
HP: 175
|
HP: 175
|
||||||
Armor:
|
Armor:
|
||||||
@@ -289,7 +301,9 @@ SAPC:
|
|||||||
EjectOnDeath: true
|
EjectOnDeath: true
|
||||||
|
|
||||||
SUBTANK:
|
SUBTANK:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 750
|
Cost: 750
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -317,7 +331,9 @@ SUBTANK:
|
|||||||
AutoTarget:
|
AutoTarget:
|
||||||
|
|
||||||
STNK:
|
STNK:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1100
|
Cost: 1100
|
||||||
Tooltip:
|
Tooltip:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
E1:
|
E1:
|
||||||
Inherits: ^Soldier
|
Inherits: ^Soldier
|
||||||
|
Inherits@EXPERIENCE: ^GainsExperience
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Infantry
|
Queue: Infantry
|
||||||
BuildPaletteOrder: 10
|
BuildPaletteOrder: 10
|
||||||
@@ -57,7 +58,6 @@ ENGINEER:
|
|||||||
CaptureTypes: building
|
CaptureTypes: building
|
||||||
PlayerExperience: 50
|
PlayerExperience: 50
|
||||||
-AutoTarget:
|
-AutoTarget:
|
||||||
-GainsExperience:
|
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: engineer.gdi
|
Image: engineer.gdi
|
||||||
FactionImages:
|
FactionImages:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
MCV:
|
MCV:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Vehicle
|
Queue: Vehicle
|
||||||
BuildPaletteOrder: 110
|
BuildPaletteOrder: 110
|
||||||
@@ -39,7 +40,8 @@ MCV:
|
|||||||
nod: mcv.nod
|
nod: mcv.nod
|
||||||
|
|
||||||
HARV:
|
HARV:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
Valued:
|
Valued:
|
||||||
Cost: 1400
|
Cost: 1400
|
||||||
Tooltip:
|
Tooltip:
|
||||||
@@ -84,7 +86,6 @@ HARV:
|
|||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 4c0
|
Range: 4c0
|
||||||
MaxHeightDelta: 3
|
MaxHeightDelta: 3
|
||||||
-GainsExperience:
|
|
||||||
-WithVoxelBody:
|
-WithVoxelBody:
|
||||||
WithVoxelUnloadBody:
|
WithVoxelUnloadBody:
|
||||||
Explodes:
|
Explodes:
|
||||||
@@ -104,9 +105,9 @@ HARV:
|
|||||||
-WithIdleOverlay@VEINS:
|
-WithIdleOverlay@VEINS:
|
||||||
|
|
||||||
LPST:
|
LPST:
|
||||||
Inherits: ^VoxelTank
|
Inherits: ^Tank
|
||||||
|
Inherits@VOXELS: ^VoxelActor
|
||||||
-AppearsOnRadar:
|
-AppearsOnRadar:
|
||||||
-GainsExperience:
|
|
||||||
Buildable:
|
Buildable:
|
||||||
Queue: Vehicle
|
Queue: Vehicle
|
||||||
BuildPaletteOrder: 100
|
BuildPaletteOrder: 100
|
||||||
@@ -127,6 +128,7 @@ LPST:
|
|||||||
Mobile:
|
Mobile:
|
||||||
Speed: 85
|
Speed: 85
|
||||||
TurnSpeed: 5
|
TurnSpeed: 5
|
||||||
|
RequiresCondition: !empdisable && undeployed
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 7c0
|
Range: 7c0
|
||||||
MaxHeightDelta: 3
|
MaxHeightDelta: 3
|
||||||
|
|||||||
Reference in New Issue
Block a user