From f8e9ec463059f1552b7cf3e7a233921fdbbaf96a Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Sun, 30 Sep 2012 13:51:04 +0200 Subject: [PATCH 1/6] Deprecated Component.GridTransform and Component.PixelTransform in favour of new Component.Transform which keeps track of both the grid position and the world position, while keeping them related. --- .../DepthsBelow/Component/Collision.cs | 9 +- .../DepthsBelow/Component/GridTransform.cs | 1 + .../DepthsBelow/Component/PathFinder.cs | 81 +++++++--- .../DepthsBelow/Component/PixelTransform.cs | 1 + .../DepthsBelow/Component/SpriteRenderer.cs | 4 +- .../DepthsBelow/Component/Transform.cs | 145 ++++++++++++++++++ DepthsBelow/DepthsBelow/DepthsBelow.csproj | 1 + DepthsBelow/DepthsBelow/Entity.cs | 15 +- DepthsBelow/DepthsBelow/Soldier.cs | 57 +++---- 9 files changed, 244 insertions(+), 70 deletions(-) create mode 100755 DepthsBelow/DepthsBelow/Component/Transform.cs diff --git a/DepthsBelow/DepthsBelow/Component/Collision.cs b/DepthsBelow/DepthsBelow/Component/Collision.cs index 53b0149..c61f7fa 100644 --- a/DepthsBelow/DepthsBelow/Component/Collision.cs +++ b/DepthsBelow/DepthsBelow/Component/Collision.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; namespace DepthsBelow.Component { @@ -21,11 +23,12 @@ namespace DepthsBelow.Component this.Height = height; this.Rectangle = new Rectangle(0, 0, width, height); } + public override void Update(GameTime gameTime) { - PixelTransform pt = this.Parent.GetComponent(); - this.Rectangle.X = (int)pt.X; - this.Rectangle.Y = (int)pt.Y; + Transform transform = this.Parent.GetComponent(); + this.Rectangle.X = (int)transform.World.X; + this.Rectangle.Y = (int)transform.World.Y; } } } diff --git a/DepthsBelow/DepthsBelow/Component/GridTransform.cs b/DepthsBelow/DepthsBelow/Component/GridTransform.cs index aa8b7ab..823aeba 100644 --- a/DepthsBelow/DepthsBelow/Component/GridTransform.cs +++ b/DepthsBelow/DepthsBelow/Component/GridTransform.cs @@ -6,6 +6,7 @@ using Microsoft.Xna.Framework; namespace DepthsBelow.Component { + [Obsolete("Deprecated in favour of Component.Transform")] public class GridTransform : Component { public Point Position; diff --git a/DepthsBelow/DepthsBelow/Component/PathFinder.cs b/DepthsBelow/DepthsBelow/Component/PathFinder.cs index 072d55b..8bd0530 100755 --- a/DepthsBelow/DepthsBelow/Component/PathFinder.cs +++ b/DepthsBelow/DepthsBelow/Component/PathFinder.cs @@ -3,50 +3,51 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; +using AStar; using Microsoft.Xna.Framework; namespace DepthsBelow.Component { - class PathFinder : Component + public class PathFinder : Component { + public class Node + { + public Point Position; + public int F; + public int G; + + public static explicit operator Node(AStar.PathFinderNode aStarNode) + { + return new Node + { + Position = new Point(aStarNode.X, aStarNode.Y), + F = aStarNode.F, + G = aStarNode.G + }; + } + } + public Point Start { get; private set; } + + private Point goal; public Point Goal { get { return goal; } set { this.goal = value; - this.Start = this.Parent.GetComponent().Position; + this.Start = this.Parent.GetComponent().Grid.Position; this.FindPath(this.Start, value); } } - - private Point goal; + + private AStar.PathFinderFast pathFinder; private List path; public PathFinder(Entity parent) : base(parent) { - - } - - public override void Update(GameTime gameTime) - { - if (path != null && path.Count != 0) - { - var nextNode = path.Last(); - var nodePos = new Point(nextNode.X, nextNode.Y); - Parent.gridTransform.Position = nodePos; - if (Parent.pixelTransform.Position == Parent.gridTransform.ToWorld()) - path.Remove(nextNode); - } - - base.Update(gameTime); - } - - public void FindPath(Point start, Point goal) - { - AStar.PathFinderFast pathFinder = new AStar.PathFinderFast(Core.Map.GetCollisionMap()); + pathFinder = new AStar.PathFinderFast(Core.Map.GetCollisionMap()); pathFinder.Formula = AStar.HeuristicFormula.Manhattan; pathFinder.Diagonals = false; pathFinder.HeavyDiagonals = false; @@ -56,13 +57,45 @@ namespace DepthsBelow.Component pathFinder.SearchLimit = 50000; pathFinder.DebugProgress = false; pathFinder.DebugFoundPath = false; + } + public override void Update(GameTime gameTime) + { + /*if (path != null && path.Count != 0) + { + var nextNode = path.Last(); + var nodePos = new Point(nextNode.X, nextNode.Y); + Parent.Transform.Grid.Position = nodePos; + if (Parent.Transform.World == (Vector2)Parent.Transform.Grid) + path.Remove(nextNode); + }*/ + + base.Update(gameTime); + } + + public Node Next() + { + if (path == null) + return null; + + if (path.Count == 0) + return null; + + var nextNode = path.Last(); + path.Remove(nextNode); + return (Node)nextNode; + } + + public List FindPath(Point start, Point goal) + { var _start = new System.Drawing.Point(start.X, start.Y); var _goal = new System.Drawing.Point(goal.X, goal.Y); //path = Core.PathFinder.FindPath(_start, _goal); path = pathFinder.FindPath(_start, _goal); if (path == null) Debug.WriteLine(this.Parent.ToString() + ": Path not found!"); + + return path; } } } diff --git a/DepthsBelow/DepthsBelow/Component/PixelTransform.cs b/DepthsBelow/DepthsBelow/Component/PixelTransform.cs index e9332d3..865b6f0 100644 --- a/DepthsBelow/DepthsBelow/Component/PixelTransform.cs +++ b/DepthsBelow/DepthsBelow/Component/PixelTransform.cs @@ -6,6 +6,7 @@ using Microsoft.Xna.Framework; namespace DepthsBelow.Component { + [Obsolete("Deprecated in favour of Component.Transform")] public class PixelTransform : Component { public Vector2 Position; diff --git a/DepthsBelow/DepthsBelow/Component/SpriteRenderer.cs b/DepthsBelow/DepthsBelow/Component/SpriteRenderer.cs index ab0972b..e7a2093 100644 --- a/DepthsBelow/DepthsBelow/Component/SpriteRenderer.cs +++ b/DepthsBelow/DepthsBelow/Component/SpriteRenderer.cs @@ -23,9 +23,9 @@ namespace DepthsBelow.Component public void Draw(SpriteBatch spriteBatch) { - PixelTransform transform = this.Parent.GetComponent(); + Transform transform = this.Parent.GetComponent(); //spriteBatch.Draw(Texture, tc.Position, this.Color); - spriteBatch.Draw(Texture, transform.Position + transform.Origin, null, Color, transform.Rotation, transform.Origin, Scale, SpriteEffects, 0); + spriteBatch.Draw(Texture, transform.World.Position + transform.World.Origin, null, Color, transform.World.Rotation, transform.World.Origin, Scale, SpriteEffects, 0); } } } diff --git a/DepthsBelow/DepthsBelow/Component/Transform.cs b/DepthsBelow/DepthsBelow/Component/Transform.cs new file mode 100755 index 0000000..6385688 --- /dev/null +++ b/DepthsBelow/DepthsBelow/Component/Transform.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using Microsoft.Xna.Framework; + +namespace DepthsBelow.Component +{ + public class Transform : Component + { + public class GridTransform + { + private Point position; + public Point Position + { + get { return position; } + set + { + position = value; + masterTransform.World.SetWithoutRelation((Vector2)this); + } + } + + public int X + { + get { return position.X; } + set + { + position.X = value; + masterTransform.World.SetWithoutRelation((Vector2)this); + } + } + public int Y + { + get { return position.Y; } + set + { + position.Y = value; + masterTransform.World.SetWithoutRelation((Vector2)this); + } + } + + public static implicit operator Point(GridTransform gridTransform) + { + return gridTransform.position; + } + + public static explicit operator Vector2(GridTransform gridTransform) + { + var worldPosition = DepthsBelow.Grid.GridToWorld(gridTransform.Position); + return new Vector2(worldPosition.X, worldPosition.Y); + } + + private readonly Transform masterTransform; + public GridTransform(Transform masterTransform) + { + this.masterTransform = masterTransform; + } + + public void SetWithoutRelation(Point position) + { + this.position = position; + } + } + + public class WorldTransform + { + private Vector2 position; + public Vector2 Position + { + get { return position; } + set + { + position = value; + masterTransform.Grid.SetWithoutRelation((Point)this); + } + } + + public float X + { + get { return position.X; } + set + { + position.X = value; + masterTransform.Grid.SetWithoutRelation((Point)this); + } + } + public float Y + { + get { return position.Y; } + set + { + position.Y = value; + masterTransform.Grid.SetWithoutRelation((Point)this); + } + } + + public float Rotation; + public Vector2 Origin; + + public static implicit operator Vector2(WorldTransform worldTransform) + { + return worldTransform.Position; + } + + public static explicit operator Point(WorldTransform worldTransform) + { + var gridPosition = DepthsBelow.Grid.WorldToGrid(worldTransform.Position); + return new Point(gridPosition.X, gridPosition.Y); + } + + private readonly Transform masterTransform; + public WorldTransform(Transform masterTransform) + { + this.masterTransform = masterTransform; + } + + public void SetWithoutRelation(Vector2 position) + { + this.position = position; + } + } + + public GridTransform Grid; + public WorldTransform World; + + public Transform(Entity parent) + : base(parent) + { + Grid = new GridTransform(this); + World = new WorldTransform(this); + } + + public static implicit operator Point(Transform transform) + { + return transform.Grid; + } + + public static implicit operator Vector2(Transform transform) + { + return transform.World; + } + } +} diff --git a/DepthsBelow/DepthsBelow/DepthsBelow.csproj b/DepthsBelow/DepthsBelow/DepthsBelow.csproj index c935820..fe80598 100644 --- a/DepthsBelow/DepthsBelow/DepthsBelow.csproj +++ b/DepthsBelow/DepthsBelow/DepthsBelow.csproj @@ -123,6 +123,7 @@ + diff --git a/DepthsBelow/DepthsBelow/Entity.cs b/DepthsBelow/DepthsBelow/Entity.cs index b35f26e..26935e9 100644 --- a/DepthsBelow/DepthsBelow/Entity.cs +++ b/DepthsBelow/DepthsBelow/Entity.cs @@ -9,24 +9,23 @@ namespace DepthsBelow public class Entity { List Components; + public Component.Transform Transform; public Component.PixelTransform pixelTransform; public Component.GridTransform gridTransform; public int X { - get { return this.gridTransform.X; } + get { return this.Transform.Grid.X; } set - { - this.gridTransform.X = value; - this.pixelTransform.X = this.gridTransform.ToWorld().X; + { + this.Transform.Grid.X = value; } } public int Y { - get { return this.gridTransform.Y; } + get { return this.Transform.Grid.Y; } set { - this.gridTransform.Y = value; - this.pixelTransform.Y = this.gridTransform.ToWorld().Y; + this.Transform.Grid.Y = value; } } @@ -37,6 +36,8 @@ namespace DepthsBelow this.core = core; Components = new List(); + Transform = new Component.Transform(this); + AddComponent(Transform); pixelTransform = new Component.PixelTransform(this); AddComponent(pixelTransform); gridTransform = new Component.GridTransform(this); diff --git a/DepthsBelow/DepthsBelow/Soldier.cs b/DepthsBelow/DepthsBelow/Soldier.cs index bda0099..4b5f9e2 100644 --- a/DepthsBelow/DepthsBelow/Soldier.cs +++ b/DepthsBelow/DepthsBelow/Soldier.cs @@ -13,16 +13,14 @@ namespace DepthsBelow public static Point Origin; private bool _selected; - private KeyboardState lastKeyboardState; + private PathFinder.Node nextNode; public Soldier(Core core) : base(core) { if (Texture == null) LoadContent(core); - pixelTransform.Origin = new Vector2(16, 16); - //gridTransform.Position = new Point(7, 3); - //pixelTransform.Position = gridTransform.ToWorld(); + Transform.World.Origin = new Vector2(16, 16); this.Color = Color.White; var rc = new SpriteRenderer(this) {Texture = Texture, Color = Color.White}; @@ -53,39 +51,30 @@ namespace DepthsBelow public override void Update(GameTime gameTime) { base.Update(gameTime); - KeyboardState ks = Keyboard.GetState(); - if (ks.IsKeyDown(Keys.Right) && lastKeyboardState.IsKeyUp(Keys.Right)) + + if (nextNode == null) + nextNode = GetComponent().Next(); + + if (nextNode != null) { - gridTransform.X += 1; - pixelTransform.Rotation = (float)0; + var nodeWorldPos = Grid.GridToWorld(nextNode.Position); + // HACK: Make this work properly with other speeds... + int speed = 2*4; + if (Transform.World.X < nodeWorldPos.X) + Transform.World.X += speed; + if (Transform.World.X > nodeWorldPos.X) + Transform.World.X -= speed; + if (Transform.World.Y < nodeWorldPos.Y) + Transform.World.Y += speed; + if (Transform.World.Y > nodeWorldPos.Y) + Transform.World.Y -= speed; + + if (Transform.World == nodeWorldPos) + nextNode = GetComponent().Next(); + } - if (ks.IsKeyDown(Keys.Left) && lastKeyboardState.IsKeyUp(Keys.Left)) - { - gridTransform.X -= 1; - pixelTransform.Rotation = (float)Math.PI; - } - if (ks.IsKeyDown(Keys.Up) && lastKeyboardState.IsKeyUp(Keys.Up)) - { - gridTransform.Y -= 1; - pixelTransform.Rotation = (float)(3.0f*Math.PI/2.0f); - } - if (ks.IsKeyDown(Keys.Down) && lastKeyboardState.IsKeyUp(Keys.Down)) - { - gridTransform.Y += 1; - pixelTransform.Rotation = (float)(Math.PI / 2.0f); - } - lastKeyboardState = ks; - - int speed = 1; - if (pixelTransform.X < gridTransform.ToWorld().X) - pixelTransform.X += speed; - if (pixelTransform.X > gridTransform.ToWorld().X) - pixelTransform.X -= speed; - if (pixelTransform.Y < gridTransform.ToWorld().Y) - pixelTransform.Y += speed; - if (pixelTransform.Y > gridTransform.ToWorld().Y) - pixelTransform.Y -= speed; + /**/ } } } \ No newline at end of file From 01491d73564cb796367554558042d4f88077f0a1 Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Mon, 1 Oct 2012 16:34:42 +0200 Subject: [PATCH 2/6] Conflict test --- DepthsBelow/DepthsBelow/MouseInput.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/DepthsBelow/DepthsBelow/MouseInput.cs b/DepthsBelow/DepthsBelow/MouseInput.cs index b57cb28..8d81de2 100755 --- a/DepthsBelow/DepthsBelow/MouseInput.cs +++ b/DepthsBelow/DepthsBelow/MouseInput.cs @@ -19,13 +19,7 @@ namespace DepthsBelow Rectangle gridRectangle; Texture2D gridTexture; - public MouseInput(Core core) - { - this.core = core; - - selectionRectangle = Rectangle.Empty; - gridRectangle = Rectangle.Empty; - } + public void LoadContent() { From 9e8ebc37c6a64d3b74b25bc85f0f41f3aba45614 Mon Sep 17 00:00:00 2001 From: Niklas Ulf Anders Cullberg Date: Mon, 1 Oct 2012 16:34:51 +0200 Subject: [PATCH 3/6] Line Drawn for Direction --- DepthsBelow/DepthsBelow/MouseInput.cs | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/DepthsBelow/DepthsBelow/MouseInput.cs b/DepthsBelow/DepthsBelow/MouseInput.cs index b57cb28..6b544f8 100755 --- a/DepthsBelow/DepthsBelow/MouseInput.cs +++ b/DepthsBelow/DepthsBelow/MouseInput.cs @@ -19,6 +19,11 @@ namespace DepthsBelow Rectangle gridRectangle; Texture2D gridTexture; + Vector2 directionStart; + Vector2 directionNow; + + bool checkingDirection = false; + public MouseInput(Core core) { this.core = core; @@ -82,7 +87,28 @@ namespace DepthsBelow foreach (var unit in core.Squad) if (unit.Selected) unit.GetComponent().Goal = Grid.WorldToGrid(mouseWorldPos); + } + if (ms.RightButton == ButtonState.Pressed) + { + foreach (var unit in core.Squad) + { + if (unit.Selected) + { + checkingDirection = true; + directionStart = unit.Transform.World + unit.Transform.World.Origin; + } + } + } + if (checkingDirection == true && ms.RightButton == ButtonState.Pressed) + { + directionNow.X = ms.X; + directionNow.Y = ms.Y; + } + else + { + checkingDirection = false; + } // Grid highlighting Point mouseGridPos = Grid.WorldToGrid(mouseWorldPos); @@ -96,6 +122,24 @@ namespace DepthsBelow { spriteBatch.Draw(selectionTexture, selectionRectangle, Color.Red * 0.5f); spriteBatch.Draw(gridTexture, gridRectangle, Color.Yellow * 0.3f); + + if (checkingDirection == true) + { + Texture2D blank = new Texture2D(core.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); + blank.SetData(new[] { Color.White }); + DrawLine(spriteBatch, blank, 2, Color.White, directionStart, directionNow); + } + } + + void DrawLine(SpriteBatch batch, Texture2D blank, float width, Color color, Vector2 point1, Vector2 point2) + { + float angle = (float)Math.Atan2(point2.Y - point1.Y, point2.X - point1.X); + float length = Vector2.Distance(point1, point2); + + batch.Draw(blank, point1, null, color, + angle, Vector2.Zero, new Vector2(length, width), + SpriteEffects.None, 0); + } } } From 62c633fecb4a995884401717353499b2400a04f5 Mon Sep 17 00:00:00 2001 From: Niklas Ulf Anders Cullberg Date: Mon, 1 Oct 2012 17:35:07 +0200 Subject: [PATCH 4/6] Looking in direction pointing line --- .../DepthsBelow/Component/Transform.cs | 6 ++++ DepthsBelow/DepthsBelow/MouseInput.cs | 30 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/DepthsBelow/DepthsBelow/Component/Transform.cs b/DepthsBelow/DepthsBelow/Component/Transform.cs index 6385688..c7a451c 100755 --- a/DepthsBelow/DepthsBelow/Component/Transform.cs +++ b/DepthsBelow/DepthsBelow/Component/Transform.cs @@ -97,6 +97,12 @@ namespace DepthsBelow.Component } public float Rotation; + + public void Rotate(int directionX, int directionY) + { + Rotation = (float)Math.Atan(directionY/directionX); + } + public Vector2 Origin; public static implicit operator Vector2(WorldTransform worldTransform) diff --git a/DepthsBelow/DepthsBelow/MouseInput.cs b/DepthsBelow/DepthsBelow/MouseInput.cs index 92ff766..dcdfc2c 100755 --- a/DepthsBelow/DepthsBelow/MouseInput.cs +++ b/DepthsBelow/DepthsBelow/MouseInput.cs @@ -87,15 +87,17 @@ public MouseInput(Core core) if (ms.RightButton == ButtonState.Released && lastMouseState.RightButton == ButtonState.Pressed) { foreach (var unit in core.Squad) - if (unit.Selected) + if (unit.Selected) + { unit.GetComponent().Goal = Grid.WorldToGrid(mouseWorldPos); + } } if (ms.RightButton == ButtonState.Pressed) { foreach (var unit in core.Squad) { - if (unit.Selected) + if (unit.Selected && gridRectangle.Intersects(unit.GetComponent().Rectangle)) { checkingDirection = true; directionStart = unit.Transform.World + unit.Transform.World.Origin; @@ -104,8 +106,28 @@ public MouseInput(Core core) } if (checkingDirection == true && ms.RightButton == ButtonState.Pressed) { - directionNow.X = ms.X; - directionNow.Y = ms.Y; + foreach (var unit in core.Squad) + if (unit.Selected) + { + directionNow.X = mouseWorldPos.X; + directionNow.Y = mouseWorldPos.Y; + float directionX = mouseWorldPos.X - unit.Transform.World.X; + float directionY = mouseWorldPos.Y - unit.Transform.World.Y; + var mouseDirection = mouseWorldPos; + mouseDirection.Normalize(); + //float angle = (float)Math.Acos(Vector2.Dot(new Vector2(0, 1), mouseDirection)) * MathHelper.TwoPi; + /*if (directionX < 0) + { + directionX *= -1; + unit.GetComponent().World.Rotation = (float)Math.Atan(directionY / directionX); + } + else + { + */unit.GetComponent().World.Rotation = (float)Math.Atan2(mouseWorldPos.Y - unit.Transform.World.Y, mouseWorldPos.X - unit.Transform.World.X);/* + }*/ + //Console.WriteLine(angle); + //unit.GetComponent().World.Rotation = angle; + } } else { From 3b718e34a376c415274bfb69c4b05c08d7733650 Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Mon, 1 Oct 2012 17:35:38 +0200 Subject: [PATCH 5/6] Almost working pathfinding --- .../DepthsBelow/Component/PathFinder.cs | 43 +++++++++----- DepthsBelow/DepthsBelow/Entity.cs | 2 +- DepthsBelow/DepthsBelow/Map.cs | 2 +- DepthsBelow/DepthsBelow/MouseInput.cs | 6 +- DepthsBelow/DepthsBelow/Soldier.cs | 56 ++++++++++++++----- 5 files changed, 77 insertions(+), 32 deletions(-) diff --git a/DepthsBelow/DepthsBelow/Component/PathFinder.cs b/DepthsBelow/DepthsBelow/Component/PathFinder.cs index 8bd0530..4dad9d7 100755 --- a/DepthsBelow/DepthsBelow/Component/PathFinder.cs +++ b/DepthsBelow/DepthsBelow/Component/PathFinder.cs @@ -29,6 +29,8 @@ namespace DepthsBelow.Component public Point Start { get; private set; } + public byte[,] CollisionMap; + private Point goal; public Point Goal { @@ -36,8 +38,8 @@ namespace DepthsBelow.Component set { this.goal = value; - this.Start = this.Parent.GetComponent().Grid.Position; - this.FindPath(this.Start, value); + //this.Start = this.Parent.GetComponent().Grid.Position; + this.FindPath(this.Parent.GetComponent().Grid.Position, value, null); } } @@ -47,16 +49,7 @@ namespace DepthsBelow.Component public PathFinder(Entity parent) : base(parent) { - pathFinder = new AStar.PathFinderFast(Core.Map.GetCollisionMap()); - pathFinder.Formula = AStar.HeuristicFormula.Manhattan; - pathFinder.Diagonals = false; - pathFinder.HeavyDiagonals = false; - pathFinder.HeuristicEstimate = 2; - pathFinder.PunishChangeDirection = true; - pathFinder.TieBreaker = false; - pathFinder.SearchLimit = 50000; - pathFinder.DebugProgress = false; - pathFinder.DebugFoundPath = false; + } public override void Update(GameTime gameTime) @@ -86,8 +79,25 @@ namespace DepthsBelow.Component return (Node)nextNode; } - public List FindPath(Point start, Point goal) + private List FindPath(Point start, Point goal, List appendCollisionMap) { + byte[,] mapCollisionMap = Core.Map.GetCollisionMap(); + + if (appendCollisionMap != null) + foreach (var point in appendCollisionMap) + mapCollisionMap[point.X, point.Y] = 0; + + pathFinder = new AStar.PathFinderFast(mapCollisionMap); + pathFinder.Formula = AStar.HeuristicFormula.Manhattan; + pathFinder.Diagonals = false; + pathFinder.HeavyDiagonals = false; + pathFinder.HeuristicEstimate = 2; + pathFinder.PunishChangeDirection = false; + pathFinder.TieBreaker = false; + pathFinder.SearchLimit = 50000; + pathFinder.DebugProgress = false; + pathFinder.DebugFoundPath = false; + var _start = new System.Drawing.Point(start.X, start.Y); var _goal = new System.Drawing.Point(goal.X, goal.Y); //path = Core.PathFinder.FindPath(_start, _goal); @@ -95,7 +105,14 @@ namespace DepthsBelow.Component if (path == null) Debug.WriteLine(this.Parent.ToString() + ": Path not found!"); + this.CollisionMap = new byte[100, 100]; + return path; } + + public void RecreatePath(List appendCollisionMap) + { + FindPath(this.Parent.GetComponent().Grid.Position, this.Goal, appendCollisionMap); + } } } diff --git a/DepthsBelow/DepthsBelow/Entity.cs b/DepthsBelow/DepthsBelow/Entity.cs index 26935e9..838dc97 100644 --- a/DepthsBelow/DepthsBelow/Entity.cs +++ b/DepthsBelow/DepthsBelow/Entity.cs @@ -29,7 +29,7 @@ namespace DepthsBelow } } - private Core core; + protected Core core; public Entity(Core core) { diff --git a/DepthsBelow/DepthsBelow/Map.cs b/DepthsBelow/DepthsBelow/Map.cs index d410a77..b32861a 100755 --- a/DepthsBelow/DepthsBelow/Map.cs +++ b/DepthsBelow/DepthsBelow/Map.cs @@ -72,7 +72,7 @@ namespace DepthsBelow { if (mapObject.Type == "SquadStart") { - var soldier = new Soldier(core); + var soldier = new Soldier(core, ref core.Squad); // HACK: For some reason, the tile object coordinates are offset by one tile on the Y-axis in the Tiled map file (https://github.com/bjorn/tiled/issues/91) var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize); var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos); diff --git a/DepthsBelow/DepthsBelow/MouseInput.cs b/DepthsBelow/DepthsBelow/MouseInput.cs index 92ff766..a303c92 100755 --- a/DepthsBelow/DepthsBelow/MouseInput.cs +++ b/DepthsBelow/DepthsBelow/MouseInput.cs @@ -25,7 +25,7 @@ namespace DepthsBelow bool checkingDirection = false; -public MouseInput(Core core) + public MouseInput(Core core) { this.core = core; @@ -104,8 +104,8 @@ public MouseInput(Core core) } if (checkingDirection == true && ms.RightButton == ButtonState.Pressed) { - directionNow.X = ms.X; - directionNow.Y = ms.Y; + directionNow.X = mouseWorldPos.X; + directionNow.Y = mouseWorldPos.Y; } else { diff --git a/DepthsBelow/DepthsBelow/Soldier.cs b/DepthsBelow/DepthsBelow/Soldier.cs index 4b5f9e2..336e7c6 100644 --- a/DepthsBelow/DepthsBelow/Soldier.cs +++ b/DepthsBelow/DepthsBelow/Soldier.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using DepthsBelow.Component; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -13,13 +14,17 @@ namespace DepthsBelow public static Point Origin; private bool _selected; + public List Squad; + private PathFinder.Node nextNode; - public Soldier(Core core) : base(core) + public Soldier(Core core, ref List squad) : base(core) { if (Texture == null) LoadContent(core); + this.Squad = squad; + Transform.World.Origin = new Vector2(16, 16); this.Color = Color.White; @@ -52,25 +57,48 @@ namespace DepthsBelow { base.Update(gameTime); + float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f; + if (nextNode == null) nextNode = GetComponent().Next(); if (nextNode != null) { - var nodeWorldPos = Grid.GridToWorld(nextNode.Position); - // HACK: Make this work properly with other speeds... - int speed = 2*4; - if (Transform.World.X < nodeWorldPos.X) - Transform.World.X += speed; - if (Transform.World.X > nodeWorldPos.X) - Transform.World.X -= speed; - if (Transform.World.Y < nodeWorldPos.Y) - Transform.World.Y += speed; - if (Transform.World.Y > nodeWorldPos.Y) - Transform.World.Y -= speed; + List soldierCollisions = new List(); - if (Transform.World == nodeWorldPos) - nextNode = GetComponent().Next(); + foreach (var soldier in Squad) + { + if (soldier != this) + { + if (soldier.Transform.Grid == nextNode.Position) + { + soldierCollisions.Add(soldier.Transform.Grid); + GetComponent().RecreatePath(soldierCollisions); + nextNode = GetComponent().Next(); + break; + } + } + } + + + + if (nextNode != null) + { + var nodeWorldPos = Grid.GridToWorld(nextNode.Position); + // HACK: Make this work properly with other speeds... + float speed = 4f; + if (Transform.World.X < nodeWorldPos.X) + Transform.World.X += speed; + if (Transform.World.X > nodeWorldPos.X) + Transform.World.X -= speed; + if (Transform.World.Y < nodeWorldPos.Y) + Transform.World.Y += speed; + if (Transform.World.Y > nodeWorldPos.Y) + Transform.World.Y -= speed; + + if (Transform.World == nodeWorldPos) + nextNode = GetComponent().Next(); + } } From f5d0c099122fe35a0d12af86c1aebfe1b44a51d6 Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Tue, 2 Oct 2012 00:00:29 +0200 Subject: [PATCH 6/6] Some new tilesets --- .../DepthsBelowContent/maps/Cave.Level1.tmx | 2 +- DepthsBelow/DepthsBelowContent/maps/test.tmx | 100 ++++++++++-------- .../maps/tilesets/aztek2.png | Bin 0 -> 29531 bytes .../maps/tilesets/aztek_transparent.png | Bin 0 -> 15511 bytes 4 files changed, 54 insertions(+), 48 deletions(-) create mode 100755 DepthsBelow/DepthsBelowContent/maps/tilesets/aztek2.png create mode 100755 DepthsBelow/DepthsBelowContent/maps/tilesets/aztek_transparent.png diff --git a/DepthsBelow/DepthsBelowContent/maps/Cave.Level1.tmx b/DepthsBelow/DepthsBelowContent/maps/Cave.Level1.tmx index a4d2fd8..09c705c 100755 --- a/DepthsBelow/DepthsBelowContent/maps/Cave.Level1.tmx +++ b/DepthsBelow/DepthsBelowContent/maps/Cave.Level1.tmx @@ -110,7 +110,7 @@ 81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81 - + 0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/DepthsBelow/DepthsBelowContent/maps/test.tmx b/DepthsBelow/DepthsBelowContent/maps/test.tmx index 5199dcb..7f83531 100755 --- a/DepthsBelow/DepthsBelowContent/maps/test.tmx +++ b/DepthsBelow/DepthsBelowContent/maps/test.tmx @@ -6,32 +6,38 @@ + + + + + + -1,2,3,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -6,7,8,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -16,17,18,19,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -21,22,23,24,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,53,54,54,54,54,54,54,56,0,0,52,54,54,54,54,54,54,55,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +62,63,64,64,64,64,64,65,76,0,0,72,63,64,64,64,64,64,65,66,52,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,75,76,0,0,72,73,74,74,74,74,74,75,76,62,63,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,65,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,75,76,0,0,72,73,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,75,76,0,0,72,73,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,75,124,54,54,125,73,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,133,64,64,64,64,136,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +82,83,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85,86,82,83,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +92,93,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,95,96,92,93,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,95,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +62,63,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,65,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +72,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +82,83,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +92,93,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,95,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -112,31 +118,31 @@ -26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,26,26,26,26,0,0,0,0,0,0,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,26,26,26,26,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,26,26,26,26,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,26,26,26,26,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,26,26,26,26,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/DepthsBelow/DepthsBelowContent/maps/tilesets/aztek2.png b/DepthsBelow/DepthsBelowContent/maps/tilesets/aztek2.png new file mode 100755 index 0000000000000000000000000000000000000000..bc68cccbb6949d0f45f6241b2dd918fb89d76c3f GIT binary patch literal 29531 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 NG7^g7b)r8*{tpJr`Bwk{ literal 0 HcmV?d00001