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: