diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index f535020bea..ca1ffb2135 100755 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -18,8 +18,9 @@ namespace OpenRA.Mods.RA { public class ClassicProductionQueueInfo : ProductionQueueInfo, Requires, Requires, Requires { - public readonly float SpeedUp = 0; - public readonly float MaxSpeedUp = 0; + public readonly bool SpeedUp = false; + public readonly int BuildTimeSpeedUpDivisor = 2; + public readonly int MaxBuildTimeReductionSteps = 6; public override object Create(ActorInitializer init) { return new ClassicProductionQueue(init.self, this); } } @@ -90,19 +91,21 @@ namespace OpenRA.Mods.RA if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().FastBuild) return 0; - var selfsameBuildings = self.World.ActorsWithTrait() - .Where(p => p.Trait.Info.Produces.Contains(unit.Traits.Get().Queue)) - .Where(p => p.Actor.Owner == self.Owner).ToArray(); + var time = (int) (unit.GetBuildTime() * Info.BuildSpeedModifier); - var selfsameQueue = Rules.Info["player"].Traits.WithInterface() - .First(p => selfsameBuildings.First().Trait.Info.Produces.Contains(p.Type)); + if (Info.SpeedUp) + { + var selfsameBuildings = self.World.ActorsWithTrait() + .Where(p => p.Trait.Info.Produces.Contains(unit.Traits.Get().Queue)) + .Where(p => p.Actor.Owner == self.Owner).ToArray(); - var speedUp = 1 - (selfsameQueue.SpeedUp * (selfsameBuildings.Count() - 1)).Clamp(0, selfsameQueue.MaxSpeedUp); + var BuildTimeReductionSteps = Math.Min(selfsameBuildings.Count(), Info.MaxBuildTimeReductionSteps); - var time = unit.GetBuildTime() * Info.BuildSpeed * speedUp; + for (int i = 1; i < BuildTimeReductionSteps; i++) + time /= Info.BuildTimeSpeedUpDivisor; + } - - return (int) time; + return time; } } } diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index 93ac9835db..0ede600792 100755 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA public readonly string Type = null; public readonly string Group = null; - public float BuildSpeed = 0.4f; + public float BuildSpeedModifier = 0.4f; public readonly int LowPowerSlowdown = 3; public readonly string ReadyAudio = "UnitReady"; @@ -262,7 +262,7 @@ namespace OpenRA.Mods.RA if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait().FastBuild) return 0; - var time = unit.GetBuildTime() * Info.BuildSpeed; + var time = unit.GetBuildTime() * Info.BuildSpeedModifier; return (int) time; } diff --git a/mods/cnc-classic/rules/system.yaml b/mods/cnc-classic/rules/system.yaml index 1b0dca0ec6..28ead309e8 100644 --- a/mods/cnc-classic/rules/system.yaml +++ b/mods/cnc-classic/rules/system.yaml @@ -6,34 +6,39 @@ Player: LowPowerSlowdown: 3 QueuedAudio: Building ReadyAudio: ConstructionComplete - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Defense: Type: Defense BuildSpeed: .4 LowPowerSlowdown: 3 QueuedAudio: Building ReadyAudio: ConstructionComplete - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Vehicle: Type: Vehicle BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Infantry: Type: Infantry BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Aircraft: Type: Aircraft BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 PlaceBuilding: SupportPowerManager: ConquestVictoryConditions: diff --git a/mods/ra-classic/rules/structures.yaml b/mods/ra-classic/rules/structures.yaml index 3ecac80e44..1bbfced3e2 100644 --- a/mods/ra-classic/rules/structures.yaml +++ b/mods/ra-classic/rules/structures.yaml @@ -642,6 +642,10 @@ FACT: Power: 0 Footprint: xxx xxx xxx Dimensions: 3,3 + Buildable: + Queue: Building + BuildPaletteOrder: 1000 + Owner: None Health: HP: 1000 Armor: @@ -651,11 +655,12 @@ FACT: Bib: Production: Produces: Building,Defense - IronCurtainable: + IronCurtainable: Valued: Cost: 2500 Tooltip: Name: Construction Yard + Description: Builds base structures. CustomSellValue: Value: 2500 BaseBuilding: diff --git a/mods/ra-classic/rules/system.yaml b/mods/ra-classic/rules/system.yaml index 8e1ebc19e6..5c49d83a19 100644 --- a/mods/ra-classic/rules/system.yaml +++ b/mods/ra-classic/rules/system.yaml @@ -6,40 +6,46 @@ Player: LowPowerSlowdown: 3 QueuedAudio: Building ReadyAudio: ConstructionComplete - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Defense: Type: Defense BuildSpeed: .4 LowPowerSlowdown: 3 QueuedAudio: Building ReadyAudio: ConstructionComplete - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Vehicle: Type: Vehicle BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Infantry: Type: Infantry BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Ship: Type: Ship BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 ClassicProductionQueue@Plane: Type: Plane BuildSpeed: .4 LowPowerSlowdown: 3 - SpeedUp: 0.25 - MaxSpeedUp: 0.75 + SpeedUp: yes + BuildTimeSpeedUpDivisor: 2 + MaxBuildTimeReductionSteps: 6 PlaceBuilding: SupportPowerManager: ConquestVictoryConditions: