diff --git a/OpenRA.FileFormats/Map/TileSet.cs b/OpenRA.FileFormats/Map/TileSet.cs index 2e9dccb954..8e3aaeb314 100644 --- a/OpenRA.FileFormats/Map/TileSet.cs +++ b/OpenRA.FileFormats/Map/TileSet.cs @@ -18,8 +18,9 @@ namespace OpenRA.FileFormats public class TerrainTypeInfo { public string Type; + public string[] TargetTypes = { }; public string[] AcceptsSmudgeType = { }; - public bool IsWater = false; + public bool IsWater = false; // TODO: Remove this public Color Color; public string CustomCursor; diff --git a/OpenRA.Game/GameRules/WeaponInfo.cs b/OpenRA.Game/GameRules/WeaponInfo.cs index b40405ceb2..d46d7c7a90 100644 --- a/OpenRA.Game/GameRules/WeaponInfo.cs +++ b/OpenRA.Game/GameRules/WeaponInfo.cs @@ -179,6 +179,11 @@ namespace OpenRA.GameRules if (!world.Map.IsInMap(cell)) return false; + var cellInfo = world.GetTerrainInfo(cell); + if (!ValidTargets.Intersect(cellInfo.TargetTypes).Any() + || InvalidTargets.Intersect(cellInfo.TargetTypes).Any()) + return false; + return true; } diff --git a/OpenRA.Utility/UpgradeRules.cs b/OpenRA.Utility/UpgradeRules.cs index b05cd084d9..fd1401d6c9 100644 --- a/OpenRA.Utility/UpgradeRules.cs +++ b/OpenRA.Utility/UpgradeRules.cs @@ -159,6 +159,24 @@ namespace OpenRA.Utility } } + static void UpgradeTileset(int engineVersion, ref List nodes, MiniYamlNode parent, int depth) + { + var parentKey = parent != null ? parent.Key.Split('@').First() : null; + List addNodes = new List(); + + foreach (var node in nodes) + { + if (engineVersion < 20140104) + { + if (depth == 2 && parentKey == "TerrainType" && node.Key.Split('@').First() == "Type") + addNodes.Add(new MiniYamlNode("TargetTypes", node.Value.Value == "Water" ? "Water" : "Ground")); + } + UpgradeTileset(engineVersion, ref node.Value.Nodes, node, depth + 1); + } + + nodes.AddRange(addNodes); + } + [Desc("MAP", "CURRENTENGINE", "Upgrade map rules to the latest engine version.")] public static void UpgradeMap(string[] args) { @@ -201,6 +219,17 @@ namespace OpenRA.Utility file.WriteLine(yaml.WriteToString()); } + Console.WriteLine("Processing Tilesets:"); + foreach (var filename in Game.modData.Manifest.TileSets) + { + Console.WriteLine("\t" + filename); + var yaml = MiniYaml.FromFile(filename); + UpgradeTileset(engineDate, ref yaml, null, 0); + + using (var file = new StreamWriter(filename)) + file.WriteLine(yaml.WriteToString()); + } + Console.WriteLine("Processing Maps:"); foreach (var map in Game.modData.FindMaps().Values) { diff --git a/mods/cnc/tilesets/desert.yaml b/mods/cnc/tilesets/desert.yaml index 900f389be8..a53857d2cf 100644 --- a/mods/cnc/tilesets/desert.yaml +++ b/mods/cnc/tilesets/desert.yaml @@ -10,47 +10,58 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 134, 95, 69 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 93, 165, 206 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 168, 123, 83 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 116, 90, 63 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 111, 132, 139 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Tiberium: Type: Tiberium AcceptsSmudgeType: Crater, Scorch Color: 161, 226, 28 + TargetTypes: Ground TerrainType@BlueTiberium: Type: BlueTiberium AcceptsSmudgeType: Crater, Scorch Color: 84, 252, 252 + TargetTypes: Ground Templates: Template@255: diff --git a/mods/cnc/tilesets/snow.yaml b/mods/cnc/tilesets/snow.yaml index a91c54587e..5491867db1 100644 --- a/mods/cnc/tilesets/snow.yaml +++ b/mods/cnc/tilesets/snow.yaml @@ -10,47 +10,58 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 196, 196, 196 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Tiberium: Type: Tiberium AcceptsSmudgeType: Crater, Scorch Color: 161, 226, 28 + TargetTypes: Ground TerrainType@BlueTiberium: Type: BlueTiberium AcceptsSmudgeType: Crater, Scorch Color: 84, 252, 252 + TargetTypes: Ground Templates: Template@255: @@ -1321,3 +1332,4 @@ Templates: 3: Water 4: River 6: Water + diff --git a/mods/cnc/tilesets/temperat.yaml b/mods/cnc/tilesets/temperat.yaml index 570024a2d6..3ece050dbb 100644 --- a/mods/cnc/tilesets/temperat.yaml +++ b/mods/cnc/tilesets/temperat.yaml @@ -10,47 +10,58 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 40, 68, 40 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Tiberium: Type: Tiberium AcceptsSmudgeType: Crater, Scorch Color: 161, 226, 28 + TargetTypes: Ground TerrainType@BlueTiberium: Type: BlueTiberium AcceptsSmudgeType: Crater, Scorch Color: 84, 252, 252 + TargetTypes: Ground Templates: Template@255: @@ -1332,4 +1343,5 @@ Templates: 7: Tree 3: Tree 2: Tree - 4: Tree \ No newline at end of file + 4: Tree + diff --git a/mods/cnc/tilesets/winter.yaml b/mods/cnc/tilesets/winter.yaml index 23e56cf7d6..9ccbedc55d 100644 --- a/mods/cnc/tilesets/winter.yaml +++ b/mods/cnc/tilesets/winter.yaml @@ -10,47 +10,58 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 40, 68, 40 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Tiberium: Type: Tiberium AcceptsSmudgeType: Crater, Scorch Color: 161, 226, 28 + TargetTypes: Ground TerrainType@BlueTiberium: Type: BlueTiberium AcceptsSmudgeType: Crater, Scorch Color: 84, 252, 252 + TargetTypes: Ground Templates: Template@255: @@ -1326,4 +1337,5 @@ Templates: 1: River 3: Water 4: River - 6: Water \ No newline at end of file + 6: Water + diff --git a/mods/d2k/tilesets/arrakis.yaml b/mods/d2k/tilesets/arrakis.yaml index fe91d0c843..b0e29d62ce 100644 --- a/mods/d2k/tilesets/arrakis.yaml +++ b/mods/d2k/tilesets/arrakis.yaml @@ -9,52 +9,62 @@ Terrain: TerrainType@Clear: # TODO: workaround for the stupid WinForms editor Type: Clear Color: 0, 0, 0 + TargetTypes: Ground TerrainType@Sand: Type: Sand AcceptsSmudgeType: SandCrater IsWater: False Color: 255,208,192,160 + TargetTypes: Ground TerrainType@Transition: Type: Transition AcceptsSmudgeType: IsWater: False Color: 255,207,166,100 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: RockCrater IsWater: False Color: 255,206,140,66 + TargetTypes: Ground TerrainType@Cliff: Type: Cliff AcceptsSmudgeType: IsWater: False Color: 255,74,41,16 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: IsWater: False Color: 255,88,116,116 CustomCursor: move-rough + TargetTypes: Ground TerrainType@Concrete: Type: Concrete AcceptsSmudgeType: IsWater: False Color: 255,208,192,160 + TargetTypes: Ground TerrainType@Dune: Type: Dune AcceptsSmudgeType: IsWater: False Color: 255,239,222,140 + TargetTypes: Ground TerrainType@Spice: Type: Spice AcceptsSmudgeType: IsWater: False Color: 255,239,148,74 + TargetTypes: Ground TerrainType@Ice: Type: Ice AcceptsSmudgeType: IsWater: True Color: 255,255,255,255 + TargetTypes: Ground Templates: Template@0: diff --git a/mods/ra/tilesets/desert.yaml b/mods/ra/tilesets/desert.yaml index a684a0a685..c7307ff370 100644 --- a/mods/ra/tilesets/desert.yaml +++ b/mods/ra/tilesets/desert.yaml @@ -13,65 +13,78 @@ Terrain: Buildable: True AcceptsSmudgeType: Crater, Scorch Color: 134, 95, 69 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true Buildable: False AcceptsSmudgeType: Color: 93, 165, 206 + TargetTypes: Water TerrainType@Road: Type: Road Buildable: True AcceptsSmudgeType: Crater, Scorch Color: 168, 123, 83 + TargetTypes: Ground TerrainType@Bridge: Type: Bridge AcceptsSmudgeType: Crater, Scorch Color: 96, 96, 96 + TargetTypes: Ground, Bridge TerrainType@Rock: Type: Rock Buildable: False AcceptsSmudgeType: Color: 116, 90, 63 + TargetTypes: Ground TerrainType@Tree: Type: Tree Buildable: False AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@Brush: Type: Brush Buildable: False AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River Buildable: False AcceptsSmudgeType: Color: 111, 132, 139 + TargetTypes: Ground TerrainType@Rough: Type: Rough Buildable: False AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall Buildable: False AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach Buildable: False AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Ore: Type: Ore Buildable: False AcceptsSmudgeType: Crater, Scorch Color: 148, 128, 96 + TargetTypes: Ground TerrainType@Gems: Type: Gems AcceptsSmudgeType: Crater, Scorch Color: 132, 112, 255 + TargetTypes: Ground Templates: Template@255: @@ -3105,3 +3118,4 @@ Templates: 12: Rock 13: Rock 14: Rock + diff --git a/mods/ra/tilesets/interior.yaml b/mods/ra/tilesets/interior.yaml index 9f40b6d756..6c2d9108a3 100644 --- a/mods/ra/tilesets/interior.yaml +++ b/mods/ra/tilesets/interior.yaml @@ -9,47 +9,58 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 0, 0, 0 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Ore: Type: Ore AcceptsSmudgeType: Crater, Scorch Color: 148, 128, 96 + TargetTypes: Ground TerrainType@Gems: Type: Gems AcceptsSmudgeType: Crater, Scorch Color: 132, 112, 255 + TargetTypes: Ground Templates: Template@255: diff --git a/mods/ra/tilesets/snow.yaml b/mods/ra/tilesets/snow.yaml index 386eec6e44..6da825e6a3 100644 --- a/mods/ra/tilesets/snow.yaml +++ b/mods/ra/tilesets/snow.yaml @@ -10,51 +10,63 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 196, 196, 196 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Bridge: Type: Bridge AcceptsSmudgeType: Crater, Scorch Color: 96, 96, 96 + TargetTypes: Ground, Bridge TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Ore: Type: Ore AcceptsSmudgeType: Crater, Scorch Color: 148, 128, 96 + TargetTypes: Ground TerrainType@Gems: Type: Gems AcceptsSmudgeType: Crater, Scorch Color: 132, 112, 255 + TargetTypes: Ground Templates: Template@255: @@ -3141,3 +3153,4 @@ Templates: Tiles: 0: Rock 1: Rock + diff --git a/mods/ra/tilesets/temperat.yaml b/mods/ra/tilesets/temperat.yaml index da403076a1..a1456f5483 100644 --- a/mods/ra/tilesets/temperat.yaml +++ b/mods/ra/tilesets/temperat.yaml @@ -10,51 +10,63 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 40, 68, 40 + TargetTypes: Ground TerrainType@Water: Type: Water IsWater: true AcceptsSmudgeType: Color: 92, 116, 164 + TargetTypes: Water TerrainType@Road: Type: Road AcceptsSmudgeType: Crater, Scorch Color: 88, 116, 116 + TargetTypes: Ground TerrainType@Bridge: Type: Bridge AcceptsSmudgeType: Crater, Scorch Color: 96, 96, 96 + TargetTypes: Ground, Bridge TerrainType@Rock: Type: Rock AcceptsSmudgeType: Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Tree: Type: Tree AcceptsSmudgeType: Color: 28, 32, 36 + TargetTypes: Ground TerrainType@River: Type: River AcceptsSmudgeType: Color: 92, 140, 180 + TargetTypes: Ground TerrainType@Rough: Type: Rough AcceptsSmudgeType: Crater, Scorch Color: 68, 68, 60 + TargetTypes: Ground TerrainType@Wall: Type: Wall AcceptsSmudgeType: Crater, Scorch Color: 208, 192, 160 + TargetTypes: Ground TerrainType@Beach: Type: Beach AcceptsSmudgeType: Color: 176, 156, 120 + TargetTypes: Ground TerrainType@Ore: Type: Ore AcceptsSmudgeType: Crater, Scorch Color: 148, 128, 96 + TargetTypes: Ground TerrainType@Gems: Type: Gems AcceptsSmudgeType: Crater, Scorch Color: 132, 112, 255 + TargetTypes: Ground Templates: Template@255: @@ -3225,7 +3237,7 @@ Templates: 0: River 1: Road 2: River - 3: River + 3: River 4: Road 5: River Category: Bridge @@ -3237,7 +3249,7 @@ Templates: 0: River 1: Road 2: River - 3: River + 3: River 4: Road 5: River Category: Bridge @@ -3249,7 +3261,7 @@ Templates: 0: River 1: Rock 2: River - 3: River + 3: River 4: Rock 5: River Category: Bridge @@ -3345,7 +3357,7 @@ Templates: 6: Rock 7: Rock Category: Bridge - Template@530 + Template@530: Id: 530 Image: sbridge4x Size: 5,5 @@ -3365,7 +3377,7 @@ Templates: 23: Clear 24: Road Category: Bridge - Template@531 + Template@531: Id: 531 Image: sbridge2 Size: 2,3 @@ -3377,7 +3389,7 @@ Templates: 4: Rock 5: Rock Category: Bridge - Template@532 + Template@532: Id: 532 Image: sbridge2h Size: 2,3 @@ -3389,7 +3401,7 @@ Templates: 4: Rock 5: Rock Category: Bridge - Template@533 + Template@533: Id: 533 Image: sbridge2d Size: 2,3 @@ -3401,7 +3413,7 @@ Templates: 4: River 5: River Category: Bridge - Template@534 + Template@534: Id: 534 Image: sbridge2x Size: 4,4 @@ -3533,7 +3545,7 @@ Templates: Size: 1,1 Tiles: 0: Rough - Category: Debris + Category: Debris Template@583: Id: 583 Image: decc @@ -3603,4 +3615,5 @@ Templates: 3: Rough 4: Rough 5: Clear - Category: Debris \ No newline at end of file + Category: Debris + diff --git a/mods/ra/weapons.yaml b/mods/ra/weapons.yaml index 2a5c36c6a7..1b36ee6a44 100644 --- a/mods/ra/weapons.yaml +++ b/mods/ra/weapons.yaml @@ -120,7 +120,7 @@ Maverick: Report: MISSILE7.AUD Burst: 2 BurstDelay: 7 - ValidTargets: Ground + ValidTargets: Ground, Water Projectile: Missile Speed: 256 Arm: 2 @@ -277,7 +277,7 @@ Dragon: ROF: 50 Range: 5c0 Report: MISSILE6.AUD - ValidTargets: Ground + ValidTargets: Ground, Water Projectile: Missile Speed: 213 Arm: 2 @@ -310,7 +310,7 @@ HellfireAG: Report: MISSILE6.AUD Burst: 2 BurstDelay: 10 - ValidTargets: Ground + ValidTargets: Ground, Water Projectile: Missile Speed: 256 Arm: 2 @@ -819,7 +819,7 @@ TorpTube: ROF: 100 Range: 9c0 Report: TORPEDO1.AUD - ValidTargets: Water, Underwater + ValidTargets: Water, Underwater, Bridge Palette: shadow Burst: 2 BurstDelay: 20 @@ -1247,7 +1247,7 @@ ChronoTusk: ROF: 60 Range: 6c0 Report: MISSILE6.AUD - ValidTargets: Ground + ValidTargets: Ground, Water Projectile: Missile Speed: 298 Arm: 2 diff --git a/mods/ts/tilesets/interior.yaml b/mods/ts/tilesets/interior.yaml index 0c02a60058..6a59d411dd 100644 --- a/mods/ts/tilesets/interior.yaml +++ b/mods/ts/tilesets/interior.yaml @@ -9,6 +9,7 @@ Terrain: Type: Clear AcceptsSmudgeType: Crater, Scorch Color: 0, 0, 0 + TargetTypes: Ground Templates: Template@255: @@ -17,3 +18,4 @@ Templates: Size: 1,1 Tiles: 0: Clear +