From b8702e494b69709929cf2154688a37f053015668 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 1 Apr 2010 20:57:53 +1300 Subject: [PATCH] Fix most of the x/y issues --- MapConverter/MapConverter.cs | 35 +++---- OpenRA.FileFormats/ConnectedComponents.cs | 6 +- OpenRA.FileFormats/Map/NewMap.cs | 64 ++++++------ OpenRA.Game/Chrome.cs | 4 +- OpenRA.Game/Game.cs | 2 +- OpenRA.Game/Graphics/Minimap.cs | 22 ++-- OpenRA.Game/Graphics/TerrainRenderer.cs | 9 +- OpenRA.Game/Graphics/WorldRenderer.cs | 6 +- OpenRA.Game/PathFinder.cs | 12 +-- OpenRA.Game/PathSearch.cs | 6 +- OpenRA.Game/ShroudRenderer.cs | 12 +-- OpenRA.Game/Traits/World/BuildingInfluence.cs | 4 +- OpenRA.Game/Traits/World/Shroud.cs | 4 +- OpenRA.Game/Traits/World/SpatialBins.cs | 4 +- OpenRA.Game/Traits/World/UnitInfluence.cs | 11 +- OpenRA.Game/UiOverlay.cs | 4 +- OpenRA.Game/World.cs | 2 +- OpenRA.Game/WorldUtils.cs | 5 +- mods/ra/testmap.bin | Bin 81925 -> 81925 bytes mods/ra/testmap.yaml | 95 ++++++++---------- 20 files changed, 150 insertions(+), 157 deletions(-) diff --git a/MapConverter/MapConverter.cs b/MapConverter/MapConverter.cs index 6994b1d8ca..42b6bc6f98 100644 --- a/MapConverter/MapConverter.cs +++ b/MapConverter/MapConverter.cs @@ -92,9 +92,10 @@ namespace MapConverter Height = int.Parse(map.GetValue("Height", "0")); MapSize = (INIFormat == 3) ? 128 : 64; - Map.Size.X = MapSize; - Map.Size.Y = MapSize; - Map.Bounds = new int[] {XOffset, YOffset, Width, Height}; + Map.MapSize.X = MapSize; + Map.MapSize.Y = MapSize; + Map.TopLeft = new int2 (XOffset, YOffset); + Map.BottomRight = new int2(XOffset+Width,YOffset+Height); if (INIFormat == 3) // RA map { @@ -184,28 +185,28 @@ namespace MapConverter void UnpackRATileData( MemoryStream ms ) { Map.MapTiles = new TileReference[ MapSize, MapSize ]; - for( int i = 0 ; i < MapSize ; i++ ) - for( int j = 0 ; j < MapSize ; j++ ) - Map.MapTiles[j, i] = new TileReference(); + for( int j = 0 ; j < MapSize ; j++ ) + for( int i = 0 ; i < MapSize ; i++ ) + Map.MapTiles[i,j] = new TileReference(); - for( int i = 0 ; i < MapSize ; i++ ) - for( int j = 0 ; j < MapSize ; j++ ) - Map.MapTiles[j, i].type = ReadWord(ms); + for( int j = 0 ; j < MapSize ; j++ ) + for( int i = 0 ; i < MapSize ; i++ ) + Map.MapTiles[i,j].type = ReadWord(ms); - for( int i = 0 ; i < MapSize ; i++ ) - for( int j = 0 ; j < MapSize ; j++ ) + for( int j = 0 ; j < MapSize ; j++ ) + for( int i = 0 ; i < MapSize ; i++ ) { - Map.MapTiles[j, i].index = (byte)ms.ReadByte(); - if( Map.MapTiles[ j, i ].type == 0xff || Map.MapTiles[ j, i ].type == 0xffff ) - Map.MapTiles[ j, i ].index = byte.MaxValue; + Map.MapTiles[i,j].index = (byte)ms.ReadByte(); + if( Map.MapTiles[i,j].type == 0xff || Map.MapTiles[i,j].type == 0xffff ) + Map.MapTiles[i,j].index = byte.MaxValue; } } void UnpackRAOverlayData( MemoryStream ms ) { Map.MapResources = new TileReference[ MapSize, MapSize ]; - for( int i = 0 ; i < MapSize ; i++ ) - for( int j = 0 ; j < MapSize ; j++ ) + for( int j = 0 ; j < MapSize ; j++ ) + for( int i = 0 ; i < MapSize ; i++ ) { byte o = ReadByte( ms ); var res = Pair.New((byte)0,(byte)0); @@ -213,7 +214,7 @@ namespace MapConverter if (o != 255 && resourceMapping.ContainsKey(raOverlayNames[o])) res = resourceMapping[raOverlayNames[o]]; - Map.MapResources[j, i] = new TileReference(res.First, res.Second); + Map.MapResources[i,j] = new TileReference(res.First, res.Second); } } diff --git a/OpenRA.FileFormats/ConnectedComponents.cs b/OpenRA.FileFormats/ConnectedComponents.cs index c5500ac162..822cba0d98 100644 --- a/OpenRA.FileFormats/ConnectedComponents.cs +++ b/OpenRA.FileFormats/ConnectedComponents.cs @@ -1,4 +1,4 @@ -#region Copyright & License Information +#region Copyright & License Information /* * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. * This file is part of OpenRA. @@ -30,8 +30,8 @@ namespace OpenRA.FileFormats public static int[,] Extract(Map m, Func f) { - var result = new int[m.MapSize, m.MapSize]; - var types = new int[m.MapSize, m.MapSize]; + var result = new int[m.MapSize.X, m.MapSize.Y]; + var types = new int[m.MapSize.X, m.MapSize.Y]; var d = new Dictionary(); var n = 1; diff --git a/OpenRA.FileFormats/Map/NewMap.cs b/OpenRA.FileFormats/Map/NewMap.cs index c45f2ecdc4..73cb507099 100644 --- a/OpenRA.FileFormats/Map/NewMap.cs +++ b/OpenRA.FileFormats/Map/NewMap.cs @@ -36,7 +36,6 @@ namespace OpenRA.FileFormats public string Author; public int PlayerCount; public string Preview; - public int[] Bounds; public string Tileset; public Dictionary Actors = new Dictionary(); @@ -46,26 +45,25 @@ namespace OpenRA.FileFormats // Binary map data public string Tiledata; public byte TileFormat = 1; - public int2 Size; + public int2 MapSize; + + public int2 TopLeft; + public int2 BottomRight; + public TileReference[ , ] MapTiles; public TileReference[ , ] MapResources; // Temporary compat hacks - public int MapSize {get {return Size.X;}} - public int XOffset {get {return Bounds[0];}} - public int YOffset {get {return Bounds[1];}} - public int2 Offset { get { return new int2( Bounds[0], Bounds[1] ); } } - public int Width {get {return Bounds[2];}} - public int Height {get {return Bounds[3];}} + public int XOffset {get {return TopLeft.X;}} + public int YOffset {get {return TopLeft.Y;}} + public int Width {get {return BottomRight.X-TopLeft.X;}} + public int Height {get {return BottomRight.Y-TopLeft.Y;}} public string Theater {get {return Tileset;}} public IEnumerable SpawnPoints {get {return Waypoints.Select(kv => kv.Value);}} - - - List SimpleFields = new List() { - "MapFormat", "Title", "Description", "Author", "PlayerCount", "Tileset", "Tiledata", "Preview", "Size", "Bounds" + "MapFormat", "Title", "Description", "Author", "PlayerCount", "Tileset", "Tiledata", "Preview", "MapSize", "TopLeft", "BottomRight" }; public Map() {} @@ -150,26 +148,26 @@ namespace OpenRA.FileFormats // Load header info byte version = ReadByte(dataStream); - Size.X = ReadWord(dataStream); - Size.Y = ReadWord(dataStream); + MapSize.X = ReadWord(dataStream); + MapSize.Y = ReadWord(dataStream); - MapTiles = new TileReference[ Size.X, Size.Y ]; - MapResources = new TileReference[ Size.X, Size.Y ]; + MapTiles = new TileReference[ MapSize.X, MapSize.Y ]; + MapResources = new TileReference[ MapSize.X, MapSize.Y ]; // Load tile data - for( int i = 0 ; i < Size.X ; i++ ) - for( int j = 0 ; j < Size.Y ; j++ ) + for( int i = 0 ; i < MapSize.X ; i++ ) + for( int j = 0 ; j < MapSize.Y ; j++ ) { ushort tile = ReadWord(dataStream); byte index = ReadByte(dataStream); byte image = (index == byte.MaxValue) ? (byte)( i % 4 + ( j % 4 ) * 4 ) : index; - MapTiles[i, j] = new TileReference(tile,index, image); + MapTiles[i,j] = new TileReference(tile,index, image); } // Load resource data - for( int i = 0 ; i < Size.X ; i++ ) - for( int j = 0 ; j < Size.Y ; j++ ) - MapResources[i, j] = new TileReference(ReadByte(dataStream),ReadByte(dataStream)); + for( int i = 0 ; i < MapSize.X ; i++ ) + for( int j = 0 ; j < MapSize.Y ; j++ ) + MapResources[i,j] = new TileReference(ReadByte(dataStream),ReadByte(dataStream)); } public void SaveBinaryData(string filepath) @@ -180,23 +178,23 @@ namespace OpenRA.FileFormats // File header consists of a version byte, followed by 2 ushorts for width and height writer.Write(TileFormat); - writer.Write((ushort)Size.X); - writer.Write((ushort)Size.Y); + writer.Write((ushort)MapSize.X); + writer.Write((ushort)MapSize.Y); // Tile data - for( int i = 0 ; i < Size.X ; i++ ) - for( int j = 0 ; j < Size.Y ; j++ ) + for( int i = 0 ; i < MapSize.X ; i++ ) + for( int j = 0 ; j < MapSize.Y ; j++ ) { - writer.Write( MapTiles[j,i].type ); - writer.Write( MapTiles[ j, i ].index ); + writer.Write( MapTiles[i,j].type ); + writer.Write( MapTiles[i,j].index ); } // Resource data - for( int i = 0 ; i < Size.X ; i++ ) - for( int j = 0 ; j < Size.Y ; j++ ) + for( int i = 0 ; i < MapSize.X ; i++ ) + for( int j = 0 ; j < MapSize.Y ; j++ ) { - writer.Write( MapResources[j,i].type ); - writer.Write( MapResources[j,i].index ); + writer.Write( MapResources[i,j].type ); + writer.Write( MapResources[i,j].index ); } writer.Flush(); @@ -211,7 +209,7 @@ namespace OpenRA.FileFormats public bool IsInMap(int x, int y) { - return (x >= Bounds[0] && y >= Bounds[1] && x < Bounds[0] + Bounds[2] && y < Bounds[1] + Bounds[3]); + return (x >= TopLeft.X && y >= TopLeft.Y && x < BottomRight.X && y < BottomRight.Y); } public void DebugContents() diff --git a/OpenRA.Game/Chrome.cs b/OpenRA.Game/Chrome.cs index 2c32ae5a25..2c8b59b137 100644 --- a/OpenRA.Game/Chrome.cs +++ b/OpenRA.Game/Chrome.cs @@ -317,8 +317,8 @@ namespace OpenRA if (mapPreviewDirty) { - if (mapChooserSheet == null || mapChooserSheet.Size.Width != currentMap.Map.MapSize) - mapChooserSheet = new Sheet(renderer, new Size(currentMap.Map.MapSize, currentMap.Map.MapSize)); + if (mapChooserSheet == null || mapChooserSheet.Size.Width != currentMap.Map.MapSize.X || mapChooserSheet.Size.Height != currentMap.Map.MapSize.Y) + mapChooserSheet = new Sheet(renderer, new Size(currentMap.Map.MapSize.X, currentMap.Map.MapSize.Y)); var b = Minimap.RenderTerrainBitmapWithSpawnPoints(currentMap.Map, Game.world.TileSet); // tileset -> hack mapChooserSheet.Texture.SetData(b); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 882a5df9d6..791e0dfe9b 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -125,7 +125,7 @@ namespace OpenRA Timer.Time( "world: {0}" ); SequenceProvider.Initialize(manifest.Sequences); - viewport = new Viewport(clientSize, Game.world.Map.Offset, Game.world.Map.Offset + Game.world.Map.Size, renderer); + viewport = new Viewport(clientSize, Game.world.Map.TopLeft, Game.world.Map.BottomRight, renderer); Timer.Time( "ChromeProv, SeqProv, viewport: {0}" ); chrome = new Chrome(renderer, manifest); diff --git a/OpenRA.Game/Graphics/Minimap.cs b/OpenRA.Game/Graphics/Minimap.cs index 5f710ac7be..d45a570c51 100644 --- a/OpenRA.Game/Graphics/Minimap.cs +++ b/OpenRA.Game/Graphics/Minimap.cs @@ -47,8 +47,8 @@ namespace OpenRA.Graphics public Minimap(World world, Renderer r) { this.world = world; - sheet = new Sheet(r, new Size(world.Map.MapSize, world.Map.MapSize)); - mapOnlySheet = new Sheet(r, new Size(world.Map.MapSize, world.Map.MapSize)); + sheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y)); + mapOnlySheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y)); lineRenderer = new LineRenderer(r); rgbaRenderer = new SpriteRenderer(r, true, r.RgbaSpriteShader); @@ -56,7 +56,7 @@ namespace OpenRA.Graphics var dw = (size - world.Map.Width) / 2; var dh = (size - world.Map.Height) / 2; - bounds = new Rectangle(world.Map.Offset.X - dw, world.Map.Offset.Y - dh, size, size); + bounds = new Rectangle(world.Map.TopLeft.X - dw, world.Map.TopLeft.Y - dh, size, size); sprite = new Sprite(sheet, bounds, TextureChannel.Alpha); mapOnlySprite = new Sprite(mapOnlySheet, bounds, TextureChannel.Alpha); @@ -73,7 +73,7 @@ namespace OpenRA.Graphics var dw = (size - m.Width) / 2; var dh = (size - m.Height) / 2; - return new Rectangle(m.Offset.X - dw, m.Offset.Y - dh, size, size); + return new Rectangle(m.TopLeft.X - dw, m.TopLeft.Y - dh, size, size); } static Cache terrainTypeColors = new Cache( @@ -88,9 +88,9 @@ namespace OpenRA.Graphics public static Bitmap RenderTerrainBitmap(Map map, TileSet tileset) { - var terrain = new Bitmap(map.MapSize, map.MapSize); - for (var y = 0; y < map.MapSize; y++) - for (var x = 0; x < map.MapSize; x++) + var terrain = new Bitmap(map.MapSize.X, map.MapSize.Y); + for (var y = 0; y < map.MapSize.Y; y++) + for (var x = 0; x < map.MapSize.X; x++) terrain.SetPixel(x, y, map.IsInMap(x, y) ? Color.FromArgb(alpha, terrainTypeColors[map.Theater].ColorForTerrainType(tileset.GetTerrainType(map.MapTiles[x, y]))) : shroudColor); @@ -117,8 +117,8 @@ namespace OpenRA.Graphics var res = world.WorldActor.traits.Get(); oreLayer = new Bitmap(terrain); - for (var y = world.Map.YOffset; y < world.Map.YOffset + world.Map.Height; y++) - for (var x = world.Map.XOffset; x < world.Map.XOffset + world.Map.Width; x++) + for (var y = world.Map.TopLeft.Y; y < world.Map.BottomRight.Y; y++) + for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) if (res.GetResource(new int2(x,y)) != null) oreLayer.SetPixel(x, y, Color.FromArgb(alpha, terrainTypeColors[world.Map.Theater].ColorForTerrainType(TerrainType.Ore))); } @@ -140,8 +140,8 @@ namespace OpenRA.Graphics *(c + (a.Actor.Location.Y * bitmapData.Stride >> 2) + a.Actor.Location.X) = Color.FromArgb(alpha, a.Actor.Owner.Color).ToArgb(); - for (var y = world.Map.YOffset; y < world.Map.YOffset + world.Map.Height; y++) - for (var x = world.Map.XOffset; x < world.Map.XOffset + world.Map.Width; x++) + for (var y = world.Map.BottomRight.Y; y < world.Map.YOffset + world.Map.BottomRight.Y; y++) + for (var x = world.Map.TopLeft.X; x < world.Map.BottomRight.X; x++) { if (!world.LocalPlayer.Shroud.DisplayOnRadar(x, y)) { diff --git a/OpenRA.Game/Graphics/TerrainRenderer.cs b/OpenRA.Game/Graphics/TerrainRenderer.cs index 6e607c5773..6b86a8546a 100644 --- a/OpenRA.Game/Graphics/TerrainRenderer.cs +++ b/OpenRA.Game/Graphics/TerrainRenderer.cs @@ -50,10 +50,11 @@ namespace OpenRA.Graphics int nv = 0; int ni = 0; - for( int j = map.YOffset ; j < map.YOffset + map.Height ; j++ ) - for( int i = map.XOffset ; i < map.XOffset + map.Width; i++ ) + for( int i = map.TopLeft.X ; i < map.BottomRight.X; i++ ) + for( int j = map.TopLeft.Y ; j < map.BottomRight.Y; j++ ) { - Sprite tile = tileMapping[map.MapTiles[i, j]]; + Log.Write("{0} {1}",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 // before the palettes are created Util.FastCreateQuad(vertices, indices, Game.CellSize * new float2(i, j), tile, 0, nv, ni, tile.size); @@ -61,7 +62,7 @@ namespace OpenRA.Graphics ni += 6; } - terrainSheet = tileMapping[map.MapTiles[map.XOffset, map.YOffset]].sheet; + terrainSheet = tileMapping[map.MapTiles[map.TopLeft.X, map.TopLeft.Y]].sheet; vertexBuffer = renderer.Device.CreateVertexBuffer( vertices.Length ); vertexBuffer.SetData( vertices ); diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index af418b34ab..670ff89f45 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -170,11 +170,11 @@ namespace OpenRA.Graphics lineRenderer.DrawLine(a, a + c, Color.Blue, Color.Blue); } - for (var j = 0; j < Game.world.Map.MapSize; + for (var j = 0; j < Game.world.Map.MapSize.Y; j += Game.world.WorldActor.Info.Traits.Get().BinSize) { - lineRenderer.DrawLine(new float2(0, j * 24), new float2(Game.world.Map.MapSize * 24, j * 24), Color.Black, Color.Black); - lineRenderer.DrawLine(new float2(j * 24, 0), new float2(j * 24, Game.world.Map.MapSize * 24), Color.Black, Color.Black); + lineRenderer.DrawLine(new float2(0, j * 24), new float2(Game.world.Map.MapSize.X * 24, j * 24), Color.Black, Color.Black); + lineRenderer.DrawLine(new float2(j * 24, 0), new float2(j * 24, Game.world.Map.MapSize.Y * 24), Color.Black, Color.Black); } } diff --git a/OpenRA.Game/PathFinder.cs b/OpenRA.Game/PathFinder.cs index e1dda7184a..4fbc4fe903 100644 --- a/OpenRA.Game/PathFinder.cs +++ b/OpenRA.Game/PathFinder.cs @@ -38,13 +38,13 @@ namespace OpenRA this.world = world; var map = world.Map; for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++) - passableCost[(int)umt] = new float[map.MapSize, map.MapSize]; - for (int x = 0; x < map.MapSize; x++) - for (int y = 0; y < map.MapSize; y++) - for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++) - passableCost[(int)umt][x, y] = (world.Map.IsInMap(x, y)) + passableCost[(int)umt] = new float[map.MapSize.X, map.MapSize.Y]; + for( int x = 0 ; x < map.MapSize.X ; x++ ) + for( int y = 0 ; y < map.MapSize.Y ; y++ ) + for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++ ) + passableCost[(int)umt][ x, y ] = ( world.Map.IsInMap( x, y ) ) ? (float)Rules.TerrainTypes[world.TileSet.GetTerrainType(world.Map.MapTiles[x, y])] - .GetCost(umt) + .GetCost(umt) : float.PositiveInfinity; } diff --git a/OpenRA.Game/PathSearch.cs b/OpenRA.Game/PathSearch.cs index 59182f94f9..e465facfeb 100755 --- a/OpenRA.Game/PathSearch.cs +++ b/OpenRA.Game/PathSearch.cs @@ -173,9 +173,9 @@ namespace OpenRA static CellInfo[ , ] InitCellInfo() { - var cellInfo = new CellInfo[ Game.world.Map.MapSize, Game.world.Map.MapSize ]; - for( int x = 0 ; x < Game.world.Map.MapSize ; x++ ) - for( int y = 0 ; y < Game.world.Map.MapSize ; y++ ) + var cellInfo = new CellInfo[ Game.world.Map.MapSize.X, Game.world.Map.MapSize.Y ]; + for( int x = 0 ; x < Game.world.Map.MapSize.X ; x++ ) + for( int y = 0 ; y < Game.world.Map.MapSize.Y ; y++ ) cellInfo[ x, y ] = new CellInfo( float.PositiveInfinity, new int2( x, y ), false ); return cellInfo; } diff --git a/OpenRA.Game/ShroudRenderer.cs b/OpenRA.Game/ShroudRenderer.cs index 78ba461704..0c32d136ef 100644 --- a/OpenRA.Game/ShroudRenderer.cs +++ b/OpenRA.Game/ShroudRenderer.cs @@ -44,8 +44,8 @@ namespace OpenRA this.owner = owner; this.map = map; - sprites = new Sprite[map.MapSize, map.MapSize]; - fogSprites = new Sprite[map.MapSize, map.MapSize]; + sprites = new Sprite[map.MapSize.X, map.MapSize.Y]; + fogSprites = new Sprite[map.MapSize.X, map.MapSize.Y]; shroud.Dirty += () => dirty = true; } @@ -135,11 +135,11 @@ namespace OpenRA if (dirty) { dirty = false; - for (int j = map.YOffset; j < map.YOffset + map.Height; j++) - for (int i = map.XOffset; i < map.XOffset + map.Width; i++) + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) sprites[i, j] = ChooseShroud(i, j); - for (int j = map.YOffset; j < map.YOffset + map.Height; j++) - for (int i = map.XOffset; i < map.XOffset + map.Width; i++) + for (int i = map.TopLeft.X; i < map.BottomRight.X; i++) + for (int j = map.TopLeft.Y; j < map.BottomRight.Y; j++) fogSprites[i, j] = ChooseFog(i, j); } diff --git a/OpenRA.Game/Traits/World/BuildingInfluence.cs b/OpenRA.Game/Traits/World/BuildingInfluence.cs index 3671ad2dc2..45262fc981 100644 --- a/OpenRA.Game/Traits/World/BuildingInfluence.cs +++ b/OpenRA.Game/Traits/World/BuildingInfluence.cs @@ -38,8 +38,8 @@ namespace OpenRA.Traits { map = self.World.Map; - blocked = new bool[map.MapSize, map.MapSize]; - influence = new Actor[map.MapSize, map.MapSize]; + blocked = new bool[map.MapSize.X, map.MapSize.Y]; + influence = new Actor[map.MapSize.X, map.MapSize.Y]; self.World.ActorAdded += a => { if (a.traits.Contains()) diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index dc59e8d0f6..8e3c7dc0ea 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -44,8 +44,8 @@ namespace OpenRA.Traits public Shroud(Actor self, ShroudInfo info) { map = self.World.Map; - visibleCells = new int[map.MapSize, map.MapSize]; - exploredCells = new bool[map.MapSize, map.MapSize]; + visibleCells = new int[map.MapSize.X, map.MapSize.Y]; + exploredCells = new bool[map.MapSize.X, map.MapSize.Y]; self.World.ActorAdded += AddActor; self.World.ActorRemoved += RemoveActor; diff --git a/OpenRA.Game/Traits/World/SpatialBins.cs b/OpenRA.Game/Traits/World/SpatialBins.cs index 432cac2957..f87577e6f0 100644 --- a/OpenRA.Game/Traits/World/SpatialBins.cs +++ b/OpenRA.Game/Traits/World/SpatialBins.cs @@ -20,8 +20,8 @@ namespace OpenRA.Traits public SpatialBins(Actor self, SpatialBinsInfo info) { bins = new List[ - self.World.Map.MapSize / info.BinSize, - self.World.Map.MapSize / info.BinSize]; + self.World.Map.MapSize.X / info.BinSize, + self.World.Map.MapSize.Y / info.BinSize]; scale = Game.CellSize * info.BinSize; } diff --git a/OpenRA.Game/Traits/World/UnitInfluence.cs b/OpenRA.Game/Traits/World/UnitInfluence.cs index 8846ae25a8..005379e348 100644 --- a/OpenRA.Game/Traits/World/UnitInfluence.cs +++ b/OpenRA.Game/Traits/World/UnitInfluence.cs @@ -39,10 +39,9 @@ namespace OpenRA.Traits public UnitInfluence( Actor self ) { map = self.World.Map; - var size = self.World.Map.MapSize; - influence = new List[size, size]; - for (int i = 0; i < size; i++) - for (int j = 0; j < size; j++) + influence = new List[self.World.Map.MapSize.X, self.World.Map.MapSize.Y]; + for (int i = 0; i < self.World.Map.MapSize.X; i++) + for (int j = 0; j < self.World.Map.MapSize.Y; j++) influence[ i, j ] = new List(); self.World.ActorRemoved += a => Remove( a, a.traits.GetOrDefault() ); @@ -77,8 +76,8 @@ namespace OpenRA.Traits [Conditional( "SANITY_CHECKS" )] void SanityCheck( Actor self ) { - for( int y = 0 ; y < self.World.Map.MapSize ; y++ ) - for( int x = 0 ; x < self.World.Map.MapSize ; x++ ) + for( int y = 0 ; y < self.World.Map.MapSize.Y ; y++ ) + for( int x = 0 ; x < self.World.Map.MapSize.X ; x++ ) if( influence[ x, y ] != null ) foreach (var a in influence[ x, y ]) if (!a.traits.Get().OccupiedCells().Contains( new int2( x, y ) ) ) diff --git a/OpenRA.Game/UiOverlay.cs b/OpenRA.Game/UiOverlay.cs index 6cc6152cb8..6d0018adc4 100644 --- a/OpenRA.Game/UiOverlay.cs +++ b/OpenRA.Game/UiOverlay.cs @@ -55,8 +55,8 @@ namespace OpenRA public void Draw( World world ) { if (Game.Settings.UnitDebug) - for (var j = 0; j < world.Map.MapSize; j++) - for (var i = 0; i < world.Map.MapSize; i++) + for (var j = 0; j < world.Map.MapSize.Y; j++) + for (var i = 0; i < world.Map.MapSize.X; i++) if (world.WorldActor.traits.Get().GetUnitsAt(new int2(i, j)).Any()) spriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), "terrain"); } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 104e45dbdd..2ffd574fc8 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -79,7 +79,7 @@ namespace OpenRA Timer.Time( "----World.ctor" ); Map = new Map( Game.LobbyInfo.GlobalSettings.Map ); - customTerrain = new ICustomTerrain[Map.MapSize, Map.MapSize]; + customTerrain = new ICustomTerrain[Map.MapSize.X, Map.MapSize.Y]; Timer.Time( "new Map: {0}" ); var theaterInfo = Rules.Info["world"].Traits.WithInterface() diff --git a/OpenRA.Game/WorldUtils.cs b/OpenRA.Game/WorldUtils.cs index 4ce3391662..4326b31134 100755 --- a/OpenRA.Game/WorldUtils.cs +++ b/OpenRA.Game/WorldUtils.cs @@ -179,8 +179,9 @@ namespace OpenRA static int2 ClampToWorld( this World world, int2 xy ) { - var mapStart = world.Map.Offset; - var mapEnd = world.Map.Offset + world.Map.Size; + var mapStart = world.Map.TopLeft; + // TODO: Revist this and fix properly + var mapEnd = world.Map.BottomRight; if( xy.X < mapStart.X ) xy.X = mapStart.X; if( xy.X > mapEnd.X ) diff --git a/mods/ra/testmap.bin b/mods/ra/testmap.bin index 8bd94fb17305490da69fbbed4a91e0ec9c31a21b..464010b961b94939ac6cd97d568d40a9309f4288 100644 GIT binary patch literal 81925 zcmeI4%WoW2_Q$`s9{sS}>9&In<3~pA*bcHKLS*G35m5LK5DOOUW?1}wQj+-#7-@DS z5ENFhnIr@R5(^L$;eaK}izo|5gOWi=Y<|CaNHaT2me?kie!p|>t-5uqyQ^L0$G9J- z-Raz}zW3BUpL6cHkGfUr5BLNAPhLVm2nYcoAOwVf5D)@FKnMr{As_^VfDjM@LO=)z z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5a?S19|9l3>)YxNLd8FX{~^Lb z(4;?g_z3t&n!wT7?jxv=;2+)jhyBc-0iVIU3*0Skg7J1KSYp@F+2JwNV+2Qc{ysSK zDfp*QTHbAt^E_bQXLrkKb^Z}}4DYe@BbJDhSVFLb$|mC^=Y%7VsP?w1{vK)kTb1Z(oA9gwhg5 zh^l#Ow$ud1mNBu6XWMfUc@N5%;Mc&fp|Vi@6?g>i(GZ871(X*swt(Xc_|+o3MU)mX zvWR2W+n3-QlIc%AxQye=crKlju+!VuO@I?8_+9!3@Q*et&}io|N`D>hu(N>50*)=< znFUNQ!e2yr5u+M)6hm~HNgA;6Cx@4`MNA&I6iz^$Kyac{Y%!yq$DMx4YAl0v{G9f> z1^5f7E}*`ENe3n|B$(!Huru2UV1hqOb&l{hgav%V|6^E8-mSmx?R&`%t3z|Y8t^b%KxqB z0s}eP`2hF;-c8_U+S9TEW`L0Z^?>QQ=xjP=j*bJEI;wTl>zJ%#CLN19bPCf5r%{>4 z=uZPW+W7$L1Nb+gZX);;__XVltiJ;RMguegj`>LkW4KwWUwWWEBvijDhQppIwjn0o>0g=BQpf&VttHcHzV{jc21 z5&govy`I;AYw)f)&|2~Ys00`bFrncm{(lk?*Z?@YuC$1$&aFR%` znnf^+a(k7o0#`e^O1u0%I`SUWd+=M9ynOgR%092{5PWxVNbu=hZKB@9WD_&pHC;z} z9itud)Ns6p=UU)X%bJBZi*UAW6@r9Zg}T})pmmhrF9*K>zJS*<5hw#?_+^x=&)Y;3 zK@%fQG@6)dVs=+GzX!hW)W5u~u!X>MxD@j#?ASHBj*~de-@BR-&~~jx&t~`n>I?WS z6M-^R89|wunBe0^{;=t|^#67m34*Y03U{;}BAp@U&A9&yK z(lWdWD^7r(~~cYeFJI( z!3N5k@HP={>i+aky2;#we-Gi?icC;_ThZjsuEOz&^2{s-8$M}QfmcCTN!FZ`A-X#` zeTeWODnGD4M_z5QZ@}9?xS_HC6ZmJm{$SC)1iX|cZ<<)1nS~WHsEI02gS@Tv%_sJNbQhUn%J z;omZboe!YCi$&S_?-i&kZS$s!P#57}L}$#DOYwpE`YzPFj>j6k(vwqm&Uhls=^3aQ z1T*Q8zbUu|wdRDH`@sFQIV`tJP?wUKS2P9d(z0y9fk~K~vpxqtcl`fn;AeQw-R~5p2;i$wuR6g$wrpn0>UZXD z{cr0V;#zLba`#xK*MDsAiCV!t!g*BZGcM77?X)I3>HW4aWp*>J0;}*>qa~)uvRzu1 zTmQjJ|Cqj`B)$G)uu~J@Rxr=+(tI3YT2Ooq^>w;8c>w=`ZUSFwyV%`~t5B;5R+A-e z?t*85E*BqL&NVP!P1teoD6#85rFaQK#|K6<&+qd8WX!)>m^^@bfZzejUqXGU?P7N` zuEJYIxaur1k#T1cU3_ejGr(Wnuw&Ji)W z5=-x9G~|sH_>->h%)y^?>}v*TX25U<{M3TGdwTAHt-#SH>_YK3P~RZvvd5AZVeBpu zB4bx+bStQ=K&>ELL3IUV_P)i-P?s}Cn^xb~5SRjAT>7Zkhn4 zIWfmgAe@Vv)gKvt>+=fCUH0w52k!_i@|#^EHOv|ROn;IIMpsa`_bpzAe;MVsGP>sU zZbk#&jsLX%TsaB>tR}9~BCUove(-*u<*_5=CP$v%MkasG^PAT+Xiww7gUzX+-2y=y#bZY$ z_{RSU8oO>2nO6+mn_o14ceUS;cb(s-HI1AV8L)4ZwtU9MzLn@D%DPf~UN8ZLu3e*somNZn(;ME5}fo;5=|1{&|$fIaU)c zgO@N`&L&|DVbaDln#_Z9;1BM({1$ z9bgCk4&N8wXaEfajrcmw6iQPVokFAKVFg1Ac~`~9;g7Qw#xfr1V?E!uY!uEcny>q z7-`_x6ld%9c*7xwoJW1LQ`dc@k9h=23tPJj=y&num8r!-_Z{S^faEa*>?3{5 zBT!tn?k=F;Wn7LSA?^1a2-`vg%p-leJOZVQG`hHXZMUc2bSW-B?VrH4u1~+&zkHFf zD}n3TPruo`t zPf+a!M46X)(yH?4$<0(&QGy=0s{i@jN+-Y3*|?-f|7#h^FGrK2dXNTrUaYjPH)-nm z9(`&}l;)?k$|HqJQC|9^a{2NfR<6hn1;n$aMr)5=lp+&qDa4S|`Cr;|@@GGkoZ1R( z(Y*F&Z|BxRikd=PHfB;pduB*~InR42%9BvtYWG-&$o|?JVm*rZGufYL9+qZ#!LJdTIhhf=e6CbxY`@P@wfM*aEb#GXvJz#yzIM#|(}9JdZXf*S}c%*LoVy=TE*K zqObpG?QQyKwaR~X?fv<)M>&n1V_#4B>Gse^-mhD&X##~9Xq!_xE~JawHFP4QuMZXy zcZ8X_y;6;B{qt2N-SYF5>CIf)hn*;vzm}c)xgxQTxbv0M{3kq=oMd~dH2d&Dh-WGJ zB^}gR_fvCig9B-?x=olp0J&H)b?!6vQ~Ujw<+fkU3%kV%j(wz8u4oeZ-TqbBmjtQ> zk6CkBjI71|J7vzw&$<_(N%{9x`~4R-+UKo>)-KxZk#%kZGmk`l?jG=ewriF)?Z??> zRCC*B(k>832l`FV3);(dK2qe&oh9t=D4##en>$O^{%=P)vf}?&a6fAQFRH$_ zvDQA;l3D=mgiGX*O_MK~DU*k!rRZg5@1Y;Ge>*LlwBJMRh!Xduso1#(G5_%*?6ukl zA|taJxeT7Fsb=WuvZ>>}{zcnN$IHaWlh~iX_F4{apY(YLZU4M<-_AWo6#YnpJvLzW zA?`c(SiEPDk^VLoP)~ zOW0kUDYJXN-p|1iOvm#AtzUZ!MZjLuZZ9=5o==|ztj}X)`rFIt4j7qh0$ry9{V{pH zUhQEusBD3fMu{F!pReH9E%kd1v#1(Dc3uB zO&c_NuqPDv;@;6^FE!zIOAI2ti?)EhoUymc=oZYam?N28)#|M}9%gN{^~wEpFHUi6 z*j{9F9=&PJ>2v4+kmqaboA^D1`s-2H(3#yfbB_GOXLYN-B!qwv5CTF#2nc}#BS2${ zg6m-icIuuG#M<}Qm92xs#mi}_NOI6+LT1;);T4l+0t8C*o#+YslZ3<}Mp(PBsStMTQhiS>sD)|x7 zQp+zOHVM&y#EbzOXaQ2wJsMd&@jg=jjF}b^mMrn)Rhl^`PR7Z|<>t-1)U7Hii*ynh z8FAvA@0>WXW?b*j_%r^m`l}GA5U3ES5U3ES5U3ES5U3ES5U3ES5U3ES5U3ES5U3ES z5U3ES5U3ES5U3ES5LhP!o&}zT_Z;vXJRjaM_;mLH=g#pqMgwkw;;>|Qi4><#y-htv z3?$jkPh)wOx1AV>2qqK91lL+E&%%Ee!E^ARL*Vn3;)fn3p7i1dE9TuHV$yOWssNynH3oKXYG^ttSDeZ z{A4ob(sia1|u{4FMe0~N}FBM6QlJc8O$mO3 ztb%YCYL5et!}~3_FVe&i9lZ!Q{};e7;O#|oFUIy_T;yHAc5~gafY}AiEnuE1g=I$2 z7JlST8i~r?%_<0Yqh=V0c-RBNKiq@bP6Rslr66oi-1T*BBA#+NXWHBr}wccH!uja_Iy4*zikzvcEtniwjGE)kQF`~|Ck z&};2QJ0bud{jizBB;$aW!d(hZ}=1$aiqOlXr zWHRQn6Y&&FLw~eT;8&oF0U?u~g*OX-7Qu1gIK1QVm(W^5dkNc?Fu8;&VIyUtt_}YY z_+!#|&H!iNok@Tn%)y@n-NTY{9RvJ%=D%sD0pEKq4wSQmy$t-HKsL!H7 zOddyg9JM9PEMfZ+?pVU?66Rdy)kL#4{37t8)xsGBXAqu2O-y$VwK>%1(3nHhrB)n1 zi0~k42T>P0DX2Tebh2-s0G?p{<7y?k$fg`_OjhHwXwG76*1F>3XdGv^v#^B4CG1$j z&L!;XkB8p@zq2+rhw(W~%%Rm2se@=9#MnWMAH>8oFb!`S{xpJ~h~y@I0{#<`2c{|@ zwSaYzn|O$kR^xGrvuMqtJ&SEaEJaEEj%8%I<}f*jsX0vRtCE3(XdlG3gP5eMI*s}? z8q>YhpiZSc2|O9uKd~pZfHCQmepvBV*MdLaXE8O4=~>JSs|c6Q0eA;Y6EKMN?t{P2 z^yG~STGMDx4{R+@!hbTde{BUuY5$^ezOMi)YoqrA2o4}TV4DEfdS3=!hW9djS6R8? zeW>k2eIFXqRLuZ0@McP6%%!H0PWM1NSLZWCp&?xANzk8 z{=`YkkWp?Mqi z+i2Xj)_WP_mof2A`2R%kE&Oj0{4ekwU*31{DO{kzf587ozh>hYzc@yz0wc5k$Qz4C zeF(ur2p<~Qqq_KO*cm{v_aHa29oU{{x8K@9@plNmL-?KHr>h3Fpq>Jb@e5Z{1vuOj zojww)Bh>))D`a-}BychhnLbL)+7#;jVd6Odn5Lya z;_9)$mEzJeFvzhJH6E#NJ9Zv$_4)5uG}OYmNDO!N?HhfqI+#+|^O z@ESma?|u#S8X7e;$50<(0hcXPLmun2DvzTB^aR1jW|d_M6hDqtPy zV(7gH?#(lXGWa|NJQWL@l6pk`|Cik0ipNs{bM3$W82rZ!u$Kzq{R{Ay4hm9CWMx6u z1a--B5w%6s7tvTma}i_LQNNDHbu`KQ8StYj;4X&V+i&Ab%sd7EDVCjx6Zk2qM_~U_ zF5M*{wNGT!S8Qy=TlwX}zx3q_R5gp3SVU_P?L}<60o;Ih1H3jT+Zb{eLp5)&fv16| zV~;2H9}C_qwO-RFVHfR-E`$d~zMtj7UYT*zFJgKTGmF@M1Hlc1H&D}U3uI_0EN~XyS@>rM;C~TwiHKG_JY&)~uq89v<}B7Y#TZYU@Ps`r7oJ6U7PYgepEWD^Sx(9i93=1G z)(i)y^PfP#Gz6o;Kel|`_NJaz_lXVC!E^ENb>KjG{|5hWh4rZK>Q-p{qz=}I%luk| zt^KnWblaPHTHPnsQwQ%I;GGT@TQG3wTe{rpCROZB;7xdM0B^v19e6#-m1F$kX0-~$ zHrY2a?#Y>3E)H$ zQj*%OVsFBK6Tuts-$3v>{MUJ45)TZWHQ%V4VbKu$M`Qm|R@BZ8K9@)cybHXWfra8P zAh>|=f-?(IY$U%2eh=^W@b5uz55jv;Ya(d!q+B#LcLKo)geQ^&J5{mQ5x$O^J1}(C zdL<`R zVVBRO^x{%d14Fwdj7(jfPom>7IKssgOu2D&8*nc1ec*j~UjtuT`~N%Q!_Y1wxQOs# z(p-z#lef;s71v6=NnjFmPt5!mmy#M78vKK0Y`1pk(&um)_6A8~%Z>aGl{m;;;`{L5 zNANZLudV(6Jt@K`z$eL=GR$W;t`MK5i%8%%CefV4m`mqU=jkao8HImtw%wZkc5H-h zT}Y)L`eV}mnTPU|48n|B_=~`c2HR7>DR>X^qE)nXr48jL@ISGt=}8v5^O?Ma02O(O zNwg=iZ4#4{c2~BLy;Qms*-htSZo^zqPfYfa*os5uL>K$OUYAqV!vDaqGxDe4pF;2; zuUkb+SK3g13Vhm^P??4Mh}%hQpTr%Ln4QGjB<6cXKzGww97MVCy;p+0rnkC|+TX*# zVR(nlVymu6X@9Q{)Zx|5+gCkYfp-P|t6uP`7v2ZlXOTa}pUkjAb?HhQ%1_~cTG}#Q zSyBu4hJK9FBz8_>*CckkS;~Z+-E`~K{;Cwrz+t|^!)CEn*QB(+S4U7sST}F4AiRRw z71Xbw@v1j=AN>0eDDuWR$4e*FP_FProuB@@K<>i5p&uhwavw!XBhGF*0zq*g%ZbCO zEJJ^^_Rq3Rv+>stqj4Bbx^zuS`+IfN>uA)`{1Nz(jeqP4#;;)FRgX3Vst8n-qS~ZO zC)B{Lz+d71PoG^N5_}n0hPTX4GR8;3o%T@_!{rbpnv8(G$MlOS4F1-Y#pwnlY#>$H z1^gdT`w{gYsf)MOUFuh^WlSuiwT!k~D47k_ z++Mp40%L}t$P!C5T(q;)tgZ#UxLhkBAs@4p0bjMo0cY(vidX+5HRu`ht@j`sx|T7u zjOk^}*b!62aDV=v(8v%Z&Q&NTo<(f9F&18!C15F9go>&FS=TP}G4)k=SK%k!4yBYV z;&3z^(Q*6_Q|2tRv`R5hPh=E{IumKbS2hlKVC@xD!E$)jk!PTS{)Eg-*ap z-?dT8t^m4Q6!csLQ)w|&x8ow4a`ht_1OLCPx(OI6ZIs+P0jkYc9b(SHB#BEb4B$TE~yMg%HU^)3Ns z<59kHPR1a2RI+H-aoJ9b78If9^ijPQ=GxfS#-yw>Hl6LzPBIrFrY2QMC#hPfwNTG> zWd#j=au=u+!Nf~S+IKPsc>yFY+U=tBO;>x@ma9olf{JIRzo zBEn%aZ9?D6M2nIwjJGh+LaUWI(59fFPwoO0_L%s9f_KfH^f^*4DS`uT7o{tm;slva zi(trir;jS7XYZ+G!X8D+MP5QGP2EWQowiStb{C4hZyx?U2XcC${S|#Nv;OGz zQN>5;rc>R9>JFvFO_@Fq;X`~XXbJnzo2_*Pq!UE>8|VAs-yfZ0DRd-_;LrE|#4Ml7 z@-HREvdp74kNP|s^U2+1$geFZ{hl zv$e5+R&a`u$TR{HpDV=>BePOS%sj^DF)`oc`D|qv`xy8*gM68cGL)v2hwSIuR11#S zqhj4tD7($px_}exF7oMc8O8=lW3`_$41QbzR{8>}n4gc~f82Y$cHNXwLG<~y?wNN_ zzf?^rC+=)50e&>cYq`ji7mB=@Qdpya)xMOjcMhz;UqO)DVh+Mgwh8Eintr~md*=1@ z%ao>+xX#v6Ym)5iy2wkIT57sDtl8HnVC_Frw|!*$mxHi|0+-9YHUVyAui^dh_QT(A zJ_#>*{+rI$QfnfOh!s|3C$v*efZ|8c|51%gAim2%SUtg2@a2n(@F(bJ7p_v+k8nR~ z`%x$V-`~z3J0IIocB_k#*?&s){HQy2%5U22^yP~}CxO0q;Y#-XXzs_@evBLZb52l6 z6_SJ&wVN>Fh<%?=YX8*C-o1*zqckFyxdei1-z-M`1TDb^Z7~m@;qH{Cn5I;V_ zk6x8L|4plpg`I>I@kI+1*1*W@pM9OVTubmC0Um+(1Mma9bHF*rAG&kt8vYFaXZB00 z?}6{(Wxs&y^(!RR-8UT%@#7Qx%AfzH)yILIeuTyS9hMjbEq#pwmIrC^qefpNAA$b} zf*;`jfZ!a$bEus|{hax#*PTn3@G7us6eM3-eGmV81lcd({tEon(PMeJzUg>~Uqesu zBWh|4N;%{`!_m&|WAO=E1hU#Wf$u*X{|<{(2fizjH40cBgc;R42Xy^WMoj0>JcqG! z7(a)J^T2s{=i&d015tPtwN=zt(O5-u6=SaeuOx96z5KQG@>wU5Q`>b?^W?5!5QPxU z5M#P?+c`mt;1!(N>SQ|T`RI38Mv1?crTjzzS%0J%LLD)kL;D=Iox|jL1m_W+N9|v% zg($p=@l{N$qP2?lDz?1>|CP0|pVW38-Adu^rU)?}Vj@H(c zkog@J^22I}BWQo)vK;@RRc4|n+o2!^w%^Ycdb{NM&xOKtZu0vfQ z-Adu^rU)?^Vk*RRh#5*l*OL9^lpTOQ;)yIx#7{Y1waF3qA1zBbiCJ>jA1@^>*&SoL zVHYJ0pY3)Wgr+PX(Cs<|thf;YS+_}qxFf`Dh&c;>{L3jj5bQv>gMafS%4@YC2+&;v zBeQ?E^TQhH^((yc&som9GU$S z4-p&v{W3^NR6m0EA@Cu*5Bl1rjmyIfo{p`bXd?1OgK~7vB5h|n6==R zxE5ilYrk}ATu(>+lw|31;B$B%!T$)shwwi{@B#b}_#S_qU6Pb0lf?p>%+d7%cbP!9 z;?^jTELuEIpT7)Jz~SfcKS%Hp!jGJf-#d29Tl*O+uX4dYD(-*%z6aOCE#BS-$NgOe{t z$$i_?N`#v+H=I2Dhg6Vl0!G*WF{Q^0Ob_pOwQ^AqJ!jok7wV z|4#)`xo*+4`E8gxuLj}J&HHKTl?XRir?Bk#w4bs{6^M;cYDA~J!-_Yhq`+rIOy(VJ zG^|4VrgJH8CaQ00P7|QEr-5iR+Bfl%8Lj>2IKbSajmnS>_>?w2D33m1k)7Trhxa2I zmxk8`$}|BvAe51JkTll*BXzr8sMFC#1;quZ1*ivT=m#va(|f>gt_w;W@RdFMnUE(0 zazGf6e%I_4aP@l{prgHdINFHTm;y8dj0G4E_yaCJD33m15idIUH`iSS=`Vpj{F#s! z!ATK%aZG%wK{s0qDdhyO}!Gubp>$11Xj9S!Cfd^05vQLgyEP%axaa@<&u*06z@hVDS7MO-IQ9E zL~1T#DMihFr1ph>OHS$+)jnFOlo-3=fwJo*3`d0y2yfTymTi)YMf(--E4BnzdMqM1k@q_tJ=5DT1j-N<%R&DTztn%{rYVlUG7VVp25SM@p>31z5K@eMJGeC{0v! zR{#f0;4dXii8$#OxoA4!-~8_H;2kmS!m*8Xo8r5MX6b&>SO`UwxN3;e&#pV&%qsRljs zD_oiELyj=q3`~>wHPTYO52z~m^h}yJ8065-$Hh%Z`8l^6wMJp$g@43zXn!QX@qvae zyM?*s?vgVd=@zF)e_7*mD0j^_^S&k=X3U zgI8Lsttvh1gZ$No^rIWkRw|A*4+2}YMo0eKjOsU!wuZ;4>3^G94f5>6BfCi`ao>~v z@tBsp`quO7Bsc%D>^u_PBw8B|n?`aT!BK0@vTrr*8;#2dmS-|@XE26?^v0t?`sO+> z^Vl}b5nJSsX0HVT)0?HB@qV3az)#CM%*qAL-na32W*OS#&4zMVNi-`_7*ad zk`yFv1VJZ#r|B|s>9}5>sZhb1%I`JrFw!&fGIzliV7MvW;&X;!@UVU~2zxD@WM`X? zBlJzDKo3bfk=WGny#{`__5~ge*;J_W6yQ6A?Ckd-nmCey5}0u zFA2`ee@@T5Z&H0_97KL8Z~);A0pfrypnnMalG|o7WwRCYxO5%-xbYrrLo^d%c^dWq z$^JwKrN_d<kc}0vA72MEB>A}&T}S^NEImoiJwt;*Qs)#e zqd!KdGy+7k1C~kZ>-{7>Vp38X8u^&Zj6Zm@KRle~LcE5lQ(Vg0$uJmY(vs*(tae~N2>~zKX~UG+ z51Mh`U|fzW_n=}1oc zBb|$_iyg4sJeR@ad$y2G;ROxPhU;Fmz!vUE%M!~!iWKR4p|-whSyQaX^7^8*k&Txb6FJAt4v&e@40#{B|m*6MgGeUv4TMS(pZ4;hUEWx?j1Vl#Uw`-qS9H1Mt@}s zWj~+(GgOQ%q~COVrkwo8-Xw=^x7?fmJ;~1ak7(c1M#GC_H~+EI*oyjR&u4w#R+N9E u*<-~|g+PTsg+PTsg+PTsg+PTsg+PTsg+PTsg+PTsg+PTsg}_Ec;Qs+gz+lDz diff --git a/mods/ra/testmap.yaml b/mods/ra/testmap.yaml index 97daa5c23f..1a4f881c51 100644 --- a/mods/ra/testmap.yaml +++ b/mods/ra/testmap.yaml @@ -1,68 +1,61 @@ MapFormat: 1 -Title: Isle of Fury (6-8) +Title: Middle Mayhem (2) Author: Westwood Studios -PlayerCount: 8 +PlayerCount: 2 -Tileset: TEMPERAT +Tileset: SNOW Tiledata: testmap.bin -Size: 128,128 +MapSize: 128,128 -Bounds: 14,17,96,96 +TopLeft: 27,26 + +BottomRight: 102,91 Actors: - Actor0: TC05 Neutral 93,90 - Actor1: TC04 Neutral 92,92 - Actor2: TC01 Neutral 88,92 - Actor3: T11 Neutral 96,93 - Actor4: T08 Neutral 90,94 - Actor5: MINE Neutral 67,103 - Actor6: MINE Neutral 52,97 - Actor7: MINE Neutral 48,81 - Actor8: TC05 Neutral 59,103 - Actor9: TC01 Neutral 52,102 - Actor10: T08 Neutral 71,97 - Actor11: T08 Neutral 50,94 - Actor12: MINE Neutral 47,78 - Actor13: T14 Neutral 41,52 - Actor14: MINE Neutral 37,44 - Actor15: MINE Neutral 27,52 - Actor16: MINE Neutral 64,79 - Actor17: MINE Neutral 64,62 - Actor18: MINE Neutral 61,24 - Actor19: MINE Neutral 68,27 - Actor20: MINE Neutral 61,35 - Actor21: MINE Neutral 89,50 - Actor22: MINE Neutral 67,98 - Actor23: TC04 Neutral 53,73 - Actor24: TC03 Neutral 81,65 - Actor25: TC04 Neutral 97,41 - Actor26: TC05 Neutral 67,49 - Actor27: TC02 Neutral 53,59 - Actor28: TC03 Neutral 22,51 - Actor29: TC01 Neutral 25,53 - Actor30: TC01 Neutral 47,22 - Actor31: TC02 Neutral 32,36 - Actor32: TC02 Neutral 25,77 - Actor33: TC04 Neutral 28,81 - Actor34: TC02 Neutral 29,87 - Actor35: T08 Neutral 25,81 - Actor36: T08 Neutral 52,59 - Actor37: T08 Neutral 51,57 + Actor0: TC05 Neutral 62,58 + Actor1: TC04 Neutral 64,63 + Actor2: TC03 Neutral 73,60 + Actor3: TC03 Neutral 55,48 + Actor4: TC01 Neutral 58,51 + Actor5: TC01 Neutral 54,68 + Actor6: T17 Neutral 60,68 + Actor7: TC02 Neutral 48,57 + Actor8: TC05 Neutral 68,63 + Actor9: T16 Neutral 71,63 + Actor10: T16 Neutral 70,55 + Actor11: TC01 Neutral 83,57 + Actor12: TC02 Neutral 62,54 + Actor13: T08 Neutral 62,56 + Actor14: T01 Neutral 49,80 + Actor15: TC04 Neutral 50,81 + Actor16: T16 Neutral 53,82 + Actor17: TC02 Neutral 42,79 + Actor18: TC03 Neutral 27,26 + Actor19: T01 Neutral 29,48 + Actor20: T02 Neutral 31,50 + Actor21: T03 Neutral 32,59 + Actor22: TC05 Neutral 56,88 + Actor23: TC03 Neutral 54,89 + Actor24: T16 Neutral 56,89 + Actor25: T15 Neutral 52,89 + Actor26: T14 Neutral 64,78 + Actor27: TC01 Neutral 27,44 + Actor28: TC01 Neutral 45,39 + Actor29: T17 Neutral 76,26 + Actor30: MINE Neutral 68,53 + Actor31: MINE Neutral 54,57 + Actor32: MINE Neutral 53,65 + Actor33: MINE Neutral 65,68 + Actor34: MINE Neutral 80,61 Waypoints: - spawn0: 87,100 - spawn1: 36,75 - spawn2: 92,29 - spawn3: 31,30 - spawn4: 61,54 - spawn5: 91,63 - spawn6: 34,97 - spawn7: 63,83 + spawn0: 34,84 + spawn1: 35,34 Rules: