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,6 +23,7 @@ namespace OpenRA.FileFormats
Weapons, Voices, Music, Movies, TileSets; Weapons, Voices, Music, Movies, TileSets;
public readonly string ShellmapUid, LoadScreen; public readonly string ShellmapUid, LoadScreen;
public readonly int TileSize = 24;
public Manifest(string[] mods) public Manifest(string[] mods)
{ {
@@ -30,6 +31,7 @@ namespace OpenRA.FileFormats
.Select(m => MiniYaml.FromFile("mods/" + m + "/mod.yaml")) .Select(m => MiniYaml.FromFile("mods/" + m + "/mod.yaml"))
.Aggregate(MiniYaml.Merge); .Aggregate(MiniYaml.Merge);
// Todo: Use fieldloader
Folders = YamlList(yaml, "Folders"); Folders = YamlList(yaml, "Folders");
Packages = YamlList(yaml, "Packages"); Packages = YamlList(yaml, "Packages");
Rules = YamlList(yaml, "Rules"); Rules = YamlList(yaml, "Rules");
@@ -46,6 +48,9 @@ namespace OpenRA.FileFormats
ShellmapUid = yaml.First( x => x.Key == "ShellmapUid" ).Value.Value; ShellmapUid = yaml.First( x => x.Key == "ShellmapUid" ).Value.Value;
LoadScreen = yaml.First( x => x.Key == "LoadScreen" ).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) static string[] YamlList(List<MiniYamlNode> ys, string key)

View File

@@ -19,16 +19,13 @@ namespace OpenRA.FileFormats
public Terrain( Stream stream, int size ) public Terrain( Stream stream, int size )
{ {
System.Console.WriteLine("Loading tile with expected size {0}",size);
// Try loading as a cnc .tem // Try loading as a cnc .tem
BinaryReader reader = new BinaryReader( stream ); BinaryReader reader = new BinaryReader( stream );
int Width = reader.ReadUInt16(); int Width = reader.ReadUInt16();
int Height = reader.ReadUInt16(); int Height = reader.ReadUInt16();
System.Console.WriteLine("Actual size {0}x{1}",Width,Height);
if( Width != size || Height != size ) 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(); /*NumTiles = */reader.ReadUInt16();
/*Zero1 = */reader.ReadUInt16(); /*Zero1 = */reader.ReadUInt16();

View File

@@ -74,7 +74,7 @@ namespace OpenRA.FileFormats
public string Name; public string Name;
public string Id; public string Id;
public string Palette; public string Palette;
public int TileSize; public int TileSize = 24;
public string[] Extensions; public string[] Extensions;
public Dictionary<string, TerrainTypeInfo> Terrain = new Dictionary<string, TerrainTypeInfo>(); public Dictionary<string, TerrainTypeInfo> Terrain = new Dictionary<string, TerrainTypeInfo>();
public Dictionary<ushort, Terrain> Tiles = new Dictionary<ushort, Terrain>(); public Dictionary<ushort, Terrain> Tiles = new Dictionary<ushort, Terrain>();

View File

@@ -29,7 +29,7 @@ namespace OpenRA
{ {
public static class Game 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 ModData modData;
public static World world; public static World world;

View File

@@ -14,6 +14,7 @@ using System.Drawing.Imaging;
using System.Linq; using System.Linq;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using OpenRA.Traits; using OpenRA.Traits;
using System.IO;
namespace OpenRA.Graphics namespace OpenRA.Graphics
{ {
@@ -38,6 +39,9 @@ namespace OpenRA.Graphics
var mapX = x + map.TopLeft.X; var mapX = x + map.TopLeft.X;
var mapY = y + map.TopLeft.Y; var mapY = y + map.TopLeft.Y;
var type = tileset.GetTerrainType(map.MapTiles[mapX, mapY]); 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(); *(c + (y * bitmapData.Stride >> 2) + x) = tileset.Terrain[type].Color.ToArgb();
} }
} }

View File

@@ -31,7 +31,6 @@ namespace OpenRA.Graphics
this.map = world.Map; this.map = world.Map;
Size tileSize = new Size( Game.CellSize, Game.CellSize ); Size tileSize = new Size( Game.CellSize, Game.CellSize );
var tileMapping = new Cache<TileReference<ushort,byte>, Sprite>( var tileMapping = new Cache<TileReference<ushort,byte>, Sprite>(
x => Game.modData.SheetBuilder.Add(world.TileSet.GetBytes(x), tileSize)); x => Game.modData.SheetBuilder.Add(world.TileSet.GetBytes(x), tileSize));
@@ -47,7 +46,7 @@ namespace OpenRA.Graphics
{ {
Sprite tile = tileMapping[map.MapTiles[i, j]]; Sprite tile = tileMapping[map.MapTiles[i, j]];
// TODO: The zero below should explicitly refer to the terrain palette, but this code is called // 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); Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, 0, nv, ni, tile.size);
nv += 4; nv += 4;
ni += 6; ni += 6;

View File

@@ -144,13 +144,13 @@ namespace OpenRA.TilesetBuilder
// Todo: add support for multiple/different terraintypes // Todo: add support for multiple/different terraintypes
var terraintype = new TerrainTypeInfo() var terraintype = new TerrainTypeInfo()
{ {
Type = "clear", Type = "Clear",
Buildable = true, Buildable = true,
AcceptSmudge = true, AcceptSmudge = true,
IsWater = false, IsWater = false,
Color = Color.White Color = Color.White
}; };
tileset.Terrain.Add("clear", terraintype); tileset.Terrain.Add("Clear", terraintype);
// Add the templates // Add the templates
ushort cur = 0; ushort cur = 0;
@@ -166,7 +166,7 @@ namespace OpenRA.TilesetBuilder
// Todo: add support for different terraintypes // Todo: add support for different terraintypes
// Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 ) // Todo: restrict cells? this doesn't work: .Where( c => surface1.TerrainTypes[c.Key.X, c.Key.Y] != 0 )
foreach (var t in tp.Cells) 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); tileset.Templates.Add(cur, template);
cur++; cur++;

Binary file not shown.

View File

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

View File

@@ -32,6 +32,19 @@ Players:
InitialCash: 0 InitialCash: 0
Allies: Allies:
Enemies: 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: Actors:
Actor0: mcv Actor0: mcv

View File

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

View File

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

View File

@@ -6,8 +6,8 @@ General:
Extensions: .arr,.shp Extensions: .arr,.shp
Terrain: Terrain:
TerrainType@clear: TerrainType@Clear:
Type: clear Type: Clear
Buildable: True Buildable: True
AcceptSmudge: True AcceptSmudge: True
IsWater: False IsWater: False
@@ -20,273 +20,273 @@ Templates:
Size: 1,1 Size: 1,1
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
Template@0: Template@0:
Id: 0 Id: 0
Image: t00 Image: t00
Size: 1,1 Size: 1,1
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
Template@1: Template@1:
Id: 1 Id: 1
Image: t01 Image: t01
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@2: Template@2:
Id: 2 Id: 2
Image: t02 Image: t02
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@3: Template@3:
Id: 3 Id: 3
Image: t03 Image: t03
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@4: Template@4:
Id: 4 Id: 4
Image: t04 Image: t04
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@5: Template@5:
Id: 5 Id: 5
Image: t05 Image: t05
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@6: Template@6:
Id: 6 Id: 6
Image: t06 Image: t06
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@7: Template@7:
Id: 7 Id: 7
Image: t07 Image: t07
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@8: Template@8:
Id: 8 Id: 8
Image: t08 Image: t08
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@9: Template@9:
Id: 9 Id: 9
Image: t09 Image: t09
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@10: Template@10:
Id: 10 Id: 10
Image: t10 Image: t10
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@11: Template@11:
Id: 11 Id: 11
Image: t11 Image: t11
Size: 5,3 Size: 5,3
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
6: clear 6: Clear
1: clear 1: Clear
5: clear 5: Clear
10: clear 10: Clear
11: clear 11: Clear
12: clear 12: Clear
13: clear 13: Clear
14: clear 14: Clear
9: clear 9: Clear
4: clear 4: Clear
3: clear 3: Clear
2: clear 2: Clear
7: clear 7: Clear
8: clear 8: Clear
Template@12: Template@12:
Id: 12 Id: 12
Image: t12 Image: t12
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@13: Template@13:
Id: 13 Id: 13
Image: t13 Image: t13
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@14: Template@14:
Id: 14 Id: 14
Image: t14 Image: t14
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@15: Template@15:
Id: 15 Id: 15
Image: t15 Image: t15
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@16: Template@16:
Id: 16 Id: 16
Image: t16 Image: t16
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@17: Template@17:
Id: 17 Id: 17
Image: t17 Image: t17
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@18: Template@18:
Id: 18 Id: 18
Image: t18 Image: t18
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@19: Template@19:
Id: 19 Id: 19
Image: t19 Image: t19
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@20: Template@20:
Id: 20 Id: 20
Image: t20 Image: t20
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@21: Template@21:
Id: 21 Id: 21
Image: t21 Image: t21
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@22: Template@22:
Id: 22 Id: 22
Image: t22 Image: t22
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@23: Template@23:
Id: 23 Id: 23
Image: t23 Image: t23
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@24: Template@24:
Id: 24 Id: 24
Image: t24 Image: t24
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear
Template@25: Template@25:
Id: 25 Id: 25
Image: t25 Image: t25
Size: 2,2 Size: 2,2
PickAny: False PickAny: False
Tiles: Tiles:
0: clear 0: Clear
1: clear 1: Clear
3: clear 3: Clear
2: clear 2: Clear