diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
index c1d5b9637b..1ba63077b9 100644
--- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
+++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
@@ -323,7 +323,6 @@
-
diff --git a/OpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs
index 5e87dcf2d5..48e4e7e9a8 100644
--- a/OpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs
+++ b/OpenRA.Mods.Common/Scripting/Global/ActorGlobal.cs
@@ -64,14 +64,53 @@ namespace OpenRA.Mods.Common.Scripting
return a;
}
- [Desc("Returns the build time (in ticks) of the requested unit type.")]
- public int BuildTime(string type)
+ [Desc("Returns the build time (in ticks) of the requested unit type.",
+ "An optional second value can be used to exactly specify the producing queue type.")]
+ public int BuildTime(string type, string queue = null)
{
ActorInfo ai;
if (!Context.World.Map.Rules.Actors.TryGetValue(type, out ai))
throw new LuaException("Unknown actor type '{0}'".F(type));
- return ai.GetBuildTime();
+ var bi = ai.TraitInfoOrDefault();
+
+ if (bi == null)
+ return 0;
+
+ var time = bi.BuildDuration;
+ if (time == -1)
+ {
+ var valued = ai.TraitInfoOrDefault();
+ if (valued == null)
+ return 0;
+ else
+ time = valued.Cost;
+ }
+
+ int pbi;
+ if (queue != null)
+ {
+ var pqueue = Context.World.Map.Rules.Actors.Values.SelectMany(a => a.TraitInfos()
+ .Where(x => x.Type == queue)).FirstOrDefault();
+
+ if (pqueue == null)
+ throw new LuaException("The specified queue '{0}' does not exist!".F(queue));
+
+ pbi = pqueue.BuildDurationModifier;
+ }
+ else
+ {
+ var pqueue = Context.World.Map.Rules.Actors.Values.SelectMany(a => a.TraitInfos()
+ .Where(x => bi.Queue.Contains(x.Type))).FirstOrDefault();
+
+ if (pqueue == null)
+ throw new LuaException("No actors can produce actor '{0}'!".F(type));
+
+ pbi = pqueue.BuildDurationModifier;
+ }
+
+ time = time * bi.BuildDurationModifier * pbi / 10000;
+ return time;
}
[Desc("Returns the cruise altitude of the requested unit type (zero if it is ground-based).")]
diff --git a/OpenRA.Mods.Common/Traits/Buildable.cs b/OpenRA.Mods.Common/Traits/Buildable.cs
index b498deb16d..f8d2fbd58f 100644
--- a/OpenRA.Mods.Common/Traits/Buildable.cs
+++ b/OpenRA.Mods.Common/Traits/Buildable.cs
@@ -37,6 +37,12 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Palette used for the production icon.")]
[PaletteReference] public readonly string IconPalette = "chrome";
+ [Desc("Base build time in frames (-1 indicates to use the unit's Value).")]
+ public readonly int BuildDuration = -1;
+
+ [Desc("Percentage modifier to apply to the build duration.")]
+ public readonly int BuildDurationModifier = 60;
+
// TODO: UI fluff; doesn't belong here
public readonly int BuildPaletteOrder = 9999;
}
diff --git a/OpenRA.Mods.Common/Traits/CustomBuildTimeValue.cs b/OpenRA.Mods.Common/Traits/CustomBuildTimeValue.cs
deleted file mode 100644
index 9c81615fc5..0000000000
--- a/OpenRA.Mods.Common/Traits/CustomBuildTimeValue.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-#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 OpenRA.Traits;
-
-namespace OpenRA.Mods.Common.Traits
-{
- [Desc("Overrides the build time calculated by actor value.")]
- public class CustomBuildTimeValueInfo : TraitInfo
- {
- [FieldLoader.Require]
- [Desc("Measured in ticks.")]
- public readonly int Value = 0;
- }
-
- public class CustomBuildTimeValue { }
-
- public static class CustomBuildTimeValueExts
- {
- const int FramesPerMin = 25 * 60;
-
- public static int GetBuildTime(this ActorInfo a)
- {
- var csv = a.TraitInfoOrDefault();
- if (csv != null)
- return csv.Value;
-
- var cost = a.HasTraitInfo() ? a.TraitInfo().Cost : 0;
- return cost * FramesPerMin / 1000;
- }
- }
-}
diff --git a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs
index ebbc5c6839..c0ad9f5904 100644
--- a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs
+++ b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs
@@ -118,21 +118,16 @@ namespace OpenRA.Mods.Common.Traits
return false;
}
- public override int GetBuildTime(string unitString)
- {
- return GetBuildTime(self.World.Map.Rules.Actors[unitString]);
- }
-
- public override int GetBuildTime(ActorInfo unit, BuildableInfo bi = null)
+ public override int GetBuildTime(ActorInfo unit, BuildableInfo bi)
{
if (developerMode.FastBuild)
return 0;
- var time = unit.GetBuildTime() * Info.BuildSpeed / 100;
+ var time = base.GetBuildTime(unit, bi);
if (info.SpeedUp)
{
- var type = (bi ?? unit.TraitInfo()).BuildAtProductionType ?? info.Type;
+ var type = bi.BuildAtProductionType ?? info.Type;
var selfsameProductionsCount = self.World.ActorsWithTrait()
.Count(p => p.Actor.Owner == self.Owner && p.Trait.Info.Produces.Contains(type));
diff --git a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs
index 51c92e46de..573e773f35 100644
--- a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs
+++ b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs
@@ -35,7 +35,7 @@ namespace OpenRA.Mods.Common.Traits
public readonly bool Sticky = true;
[Desc("This percentage value is multiplied with actor cost to translate into build time (lower means faster).")]
- public readonly int BuildSpeed = 40;
+ public readonly int BuildDurationModifier = 100;
[Desc("The build time is multiplied with this value on low power.")]
public readonly int LowPowerSlowdown = 3;
@@ -309,17 +309,19 @@ namespace OpenRA.Mods.Common.Traits
}
}
- public virtual int GetBuildTime(string unitString)
- {
- return GetBuildTime(self.World.Map.Rules.Actors[unitString]);
- }
-
- public virtual int GetBuildTime(ActorInfo unit, BuildableInfo bi = null)
+ public virtual int GetBuildTime(ActorInfo unit, BuildableInfo bi)
{
if (developerMode.FastBuild)
return 0;
- var time = unit.GetBuildTime() * Info.BuildSpeed / 100;
+ var time = bi.BuildDuration;
+ if (time == -1)
+ {
+ var valued = unit.TraitInfoOrDefault();
+ time = valued != null ? valued.Cost : 0;
+ }
+
+ time = time * bi.BuildDurationModifier * Info.BuildDurationModifier / 10000;
return time;
}
@@ -415,6 +417,8 @@ namespace OpenRA.Mods.Common.Traits
public bool Started { get; private set; }
public int Slowdown { get; private set; }
+ readonly ActorInfo ai;
+ readonly BuildableInfo bi;
readonly PowerManager pm;
public ProductionItem(ProductionQueue queue, string item, int cost, PowerManager pm, Action onComplete)
@@ -425,13 +429,15 @@ namespace OpenRA.Mods.Common.Traits
OnComplete = onComplete;
Queue = queue;
this.pm = pm;
+ ai = Queue.Actor.World.Map.Rules.Actors[Item];
+ bi = ai.TraitInfo();
}
public void Tick(PlayerResources pr)
{
if (!Started)
{
- var time = Queue.GetBuildTime(Item);
+ var time = Queue.GetBuildTime(ai, bi);
if (time > 0)
RemainingTime = TotalTime = time;
diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
index 91d6fc7dec..0a54f842b0 100644
--- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
+++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs
@@ -292,7 +292,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
// DisplayTimer was replaced by DisplayTimerStances
- if (engineVersion < 20160710)
+ if (engineVersion < 20160820)
{
if (node.Key == "DisplayTimer")
{
@@ -305,6 +305,39 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
+ if (engineVersion < 20160821)
+ {
+ // Shifted custom build time properties to Buildable
+ if (depth == 0)
+ {
+ var cbtv = node.Value.Nodes.FirstOrDefault(n => n.Key == "CustomBuildTimeValue");
+ if (cbtv != null)
+ {
+ var bi = node.Value.Nodes.FirstOrDefault(n => n.Key == "Buildable");
+
+ if (bi == null)
+ node.Value.Nodes.Add(bi = new MiniYamlNode("Buildable", ""));
+
+ var value = cbtv.Value.Nodes.First(n => n.Key == "Value");
+ value.Key = "BuildDuration";
+ bi.Value.Nodes.Add(value);
+ bi.Value.Nodes.Add(new MiniYamlNode("BuildDurationModifier", "40"));
+ }
+
+ node.Value.Nodes.RemoveAll(n => n.Key == "CustomBuildTimeValue");
+ node.Value.Nodes.RemoveAll(n => n.Key == "-CustomBuildTimeValue");
+ }
+
+ // rename ProductionQueue.BuildSpeed
+ if (node.Key == "BuildSpeed")
+ {
+ node.Key = "BuildDurationModifier";
+ var oldValue = FieldLoader.GetValue(node.Key, node.Value.Value);
+ oldValue = oldValue * 100 / 40;
+ node.Value.Value = oldValue.ToString();
+ }
+ }
+
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
}
diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml
index c8f8383863..04c4e07cf7 100644
--- a/mods/cnc/rules/structures.yaml
+++ b/mods/cnc/rules/structures.yaml
@@ -25,7 +25,6 @@ FACT:
Type: Building.GDI
Factions: gdi
Group: Building
- BuildSpeed: 40
LowPowerSlowdown: 2
QueuedAudio: Building
ReadyAudio: ConstructionComplete
@@ -33,7 +32,6 @@ FACT:
Type: Building.Nod
Factions: nod
Group: Building
- BuildSpeed: 40
LowPowerSlowdown: 2
QueuedAudio: Building
ReadyAudio: ConstructionComplete
@@ -41,7 +39,6 @@ FACT:
Type: Defence.GDI
Factions: gdi
Group: Defence
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
@@ -49,7 +46,6 @@ FACT:
Type: Defence.Nod
Factions: nod
Group: Defence
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
@@ -260,7 +256,6 @@ PYLE:
Type: Infantry.GDI
Group: Infantry
RequireOwner: false
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionBar:
Power:
@@ -301,7 +296,6 @@ HAND:
Type: Infantry.Nod
Group: Infantry
RequireOwner: false
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionBar:
Power:
@@ -347,7 +341,6 @@ AFLD:
Type: Vehicle.Nod
Group: Vehicle
RequireOwner: false
- BuildSpeed: 40
LowPowerSlowdown: 3
ReadyAudio:
ProductionBar:
@@ -394,7 +387,6 @@ WEAP:
Type: Vehicle.GDI
RequireOwner: false
Group: Vehicle
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionBar:
Power:
@@ -432,13 +424,11 @@ HPAD:
Type: Aircraft.GDI
Factions: gdi
Group: Aircraft
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionQueue@Nod:
Type: Aircraft.Nod
Factions: nod
Group: Aircraft
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionBar@GDI:
ProductionType: Aircraft.GDI
@@ -652,8 +642,6 @@ GUN:
Inherits: ^Defense
Valued:
Cost: 600
- CustomBuildTimeValue:
- Value: 1440
Tooltip:
Name: Turret
Description: Basic Anti-Tank base defense.\n Strong vs Tanks, vehicles\n Weak vs Infantry
@@ -661,6 +649,8 @@ GUN:
BuildPaletteOrder: 45
Prerequisites: barracks
Queue: Defence.GDI, Defence.Nod
+ BuildDuration: 1440
+ BuildDurationModifier: 40
Building:
Health:
HP: 400
@@ -693,8 +683,6 @@ SAM:
Inherits: ^Defense
Valued:
Cost: 650
- CustomBuildTimeValue:
- Value: 1700
Tooltip:
Name: SAM Site
Description: Anti-Aircraft base defense.\n Strong vs Aircraft\n Cannot target Ground units.
@@ -702,6 +690,8 @@ SAM:
BuildPaletteOrder: 50
Prerequisites: hand
Queue: Defence.Nod
+ BuildDuration: 1700
+ BuildDurationModifier: 40
Building:
Footprint: xx
Dimensions: 2,1
@@ -735,8 +725,6 @@ OBLI:
Inherits: ^Defense
Valued:
Cost: 1500
- CustomBuildTimeValue:
- Value: 3120
Tooltip:
Name: Obelisk of Light
Description: Advanced base defense.\nRequires power to operate.\n Strong vs all Ground units\n Cannot target Aircraft
@@ -744,6 +732,8 @@ OBLI:
BuildPaletteOrder: 60
Prerequisites: tmpl, ~techlevel.high
Queue: Defence.Nod
+ BuildDuration: 3120
+ BuildDurationModifier: 40
Selectable:
Bounds: 24,24
SelectionDecorations:
@@ -777,8 +767,6 @@ GTWR:
Inherits: ^Defense
Valued:
Cost: 600
- CustomBuildTimeValue:
- Value: 1440
Tooltip:
Name: Guard Tower
Description: Basic defensive structure.\n Strong vs Infantry\n Weak vs Tanks
@@ -786,6 +774,8 @@ GTWR:
BuildPaletteOrder: 40
Prerequisites: barracks
Queue: Defence.GDI, Defence.Nod
+ BuildDuration: 1440
+ BuildDurationModifier: 40
Building:
Health:
HP: 400
@@ -812,8 +802,6 @@ ATWR:
Inherits: ^Defense
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 2880
Tooltip:
Name: Advanced Guard Tower
Description: All-purpose defensive structure.\n Strong vs Aircraft, Tanks\n Weak vs Infantry
@@ -821,6 +809,8 @@ ATWR:
BuildPaletteOrder: 60
Prerequisites: anyhq, ~techlevel.medium
Queue: Defence.GDI
+ BuildDuration: 2880
+ BuildDurationModifier: 40
Selectable:
Bounds: 24,24
SelectionDecorations:
@@ -904,8 +894,6 @@ BRIK:
Inherits: ^Wall
Valued:
Cost: 150
- CustomBuildTimeValue:
- Value: 500
CustomSellValue:
Value: 0
Tooltip:
@@ -915,6 +903,8 @@ BRIK:
BuildPaletteOrder: 30
Prerequisites: vehicleproduction
Queue: Defence.GDI, Defence.Nod
+ BuildDuration: 500
+ BuildDurationModifier: 40
Health:
HP: 250
Armor:
diff --git a/mods/cnc/rules/tech.yaml b/mods/cnc/rules/tech.yaml
index 2ce2a0e867..ce550b818c 100644
--- a/mods/cnc/rules/tech.yaml
+++ b/mods/cnc/rules/tech.yaml
@@ -69,7 +69,6 @@ BIO:
Type: Biolab
Group: Infantry
RequireOwner: false
- BuildSpeed: 40
LowPowerSlowdown: 3
ProductionBar:
RallyPoint:
diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml
index d0d73bdfee..3a188e53b7 100644
--- a/mods/d2k/rules/aircraft.yaml
+++ b/mods/d2k/rules/aircraft.yaml
@@ -2,8 +2,6 @@ carryall.reinforce:
Inherits: ^Plane
Valued:
Cost: 1100
- CustomBuildTimeValue:
- Value: 648
Tooltip:
Name: Carryall
Description: Large winged, planet-bound ship\n Automatically lifts harvesters.
@@ -40,6 +38,9 @@ carryall.reinforce:
Step: 5
Delay: 3
HealIfBelow: 50
+ Buildable:
+ BuildDuration: 648
+ BuildDurationModifier: 40
carryall:
Inherits: carryall.reinforce
diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml
index 4224f0178f..00456a2c21 100644
--- a/mods/d2k/rules/infantry.yaml
+++ b/mods/d2k/rules/infantry.yaml
@@ -3,10 +3,10 @@ light_inf:
Buildable:
Queue: Infantry
BuildPaletteOrder: 10
+ BuildDuration: 54
+ BuildDurationModifier: 40
Valued:
Cost: 50
- CustomBuildTimeValue:
- Value: 54
Tooltip:
Name: Light Infantry
Description: General-purpose infantry\n Strong vs Infantry\n Weak vs Vehicles, Artillery
@@ -26,10 +26,10 @@ engineer:
Queue: Infantry
BuildPaletteOrder: 50
Prerequisites: upgrade.barracks, ~techlevel.medium
+ BuildDuration: 108
+ BuildDurationModifier: 40
Valued:
Cost: 400
- CustomBuildTimeValue:
- Value: 108
Tooltip:
Name: Engineer
Description: Infiltrates and captures enemy structures\n Strong vs Buildings\n Weak vs Everything
@@ -55,10 +55,10 @@ trooper:
Queue: Infantry
BuildPaletteOrder: 20
Prerequisites: upgrade.barracks, ~techlevel.medium
+ BuildDuration: 73
+ BuildDurationModifier: 40
Valued:
Cost: 90
- CustomBuildTimeValue:
- Value: 73
Tooltip:
Name: Trooper
Description: Anti-tank/Anti-aircraft infantry\n Strong vs Tanks, Aircraft\n Weak vs Infantry, Artillery
@@ -82,10 +82,10 @@ thumper:
Queue: Infantry
BuildPaletteOrder: 60
Prerequisites: upgrade.barracks, ~techlevel.high
+ BuildDuration: 108
+ BuildDurationModifier: 40
Valued:
Cost: 200
- CustomBuildTimeValue:
- Value: 108
Tooltip:
Name: Thumper
Description: Attracts nearby worms\n Unarmed
@@ -171,10 +171,10 @@ grenadier:
Queue: Infantry
BuildPaletteOrder: 80
Prerequisites: ~barracks.atreides, upgrade.barracks, high_tech_factory, ~techlevel.medium
+ BuildDuration: 81 ## Wasn't converted, copied from Sardauker who has same value in TibEd.
+ BuildDurationModifier: 40
Valued:
Cost: 80
- CustomBuildTimeValue:
- Value: 81 ## Wasn't converted, copied from Sardauker who has same value in TibEd.
Tooltip:
Name: Grenadier
Description: Infantry armed with grenades. \n Strong vs Buildings, Infantry\n Weak vs Vehicles
@@ -200,10 +200,10 @@ sardaukar:
Queue: Infantry
BuildPaletteOrder: 80
Prerequisites: ~barracks.harkonnen, palace, ~techlevel.high
+ BuildDuration: 81
+ BuildDurationModifier: 40
Valued:
Cost: 200
- CustomBuildTimeValue:
- Value: 81
Tooltip:
Name: Sardaukar
Description: Elite assault infantry\n Strong vs Infantry, Vehicles\n Weak vs Artillery
diff --git a/mods/d2k/rules/misc.yaml b/mods/d2k/rules/misc.yaml
index 98e1393887..9e5a4d36d7 100644
--- a/mods/d2k/rules/misc.yaml
+++ b/mods/d2k/rules/misc.yaml
@@ -192,10 +192,10 @@ upgrade.conyard:
Prerequisites: construction_yard
Queue: Upgrade
BuildLimit: 1
+ BuildDuration: 590
+ BuildDurationModifier: 40
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 590
RenderSprites:
Image: conyard.harkonnen
FactionImages:
@@ -214,10 +214,10 @@ upgrade.barracks:
Prerequisites: barracks
Queue: Upgrade
BuildLimit: 1
+ BuildDuration: 290
+ BuildDurationModifier: 40
Valued:
Cost: 500
- CustomBuildTimeValue:
- Value: 290
RenderSprites:
Image: barracks.harkonnen
FactionImages:
@@ -237,10 +237,10 @@ upgrade.light:
Prerequisites: light_factory
Queue: Upgrade
BuildLimit: 1
+ BuildDuration: 215
+ BuildDurationModifier: 40
Valued:
Cost: 400
- CustomBuildTimeValue:
- Value: 215
RenderSprites:
Image: light.harkonnen
FactionImages:
@@ -260,10 +260,10 @@ upgrade.heavy:
Prerequisites: heavy_factory
Queue: Upgrade
BuildLimit: 1
+ BuildDuration: 380
+ BuildDurationModifier: 40
Valued:
Cost: 800
- CustomBuildTimeValue:
- Value: 380
RenderSprites:
Image: heavy.harkonnen
FactionImages:
@@ -283,10 +283,10 @@ upgrade.hightech:
Prerequisites: ~hightech.atreides, ~techlevel.superweapons
Queue: Upgrade
BuildLimit: 1
+ BuildDuration: 720
+ BuildDurationModifier: 40
Valued:
Cost: 1500
- CustomBuildTimeValue:
- Value: 720
RenderSprites:
Image: hightech.atreides
ProvidesPrerequisite@upgradename:
diff --git a/mods/d2k/rules/player.yaml b/mods/d2k/rules/player.yaml
index 1784c8849c..07953f32a6 100644
--- a/mods/d2k/rules/player.yaml
+++ b/mods/d2k/rules/player.yaml
@@ -3,7 +3,7 @@ Player:
TechTree:
ClassicProductionQueue@Building:
Type: Building
- BuildSpeed: 100
+ BuildDurationModifier: 250
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: BuildingReady
@@ -11,7 +11,7 @@ Player:
SpeedUp: true
ClassicProductionQueue@Upgrade:
Type: Upgrade
- BuildSpeed: 100
+ BuildDurationModifier: 250
LowPowerSlowdown: 0
QueuedAudio: Upgrading
ReadyAudio: NewOptions
@@ -19,34 +19,34 @@ Player:
SpeedUp: true
ClassicProductionQueue@Infantry:
Type: Infantry
- BuildSpeed: 100
+ BuildDurationModifier: 250
LowPowerSlowdown: 3
BlockedAudio: NoRoom
SpeedUp: true
ClassicProductionQueue@Vehicle:
Type: Vehicle
- BuildSpeed: 100
+ BuildDurationModifier: 250
LowPowerSlowdown: 3
QueuedAudio: Building
BlockedAudio: NoRoom
SpeedUp: true
ClassicProductionQueue@Armor:
Type: Armor
- BuildSpeed: 100
+ BuildDurationModifier: 250
LowPowerSlowdown: 3
QueuedAudio: Building
BlockedAudio: NoRoom
SpeedUp: true
ClassicProductionQueue@Starport:
Type: Starport
- BuildSpeed: 85
+ BuildDurationModifier: 212
LowPowerSlowdown: 0
BlockedAudio: NoRoom
QueuedAudio: OrderPlaced
ReadyAudio:
ClassicProductionQueue@Aircraft:
Type: Aircraft
- BuildSpeed: 125
+ BuildDurationModifier: 312
LowPowerSlowdown: 3
QueuedAudio: Building
BlockedAudio: NoRoom
diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml
index 91e82168ff..02f7ed204c 100644
--- a/mods/d2k/rules/structures.yaml
+++ b/mods/d2k/rules/structures.yaml
@@ -26,8 +26,9 @@ concretea:
Dimensions: 2,2
Valued:
Cost: 20
- CustomBuildTimeValue:
- Value: 54
+ Buildable:
+ BuildDuration: 54
+ BuildDurationModifier: 40
concreteb:
Inherits: ^concrete
@@ -36,10 +37,10 @@ concreteb:
Dimensions: 3,3
Valued:
Cost: 50
- CustomBuildTimeValue:
- Value: 81
Buildable:
Prerequisites: construction_yard, upgrade.conyard
+ BuildDuration: 81
+ BuildDurationModifier: 40
construction_yard:
Inherits: ^Building
@@ -111,12 +112,12 @@ wind_trap:
Queue: Building
Prerequisites: construction_yard
BuildPaletteOrder: 10
+ BuildDuration: 180
+ BuildDurationModifier: 40
Selectable:
Bounds: 64,64
Valued:
Cost: 225
- CustomBuildTimeValue:
- Value: 180
Tooltip:
Name: Wind Trap
Description: Provides power for other structures
@@ -150,12 +151,12 @@ barracks:
Prerequisites: construction_yard, wind_trap
Queue: Building
BuildPaletteOrder: 40
+ BuildDuration: 231
+ BuildDurationModifier: 40
Selectable:
Bounds: 64,64
Valued:
Cost: 225
- CustomBuildTimeValue:
- Value: 231
Tooltip:
Name: Barracks
Description: Trains infantry
@@ -225,12 +226,12 @@ refinery:
Prerequisites: construction_yard, wind_trap
Queue: Building
BuildPaletteOrder: 20
+ BuildDuration: 540
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,64
Valued:
Cost: 1500
- CustomBuildTimeValue:
- Value: 540
Tooltip:
Name: Spice Refinery
Description: Harvesters unload Spice here for processing
@@ -280,12 +281,12 @@ silo:
Prerequisites: construction_yard, refinery
Queue: Building
BuildPaletteOrder: 30
+ BuildDuration: 135
+ BuildDurationModifier: 40
Selectable:
Bounds: 32,32
Valued:
Cost: 120
- CustomBuildTimeValue:
- Value: 135
Tooltip:
Name: Silo
Description: Stores excess harvested Spice
@@ -327,12 +328,12 @@ light_factory:
Prerequisites: construction_yard, refinery
Queue: Building
BuildPaletteOrder: 70
+ BuildDuration: 277
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,64
Valued:
Cost: 500
- CustomBuildTimeValue:
- Value: 277
Tooltip:
Name: Light Factory
Description: Produces light vehicles
@@ -406,12 +407,12 @@ heavy_factory:
Prerequisites: construction_yard, refinery
Queue: Building
BuildPaletteOrder: 100
+ BuildDuration: 648
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,68,0,12
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 648
Tooltip:
Name: Heavy Factory
Description: Produces heavy vehicles
@@ -492,12 +493,12 @@ outpost:
Prerequisites: construction_yard, barracks, ~techlevel.medium
Queue: Building
BuildPaletteOrder: 50
+ BuildDuration: 270
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,72,0,-8
Valued:
Cost: 750
- CustomBuildTimeValue:
- Value: 270
Tooltip:
Name: Outpost
Description: Provides a radar map of the battlefield\n Requires power to operate
@@ -535,10 +536,10 @@ starport:
Prerequisites: construction_yard, heavy_factory, outpost, ~techlevel.high
Queue: Building
BuildPaletteOrder: 80
+ BuildDuration: 540
+ BuildDurationModifier: 40
Valued:
Cost: 1500
- CustomBuildTimeValue:
- Value: 540
Building:
Footprint: xxx x=x =x=
Dimensions: 3,3
@@ -605,13 +606,13 @@ wall:
Queue: Building
Prerequisites: construction_yard, barracks
BuildPaletteOrder: 60
+ BuildDuration: 54
+ BuildDurationModifier: 40
SoundOnDamageTransition:
DamagedSounds:
DestroyedSounds: EXPLSML4.WAV
Valued:
Cost: 20
- CustomBuildTimeValue:
- Value: 54
CustomSellValue:
Value: 0
Tooltip:
@@ -657,10 +658,10 @@ medium_gun_turret:
Queue: Building
Prerequisites: construction_yard, barracks
BuildPaletteOrder: 90
+ BuildDuration: 231
+ BuildDurationModifier: 40
Valued:
Cost: 550
- CustomBuildTimeValue:
- Value: 231
Tooltip:
Name: Gun Turret
Description: Defensive structure\n Strong vs Tanks\n Weak vs Infantry, Aircraft
@@ -699,10 +700,10 @@ large_gun_turret:
Queue: Building
Prerequisites: construction_yard, outpost, upgrade.conyard, ~techlevel.medium
BuildPaletteOrder: 120
+ BuildDuration: 270
+ BuildDurationModifier: 40
Valued:
Cost: 750
- CustomBuildTimeValue:
- Value: 270
Tooltip:
Name: Rocket Turret
Description: Defensive structure\n Strong vs Infantry, Aircraft\n Weak vs Tanks\n\n Requires power to operate
@@ -744,10 +745,10 @@ repair_pad:
Queue: Building
Prerequisites: construction_yard, heavy_factory, upgrade.heavy, ~techlevel.medium
BuildPaletteOrder: 130
+ BuildDuration: 324
+ BuildDurationModifier: 40
Valued:
Cost: 800
- CustomBuildTimeValue:
- Value: 324
Tooltip:
Name: Repair Pad
Description: Repairs vehicles\n Allows construction of MCVs
@@ -791,12 +792,12 @@ high_tech_factory:
Prerequisites: construction_yard, outpost, ~techlevel.medium
Queue: Building
BuildPaletteOrder: 110
+ BuildDuration: 405
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,68,0,12
Valued:
Cost: 1150
- CustomBuildTimeValue:
- Value: 405
Tooltip:
Name: High Tech Factory
Description: Unlocks advanced technology
@@ -860,12 +861,12 @@ research_centre:
Queue: Building
Prerequisites: construction_yard, outpost, heavy_factory, upgrade.heavy, ~techlevel.high
BuildPaletteOrder: 140
+ BuildDuration: 270
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,64,0,16
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 270
Tooltip:
Name: Ix Lab
Description: Unlocks experimental tanks
@@ -900,12 +901,12 @@ palace:
Prerequisites: construction_yard, research_centre, ~techlevel.high
Queue: Building
BuildPaletteOrder: 150
+ BuildDuration: 810
+ BuildDurationModifier: 40
Selectable:
Bounds: 96,96
Valued:
Cost: 1600
- CustomBuildTimeValue:
- Value: 810
Tooltip:
Name: Palace
Description: Unlocks elite infantry
diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml
index 6f848aaf83..7724c0eeab 100644
--- a/mods/d2k/rules/vehicles.yaml
+++ b/mods/d2k/rules/vehicles.yaml
@@ -4,10 +4,10 @@ mcv:
Prerequisites: repair_pad, upgrade.heavy, ~techlevel.medium
Queue: Armor
BuildPaletteOrder: 110
+ BuildDuration: 648
+ BuildDurationModifier: 40
Valued:
Cost: 2000
- CustomBuildTimeValue:
- Value: 648
Tooltip:
Name: Mobile Construction Vehicle
Description: Deploys into another Construction Yard\n Unarmed
@@ -52,10 +52,10 @@ harvester:
Queue: Armor
Prerequisites: refinery
BuildPaletteOrder: 10
+ BuildDuration: 540
+ BuildDurationModifier: 40
Valued:
Cost: 1200
- CustomBuildTimeValue:
- Value: 540
Tooltip:
Name: Spice Harvester
Description: Collects Spice for processing\n Unarmed
@@ -102,10 +102,10 @@ trike:
Queue: Vehicle
BuildPaletteOrder: 10
Prerequisites: ~light.regulartrikes
+ BuildDuration: 194
+ BuildDurationModifier: 40
Valued:
Cost: 300
- CustomBuildTimeValue:
- Value: 194
Tooltip:
Name: Trike
Description: Fast scout\n Strong vs Infantry\n Weak vs Tanks, Aircraft
@@ -142,10 +142,10 @@ quad:
Queue: Vehicle
Prerequisites: upgrade.light, ~techlevel.medium
BuildPaletteOrder: 20
+ BuildDuration: 277
+ BuildDurationModifier: 40
Valued:
Cost: 400
- CustomBuildTimeValue:
- Value: 277
Tooltip:
Name: Missile Quad
Description: Missile Scout\n Strong vs Vehicles\n Weak vs Infantry
@@ -177,10 +177,10 @@ siege_tank:
Queue: Armor
Prerequisites: upgrade.heavy, ~techlevel.medium
BuildPaletteOrder: 50
+ BuildDuration: 324
+ BuildDurationModifier: 40
Valued:
Cost: 700
- CustomBuildTimeValue:
- Value: 324
Tooltip:
Name: Siege Tank
Description: Siege Artillery\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft
@@ -226,10 +226,10 @@ missile_tank:
Queue: Armor
Prerequisites: ~heavy.missiletank, upgrade.heavy, research_centre, ~techlevel.high
BuildPaletteOrder: 60
+ BuildDuration: 441
+ BuildDurationModifier: 40
Valued:
Cost: 900
- CustomBuildTimeValue:
- Value: 441
Mobile:
Speed: 64
TurnSpeed: 5
@@ -261,10 +261,10 @@ sonic_tank:
Queue: Armor
BuildPaletteOrder: 100
Prerequisites: ~heavy.atreides, research_centre, ~techlevel.high
+ BuildDuration: 486
+ BuildDurationModifier: 40
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 486
Tooltip:
Name: Sonic Tank
Description: Fires sonic shocks\n Strong vs Infantry, Vehicles\n Weak vs Artillery, Aircraft
@@ -298,10 +298,10 @@ devastator:
Queue: Armor
BuildPaletteOrder: 100
Prerequisites: ~heavy.harkonnen, research_centre, ~techlevel.high
+ BuildDuration: 540
+ BuildDurationModifier: 40
Valued:
Cost: 1050
- CustomBuildTimeValue:
- Value: 540
Tooltip:
Name: Devastator
Description: Super Heavy Tank\n Strong vs Tanks\n Weak vs Artillery, Aircraft
@@ -343,10 +343,10 @@ raider:
Queue: Vehicle
BuildPaletteOrder: 10
Prerequisites: ~light.ordos
+ BuildDuration: 194
+ BuildDurationModifier: 40
Valued:
Cost: 350
- CustomBuildTimeValue:
- Value: 194
Tooltip:
Name: Raider Trike
Description: Improved Scout\n Strong vs Infantry, Light Vehicles
@@ -380,10 +380,10 @@ stealth_raider:
Buildable:
Prerequisites: ~light.ordos, upgrade.light, high_tech_factory, ~techlevel.medium
BuildPaletteOrder: 30
+ BuildDuration: 194 ## Copied from Raider, not included in conversion. Both have same "BuildSpeed" in TibEd
+ BuildDurationModifier: 40
Valued:
Cost: 400
- CustomBuildTimeValue:
- Value: 194 ## Copied from Raider, not included in conversion. Both have same "BuildSpeed" in TibEd
Tooltip:
Name: Stealth Raider Trike
Description: Invisible Raider Trike\n Strong vs Infantry, Light Vehicles
@@ -402,8 +402,6 @@ deviator:
Inherits: ^Tank
Valued:
Cost: 1000
- CustomBuildTimeValue:
- Value: 486
Tooltip:
Name: Deviator
Description: Fires a warhead which changes\nthe allegiance of enemy vehicles
@@ -411,6 +409,8 @@ deviator:
Queue: Armor
BuildPaletteOrder: 50
Prerequisites: ~heavy.ordos, research_centre, ~techlevel.high
+ BuildDuration: 486
+ BuildDurationModifier: 40
Mobile:
TurnSpeed: 3
Speed: 53
@@ -439,10 +439,10 @@ deviator:
Buildable:
Queue: Armor
BuildPaletteOrder: 40
+ BuildDuration: 373
+ BuildDurationModifier: 40
Valued:
Cost: 700
- CustomBuildTimeValue:
- Value: 373
Tooltip:
Name: Combat Tank
Description: Main Battle Tank\n Strong vs Tanks\n Weak vs Infantry, Aircraft\n \n Atreides: +Range\n Harkonnen: +Health\n Ordos: +Speed
diff --git a/mods/ra/maps/bomber-john/rules.yaml b/mods/ra/maps/bomber-john/rules.yaml
index 6c09de0aea..2af3a42a4b 100644
--- a/mods/ra/maps/bomber-john/rules.yaml
+++ b/mods/ra/maps/bomber-john/rules.yaml
@@ -53,8 +53,6 @@ SILO:
Prerequisites: ~disabled
Player:
- ClassicProductionQueue@Building:
- BuildSpeed: 40
Shroud:
FogLocked: True
FogEnabled: True
diff --git a/mods/ra/maps/fort-lonestar/rules.yaml b/mods/ra/maps/fort-lonestar/rules.yaml
index 74fe00a94a..22def065b8 100644
--- a/mods/ra/maps/fort-lonestar/rules.yaml
+++ b/mods/ra/maps/fort-lonestar/rules.yaml
@@ -86,7 +86,7 @@ FORTCRATE:
Player:
ClassicProductionQueue@Infantry:
- BuildSpeed: 100
+ BuildDurationModifier: 250
-EnemyWatcher:
Shroud:
FogLocked: True
diff --git a/mods/ra/maps/training-camp/rules.yaml b/mods/ra/maps/training-camp/rules.yaml
index dfa727f0fb..c5d0f2fe1a 100644
--- a/mods/ra/maps/training-camp/rules.yaml
+++ b/mods/ra/maps/training-camp/rules.yaml
@@ -11,9 +11,9 @@ World:
Player:
ClassicProductionQueue@Infantry:
- BuildSpeed: 100
+ BuildDurationModifier: 250
ClassicProductionQueue@Vehicle:
- BuildSpeed: 100
+ BuildDurationModifier: 250
Shroud:
FogLocked: True
FogEnabled: True
diff --git a/mods/ra/rules/player.yaml b/mods/ra/rules/player.yaml
index 686dd4c003..6ef8a5fbff 100644
--- a/mods/ra/rules/player.yaml
+++ b/mods/ra/rules/player.yaml
@@ -3,38 +3,32 @@ Player:
TechTree:
ClassicProductionQueue@Building:
Type: Building
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
SpeedUp: True
ClassicProductionQueue@Defense:
Type: Defense
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
SpeedUp: True
ClassicProductionQueue@Vehicle:
Type: Vehicle
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
SpeedUp: True
ClassicProductionQueue@Infantry:
Type: Infantry
- BuildSpeed: 40
LowPowerSlowdown: 3
SpeedUp: True
ClassicProductionQueue@Ship:
Type: Ship
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
SpeedUp: True
ClassicProductionQueue@Aircraft:
Type: Aircraft
- BuildSpeed: 40
LowPowerSlowdown: 3
QueuedAudio: Building
SpeedUp: True
diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml
index 824a69426c..1aae1c36ba 100644
--- a/mods/ra/rules/vehicles.yaml
+++ b/mods/ra/rules/vehicles.yaml
@@ -152,10 +152,10 @@ V2RL:
Queue: Vehicle
BuildPaletteOrder: 190
Prerequisites: fix, stek, ~vehicles.soviet, ~techlevel.high
+ BuildDuration: 2500
+ BuildDurationModifier: 40
Valued:
Cost: 2000
- CustomBuildTimeValue:
- Value: 2500
Tooltip:
Name: Mammoth Tank
Description: Big and slow tank, with anti-air capability.\n Strong vs Vehicles, Infantry, Aircraft\n Weak vs Nothing
@@ -288,8 +288,8 @@ MCV:
Queue: Vehicle
BuildPaletteOrder: 90
Prerequisites: fix, ~techlevel.medium
- CustomBuildTimeValue:
- Value: 2000
+ BuildDuration: 2000
+ BuildDurationModifier: 40
Valued:
Cost: 2000
Tooltip:
diff --git a/mods/ts/rules/player.yaml b/mods/ts/rules/player.yaml
index 63bfb7f899..738db4d503 100644
--- a/mods/ts/rules/player.yaml
+++ b/mods/ts/rules/player.yaml
@@ -4,31 +4,31 @@ Player:
GlobalUpgradeManager:
ClassicProductionQueue@Building:
Type: Building
- BuildSpeed: 48
+ BuildDurationModifier: 120
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
SpeedUp: True
ClassicProductionQueue@Defense:
Type: Defense
- BuildSpeed: 48
+ BuildDurationModifier: 120
LowPowerSlowdown: 3
QueuedAudio: Building
ReadyAudio: ConstructionComplete
SpeedUp: True
ClassicProductionQueue@Vehicle:
Type: Vehicle
- BuildSpeed: 48
+ BuildDurationModifier: 120
LowPowerSlowdown: 3
SpeedUp: True
ClassicProductionQueue@Infantry:
Type: Infantry
- BuildSpeed: 48
+ BuildDurationModifier: 120
LowPowerSlowdown: 3
SpeedUp: True
ClassicProductionQueue@Air:
Type: Air
- BuildSpeed: 48
+ BuildDurationModifier: 120
LowPowerSlowdown: 3
SpeedUp: True
PlaceBuilding: