Support custom tile size ingame

This commit is contained in:
Paul Chote
2010-09-15 18:56:48 +12:00
parent ac8a3526a4
commit 051c451867
13 changed files with 149 additions and 130 deletions

View File

@@ -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<MiniYamlNode> ys, string key)

View File

@@ -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();

View File

@@ -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<string, TerrainTypeInfo> Terrain = new Dictionary<string, TerrainTypeInfo>();
public Dictionary<ushort, Terrain> Tiles = new Dictionary<ushort, Terrain>();

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -31,7 +31,6 @@ namespace OpenRA.Graphics
this.map = world.Map;
Size tileSize = new Size( Game.CellSize, Game.CellSize );
var tileMapping = new Cache<TileReference<ushort,byte>, 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;

View File

@@ -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++;

Binary file not shown.

View File

@@ -1 +1 @@
29478a3e83e2b63ba694487e5ac8adf2ee6e1be2
899fa73ce1ffd82799e84b63256930514db5e048

View File

@@ -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

View File

@@ -33,4 +33,5 @@ TileSets:
Music:
Movies:
LoadScreen: NullLoadScreen
ShellmapUid:c7bc5cded5f9b67bc678ca92b9d690fb71ae2ee2
ShellmapUid:899fa73ce1ffd82799e84b63256930514db5e048
TileSize:32

View File

@@ -2,7 +2,7 @@
AppearsOnRadar:
Mobile:
TerrainSpeeds:
clear: 100%
Clear: 100%
ROT: 5
Selectable:
Targetable:

View File

@@ -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