diff --git a/OpenRA.FileFormats/Manifest.cs b/OpenRA.FileFormats/Manifest.cs index f18af64b91..842baf135b 100644 --- a/OpenRA.FileFormats/Manifest.cs +++ b/OpenRA.FileFormats/Manifest.cs @@ -23,13 +23,15 @@ namespace OpenRA.FileFormats Weapons, Voices, Music, Movies, TileSets; public readonly string ShellmapUid, LoadScreen; + public readonly int TileSize = 24; public Manifest(string[] mods) { var yaml = mods .Select(m => MiniYaml.FromFile("mods/" + m + "/mod.yaml")) .Aggregate(MiniYaml.Merge); - + + // Todo: Use fieldloader Folders = YamlList(yaml, "Folders"); Packages = YamlList(yaml, "Packages"); Rules = YamlList(yaml, "Rules"); @@ -46,6 +48,9 @@ namespace OpenRA.FileFormats ShellmapUid = yaml.First( x => x.Key == "ShellmapUid" ).Value.Value; LoadScreen = yaml.First( x => x.Key == "LoadScreen" ).Value.Value; + + if (yaml.FirstOrDefault( x => x.Key == "TileSize" ) != null) + TileSize = int.Parse(yaml.First( x => x.Key == "TileSize" ).Value.Value); } static string[] YamlList(List ys, string key) diff --git a/OpenRA.FileFormats/Map/Terrain.cs b/OpenRA.FileFormats/Map/Terrain.cs index f39c33cc75..fce7f191e5 100644 --- a/OpenRA.FileFormats/Map/Terrain.cs +++ b/OpenRA.FileFormats/Map/Terrain.cs @@ -19,16 +19,13 @@ namespace OpenRA.FileFormats public Terrain( Stream stream, int size ) { - System.Console.WriteLine("Loading tile with expected size {0}",size); // Try loading as a cnc .tem BinaryReader reader = new BinaryReader( stream ); int Width = reader.ReadUInt16(); int Height = reader.ReadUInt16(); - - System.Console.WriteLine("Actual size {0}x{1}",Width,Height); if( Width != size || Height != size ) - throw new InvalidDataException( "Expected tile of size {0}x{0}, got {1}x{2]".F(size, Width, Height ) ); + throw new InvalidDataException( "{0}x{1} != {2}x{2}".F(Width, Height, size ) ); /*NumTiles = */reader.ReadUInt16(); /*Zero1 = */reader.ReadUInt16(); diff --git a/OpenRA.FileFormats/Map/TileSet.cs b/OpenRA.FileFormats/Map/TileSet.cs index 46e57d1b2a..12582b720b 100644 --- a/OpenRA.FileFormats/Map/TileSet.cs +++ b/OpenRA.FileFormats/Map/TileSet.cs @@ -74,7 +74,7 @@ namespace OpenRA.FileFormats public string Name; public string Id; public string Palette; - public int TileSize; + public int TileSize = 24; public string[] Extensions; public Dictionary Terrain = new Dictionary(); public Dictionary Tiles = new Dictionary(); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 9bf037ec88..34cf0dd83f 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -29,7 +29,7 @@ namespace OpenRA { public static class Game { - public static readonly int CellSize = 24; + public static int CellSize { get { return modData.Manifest.TileSize; } } public static ModData modData; public static World world; diff --git a/OpenRA.Game/Graphics/Minimap.cs b/OpenRA.Game/Graphics/Minimap.cs index d146541c6b..dcae699f03 100644 --- a/OpenRA.Game/Graphics/Minimap.cs +++ b/OpenRA.Game/Graphics/Minimap.cs @@ -14,6 +14,7 @@ using System.Drawing.Imaging; using System.Linq; using OpenRA.FileFormats; using OpenRA.Traits; +using System.IO; namespace OpenRA.Graphics { @@ -38,6 +39,9 @@ namespace OpenRA.Graphics var mapX = x + map.TopLeft.X; var mapY = y + map.TopLeft.Y; var type = tileset.GetTerrainType(map.MapTiles[mapX, mapY]); + if (!tileset.Terrain.ContainsKey(type)) + throw new InvalidDataException("Tileset {0} lacks terraintype {1}".F(tileset.Id, type)); + *(c + (y * bitmapData.Stride >> 2) + x) = tileset.Terrain[type].Color.ToArgb(); } } diff --git a/OpenRA.Game/Graphics/TerrainRenderer.cs b/OpenRA.Game/Graphics/TerrainRenderer.cs index 23259235ab..6935554bb7 100644 --- a/OpenRA.Game/Graphics/TerrainRenderer.cs +++ b/OpenRA.Game/Graphics/TerrainRenderer.cs @@ -31,7 +31,6 @@ namespace OpenRA.Graphics this.map = world.Map; Size tileSize = new Size( Game.CellSize, Game.CellSize ); - var tileMapping = new Cache, Sprite>( x => Game.modData.SheetBuilder.Add(world.TileSet.GetBytes(x), tileSize)); @@ -47,7 +46,7 @@ namespace OpenRA.Graphics { Sprite tile = tileMapping[map.MapTiles[i, j]]; // TODO: The zero below should explicitly refer to the terrain palette, but this code is called - // before the palettes are created + // before the palettes are created. Therefore assumes that "terrain" is the first palette to be defined Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, 0, nv, ni, tile.size); nv += 4; ni += 6; diff --git a/OpenRA.TilesetBuilder/Form1.cs b/OpenRA.TilesetBuilder/Form1.cs index c249f33d78..8facf90a35 100644 --- a/OpenRA.TilesetBuilder/Form1.cs +++ b/OpenRA.TilesetBuilder/Form1.cs @@ -144,13 +144,13 @@ namespace OpenRA.TilesetBuilder // Todo: add support for multiple/different terraintypes var terraintype = new TerrainTypeInfo() { - Type = "clear", + Type = "Clear", Buildable = true, AcceptSmudge = true, IsWater = false, Color = Color.White }; - tileset.Terrain.Add("clear", terraintype); + tileset.Terrain.Add("Clear", terraintype); // Add the templates ushort cur = 0; @@ -166,7 +166,7 @@ namespace OpenRA.TilesetBuilder // Todo: add support for different terraintypes // Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 ) foreach (var t in tp.Cells) - template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), "clear"); + template.Tiles.Add((byte)((t.Key.X - tp.Left) + tp.Width * (t.Key.Y - tp.Top)), "Clear"); tileset.Templates.Add(cur, template); cur++; diff --git a/mods/d2k/maps/test/map.bin b/mods/d2k/maps/test/map.bin index ced672c739..f804ba89a4 100644 Binary files a/mods/d2k/maps/test/map.bin and b/mods/d2k/maps/test/map.bin differ diff --git a/mods/d2k/maps/test/map.uid b/mods/d2k/maps/test/map.uid index 70d787bd99..a933856a13 100644 --- a/mods/d2k/maps/test/map.uid +++ b/mods/d2k/maps/test/map.uid @@ -1 +1 @@ -29478a3e83e2b63ba694487e5ac8adf2ee6e1be2 \ No newline at end of file +899fa73ce1ffd82799e84b63256930514db5e048 \ No newline at end of file diff --git a/mods/d2k/maps/test/map.yaml b/mods/d2k/maps/test/map.yaml index d7bb2b585e..48df90a552 100644 --- a/mods/d2k/maps/test/map.yaml +++ b/mods/d2k/maps/test/map.yaml @@ -32,6 +32,19 @@ Players: InitialCash: 0 Allies: Enemies: + PlayerReference@Multi0: + Name: Multi0 + Palette: + Race: Random + OwnsWorld: False + NonCombatant: False + Playable: True + DefaultStartingUnits: True + Color: 255,238,238,238 + Color2: 255,44,28,24 + InitialCash: 0 + Allies: + Enemies: Actors: Actor0: mcv diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 1d04bb8cd6..1cb04d8398 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -33,4 +33,5 @@ TileSets: Music: Movies: LoadScreen: NullLoadScreen -ShellmapUid:c7bc5cded5f9b67bc678ca92b9d690fb71ae2ee2 +ShellmapUid:899fa73ce1ffd82799e84b63256930514db5e048 +TileSize:32 diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 2f4786bf24..2593a4c035 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -2,7 +2,7 @@ AppearsOnRadar: Mobile: TerrainSpeeds: - clear: 100% + Clear: 100% ROT: 5 Selectable: Targetable: diff --git a/mods/d2k/tilesets/arrakis.yaml b/mods/d2k/tilesets/arrakis.yaml index 396d36e990..6af55956db 100644 --- a/mods/d2k/tilesets/arrakis.yaml +++ b/mods/d2k/tilesets/arrakis.yaml @@ -6,8 +6,8 @@ General: Extensions: .arr,.shp Terrain: - TerrainType@clear: - Type: clear + TerrainType@Clear: + Type: Clear Buildable: True AcceptSmudge: True IsWater: False @@ -20,273 +20,273 @@ Templates: Size: 1,1 PickAny: False Tiles: - 0: clear + 0: Clear Template@0: Id: 0 Image: t00 Size: 1,1 PickAny: False Tiles: - 0: clear + 0: Clear Template@1: Id: 1 Image: t01 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@2: Id: 2 Image: t02 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@3: Id: 3 Image: t03 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@4: Id: 4 Image: t04 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@5: Id: 5 Image: t05 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@6: Id: 6 Image: t06 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@7: Id: 7 Image: t07 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@8: Id: 8 Image: t08 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@9: Id: 9 Image: t09 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@10: Id: 10 Image: t10 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@11: Id: 11 Image: t11 Size: 5,3 PickAny: False Tiles: - 0: clear - 6: clear - 1: clear - 5: clear - 10: clear - 11: clear - 12: clear - 13: clear - 14: clear - 9: clear - 4: clear - 3: clear - 2: clear - 7: clear - 8: clear + 0: Clear + 6: Clear + 1: Clear + 5: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 9: Clear + 4: Clear + 3: Clear + 2: Clear + 7: Clear + 8: Clear Template@12: Id: 12 Image: t12 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@13: Id: 13 Image: t13 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@14: Id: 14 Image: t14 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@15: Id: 15 Image: t15 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@16: Id: 16 Image: t16 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@17: Id: 17 Image: t17 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@18: Id: 18 Image: t18 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@19: Id: 19 Image: t19 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@20: Id: 20 Image: t20 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@21: Id: 21 Image: t21 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@22: Id: 22 Image: t22 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@23: Id: 23 Image: t23 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@24: Id: 24 Image: t24 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear Template@25: Id: 25 Image: t25 Size: 2,2 PickAny: False Tiles: - 0: clear - 1: clear - 3: clear - 2: clear + 0: Clear + 1: Clear + 3: Clear + 2: Clear