diff --git a/OpenRA.Game/Traits/Mobile.cs b/OpenRA.Game/Traits/Mobile.cs index 19d2097c79..992268f612 100644 --- a/OpenRA.Game/Traits/Mobile.cs +++ b/OpenRA.Game/Traits/Mobile.cs @@ -21,6 +21,8 @@ namespace OpenRA.Traits { public readonly string[] TerrainTypes; public readonly float[] TerrainSpeeds; + public readonly string[] TerrainCostOverrides; + public readonly float[] TerrainCosts; public readonly string[] Crushes; public readonly int WaitAverage = 60; public readonly int WaitSpread = 20; @@ -97,9 +99,17 @@ namespace OpenRA.Traits if (info.TerrainTypes.Count() != info.TerrainSpeeds.Count()) throw new InvalidOperationException("Mobile TerrainType/TerrainSpeed length mismatch"); + if (info.TerrainCostOverrides != null) + for (int i = 0; i < info.TerrainCostOverrides.Count(); i++) + { + TerrainCost.Add(info.TerrainCostOverrides[i], info.TerrainCosts[i]); + } + for (int i = 0; i < info.TerrainTypes.Count(); i++) - { - TerrainCost.Add(info.TerrainTypes[i], 1f/info.TerrainSpeeds[i]); + { + if (!TerrainCost.ContainsKey(info.TerrainTypes[i])) + TerrainCost.Add(info.TerrainTypes[i], 1f/info.TerrainSpeeds[i]); + TerrainSpeed.Add(info.TerrainTypes[i], info.TerrainSpeeds[i]); } } diff --git a/mods/cnc/defaults.yaml b/mods/cnc/defaults.yaml index ee8924f166..c609e2eee9 100644 --- a/mods/cnc/defaults.yaml +++ b/mods/cnc/defaults.yaml @@ -75,6 +75,8 @@ Crushes: crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 90%, 80%, 100%, 0%, 0%, 0%, 0%, 90%, 80%, 0% + TerrainCostOverrides: Ore + TerrainCosts: 200 Selectable: Voice: GenericVoice Targetable: