diff --git a/DepthsBelow/DepthsBelow/Core.cs b/DepthsBelow/DepthsBelow/Core.cs
index d2cb71c..64c23f5 100755
--- a/DepthsBelow/DepthsBelow/Core.cs
+++ b/DepthsBelow/DepthsBelow/Core.cs
@@ -1,256 +1,256 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using DepthsBelow.GUI;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using Microsoft.Xna.Framework.Content;
-using Microsoft.Xna.Framework.GamerServices;
-using Microsoft.Xna.Framework.Graphics;
-using Microsoft.Xna.Framework.Input;
-using Microsoft.Xna.Framework.Media;
-
-namespace DepthsBelow
-{
- ///
- /// This is the main type for your game
- ///
- public class Core : Microsoft.Xna.Framework.Game
- {
- public static GraphicsDeviceManager GraphicsDeviceManager;
- private SpriteBatch spriteBatch;
- private Effect lightShader;
- private RenderTarget2D lightRenderTarget;
- private RenderTarget2D sceneRenderTarget;
-
- public Lua Lua;
-
- public TurnManager TurnManager;
-
- public Camera Camera;
- public Interface Interface;
-
- public/* static*/ MouseInput MouseInput;
- public static KeyboardInput KeyboardInput;
- public List Squad;
- public DynamicGroupManager GroupManager;
- public List Swarm;
- public List Volley;
-
- public List Spawn;
-
- public static Map Map;
-
- public SmallEnemy TestMonster;
-
- public int Brightness = 30;
-
- public Core()
- {
- GraphicsDeviceManager = new GraphicsDeviceManager(this);
- GraphicsDeviceManager.PreferredBackBufferWidth = 1280;
- GraphicsDeviceManager.PreferredBackBufferHeight = 720;
- GraphicsDeviceManager.IsFullScreen = false;
- //graphics.SynchronizeWithVerticalRetrace = false;
- GraphicsDeviceManager.ApplyChanges();
-
- this.IsFixedTimeStep = false;
- this.IsMouseVisible = true;
-
- Content.RootDirectory = "Content";
- }
-
- ///
- /// Allows the game to perform any initialization it needs to before starting to run.
- /// This is where it can query for any required services and load any non-graphic
- /// related content. Calling base.Initialize will enumerate through any components
- /// and initialize them as well.
- ///
- protected override void Initialize()
- {
- GameServices.AddService(GraphicsDevice);
- GameServices.AddService(Content);
-
- Lua = new Lua();
-
- TurnManager = new TurnManager(new string[] { "Player", "Computer" });
-
- Camera = new Camera(this);
- Interface = new Interface(this);
-
- Squad = new List();
- Swarm = new List();
- Volley = new List();
-
- Spawn = new List();
-
- base.Initialize();
- }
-
- ///
- /// LoadContent will be called once per game and is the place to load
- /// all of your content.
- ///
- protected override void LoadContent()
- {
- // Create a new SpriteBatch, which can be used to draw textures.
- spriteBatch = new SpriteBatch(GraphicsDevice);
- lightShader = Content.Load("shaders/LightEffect");
- lightRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
- sceneRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
-
- Map = Content.Load("maps/prototyp");
- //Map = Content.Load("maps/Aztek.Test");
- //Map = Content.Load("maps/Cave.Level1");
-
- // Load map objects
- Map.ParseObjects(this);
-
- Squad[0].Name = "Dean H. Jones";
- Squad[1].Name = "Walter L. Verville";
- Squad[2].Name = "Patrick Y. Southerland";
- Squad[3].Name = "Andrew C. Friend";
- Squad[4].Name = "Gary B. Whitley";
-
- // Center the camera on a unit
- Camera.Position = Squad[0].Transform.World.Position * -1 + new Vector2(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2);
-
- GroupManager = new DynamicGroupManager(Squad.Cast().ToList(), (float)Grid.TileSize * 1.5f);
-
- Interface.CreateUnitFrames(Squad);
-
- // TODO: use this.Content to load your game content here
- Soldier.LoadContent();
- SmallEnemy.LoadContent();
- //Shot.LoadContent();
-
- MouseInput = new MouseInput(this);
- MouseInput.LoadContent();
- KeyboardInput = new KeyboardInput(this);
-
- TestMonster = new SmallEnemy(ref Swarm);
- TestMonster.X = 12;
- TestMonster.Y = 4;
- Swarm.Add(TestMonster);
-
- // Load Lua scripts after everything is created
- Lua.LoadScripts();
- }
-
- ///
- /// UnloadContent will be called once per game and is the place to unload
- /// all content.
- ///
- protected override void UnloadContent()
- {
- // TODO: Unload any non ContentManager content here
- }
-
- ///
- /// Allows the game to run logic such as updating the world,
- /// checking for collisions, gathering input, and playing audio.
- ///
- /// Provides a snapshot of timing values.
- protected override void Update(GameTime gameTime)
- {
- // Allows the game to exit
- if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
- this.Exit();
-
- Camera.Update(gameTime);
- MouseInput.Update(gameTime);
- KeyboardInput.Update(gameTime);
-
- EntityManager.Update(gameTime);
-
- Interface.Update(gameTime);
- GUIManager.Update(gameTime);
-
- base.Update(gameTime);
- }
-
- ///
- /// This is called when the game should draw itself.
- ///
- /// Provides a snapshot of timing values.
- protected override void Draw(GameTime gameTime)
- {
- MouseState ms = Mouse.GetState();
-
- // Draw to the lighting render target
- GraphicsDevice.SetRenderTarget(lightRenderTarget);
- GraphicsDevice.Clear(new Color(Brightness, Brightness, Brightness));
- spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive, SamplerState.PointClamp, null, null, null,
- Camera.Transform);
-
- // Draw flashlights
- foreach (var light in EntityManager.GetComponents())
- light.Draw(spriteBatch);
-
- spriteBatch.End();
- GraphicsDevice.SetRenderTarget(null);
-
- // Draw the scene to a render target
- GraphicsDevice.SetRenderTarget(sceneRenderTarget);
- GraphicsDevice.Clear(Color.Black);
- // Start drawing using the Camera transform
- spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null,
- Camera.Transform);
-
- // Draw the level
- Map.Draw(spriteBatch);
-
- // Draw entities
- foreach (var spriteRenderer in EntityManager.GetComponents())
- {
- // Only render illuminated entities
- var position = Camera.WorldToScreen(spriteRenderer.Parent.Transform.World + spriteRenderer.Parent.Transform.World.Origin);
- var sourceRect = new Rectangle((int)position.X, (int)position.Y, 1, 1);
- if (
- sourceRect.X >= 0
- && sourceRect.Y >= 0
- && sourceRect.X < lightRenderTarget.Width
- && sourceRect.Y < lightRenderTarget.Height
- )
- {
- var lightData = new Color[1];
- lightRenderTarget.GetData(0, sourceRect, lightData, 0, 1);
- if (lightData[0] != new Color(Brightness, Brightness, Brightness))
- spriteRenderer.Draw(spriteBatch);
- }
- }
-
-#if DEBUG
- var debugTexture = new Texture2D(GraphicsDevice, 1, 1);
- debugTexture.SetData(new Color[] { Color.White });
- foreach (var collisionComponent in EntityManager.GetComponents())
- {
- spriteBatch.Draw(debugTexture, collisionComponent.Rectangle, Color.Red * 0.5f);
- }
-#endif
-
- // Draw mouse input visuals
- MouseInput.Draw(spriteBatch);
-
- spriteBatch.End();
- GraphicsDevice.SetRenderTarget(null);
-
- // Draw the scene from the render target with the light shader
- lightShader.Parameters["LightsTexture"].SetValue(lightRenderTarget);
- lightShader.CurrentTechnique.Passes[0].Apply();
- spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.PointClamp, null, null, lightShader,
- Matrix.Identity);
- spriteBatch.Draw(sceneRenderTarget, Vector2.Zero, Color.White);
- spriteBatch.End();
-
- // Draw GUI components
- spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
- GUIManager.Draw(spriteBatch);
- spriteBatch.End();
-
- base.Draw(gameTime);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using DepthsBelow.GUI;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Audio;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.GamerServices;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using Microsoft.Xna.Framework.Media;
+
+namespace DepthsBelow
+{
+ ///
+ /// This is the main type for your game
+ ///
+ public class Core : Microsoft.Xna.Framework.Game
+ {
+ public static GraphicsDeviceManager GraphicsDeviceManager;
+ private SpriteBatch spriteBatch;
+ private Effect lightShader;
+ private RenderTarget2D lightRenderTarget;
+ private RenderTarget2D sceneRenderTarget;
+
+ public Lua Lua;
+
+ public TurnManager TurnManager;
+
+ public Camera Camera;
+ public Interface Interface;
+
+ public/* static*/ MouseInput MouseInput;
+ public static KeyboardInput KeyboardInput;
+ public List Squad;
+ public DynamicGroupManager GroupManager;
+ public List Swarm;
+ public List Volley;
+
+ public List Spawn;
+
+ public static Map Map;
+
+ public SmallEnemy TestMonster;
+
+ public int Brightness = 30;
+
+ public Core()
+ {
+ GraphicsDeviceManager = new GraphicsDeviceManager(this);
+ GraphicsDeviceManager.PreferredBackBufferWidth = 1280;
+ GraphicsDeviceManager.PreferredBackBufferHeight = 720;
+ GraphicsDeviceManager.IsFullScreen = false;
+ //graphics.SynchronizeWithVerticalRetrace = false;
+ GraphicsDeviceManager.ApplyChanges();
+
+ this.IsFixedTimeStep = false;
+ this.IsMouseVisible = true;
+
+ Content.RootDirectory = "Content";
+ }
+
+ ///
+ /// Allows the game to perform any initialization it needs to before starting to run.
+ /// This is where it can query for any required services and load any non-graphic
+ /// related content. Calling base.Initialize will enumerate through any components
+ /// and initialize them as well.
+ ///
+ protected override void Initialize()
+ {
+ GameServices.AddService(GraphicsDevice);
+ GameServices.AddService(Content);
+
+ Lua = new Lua();
+
+ TurnManager = new TurnManager(new string[] { "Player", "Computer" });
+
+ Camera = new Camera(this);
+ Interface = new Interface(this);
+
+ Squad = new List();
+ Swarm = new List();
+ Volley = new List();
+
+ Spawn = new List();
+
+ base.Initialize();
+ }
+
+ ///
+ /// LoadContent will be called once per game and is the place to load
+ /// all of your content.
+ ///
+ protected override void LoadContent()
+ {
+ // Create a new SpriteBatch, which can be used to draw textures.
+ spriteBatch = new SpriteBatch(GraphicsDevice);
+ lightShader = Content.Load("shaders/LightEffect");
+ lightRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
+ sceneRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
+
+ Map = Content.Load("maps/prototyp");
+ //Map = Content.Load("maps/Aztek.Test");
+ //Map = Content.Load("maps/Cave.Level1");
+
+ // Load map objects
+ Map.ParseObjects(this);
+
+ Squad[0].Name = "Dean H. Jones";
+ Squad[1].Name = "Walter L. Verville";
+ Squad[2].Name = "Patrick Y. Southerland";
+ Squad[3].Name = "Andrew C. Friend";
+ Squad[4].Name = "Gary B. Whitley";
+
+ // Center the camera on a unit
+ Camera.Position = Squad[0].Transform.World.Position * -1 + new Vector2(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2);
+
+ GroupManager = new DynamicGroupManager(Squad.Cast().ToList(), (float)Grid.TileSize * 1.5f);
+
+ Interface.CreateUnitFrames(Squad);
+
+ // TODO: use this.Content to load your game content here
+ Soldier.LoadContent();
+ SmallEnemy.LoadContent();
+ //Shot.LoadContent();
+
+ MouseInput = new MouseInput(this);
+ MouseInput.LoadContent();
+ KeyboardInput = new KeyboardInput(this);
+
+ TestMonster = new SmallEnemy(ref Swarm);
+ TestMonster.X = 12;
+ TestMonster.Y = 4;
+ Swarm.Add(TestMonster);
+
+ // Load Lua scripts after everything is created
+ Lua.LoadScripts();
+ }
+
+ ///
+ /// UnloadContent will be called once per game and is the place to unload
+ /// all content.
+ ///
+ protected override void UnloadContent()
+ {
+ // TODO: Unload any non ContentManager content here
+ }
+
+ ///
+ /// Allows the game to run logic such as updating the world,
+ /// checking for collisions, gathering input, and playing audio.
+ ///
+ /// Provides a snapshot of timing values.
+ protected override void Update(GameTime gameTime)
+ {
+ // Allows the game to exit
+ if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
+ this.Exit();
+
+ Camera.Update(gameTime);
+ MouseInput.Update(gameTime);
+ KeyboardInput.Update(gameTime);
+
+ EntityManager.Update(gameTime);
+
+ Interface.Update(gameTime);
+ GUIManager.Update(gameTime);
+
+ base.Update(gameTime);
+ }
+
+ ///
+ /// This is called when the game should draw itself.
+ ///
+ /// Provides a snapshot of timing values.
+ protected override void Draw(GameTime gameTime)
+ {
+ MouseState ms = Mouse.GetState();
+
+ // Draw to the lighting render target
+ GraphicsDevice.SetRenderTarget(lightRenderTarget);
+ GraphicsDevice.Clear(new Color(Brightness, Brightness, Brightness));
+ spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive, SamplerState.PointClamp, null, null, null,
+ Camera.Transform);
+
+ // Draw flashlights
+ foreach (var light in EntityManager.GetComponents())
+ light.Draw(spriteBatch);
+
+ spriteBatch.End();
+ GraphicsDevice.SetRenderTarget(null);
+
+ // Draw the scene to a render target
+ GraphicsDevice.SetRenderTarget(sceneRenderTarget);
+ GraphicsDevice.Clear(Color.Black);
+ // Start drawing using the Camera transform
+ spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null,
+ Camera.Transform);
+
+ // Draw the level
+ Map.Draw(spriteBatch);
+
+ // Draw entities
+ foreach (var spriteRenderer in EntityManager.GetComponents())
+ {
+ // Only render illuminated entities
+ var position = Camera.WorldToScreen(spriteRenderer.Parent.Transform.World + spriteRenderer.Parent.Transform.World.Origin);
+ var sourceRect = new Rectangle((int)position.X, (int)position.Y, 1, 1);
+ if (
+ sourceRect.X >= 0
+ && sourceRect.Y >= 0
+ && sourceRect.X < lightRenderTarget.Width
+ && sourceRect.Y < lightRenderTarget.Height
+ )
+ {
+ var lightData = new Color[1];
+ lightRenderTarget.GetData(0, sourceRect, lightData, 0, 1);
+ if (lightData[0] != new Color(Brightness, Brightness, Brightness))
+ spriteRenderer.Draw(spriteBatch);
+ }
+ }
+
+/*#if DEBUG
+ var debugTexture = new Texture2D(GraphicsDevice, 1, 1);
+ debugTexture.SetData(new Color[] { Color.White });
+ foreach (var collisionComponent in EntityManager.GetComponents())
+ {
+ spriteBatch.Draw(debugTexture, collisionComponent.Rectangle, Color.Red * 0.5f);
+ }
+#endif*/
+
+ // Draw mouse input visuals
+ MouseInput.Draw(spriteBatch);
+
+ spriteBatch.End();
+ GraphicsDevice.SetRenderTarget(null);
+
+ // Draw the scene from the render target with the light shader
+ lightShader.Parameters["LightsTexture"].SetValue(lightRenderTarget);
+ lightShader.CurrentTechnique.Passes[0].Apply();
+ spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.PointClamp, null, null, lightShader,
+ Matrix.Identity);
+ spriteBatch.Draw(sceneRenderTarget, Vector2.Zero, Color.White);
+ spriteBatch.End();
+
+ // Draw GUI components
+ spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
+ GUIManager.Draw(spriteBatch);
+ spriteBatch.End();
+
+ base.Draw(gameTime);
+ }
+ }
+}
diff --git a/DepthsBelow/DepthsBelow/Map.cs b/DepthsBelow/DepthsBelow/Map.cs
index efa74c5..6e844e5 100755
--- a/DepthsBelow/DepthsBelow/Map.cs
+++ b/DepthsBelow/DepthsBelow/Map.cs
@@ -1,181 +1,197 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Graphics;
-
-namespace DepthsBelow
-{
- public class MapTile
- {
- public int LocalId;
- public Texture2D Texture;
- public Rectangle SourceRectangle;
- public SpriteEffects SpriteEffects;
- }
-
- public enum MapObjectType : byte
- {
- Plain,
- Tile,
- Polygon,
- Polyline
- }
-
- public class MapObject
- {
- //public MapObjectType ObjectType;
- public string Name;
- public string Type;
- public Rectangle Bounds;
- public List Points;
- }
-
- public class MapLayer
- {
- public int Width;
- public int Height;
- public string Name;
- }
-
- public class MapTileLayer : MapLayer
- {
- public MapTile[] Tiles;
- }
-
- public class MapObjectLayer : MapLayer
- {
- public MapObject[] Objects;
- }
-
- public class Map
- {
- public int TileWidth;
- public int TileHeight;
- public List Layers = new List();
-
- public Map()
- {
-
- }
-
- public void ParseObjects(Core core)
- {
- foreach (var layer in Layers)
- {
- var objectLayer = layer as MapObjectLayer;
-
- if (objectLayer == null)
- continue;
-
- foreach (var mapObject in objectLayer.Objects)
- {
- if (mapObject.Type == "SquadStart")
- {
- var soldier = new Soldier(ref core.Squad);
- soldier.Name = "Derp";
- // 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);
- soldier.X = mapObjectGridPos.X;
- soldier.Y = mapObjectGridPos.Y;
-
- core.Squad.Add(soldier);
- }
- if (mapObject.Type == "MonsterSpawn")
- {
- var enemy = new MonsterSpawn("Monster", ref core.Swarm);
- var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
- var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
- enemy.X = mapObjectGridPos.X;
- enemy.Y = mapObjectGridPos.Y;
- }
- if (mapObject.Type == "BossSpawn")
- {
- var enemy = new MonsterSpawn("BUB", ref core.Swarm);
- var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
- var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
- enemy.X = mapObjectGridPos.X;
- enemy.Y = mapObjectGridPos.Y;
- }
- if (mapObject.Type == "Door")
- {
- var door = new Door();
- var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y);
- var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
- door.X = mapObjectGridPos.X;
- door.Y = mapObjectGridPos.Y;
- }
- }
- }
- }
-
- public void Draw(SpriteBatch spriteBatch)
- {
- foreach (var layer in Layers)
- {
- var tileLayer = layer as MapTileLayer;
-
- if (tileLayer == null)
- continue;
-
- // Don't draw the collision layer
- if (tileLayer.Name == "Collision")
- continue;
-
- for (int y = 0; y < tileLayer.Height; y++)
- {
- for (int x = 0; x < tileLayer.Width; x++)
- {
- MapTile mapTile = tileLayer.Tiles[y * layer.Width + x];
- if (mapTile != null)
- {
- spriteBatch.Draw(
- mapTile.Texture,
- new Rectangle(x * TileWidth, y * TileHeight, TileWidth, TileHeight),
- mapTile.SourceRectangle,
- Color.White,
- 0,
- Vector2.Zero,
- mapTile.SpriteEffects,
- 0);
- }
- }
- }
- }
- }
-
- public byte[,] GetCollisionMap()
- {
- byte[,] collisionMap = null;
-
- foreach (var layer in Layers)
- {
- var tileLayer = layer as MapTileLayer;
-
- if (tileLayer != null && tileLayer.Name == "Collision")
- {
- collisionMap = new byte[1024,1024];
- for (int y = 0; y < tileLayer.Height; y++)
- {
- for (int x = 0; x < tileLayer.Width; x++)
- {
- MapTile tile = tileLayer.Tiles[y * layer.Width + x];
- if (tile == null || tile.LocalId == 0)
- collisionMap[x, y] = 1;
- else
- collisionMap[x, y] = 0;
- }
- }
-
- break;
- }
- }
-
- if (collisionMap == null)
- Debug.WriteLine("Map lacks a Collision layer! Pathfinding won't work.");
-
- return collisionMap;
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace DepthsBelow
+{
+ public class MapTile
+ {
+ public int LocalId;
+ public Texture2D Texture;
+ public Rectangle SourceRectangle;
+ public SpriteEffects SpriteEffects;
+ }
+
+ public enum MapObjectType : byte
+ {
+ Plain,
+ Tile,
+ Polygon,
+ Polyline
+ }
+
+ public class MapObject
+ {
+ //public MapObjectType ObjectType;
+ public string Name;
+ public string Type;
+ public Rectangle Bounds;
+ public List Points;
+ }
+
+ public class MapLayer
+ {
+ public int Width;
+ public int Height;
+ public string Name;
+ }
+
+ public class MapTileLayer : MapLayer
+ {
+ public MapTile[] Tiles;
+ }
+
+ public class MapObjectLayer : MapLayer
+ {
+ public MapObject[] Objects;
+ }
+
+ public class Map
+ {
+ public int TileWidth;
+ public int TileHeight;
+ public List Layers = new List();
+
+ public Map()
+ {
+
+ }
+
+ public void ParseObjects(Core core)
+ {
+ foreach (var layer in Layers)
+ {
+ var objectLayer = layer as MapObjectLayer;
+
+ if (objectLayer == null)
+ continue;
+
+ foreach (var mapObject in objectLayer.Objects)
+ {
+ if (mapObject.Type == "SquadStart")
+ {
+ var soldier = new Soldier(ref core.Squad);
+ soldier.Name = "Derp";
+ // 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);
+ soldier.X = mapObjectGridPos.X;
+ soldier.Y = mapObjectGridPos.Y;
+
+ core.Squad.Add(soldier);
+ }
+ if (mapObject.Type == "MonsterSpawn" || mapObject.Type == "EnemySpawn")
+ {
+ var enemy = new MonsterSpawn("Monster", 14, 0, ref core.Swarm);
+ var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
+ var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
+ enemy.X = mapObjectGridPos.X;
+ enemy.Y = mapObjectGridPos.Y;
+ }
+ if (mapObject.Type == "AmbushMonsterSpawn" || mapObject.Type == "AmbushEnemySpawn")
+ {
+ var enemy = new MonsterSpawn("Monster", 2, 0, ref core.Swarm);
+ var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
+ var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
+ enemy.X = mapObjectGridPos.X;
+ enemy.Y = mapObjectGridPos.Y;
+ }
+ if (mapObject.Type == "DelayedMonsterSpawn" || mapObject.Type == "DelayedEnemySpawn")
+ {
+ var enemy = new MonsterSpawn("Monster", 200, 8, ref core.Swarm);
+ var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
+ var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
+ enemy.X = mapObjectGridPos.X;
+ enemy.Y = mapObjectGridPos.Y;
+ }
+ /*if (mapObject.Type == "BossSpawn")
+ {
+ var enemy = new MonsterSpawn("BUB", 12, 0, ref core.Swarm);
+ var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
+ var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
+ enemy.X = mapObjectGridPos.X;
+ enemy.Y = mapObjectGridPos.Y;
+ }*/
+ if (mapObject.Type == "Door")
+ {
+ var door = new Door();
+ var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y);
+ var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
+ door.X = mapObjectGridPos.X;
+ door.Y = mapObjectGridPos.Y;
+ }
+ }
+ }
+ }
+
+ public void Draw(SpriteBatch spriteBatch)
+ {
+ foreach (var layer in Layers)
+ {
+ var tileLayer = layer as MapTileLayer;
+
+ if (tileLayer == null)
+ continue;
+
+ // Don't draw the collision layer
+ if (tileLayer.Name == "Collision")
+ continue;
+
+ for (int y = 0; y < tileLayer.Height; y++)
+ {
+ for (int x = 0; x < tileLayer.Width; x++)
+ {
+ MapTile mapTile = tileLayer.Tiles[y * layer.Width + x];
+ if (mapTile != null)
+ {
+ spriteBatch.Draw(
+ mapTile.Texture,
+ new Rectangle(x * TileWidth, y * TileHeight, TileWidth, TileHeight),
+ mapTile.SourceRectangle,
+ Color.White,
+ 0,
+ Vector2.Zero,
+ mapTile.SpriteEffects,
+ 0);
+ }
+ }
+ }
+ }
+ }
+
+ public byte[,] GetCollisionMap()
+ {
+ byte[,] collisionMap = null;
+
+ foreach (var layer in Layers)
+ {
+ var tileLayer = layer as MapTileLayer;
+
+ if (tileLayer != null && tileLayer.Name == "Collision")
+ {
+ collisionMap = new byte[1024,1024];
+ for (int y = 0; y < tileLayer.Height; y++)
+ {
+ for (int x = 0; x < tileLayer.Width; x++)
+ {
+ MapTile tile = tileLayer.Tiles[y * layer.Width + x];
+ if (tile == null || tile.LocalId == 0)
+ collisionMap[x, y] = 1;
+ else
+ collisionMap[x, y] = 0;
+ }
+ }
+
+ break;
+ }
+ }
+
+ if (collisionMap == null)
+ Debug.WriteLine("Map lacks a Collision layer! Pathfinding won't work.");
+
+ return collisionMap;
+ }
+ }
+}
diff --git a/DepthsBelow/DepthsBelow/MonsterSpawn.cs b/DepthsBelow/DepthsBelow/MonsterSpawn.cs
index a60b25f..48e9703 100755
--- a/DepthsBelow/DepthsBelow/MonsterSpawn.cs
+++ b/DepthsBelow/DepthsBelow/MonsterSpawn.cs
@@ -1,57 +1,60 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using Microsoft.Xna.Framework;
-
-namespace DepthsBelow
-{
- public class MonsterSpawn : Entity
- {
- //EntityManager entityManager;
-
- int wakingDistance = 7;
- int sleepingDistance = 6;
-
- string type;
-
- List swarm;
-
- public MonsterSpawn(string _type, ref List Swarm)
- : base()
- {
- //this.entityManager = entityManager;
- type = _type;
- swarm = Swarm;
- }
-
- public override void Update(GameTime gameTime)
- {
- for (int index = 0; index < EntityManager.Entities.Count; index++)
- {
- var entity = EntityManager.Entities[index];
- if (entity is Soldier)
- {
- Vector2 distance1 = new Vector2(this.GetComponent().Grid.Position.X,
- this.GetComponent().Grid.Position.Y);
- Vector2 distance2 = new Vector2(entity.GetComponent().Grid.Position.X,
- entity.GetComponent().Grid.Position.Y);
- if (Vector2.Distance(distance1, distance2) < wakingDistance/* && Vector2.Distance(distance1, distance2) > sleepingDistance*/)
- {
- var enemy = new SmallEnemy(ref swarm);
- if (type == "BUB")
- {
- enemy.LoadBoss();
- }
- enemy.X = this.X;
- enemy.Y = this.Y;
- swarm.Add(enemy);
- this.Remove();
- break;
- }
- }
- }
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using Microsoft.Xna.Framework;
+
+namespace DepthsBelow
+{
+ public class MonsterSpawn : Entity
+ {
+ //EntityManager entityManager;
+
+ int wakingDistance = 12;
+ int sleepingDistance = 6;
+ int wakingTurn = 0;
+
+ string type;
+
+ List swarm;
+
+ public MonsterSpawn(string _type, int _wakingDistance, int _wakingTurn, ref List Swarm)
+ : base()
+ {
+ //this.entityManager = entityManager;
+ type = _type;
+ swarm = Swarm;
+ wakingDistance = _wakingDistance;
+ wakingTurn = _wakingTurn;
+ }
+
+ public override void Update(GameTime gameTime)
+ {
+ for (int index = 0; index < EntityManager.Entities.Count; index++)
+ {
+ var entity = EntityManager.Entities[index];
+ if (entity is Soldier)
+ {
+ Vector2 distance1 = new Vector2(this.GetComponent().Grid.Position.X,
+ this.GetComponent().Grid.Position.Y);
+ Vector2 distance2 = new Vector2(entity.GetComponent().Grid.Position.X,
+ entity.GetComponent().Grid.Position.Y);
+ if (Vector2.Distance(distance1, distance2) < wakingDistance && TurnManager.currentTurn >= wakingTurn/* && Vector2.Distance(distance1, distance2) > sleepingDistance*/)
+ {
+ var enemy = new SmallEnemy(ref swarm);
+ if (type == "BUB")
+ {
+ enemy.LoadBoss();
+ }
+ enemy.X = this.X;
+ enemy.Y = this.Y;
+ swarm.Add(enemy);
+ this.Remove();
+ break;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/DepthsBelow/DepthsBelow/SmallEnemy.cs b/DepthsBelow/DepthsBelow/SmallEnemy.cs
index d310679..145ba0b 100755
--- a/DepthsBelow/DepthsBelow/SmallEnemy.cs
+++ b/DepthsBelow/DepthsBelow/SmallEnemy.cs
@@ -1,192 +1,192 @@
-using System;
-using System.Collections.Generic;
-using DepthsBelow.Component;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Content;
-using Microsoft.Xna.Framework.Graphics;
-using Microsoft.Xna.Framework.Input;
-
-namespace DepthsBelow
-{
- public class SmallEnemy : Entity
- {
- public static Texture2D Texture;
- public Color Color;
- public static Point Origin;
- private bool _selected; //I guess as in "currently doing something"
-
- public List Swarm;
-
- private PathFinder.Node nextNode;
-
- public int numberOfSteps = 5;
- public int currentStep = 0;
-
- public bool AttackedThisTurn = false;
-
- public int step
- {
- get { return currentStep; }
- set
- {
- currentStep = value;
- }
- }
-
- public SmallEnemy(ref List swarm)
- : base()
- {
- if (Texture == null)
- LoadContent();
-
- this.Swarm = swarm;
-
- Transform.World.Origin = new Vector2(20, 16);
-
- this.Color = Color.White;
- var rc = new SpriteRenderer(this) { Texture = Texture, Color = Color.White };
- AddComponent(rc);
-
- var cc = new Collision(this, 32, 32);
- cc.Solid = true;
- AddComponent(cc);
-
- var pfc = new PathFinder(this);
- AddComponent(pfc);
-
- var stat = new Component.Stat(this)
- {
- Life = 50,
- Defence = 25,
- Strength = 26,
- GetAim = 100,
- GetDodge = 50
- };
- AddComponent(stat);
- }
- public override void Remove()
- {
- Swarm.Remove(this);
-
- base.Remove();
- }
-
- public bool Selected
- {
- get { return _selected; }
- set
- {
- _selected = value;
- GetComponent().Color = (value) ? Color.Blue : this.Color;
- }
- }
-
- public static void LoadContent()
- {
- Texture = GameServices.GetService().Load("images/Monster");
- }
-
- public void LoadBoss()
- {
- GetComponent().AlternativeTexture = GameServices.GetService().Load("images/Pineapple");
- var stat = new Component.Stat(this)
- {
- Life = 500,
- Defence = 15,
- Strength = 70,
- GetAim = 80,
- GetDodge = 5
- };
- }
-
- public override void Update(GameTime gameTime)
- {
- base.Update(gameTime);
-
- float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f;
-
- if (nextNode == null)
- nextNode = GetComponent().Next();
-
- if (nextNode != null)
- {
- List soldierCollisions = new List();
-
- // Collision with moving units
- foreach (var body in Swarm)
- {
- if (body != this)
- {
- if (body.Transform.Grid == nextNode.Position)
- {
- soldierCollisions.Add(body.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;
- GetComponent().World.Rotation = MathHelper.ToRadians(0);
- }
- if (Transform.World.X > nodeWorldPos.X)
- {
- Transform.World.X -= speed;
- GetComponent().World.Rotation = MathHelper.ToRadians(180);
- }
- if (Transform.World.Y < nodeWorldPos.Y)
- {
- Transform.World.Y += speed;
- GetComponent().World.Rotation = MathHelper.ToRadians(90);
- }
- if (Transform.World.Y > nodeWorldPos.Y)
- {
- Transform.World.Y -= speed;
- GetComponent().World.Rotation = MathHelper.ToRadians(270);
- }
- if (Transform.World == nodeWorldPos)
- {
- if (currentStep < numberOfSteps)
- {
- currentStep++;
- //lastLastNode = lastNode;
- //lastNode = nextNode;
- nextNode = GetComponent().Next();
- }
- else
- {
-
- GetComponent().Stop();
- }
- foreach (var entity in EntityManager.Entities)
- {
- if (entity is Soldier)
- {
- if (entity.GetComponent().Rectangle.Intersects(this.GetComponent().Rectangle))
- {
- if (AttackedThisTurn == false)
- {
- if (Utility.AttackTest(this.GetComponent(), entity, Utility.CalculateHitChance(this.GetComponent(), this.Transform.World.Position, entity)))
- {
- AttackedThisTurn = true;
- break;
- }
- }
- }
- }
- }
- }
- }
-
- }
- }
- }
+using System;
+using System.Collections.Generic;
+using DepthsBelow.Component;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+
+namespace DepthsBelow
+{
+ public class SmallEnemy : Entity
+ {
+ public static Texture2D Texture;
+ public Color Color;
+ public static Point Origin;
+ private bool _selected; //I guess as in "currently doing something"
+
+ public List Swarm;
+
+ private PathFinder.Node nextNode;
+
+ public int numberOfSteps = 8;
+ public int currentStep = 0;
+
+ public bool AttackedThisTurn = false;
+
+ public int step
+ {
+ get { return currentStep; }
+ set
+ {
+ currentStep = value;
+ }
+ }
+
+ public SmallEnemy(ref List swarm)
+ : base()
+ {
+ if (Texture == null)
+ LoadContent();
+
+ this.Swarm = swarm;
+
+ Transform.World.Origin = new Vector2(20, 16);
+
+ this.Color = Color.White;
+ var rc = new SpriteRenderer(this) { Texture = Texture, Color = Color.White };
+ AddComponent(rc);
+
+ var cc = new Collision(this, 32, 32);
+ cc.Solid = true;
+ AddComponent(cc);
+
+ var pfc = new PathFinder(this);
+ AddComponent(pfc);
+
+ var stat = new Component.Stat(this)
+ {
+ Life = 50,
+ Defence = 25,
+ Strength = 70,
+ GetAim = 100,
+ GetDodge = 50
+ };
+ AddComponent(stat);
+ }
+ public override void Remove()
+ {
+ Swarm.Remove(this);
+
+ base.Remove();
+ }
+
+ public bool Selected
+ {
+ get { return _selected; }
+ set
+ {
+ _selected = value;
+ GetComponent().Color = (value) ? Color.Blue : this.Color;
+ }
+ }
+
+ public static void LoadContent()
+ {
+ Texture = GameServices.GetService().Load("images/Monster");
+ }
+
+ public void LoadBoss()
+ {
+ GetComponent().AlternativeTexture = GameServices.GetService().Load("images/Pineapple");
+ var stat = new Component.Stat(this)
+ {
+ Life = 500,
+ Defence = 15,
+ Strength = 70,
+ GetAim = 80,
+ GetDodge = 5
+ };
+ }
+
+ public override void Update(GameTime gameTime)
+ {
+ base.Update(gameTime);
+
+ float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f;
+
+ if (nextNode == null)
+ nextNode = GetComponent().Next();
+
+ if (nextNode != null)
+ {
+ List soldierCollisions = new List();
+
+ // Collision with moving units
+ foreach (var body in Swarm)
+ {
+ if (body != this)
+ {
+ if (body.Transform.Grid == nextNode.Position)
+ {
+ soldierCollisions.Add(body.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;
+ GetComponent().World.Rotation = MathHelper.ToRadians(0);
+ }
+ if (Transform.World.X > nodeWorldPos.X)
+ {
+ Transform.World.X -= speed;
+ GetComponent().World.Rotation = MathHelper.ToRadians(180);
+ }
+ if (Transform.World.Y < nodeWorldPos.Y)
+ {
+ Transform.World.Y += speed;
+ GetComponent().World.Rotation = MathHelper.ToRadians(90);
+ }
+ if (Transform.World.Y > nodeWorldPos.Y)
+ {
+ Transform.World.Y -= speed;
+ GetComponent().World.Rotation = MathHelper.ToRadians(270);
+ }
+ if (Transform.World == nodeWorldPos)
+ {
+ if (currentStep < numberOfSteps)
+ {
+ currentStep++;
+ //lastLastNode = lastNode;
+ //lastNode = nextNode;
+ nextNode = GetComponent().Next();
+ }
+ else
+ {
+
+ GetComponent().Stop();
+ }
+ foreach (var entity in EntityManager.Entities)
+ {
+ if (entity is Soldier)
+ {
+ if (entity.GetComponent().Rectangle.Intersects(this.GetComponent().Rectangle))
+ {
+ if (AttackedThisTurn == false)
+ {
+ if (Utility.AttackTest(this.GetComponent(), entity, Utility.CalculateHitChance(this.GetComponent(), this.Transform.World.Position, entity)))
+ {
+ AttackedThisTurn = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/DepthsBelow/DepthsBelow/TurnManager.cs b/DepthsBelow/DepthsBelow/TurnManager.cs
index dcd4e2b..2f6b4fd 100755
--- a/DepthsBelow/DepthsBelow/TurnManager.cs
+++ b/DepthsBelow/DepthsBelow/TurnManager.cs
@@ -1,115 +1,122 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-
-namespace DepthsBelow
-{
- ///
- /// Keeps track of whose turn it is.
- ///
- public class TurnManager
- {
- ///
- /// A player turn token.
- ///
- public class Token
- {
- ///
- /// Unique identifying name of the token.
- ///
- public string Name { get; private set; }
- private TurnManager turnManager;
-
- ///
- /// Initializes a new instance of the class.
- /// Preferably use instead.
- ///
- /// The turn manager the token belongs to.
- /// Unique identifying name of the token.
- public Token(TurnManager turnManager, string name)
- {
- this.turnManager = turnManager;
- this.Name = name;
- turnManager.AddToken(this);
- }
- }
-
- ///
- /// Dictionary of turn tokens.
- ///
- public Dictionary Tokens;
- private int currentTokenIndex;
-
- ///
- /// The turn token belonging to a player.
- ///
- public Token CurrentTurn
- {
- get { return Tokens.ElementAt(currentTokenIndex).Value; }
- }
-
- ///
- /// Get the turn token by the specified name.
- ///
- /// The identifying name of the player.
- /// Returns a player turn token.
- public Token this[string name]
- {
- get { return this.Tokens[name]; }
- }
-
- ///
- /// Create a turn manager.
- ///
- public TurnManager()
- {
- Tokens = new Dictionary();
- }
-
- ///
- /// Create a turn manager.
- ///
- /// Tokens of players.
- public TurnManager(string[] tokenNames)
- : this()
- {
- foreach (var tokenName in tokenNames)
- CreateToken(tokenName);
- }
-
- ///
- /// Create a turn token.
- ///
- /// Name of the token.
- /// Returns a player turn token.
- public Token CreateToken(string name)
- {
- return Tokens.ContainsKey(name) ? Tokens[name] : new Token(this, name);
- }
-
- ///
- /// Add a turn token to
- ///
- ///
- public void AddToken(Token token)
- {
- if (!Tokens.ContainsKey(token.Name))
- Tokens.Add(token.Name, token);
- }
-
- ///
- /// End the current turn, skipping to the next token in the dictionary.
- ///
- public void EndTurn()
- {
- var prevTurn = CurrentTurn;
-
- if (++currentTokenIndex > Tokens.Count - 1)
- currentTokenIndex = 0;
-
- Debug.WriteLine(prevTurn.Name + " turn ended. Current turn: " + CurrentTurn.Name);
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+
+namespace DepthsBelow
+{
+ ///
+ /// Keeps track of whose turn it is.
+ ///
+ public class TurnManager
+ {
+ public static int currentTurn = 0;
+
+ ///
+ /// A player turn token.
+ ///
+ public class Token
+ {
+ ///
+ /// Unique identifying name of the token.
+ ///
+ public string Name { get; private set; }
+ private TurnManager turnManager;
+
+ ///
+ /// Initializes a new instance of the class.
+ /// Preferably use instead.
+ ///
+ /// The turn manager the token belongs to.
+ /// Unique identifying name of the token.
+ public Token(TurnManager turnManager, string name)
+ {
+ this.turnManager = turnManager;
+ this.Name = name;
+ turnManager.AddToken(this);
+ }
+ }
+
+ ///
+ /// Dictionary of turn tokens.
+ ///
+ public Dictionary Tokens;
+ private int currentTokenIndex;
+
+ ///
+ /// The turn token belonging to a player.
+ ///
+ public Token CurrentTurn
+ {
+ get { return Tokens.ElementAt(currentTokenIndex).Value; }
+ }
+
+ ///
+ /// Get the turn token by the specified name.
+ ///
+ /// The identifying name of the player.
+ /// Returns a player turn token.
+ public Token this[string name]
+ {
+ get { return this.Tokens[name]; }
+ }
+
+ ///
+ /// Create a turn manager.
+ ///
+ public TurnManager()
+ {
+ Tokens = new Dictionary();
+ }
+
+ ///
+ /// Create a turn manager.
+ ///
+ /// Tokens of players.
+ public TurnManager(string[] tokenNames)
+ : this()
+ {
+ foreach (var tokenName in tokenNames)
+ CreateToken(tokenName);
+ }
+
+ ///
+ /// Create a turn token.
+ ///
+ /// Name of the token.
+ /// Returns a player turn token.
+ public Token CreateToken(string name)
+ {
+ return Tokens.ContainsKey(name) ? Tokens[name] : new Token(this, name);
+ }
+
+ ///
+ /// Add a turn token to
+ ///
+ ///
+ public void AddToken(Token token)
+ {
+ if (!Tokens.ContainsKey(token.Name))
+ Tokens.Add(token.Name, token);
+ }
+
+ ///
+ /// End the current turn, skipping to the next token in the dictionary.
+ ///
+ public void EndTurn()
+ {
+ var prevTurn = CurrentTurn;
+
+ if (++currentTokenIndex > Tokens.Count - 1)
+ currentTokenIndex = 0;
+
+ Debug.WriteLine(prevTurn.Name + " turn ended. Current turn: " + CurrentTurn.Name);
+ if (CurrentTurn.Name == "Player")
+ {
+ currentTurn++;
+ Console.WriteLine("Turn: " + currentTurn);
+ }
+ }
+ }
+}
diff --git a/DepthsBelow/DepthsBelowContent/maps/prototyp.tmx b/DepthsBelow/DepthsBelowContent/maps/prototyp.tmx
index 56828d1..f50ee00 100755
--- a/DepthsBelow/DepthsBelowContent/maps/prototyp.tmx
+++ b/DepthsBelow/DepthsBelowContent/maps/prototyp.tmx
@@ -29,7 +29,7 @@
-
+
@@ -59,6 +59,14 @@
+
+
+
+
+
+
+
+