diff --git a/OpenRA.Game/GameRules/GeneralInfo.cs b/OpenRA.Game/GameRules/GeneralInfo.cs deleted file mode 100644 index 970d4bfdaa..0000000000 --- a/OpenRA.Game/GameRules/GeneralInfo.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. - * This file is part of OpenRA. - * - * OpenRA is free software: you can redistribute it and/or modify - * it 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. - * - * OpenRA is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with OpenRA. If not, see . - */ -#endregion - -using System; - -namespace OpenRA.GameRules -{ - public class GeneralInfo - { - /* Special Weapons */ - public readonly float GapRegenInterval =0; - public readonly int BadgerBombCount = 1; - - /* Chrono Side Effects */ - public readonly float QuakeChance = 0; - public readonly float QuakeDamage = 0; /* percent */ - public readonly float VortexChance = 0; - public readonly int VortexDamage = 0; - public readonly int VortexRange = 0; - public readonly int VortexSpeed = 0; - - /* Repair & Refit */ - public readonly float RefundPercent = 0; - public readonly float ReloadRate = 0; - public readonly float RepairPercent = 0; - public readonly float RepairRate = 0; - public readonly int RepairStep = 0; - public readonly float URepairPercent = 0; - public readonly int URepairStep = 0; - - /* Combat & Damage */ - public readonly float TurboBoost = 1.5f; - public readonly float BallisticScatter = 0; - public readonly float C4Delay = 0; - public readonly float ExpSpread = 0; - public readonly int FireSupress = 0; - public readonly float HomingScatter = 0; - public readonly int MaxDamage = 0; - public readonly int MinDamage = 0; - public readonly bool OreExplosive = false; - public readonly bool PlayerAutoCrush = false; - public readonly bool PlayerReturnFire = false; - public readonly bool PlayerScatter = false; - public readonly bool TreeTargeting = false; - public readonly int Incoming = 0; - - /* Income & Production */ - public readonly float BuildSpeed = 0; - public readonly float BuildupTime = 0; - public readonly float OreTruckRate = 0; - public readonly bool SeparateAircraft = true; - public readonly float SurvivorRate = 0; - - /* Audo/Visual Map Controls */ - public readonly bool AllyReveal = true; - public readonly float ConditionRed = 0; - public readonly float ConditionYellow = 0; - public readonly int DropZoneRadius = 0; - public readonly bool EnemyHealth = true; - public readonly int Gravity = 0; - public readonly float IdleActionFrequency = 0; - public readonly float MessageDelay = 0; - public readonly float MovieTime = 0; - public readonly bool NamedCivilians = false; - public readonly float SavourDelay = 0; - public readonly int ShroudRate = 0; - public readonly int SpeakDelay = 0; - public readonly int TimerWarning = 0; - public readonly bool FlashLowPower = false; - - /* Computer & Movement Controls */ - public readonly bool CurleyShuffle = false; - public readonly float BaseBias = 0; - public readonly float BaseDefenseDelay = 0; - public readonly float CloseEnough = 0; - public readonly int DamageDelay = 0; - public readonly int GameSpeeBias = 0; - public readonly int LZScanRadius = 0; - public readonly bool MineAware = false; - public readonly float Stray = 0; - public readonly float SubmergeDelay = 0; - public readonly float SuspendDelay = 0; - public readonly int SuspendPriority = 0; - public readonly float TeamDelay = 0; - - /* Misc */ - [Obsolete] - public readonly bool FineDiffControl = false; - - /* OpenRA-specific */ - public readonly int LowPowerSlowdown = 3; /* build time multiplier */ - } -} diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 58a528739f..32629474f2 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -302,6 +302,7 @@ + diff --git a/OpenRA.Game/Traits/Activities/Repair.cs b/OpenRA.Game/Traits/Activities/Repair.cs index 6202f0f50b..1b6cc12e4e 100644 --- a/OpenRA.Game/Traits/Activities/Repair.cs +++ b/OpenRA.Game/Traits/Activities/Repair.cs @@ -36,11 +36,14 @@ namespace OpenRA.Traits.Activities if (isCanceled) return NextActivity; if (remainingTicks == 0) { + var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) + .FirstOrDefault(a => a.traits.Contains()); + var unitCost = self.Info.Traits.Get().Cost; var hp = self.Info.Traits.Get().HP; - var costPerHp = (self.World.Defaults.URepairPercent * unitCost) / hp; - var hpToRepair = Math.Min(self.World.Defaults.URepairStep, hp - self.Health); + var costPerHp = (hostBuilding.Info.Traits.Get().URepairPercent * unitCost) / hp; + var hpToRepair = Math.Min(hostBuilding.Info.Traits.Get().URepairStep, hp - self.Health); var cost = (int)Math.Ceiling(costPerHp * hpToRepair); if (!self.Owner.TakeCash(cost)) { @@ -52,8 +55,7 @@ namespace OpenRA.Traits.Activities if (self.Health == hp) return NextActivity; - var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) - .FirstOrDefault(a => a.traits.Contains()); + if (hostBuilding != null) hostBuilding.traits.Get() diff --git a/OpenRA.Game/Traits/Building.cs b/OpenRA.Game/Traits/Building.cs index d60f228f6f..eda691decf 100644 --- a/OpenRA.Game/Traits/Building.cs +++ b/OpenRA.Game/Traits/Building.cs @@ -125,8 +125,8 @@ namespace OpenRA.Traits var csv = self.Info.Traits.GetOrDefault(); var buildingValue = csv != null ? csv.Value : self.Info.Traits.Get().Cost; var maxHP = self.Info.Traits.Get().HP; - var costPerHp = (self.World.Defaults.URepairPercent * buildingValue) / maxHP; - var hpToRepair = Math.Min(self.World.Defaults.URepairStep, maxHP - self.Health); + var costPerHp = (self.World.Defaults.RepairPercent * buildingValue) / maxHP; + var hpToRepair = Math.Min(self.World.Defaults.RepairStep, maxHP - self.Health); var cost = (int)Math.Ceiling(costPerHp * hpToRepair); if (!self.Owner.TakeCash(cost)) { diff --git a/OpenRA.Game/Traits/RepairsUnits.cs b/OpenRA.Game/Traits/RepairsUnits.cs new file mode 100644 index 0000000000..92a43e4567 --- /dev/null +++ b/OpenRA.Game/Traits/RepairsUnits.cs @@ -0,0 +1,14 @@ + +using System; + +namespace OpenRA.Traits +{ + + public class RepairsUnitsInfo : StatelessTraitInfo + { + public readonly float URepairPercent = 0.2f; + public readonly int URepairStep = 10; + } + + public class RepairsUnits{} +} diff --git a/OpenRA.Game/Traits/World/GlobalDefaults.cs b/OpenRA.Game/Traits/World/GlobalDefaults.cs index 38c3a4716a..eae79d8baa 100644 --- a/OpenRA.Game/Traits/World/GlobalDefaults.cs +++ b/OpenRA.Game/Traits/World/GlobalDefaults.cs @@ -23,8 +23,7 @@ namespace OpenRA.Traits public readonly float RepairPercent = 0.2f; public readonly float RepairRate = 0.016f; public readonly int RepairStep = 7; - public readonly float URepairPercent = 0.2f; - public readonly int URepairStep = 10; + /* Combat & Damage */ public readonly float TurboBoost = 1.5f; diff --git a/mods/cnc/structures.yaml b/mods/cnc/structures.yaml index 633aa47fa5..ab9ffc551d 100644 --- a/mods/cnc/structures.yaml +++ b/mods/cnc/structures.yaml @@ -258,6 +258,7 @@ FIX: Sight: 3 BelowUnits: Reservable: + RepairsUnits: HPAD: Inherits: ^Building diff --git a/mods/ra/rules.yaml b/mods/ra/rules.yaml index c8f3c966a9..468d9bbefc 100755 --- a/mods/ra/rules.yaml +++ b/mods/ra/rules.yaml @@ -1736,6 +1736,7 @@ FIX: BelowUnits: Reservable: IronCurtainable: + RepairsUnits: FACF: Inherits: ^Building