Added multiplier modifier traits, removing GainsStatUpgrades, InvulnerabilityUpgrade, & Invulnerable.
This commit is contained in:
@@ -344,7 +344,6 @@
|
|||||||
<Compile Include="Traits\Infantry\ScaredyCat.cs" />
|
<Compile Include="Traits\Infantry\ScaredyCat.cs" />
|
||||||
<Compile Include="Traits\Infantry\TakeCover.cs" />
|
<Compile Include="Traits\Infantry\TakeCover.cs" />
|
||||||
<Compile Include="Traits\Infantry\TerrainModifiesDamage.cs" />
|
<Compile Include="Traits\Infantry\TerrainModifiesDamage.cs" />
|
||||||
<Compile Include="Traits\Invulnerable.cs" />
|
|
||||||
<Compile Include="Traits\JamsMissiles.cs" />
|
<Compile Include="Traits\JamsMissiles.cs" />
|
||||||
<Compile Include="Traits\KillsSelf.cs" />
|
<Compile Include="Traits\KillsSelf.cs" />
|
||||||
<Compile Include="Traits\AmmoPool.cs" />
|
<Compile Include="Traits\AmmoPool.cs" />
|
||||||
@@ -357,6 +356,13 @@
|
|||||||
<Compile Include="Traits\Parachutable.cs" />
|
<Compile Include="Traits\Parachutable.cs" />
|
||||||
<Compile Include="Traits\ParaDrop.cs" />
|
<Compile Include="Traits\ParaDrop.cs" />
|
||||||
<Compile Include="Traits\Passenger.cs" />
|
<Compile Include="Traits\Passenger.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\UpgradableMultiplierTrait.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\DamageMultiplier.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\FirepowerMultiplier.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\InaccuracyMultiplier.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\ReloadDelayMultiplier.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\SpeedMultiplier.cs" />
|
||||||
|
<Compile Include="Traits\Multipliers\PowerMultiplier.cs" />
|
||||||
<Compile Include="Traits\PaletteEffects\CloakPaletteEffect.cs" />
|
<Compile Include="Traits\PaletteEffects\CloakPaletteEffect.cs" />
|
||||||
<Compile Include="Traits\PaletteEffects\GlobalLightingPaletteEffect.cs" />
|
<Compile Include="Traits\PaletteEffects\GlobalLightingPaletteEffect.cs" />
|
||||||
<Compile Include="Traits\PaletteEffects\FlashPaletteEffect.cs" />
|
<Compile Include="Traits\PaletteEffects\FlashPaletteEffect.cs" />
|
||||||
@@ -477,7 +483,6 @@
|
|||||||
<Compile Include="Traits\ProduceableWithLevel.cs" />
|
<Compile Include="Traits\ProduceableWithLevel.cs" />
|
||||||
<Compile Include="Traits\Upgrades\DeployToUpgrade.cs" />
|
<Compile Include="Traits\Upgrades\DeployToUpgrade.cs" />
|
||||||
<Compile Include="Traits\Upgrades\DisableUpgrade.cs" />
|
<Compile Include="Traits\Upgrades\DisableUpgrade.cs" />
|
||||||
<Compile Include="Traits\Upgrades\GainsStatUpgrades.cs" />
|
|
||||||
<Compile Include="Traits\Upgrades\UpgradableTrait.cs" />
|
<Compile Include="Traits\Upgrades\UpgradableTrait.cs" />
|
||||||
<Compile Include="Traits\Upgrades\UpgradeActorsNear.cs" />
|
<Compile Include="Traits\Upgrades\UpgradeActorsNear.cs" />
|
||||||
<Compile Include="Traits\Upgrades\UpgradeManager.cs" />
|
<Compile Include="Traits\Upgrades\UpgradeManager.cs" />
|
||||||
|
|||||||
@@ -1,22 +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.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Traits
|
|
||||||
{
|
|
||||||
[Desc("This unit cannot be damaged.")]
|
|
||||||
class InvulnerableInfo : TraitInfo<Invulnerable> { }
|
|
||||||
|
|
||||||
class Invulnerable : IDamageModifier
|
|
||||||
{
|
|
||||||
public int GetDamageModifier(Actor attacker, IWarhead warhead) { return 0; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
31
OpenRA.Mods.Common/Traits/Multipliers/DamageMultiplier.cs
Normal file
31
OpenRA.Mods.Common/Traits/Multipliers/DamageMultiplier.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#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.GameRules;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("Damage taken by this actor is multiplied based on upgrade level.",
|
||||||
|
"Decrease to increase actor's apparent strength.",
|
||||||
|
"Use 0 to make actor invulnerable.")]
|
||||||
|
public class DamageMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new DamageMultiplier(this, init.Self.Info.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DamageMultiplier : UpgradeMultiplierTrait, IDamageModifier
|
||||||
|
{
|
||||||
|
public DamageMultiplier(DamageMultiplierInfo info, string actorType)
|
||||||
|
: base(info, "DamageMultiplier", actorType) { }
|
||||||
|
|
||||||
|
public int GetDamageModifier(Actor attacker, IWarhead warhead) { return GetModifier(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
28
OpenRA.Mods.Common/Traits/Multipliers/FirepowerMultiplier.cs
Normal file
28
OpenRA.Mods.Common/Traits/Multipliers/FirepowerMultiplier.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#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.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("The firepower of this actor is multiplied based on upgrade level if specified.")]
|
||||||
|
public class FirepowerMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new FirepowerMultiplier(this, init.Self.Info.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FirepowerMultiplier : UpgradeMultiplierTrait, IFirepowerModifier
|
||||||
|
{
|
||||||
|
public FirepowerMultiplier(FirepowerMultiplierInfo info, string actorType)
|
||||||
|
: base(info, "FirepowerMultiplier", actorType) { }
|
||||||
|
|
||||||
|
public int GetFirepowerModifier() { return GetModifier(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#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.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("The inaccuracy of this actor is multipled based on upgrade level if specified.")]
|
||||||
|
public class InaccuracyMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new InaccuracyMultiplier(this, init.Self.Info.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InaccuracyMultiplier : UpgradeMultiplierTrait, IInaccuracyModifier
|
||||||
|
{
|
||||||
|
public InaccuracyMultiplier(InaccuracyMultiplierInfo info, string actorType)
|
||||||
|
: base(info, "InaccuracyMultiplier", actorType) { }
|
||||||
|
|
||||||
|
public int GetInaccuracyModifier() { return GetModifier(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
36
OpenRA.Mods.Common/Traits/Multipliers/PowerMultiplier.cs
Normal file
36
OpenRA.Mods.Common/Traits/Multipliers/PowerMultiplier.cs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#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.Common
|
||||||
|
{
|
||||||
|
[Desc("The power usage/output of this actor is multiplied based on upgrade level if specified.")]
|
||||||
|
public class PowerMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new PowerMultiplier(init.Self, this); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PowerMultiplier : UpgradeMultiplierTrait, IPowerModifier, INotifyOwnerChanged
|
||||||
|
{
|
||||||
|
PowerManager power;
|
||||||
|
|
||||||
|
public PowerMultiplier(Actor self, PowerMultiplierInfo info)
|
||||||
|
: base(info, "PowerMultiplier", self.Info.Name) { power = self.Owner.PlayerActor.Trait<PowerManager>(); }
|
||||||
|
|
||||||
|
public int GetPowerModifier() { return GetModifier(); }
|
||||||
|
protected override void Update(Actor self) { power.UpdateActor(self); }
|
||||||
|
public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
|
||||||
|
{
|
||||||
|
power = newOwner.PlayerActor.Trait<PowerManager>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#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.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("The reloading time of this actor is multiplied based on upgrade level if specified.")]
|
||||||
|
public class ReloadDelayMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new ReloadDelayMultiplier(this, init.Self.Info.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ReloadDelayMultiplier : UpgradeMultiplierTrait, IReloadModifier
|
||||||
|
{
|
||||||
|
public ReloadDelayMultiplier(ReloadDelayMultiplierInfo info, string actorType)
|
||||||
|
: base(info, "ReloadDelayMultiplier", actorType) { }
|
||||||
|
|
||||||
|
public int GetReloadModifier() { return GetModifier(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
28
OpenRA.Mods.Common/Traits/Multipliers/SpeedMultiplier.cs
Normal file
28
OpenRA.Mods.Common/Traits/Multipliers/SpeedMultiplier.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#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.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
[Desc("The speed of this actor is multiplied based on upgrade level if specified.")]
|
||||||
|
public class SpeedMultiplierInfo : UpgradeMultiplierTraitInfo, ITraitInfo
|
||||||
|
{
|
||||||
|
public object Create(ActorInitializer init) { return new SpeedMultiplier(this, init.Self.Info.Name); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SpeedMultiplier : UpgradeMultiplierTrait, ISpeedModifier
|
||||||
|
{
|
||||||
|
public SpeedMultiplier(SpeedMultiplierInfo info, string actorType)
|
||||||
|
: base(info, "SpeedMultiplier", actorType) { }
|
||||||
|
|
||||||
|
public int GetSpeedModifier() { return GetModifier(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
#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;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Common.Traits
|
||||||
|
{
|
||||||
|
public abstract class UpgradeMultiplierTraitInfo
|
||||||
|
{
|
||||||
|
[UpgradeUsedReference]
|
||||||
|
[Desc("Accepted upgrade types.")]
|
||||||
|
public readonly string[] UpgradeTypes = { };
|
||||||
|
|
||||||
|
[Desc("The lowest upgrade level using the scale.")]
|
||||||
|
public readonly int BaseLevel = 1;
|
||||||
|
|
||||||
|
[FieldLoader.Require]
|
||||||
|
[Desc("Percentages to apply with the first being applied at the base level.",
|
||||||
|
"Repeat last entry to accept time extensions.",
|
||||||
|
"If no upgrade types are specified, then the first/only modifier is always applied.")]
|
||||||
|
public readonly int[] Modifier = { };
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class UpgradeMultiplierTrait : IUpgradable, IDisabledTrait, ISync
|
||||||
|
{
|
||||||
|
readonly UpgradeMultiplierTraitInfo info;
|
||||||
|
[Sync] int level = 0;
|
||||||
|
[Sync] public bool IsTraitDisabled { get; private set; }
|
||||||
|
public int AdjustedLevel { get { return level - info.BaseLevel; } }
|
||||||
|
public IEnumerable<string> UpgradeTypes { get { return info.UpgradeTypes; } }
|
||||||
|
|
||||||
|
protected UpgradeMultiplierTrait(UpgradeMultiplierTraitInfo info, string modifierType, string actorType)
|
||||||
|
{
|
||||||
|
if (info.Modifier.Length == 0)
|
||||||
|
throw new Exception("No modifiers in " + modifierType + " for " + actorType);
|
||||||
|
this.info = info;
|
||||||
|
IsTraitDisabled = info.UpgradeTypes.Length > 0 && info.BaseLevel > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AcceptsUpgradeLevel(Actor self, string type, int level)
|
||||||
|
{
|
||||||
|
return level < info.Modifier.Length + info.BaseLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override to recieve notice of level change.
|
||||||
|
protected virtual void Update(Actor self) { }
|
||||||
|
|
||||||
|
public void UpgradeLevelChanged(Actor self, string type, int oldLevel, int newLevel)
|
||||||
|
{
|
||||||
|
if (!UpgradeTypes.Contains(type))
|
||||||
|
return;
|
||||||
|
level = newLevel.Clamp(0, Math.Max(info.Modifier.Length + info.BaseLevel - 1, 0));
|
||||||
|
IsTraitDisabled = level < info.BaseLevel;
|
||||||
|
Update(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetModifier()
|
||||||
|
{
|
||||||
|
return IsTraitDisabled ? 100 : info.Modifier[level - info.BaseLevel];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,127 +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;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using OpenRA.GameRules;
|
|
||||||
using OpenRA.Traits;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Traits
|
|
||||||
{
|
|
||||||
[Desc("This actor has properties that upgrade when a specific criteria is met.")]
|
|
||||||
public class GainsStatUpgradesInfo : ITraitInfo
|
|
||||||
{
|
|
||||||
public readonly string FirepowerUpgrade = "firepower";
|
|
||||||
public readonly int[] FirepowerModifier = { 110, 115, 120, 130 };
|
|
||||||
|
|
||||||
public readonly string DamageUpgrade = "damage";
|
|
||||||
public readonly int[] DamageModifier = { 91, 87, 83, 65 };
|
|
||||||
|
|
||||||
public readonly string SpeedUpgrade = "speed";
|
|
||||||
public readonly int[] SpeedModifier = { 110, 115, 120, 150 };
|
|
||||||
|
|
||||||
public readonly string ReloadUpgrade = "reload";
|
|
||||||
public readonly int[] ReloadModifier = { 95, 90, 85, 75 };
|
|
||||||
|
|
||||||
public readonly string InaccuracyUpgrade = "inaccuracy";
|
|
||||||
public readonly int[] InaccuracyModifier = { 90, 80, 70, 50 };
|
|
||||||
|
|
||||||
public object Create(ActorInitializer init) { return new GainsStatUpgrades(this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GainsStatUpgrades : IUpgradable, IFirepowerModifier, IDamageModifier, ISpeedModifier, IReloadModifier, IInaccuracyModifier, IDisabledTrait
|
|
||||||
{
|
|
||||||
readonly GainsStatUpgradesInfo info;
|
|
||||||
[Sync] int firepowerLevel = 0;
|
|
||||||
[Sync] int speedLevel = 0;
|
|
||||||
[Sync] int damageLevel = 0;
|
|
||||||
[Sync] int reloadLevel = 0;
|
|
||||||
[Sync] int inaccuracyLevel = 0;
|
|
||||||
public bool IsTraitDisabled { get { return firepowerLevel == 0 && speedLevel == 0 && damageLevel == 0 && reloadLevel == 0 && inaccuracyLevel == 0; } }
|
|
||||||
public IEnumerable<string> UpgradeTypes
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
yield return info.FirepowerUpgrade;
|
|
||||||
yield return info.DamageUpgrade;
|
|
||||||
yield return info.SpeedUpgrade;
|
|
||||||
yield return info.ReloadUpgrade;
|
|
||||||
yield return info.InaccuracyUpgrade;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GainsStatUpgrades(GainsStatUpgradesInfo info)
|
|
||||||
{
|
|
||||||
this.info = info;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool AcceptsUpgradeLevel(Actor self, string type, int level)
|
|
||||||
{
|
|
||||||
if (level < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (type == info.FirepowerUpgrade)
|
|
||||||
return level <= info.FirepowerModifier.Length;
|
|
||||||
|
|
||||||
if (type == info.DamageUpgrade)
|
|
||||||
return level <= info.DamageModifier.Length;
|
|
||||||
|
|
||||||
if (type == info.SpeedUpgrade)
|
|
||||||
return level <= info.SpeedModifier.Length;
|
|
||||||
|
|
||||||
if (type == info.ReloadUpgrade)
|
|
||||||
return level <= info.ReloadModifier.Length;
|
|
||||||
|
|
||||||
if (type == info.InaccuracyUpgrade)
|
|
||||||
return level <= info.InaccuracyModifier.Length;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpgradeLevelChanged(Actor self, string type, int oldLevel, int newLevel)
|
|
||||||
{
|
|
||||||
if (type == info.FirepowerUpgrade)
|
|
||||||
firepowerLevel = newLevel.Clamp(0, info.FirepowerModifier.Length);
|
|
||||||
else if (type == info.DamageUpgrade)
|
|
||||||
damageLevel = newLevel.Clamp(0, info.DamageModifier.Length);
|
|
||||||
else if (type == info.SpeedUpgrade)
|
|
||||||
speedLevel = newLevel.Clamp(0, info.SpeedModifier.Length);
|
|
||||||
else if (type == info.ReloadUpgrade)
|
|
||||||
reloadLevel = newLevel.Clamp(0, info.ReloadModifier.Length);
|
|
||||||
else if (type == info.InaccuracyUpgrade)
|
|
||||||
inaccuracyLevel = newLevel.Clamp(0, info.InaccuracyModifier.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetDamageModifier(Actor attacker, IWarhead warhead)
|
|
||||||
{
|
|
||||||
return damageLevel > 0 ? info.DamageModifier[damageLevel - 1] : 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetFirepowerModifier()
|
|
||||||
{
|
|
||||||
return firepowerLevel > 0 ? info.FirepowerModifier[firepowerLevel - 1] : 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetSpeedModifier()
|
|
||||||
{
|
|
||||||
return speedLevel > 0 ? info.SpeedModifier[speedLevel - 1] : 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetReloadModifier()
|
|
||||||
{
|
|
||||||
return reloadLevel > 0 ? info.ReloadModifier[reloadLevel - 1] : 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetInaccuracyModifier()
|
|
||||||
{
|
|
||||||
return inaccuracyLevel > 0 ? info.InaccuracyModifier[inaccuracyLevel - 1] : 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1380,6 +1380,131 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineVersion < 20150711)
|
||||||
|
{
|
||||||
|
if (depth == 0)
|
||||||
|
{
|
||||||
|
var emptyYaml = new MiniYaml(null);
|
||||||
|
|
||||||
|
// Replace -GainsStatUpgrades
|
||||||
|
var trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "-GainsStatUpgrades");
|
||||||
|
if (trait != null)
|
||||||
|
{
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-FirepowerMultiplier@EXPERIENCE", emptyYaml));
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-DamageMultiplier@EXPERIENCE", emptyYaml));
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-SpeedMultiplier@EXPERIENCE", emptyYaml));
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-ReloadDelayMultiplier@EXPERIENCE", emptyYaml));
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode("-InaccuracyMultiplier@EXPERIENCE", emptyYaml));
|
||||||
|
node.Value.Nodes.Remove(trait);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace GainsStatUpgrades
|
||||||
|
trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "GainsStatUpgrades");
|
||||||
|
if (trait != null)
|
||||||
|
{
|
||||||
|
// Common code for making each trait
|
||||||
|
Action<string, string, string> addTrait = (type, newType, values) =>
|
||||||
|
{
|
||||||
|
var upgradeTypes = trait.Value.Nodes.FirstOrDefault(n => n.Key == type + "Upgrade");
|
||||||
|
var modifier = trait.Value.Nodes.FirstOrDefault(n => n.Key == type + "Modifier");
|
||||||
|
|
||||||
|
if (upgradeTypes == null || !string.IsNullOrEmpty(upgradeTypes.Value.Value) || modifier == null || !string.IsNullOrEmpty(modifier.Value.Value))
|
||||||
|
{
|
||||||
|
var yaml = new MiniYaml(null);
|
||||||
|
if (modifier == null)
|
||||||
|
modifier = new MiniYamlNode("Modifier", new MiniYaml(values));
|
||||||
|
else
|
||||||
|
modifier.Key = "Modifier";
|
||||||
|
yaml.Nodes.Add(modifier);
|
||||||
|
|
||||||
|
if (upgradeTypes == null)
|
||||||
|
upgradeTypes = new MiniYamlNode("UpgradeTypes", new MiniYaml(type.ToLowerInvariant()));
|
||||||
|
else
|
||||||
|
upgradeTypes.Key = "UpgradeTypes";
|
||||||
|
yaml.Nodes.Add(upgradeTypes);
|
||||||
|
|
||||||
|
node.Value.Nodes.Add(new MiniYamlNode((newType ?? type) + "Multiplier@EXPERIENCE", yaml));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Execute common code for each trait
|
||||||
|
addTrait("Firepower", null, "110, 115, 120, 130");
|
||||||
|
addTrait("Damage", null, "91, 87, 83, 65");
|
||||||
|
addTrait("Speed", null, "110, 115, 120, 150");
|
||||||
|
addTrait("Reload", "ReloadTime", "95, 90, 85, 75");
|
||||||
|
addTrait("Inaccuracy", null, "90, 80, 70, 50");
|
||||||
|
|
||||||
|
// Remove GainsStatUpgrades
|
||||||
|
node.Value.Nodes.Remove(trait);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace -InvulnerabilityUpgrade
|
||||||
|
trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "-InvulnerabilityUpgrade");
|
||||||
|
if (trait != null)
|
||||||
|
trait.Key = "-DamageMultiplier@INVULNERABILITY_UPGRADE";
|
||||||
|
|
||||||
|
// Replace InvulnerabilityUpgrade with DamageMultiplier@INVULNERABILITY_UPGRADE
|
||||||
|
trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "InvulnerabilityUpgrade");
|
||||||
|
if (trait != null)
|
||||||
|
{
|
||||||
|
trait.Key = "DamageMultiplier@INVULNERABILITY_UPGRADE";
|
||||||
|
trait.Value.Nodes.Add(new MiniYamlNode("Modifier", "0, 0"));
|
||||||
|
|
||||||
|
// Use UpgradeMinEnabledLevel as BaseLevel; otherwise, 1
|
||||||
|
var min = trait.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeMinEnabledLevel");
|
||||||
|
if (min != null)
|
||||||
|
{
|
||||||
|
if (min.Value.Value != "1")
|
||||||
|
min.Key = "BaseLevel";
|
||||||
|
else
|
||||||
|
trait.Value.Nodes.Remove(min);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove since level cap is based of Modifier.Length + BaseLevel
|
||||||
|
trait.Value.Nodes.RemoveAll(n => n.Key == "UpgradeMaxAcceptedLevel");
|
||||||
|
trait.Value.Nodes.RemoveAll(n => n.Key == "UpgradeMaxEnabledLevel");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace -InvulnerabilityUpgrade@* with -DamageMultiplier@*
|
||||||
|
foreach (var n in node.Value.Nodes.Where(n => n.Key.StartsWith("-InvulnerabilityUpgrade@")))
|
||||||
|
n.Key = "-DamageMultiplier@" + n.Key.Substring("-InvulnerabilityUpgrade@".Length);
|
||||||
|
|
||||||
|
// Replace InvulnerabilityUpgrade@* with DamageMultiplier@*
|
||||||
|
foreach (var t in node.Value.Nodes.Where(n => n.Key.StartsWith("InvulnerabilityUpgrade@")))
|
||||||
|
{
|
||||||
|
t.Key = "DamageMultiplier@" + t.Key.Substring("InvulnerabilityUpgrade@".Length);
|
||||||
|
t.Value.Nodes.Add(new MiniYamlNode("Modifier", "0, 0"));
|
||||||
|
|
||||||
|
// Use UpgradeMinEnabledLevel as BaseLevel; otherwise, 1
|
||||||
|
var min = t.Value.Nodes.FirstOrDefault(n => n.Key == "UpgradeMinEnabledLevel");
|
||||||
|
if (min != null)
|
||||||
|
{
|
||||||
|
if (min.Value.Value != "1")
|
||||||
|
min.Key = "BaseLevel";
|
||||||
|
else
|
||||||
|
t.Value.Nodes.Remove(min);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove since level cap is based of Modifier.Length + BaseLevel
|
||||||
|
t.Value.Nodes.RemoveAll(n => n.Key == "UpgradeMaxAcceptedLevel");
|
||||||
|
t.Value.Nodes.RemoveAll(n => n.Key == "UpgradeMaxEnabledLevel");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace -Invulnerable with -DamageMultiplier@INVULNERABLE
|
||||||
|
trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "-Invulnerable");
|
||||||
|
if (trait != null)
|
||||||
|
trait.Key = "-DamageMultiplier@INVULNERABLE";
|
||||||
|
|
||||||
|
// Invulnerable with DamageMultiplier@INVULNERABLE
|
||||||
|
trait = node.Value.Nodes.FirstOrDefault(n => n.Key == "Invulnerable");
|
||||||
|
if (trait != null)
|
||||||
|
{
|
||||||
|
trait.Key = "DamageMultiplier@INVULNERABLE";
|
||||||
|
trait.Value.Nodes.Add(new MiniYamlNode("Modifier", "0"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,6 @@
|
|||||||
<Compile Include="Traits\Infiltration\InfiltrateForPowerOutage.cs" />
|
<Compile Include="Traits\Infiltration\InfiltrateForPowerOutage.cs" />
|
||||||
<Compile Include="Traits\Infiltration\InfiltrateForSupportPower.cs" />
|
<Compile Include="Traits\Infiltration\InfiltrateForSupportPower.cs" />
|
||||||
<Compile Include="Traits\Infiltration\Infiltrates.cs" />
|
<Compile Include="Traits\Infiltration\Infiltrates.cs" />
|
||||||
<Compile Include="Traits\InvulnerabilityUpgrade.cs" />
|
|
||||||
<Compile Include="Traits\MadTank.cs" />
|
<Compile Include="Traits\MadTank.cs" />
|
||||||
<Compile Include="Traits\Mine.cs" />
|
<Compile Include="Traits\Mine.cs" />
|
||||||
<Compile Include="Traits\Minelayer.cs" />
|
<Compile Include="Traits\Minelayer.cs" />
|
||||||
|
|||||||
@@ -1,31 +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
|
|
||||||
{
|
|
||||||
public class InvulnerabilityUpgradeInfo : UpgradableTraitInfo
|
|
||||||
{
|
|
||||||
public override object Create(ActorInitializer init) { return new InvulnerabilityUpgrade(this); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class InvulnerabilityUpgrade : UpgradableTrait<InvulnerabilityUpgradeInfo>, IDamageModifier
|
|
||||||
{
|
|
||||||
public InvulnerabilityUpgrade(InvulnerabilityUpgradeInfo info)
|
|
||||||
: base(info) { }
|
|
||||||
|
|
||||||
public int GetDamageModifier(Actor attacker, IWarhead warhead)
|
|
||||||
{
|
|
||||||
return IsTraitDisabled ? 100 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -831,7 +831,8 @@ Rules:
|
|||||||
Health:
|
Health:
|
||||||
HP: 125
|
HP: 125
|
||||||
^Bridge:
|
^Bridge:
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
|
|
||||||
Sequences:
|
Sequences:
|
||||||
|
|
||||||
|
|||||||
@@ -295,7 +295,8 @@ Rules:
|
|||||||
Tooltip:
|
Tooltip:
|
||||||
Name: Nikoomba
|
Name: Nikoomba
|
||||||
^Bridge:
|
^Bridge:
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
^CivBuilding:
|
^CivBuilding:
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
^CivInfantry:
|
^CivInfantry:
|
||||||
|
|||||||
@@ -530,7 +530,8 @@ Rules:
|
|||||||
GenericVisibility: Enemy
|
GenericVisibility: Enemy
|
||||||
ShowOwnerRow: false
|
ShowOwnerRow: false
|
||||||
^Bridge:
|
^Bridge:
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
E2:
|
E2:
|
||||||
Buildable:
|
Buildable:
|
||||||
Prerequisites: ~pyle
|
Prerequisites: ~pyle
|
||||||
|
|||||||
@@ -162,7 +162,8 @@ C17:
|
|||||||
Cargo:
|
Cargo:
|
||||||
MaxWeight: 10
|
MaxWeight: 10
|
||||||
PipCount: 10
|
PipCount: 10
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
Contrail@1:
|
Contrail@1:
|
||||||
Offset: -261,-650,0
|
Offset: -261,-650,0
|
||||||
TrailLength: 15
|
TrailLength: 15
|
||||||
|
|||||||
@@ -15,7 +15,21 @@
|
|||||||
400: firepower, damage, speed, reload, inaccuracy, rank
|
400: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
800: firepower, damage, speed, reload, inaccuracy, rank
|
800: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
||||||
GainsStatUpgrades:
|
FirepowerMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: firepower
|
||||||
|
Modifier: 110, 115, 120, 130
|
||||||
|
DamageMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: damage
|
||||||
|
Modifier: 91, 87, 83, 65
|
||||||
|
SpeedMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: speed
|
||||||
|
Modifier: 110, 115, 120, 150
|
||||||
|
ReloadDelayMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: reload
|
||||||
|
Modifier: 95, 90, 85, 75
|
||||||
|
InaccuracyMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: inaccuracy
|
||||||
|
Modifier: 90, 80, 70, 50
|
||||||
SelfHealing@ELITE:
|
SelfHealing@ELITE:
|
||||||
Step: 2
|
Step: 2
|
||||||
Ticks: 100
|
Ticks: 100
|
||||||
|
|||||||
@@ -85,7 +85,8 @@ frigate:
|
|||||||
Cargo:
|
Cargo:
|
||||||
MaxWeight: 20
|
MaxWeight: 20
|
||||||
PipCount: 10
|
PipCount: 10
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
FlyAwayOnIdle:
|
FlyAwayOnIdle:
|
||||||
RejectsOrders:
|
RejectsOrders:
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,21 @@
|
|||||||
400: firepower, damage, speed, reload, inaccuracy, rank
|
400: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
800: firepower, damage, speed, reload, inaccuracy, rank
|
800: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
||||||
GainsStatUpgrades:
|
FirepowerMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: firepower
|
||||||
|
Modifier: 110, 115, 120, 130
|
||||||
|
DamageMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: damage
|
||||||
|
Modifier: 91, 87, 83, 65
|
||||||
|
SpeedMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: speed
|
||||||
|
Modifier: 110, 115, 120, 150
|
||||||
|
ReloadDelayMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: reload
|
||||||
|
Modifier: 95, 90, 85, 75
|
||||||
|
InaccuracyMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: inaccuracy
|
||||||
|
Modifier: 90, 80, 70, 50
|
||||||
SelfHealing@ELITE:
|
SelfHealing@ELITE:
|
||||||
Step: 2
|
Step: 2
|
||||||
Ticks: 100
|
Ticks: 100
|
||||||
|
|||||||
@@ -1267,17 +1267,17 @@ Rules:
|
|||||||
Percentage: 0
|
Percentage: 0
|
||||||
GainsExperience:
|
GainsExperience:
|
||||||
Upgrades:
|
Upgrades:
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
^Tank:
|
^Tank:
|
||||||
GivesBounty:
|
GivesBounty:
|
||||||
Percentage: 0
|
Percentage: 0
|
||||||
GainsExperience:
|
GainsExperience:
|
||||||
Upgrades:
|
Upgrades:
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
^Infantry:
|
^Infantry:
|
||||||
GivesBounty:
|
GivesBounty:
|
||||||
Percentage: 0
|
Percentage: 0
|
||||||
@@ -1289,29 +1289,29 @@ Rules:
|
|||||||
VolumeMultiplier: 0.1
|
VolumeMultiplier: 0.1
|
||||||
DeathSounds@ZAPPED:
|
DeathSounds@ZAPPED:
|
||||||
VolumeMultiplier: 0.1
|
VolumeMultiplier: 0.1
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
^Ship:
|
^Ship:
|
||||||
GivesBounty:
|
GivesBounty:
|
||||||
Percentage: 0
|
Percentage: 0
|
||||||
GainsExperience:
|
GainsExperience:
|
||||||
Upgrades:
|
Upgrades:
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
^Plane:
|
^Plane:
|
||||||
GivesBounty:
|
GivesBounty:
|
||||||
Percentage: 0
|
Percentage: 0
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
^Building:
|
^Building:
|
||||||
GivesBounty:
|
GivesBounty:
|
||||||
Percentage: 0
|
Percentage: 0
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
OILB:
|
OILB:
|
||||||
CashTrickler:
|
CashTrickler:
|
||||||
ShowTicks: false
|
ShowTicks: false
|
||||||
@@ -1319,7 +1319,8 @@ Rules:
|
|||||||
Burns:
|
Burns:
|
||||||
Damage: 0
|
Damage: 0
|
||||||
MISS:
|
MISS:
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
APC:
|
APC:
|
||||||
Cargo:
|
Cargo:
|
||||||
InitialUnits: e1, e1, e2, e3, e4
|
InitialUnits: e1, e1, e2, e3, e4
|
||||||
|
|||||||
@@ -645,9 +645,9 @@ Rules:
|
|||||||
Buildable:
|
Buildable:
|
||||||
Prerequisites: ~disabled
|
Prerequisites: ~disabled
|
||||||
MustBeDestroyed:
|
MustBeDestroyed:
|
||||||
InvulnerabilityUpgrade@UNKILLABLE:
|
DamageMultiplier@UNKILLABLE:
|
||||||
UpgradeTypes: unkillable
|
UpgradeTypes: unkillable
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
RenderSprites:
|
RenderSprites:
|
||||||
Image: SNIPER
|
Image: SNIPER
|
||||||
SPY:
|
SPY:
|
||||||
|
|||||||
@@ -641,7 +641,8 @@ Rules:
|
|||||||
Name: Strategic Point
|
Name: Strategic Point
|
||||||
RevealsShroud:
|
RevealsShroud:
|
||||||
Range: 20c0
|
Range: 20c0
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-TargetableBuilding:
|
||||||
Player:
|
Player:
|
||||||
|
|||||||
@@ -16,7 +16,21 @@
|
|||||||
400: firepower, damage, speed, reload, inaccuracy, rank
|
400: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
800: firepower, damage, speed, reload, inaccuracy, rank
|
800: firepower, damage, speed, reload, inaccuracy, rank
|
||||||
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
1600: firepower, damage, speed, reload, inaccuracy, rank, eliteweapon, selfheal
|
||||||
GainsStatUpgrades:
|
DamageMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: damage
|
||||||
|
Modifier: 91, 87, 83, 65
|
||||||
|
FirepowerMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: firepower
|
||||||
|
Modifier: 110, 115, 120, 130
|
||||||
|
SpeedMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: speed
|
||||||
|
Modifier: 110, 115, 120, 150
|
||||||
|
ReloadDelayMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: reload
|
||||||
|
Modifier: 95, 90, 85, 75
|
||||||
|
InaccuracyMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: inaccuracy
|
||||||
|
Modifier: 90, 80, 70, 50
|
||||||
SelfHealing@ELITE:
|
SelfHealing@ELITE:
|
||||||
Step: 2
|
Step: 2
|
||||||
Ticks: 100
|
Ticks: 100
|
||||||
@@ -39,10 +53,9 @@
|
|||||||
UpgradeOverlay@IRONCURTAIN:
|
UpgradeOverlay@IRONCURTAIN:
|
||||||
UpgradeTypes: invulnerability
|
UpgradeTypes: invulnerability
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
InvulnerabilityUpgrade@IRONCURTAIN:
|
DamageMultiplier@IRONCURTAIN:
|
||||||
UpgradeTypes: invulnerability
|
UpgradeTypes: invulnerability
|
||||||
UpgradeMinEnabledLevel: 1
|
Modifier: 0, 0
|
||||||
UpgradeMaxAcceptedLevel: 2
|
|
||||||
TimedUpgradeBar:
|
TimedUpgradeBar:
|
||||||
Upgrade: invulnerability
|
Upgrade: invulnerability
|
||||||
|
|
||||||
|
|||||||
@@ -403,7 +403,8 @@ CTFLAG:
|
|||||||
Name: Flag
|
Name: Flag
|
||||||
Bib:
|
Bib:
|
||||||
HasMinibib: Yes
|
HasMinibib: Yes
|
||||||
Invulnerable:
|
DamageMultiplier@INVULNERABLE:
|
||||||
|
Modifier: 0
|
||||||
-Selectable:
|
-Selectable:
|
||||||
-TargetableBuilding:
|
-TargetableBuilding:
|
||||||
|
|
||||||
|
|||||||
@@ -648,7 +648,7 @@ DTRK:
|
|||||||
Weapon: MiniNuke
|
Weapon: MiniNuke
|
||||||
EmptyWeapon: MiniNuke
|
EmptyWeapon: MiniNuke
|
||||||
DemoTruck:
|
DemoTruck:
|
||||||
-InvulnerabilityUpgrade@IRONCURTAIN:
|
-DamageMultiplier@IRONCURTAIN:
|
||||||
KillsSelf:
|
KillsSelf:
|
||||||
UpgradeTypes: invulnerability
|
UpgradeTypes: invulnerability
|
||||||
UpgradeMinEnabledLevel: 1
|
UpgradeMinEnabledLevel: 1
|
||||||
|
|||||||
@@ -13,11 +13,18 @@
|
|||||||
Upgrades:
|
Upgrades:
|
||||||
500: rank, firepower, damage, speed, reload
|
500: rank, firepower, damage, speed, reload
|
||||||
1000: rank, firepower, damage, speed, reload, selfheal, eliteweapon
|
1000: rank, firepower, damage, speed, reload, selfheal, eliteweapon
|
||||||
GainsStatUpgrades:
|
FirepowerMultiplier@EXPERIENCE:
|
||||||
FirepowerModifier: 110, 130
|
UpgradeTypes: firepower
|
||||||
DamageModifier: 83, 66
|
Modifier: 110, 130
|
||||||
SpeedModifier: 120, 150
|
DamageMultiplier@EXPERIENCE:
|
||||||
ReloadModifier: 90, 75
|
UpgradeTypes: damage
|
||||||
|
Modifier: 83, 66
|
||||||
|
SpeedMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: speed
|
||||||
|
Modifier: 120, 150
|
||||||
|
ReloadDelayMultiplier@EXPERIENCE:
|
||||||
|
UpgradeTypes: reload
|
||||||
|
Modifier: 90, 75
|
||||||
SelfHealing@ELITE:
|
SelfHealing@ELITE:
|
||||||
Step: 2
|
Step: 2
|
||||||
Ticks: 100
|
Ticks: 100
|
||||||
|
|||||||
Reference in New Issue
Block a user