From b3750271c0fb3517b8f8a31755e28aed35314433 Mon Sep 17 00:00:00 2001 From: Urban Modig Date: Tue, 24 Jun 2025 20:37:52 +0200 Subject: [PATCH] First commit --- .gitignore | 38 +++++ pom.xml | 17 ++ src/main/java/se/urmo/my2dgame/ImageUtil.java | 17 ++ src/main/java/se/urmo/my2dgame/Main.java | 9 ++ .../java/se/urmo/my2dgame/entity/Entity.java | 46 ++++++ .../java/se/urmo/my2dgame/entity/Player.java | 147 ++++++++++++++++++ .../se/urmo/my2dgame/main/AssetSetter.java | 15 ++ .../urmo/my2dgame/main/CollisionChecker.java | 75 +++++++++ src/main/java/se/urmo/my2dgame/main/Game.java | 89 +++++++++++ .../se/urmo/my2dgame/main/KeyHandler.java | 48 ++++++ .../java/se/urmo/my2dgame/main/Screen.java | 65 ++++++++ .../se/urmo/my2dgame/main/UpdateListener.java | 5 + .../java/se/urmo/my2dgame/object/Key.java | 18 +++ .../se/urmo/my2dgame/object/SuperObject.java | 26 ++++ src/main/java/se/urmo/my2dgame/tile/Tile.java | 8 + .../se/urmo/my2dgame/tile/TileManager.java | 98 ++++++++++++ src/main/resources/maps/map01.txt | 12 ++ src/main/resources/maps/world01.txt | 50 ++++++ src/main/resources/maps/world02.txt | 50 ++++++ src/main/resources/objects/axe.png | Bin 0 -> 6807 bytes src/main/resources/objects/blueheart.png | Bin 0 -> 613 bytes src/main/resources/objects/boots.png | Bin 0 -> 680 bytes src/main/resources/objects/chest (OLD).png | Bin 0 -> 733 bytes src/main/resources/objects/chest.png | Bin 0 -> 6279 bytes src/main/resources/objects/chest_opened.png | Bin 0 -> 6328 bytes src/main/resources/objects/coin_bronze.png | Bin 0 -> 6493 bytes src/main/resources/objects/door.png | Bin 0 -> 638 bytes src/main/resources/objects/door_iron.png | Bin 0 -> 5946 bytes src/main/resources/objects/heart_blank.png | Bin 0 -> 7168 bytes src/main/resources/objects/heart_full.png | Bin 0 -> 7597 bytes src/main/resources/objects/heart_half.png | Bin 0 -> 7499 bytes src/main/resources/objects/key.png | Bin 0 -> 711 bytes src/main/resources/objects/lantern.png | Bin 0 -> 6458 bytes .../resources/objects/manacrystal_blank.png | Bin 0 -> 5583 bytes .../resources/objects/manacrystal_full.png | Bin 0 -> 1774 bytes src/main/resources/objects/pickaxe.png | Bin 0 -> 591 bytes src/main/resources/objects/potion_red.png | Bin 0 -> 6388 bytes src/main/resources/objects/shield_blue.png | Bin 0 -> 6673 bytes src/main/resources/objects/shield_wood.png | Bin 0 -> 6476 bytes src/main/resources/objects/sword_normal.png | Bin 0 -> 6592 bytes src/main/resources/objects/tent.png | Bin 0 -> 6860 bytes src/main/resources/player/boy_down_1.png | Bin 0 -> 5968 bytes src/main/resources/player/boy_down_2.png | Bin 0 -> 5980 bytes src/main/resources/player/boy_left_1.png | Bin 0 -> 6068 bytes src/main/resources/player/boy_left_2.png | Bin 0 -> 6011 bytes src/main/resources/player/boy_right_1.png | Bin 0 -> 6059 bytes src/main/resources/player/boy_right_2.png | Bin 0 -> 5995 bytes src/main/resources/player/boy_up_1.png | Bin 0 -> 5863 bytes src/main/resources/player/boy_up_2.png | Bin 0 -> 5861 bytes src/main/resources/tiles/earth.png | Bin 0 -> 614 bytes src/main/resources/tiles/grass.png | Bin 0 -> 616 bytes src/main/resources/tiles/sand.png | Bin 0 -> 5533 bytes src/main/resources/tiles/tree.png | Bin 0 -> 6311 bytes src/main/resources/tiles/wall.png | Bin 0 -> 6303 bytes src/main/resources/tiles/water.png | Bin 0 -> 619 bytes 55 files changed, 833 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/se/urmo/my2dgame/ImageUtil.java create mode 100644 src/main/java/se/urmo/my2dgame/Main.java create mode 100644 src/main/java/se/urmo/my2dgame/entity/Entity.java create mode 100644 src/main/java/se/urmo/my2dgame/entity/Player.java create mode 100644 src/main/java/se/urmo/my2dgame/main/AssetSetter.java create mode 100644 src/main/java/se/urmo/my2dgame/main/CollisionChecker.java create mode 100644 src/main/java/se/urmo/my2dgame/main/Game.java create mode 100644 src/main/java/se/urmo/my2dgame/main/KeyHandler.java create mode 100644 src/main/java/se/urmo/my2dgame/main/Screen.java create mode 100644 src/main/java/se/urmo/my2dgame/main/UpdateListener.java create mode 100644 src/main/java/se/urmo/my2dgame/object/Key.java create mode 100644 src/main/java/se/urmo/my2dgame/object/SuperObject.java create mode 100644 src/main/java/se/urmo/my2dgame/tile/Tile.java create mode 100644 src/main/java/se/urmo/my2dgame/tile/TileManager.java create mode 100644 src/main/resources/maps/map01.txt create mode 100644 src/main/resources/maps/world01.txt create mode 100644 src/main/resources/maps/world02.txt create mode 100644 src/main/resources/objects/axe.png create mode 100644 src/main/resources/objects/blueheart.png create mode 100644 src/main/resources/objects/boots.png create mode 100644 src/main/resources/objects/chest (OLD).png create mode 100644 src/main/resources/objects/chest.png create mode 100644 src/main/resources/objects/chest_opened.png create mode 100644 src/main/resources/objects/coin_bronze.png create mode 100644 src/main/resources/objects/door.png create mode 100644 src/main/resources/objects/door_iron.png create mode 100644 src/main/resources/objects/heart_blank.png create mode 100644 src/main/resources/objects/heart_full.png create mode 100644 src/main/resources/objects/heart_half.png create mode 100644 src/main/resources/objects/key.png create mode 100644 src/main/resources/objects/lantern.png create mode 100644 src/main/resources/objects/manacrystal_blank.png create mode 100644 src/main/resources/objects/manacrystal_full.png create mode 100644 src/main/resources/objects/pickaxe.png create mode 100644 src/main/resources/objects/potion_red.png create mode 100644 src/main/resources/objects/shield_blue.png create mode 100644 src/main/resources/objects/shield_wood.png create mode 100644 src/main/resources/objects/sword_normal.png create mode 100644 src/main/resources/objects/tent.png create mode 100644 src/main/resources/player/boy_down_1.png create mode 100644 src/main/resources/player/boy_down_2.png create mode 100644 src/main/resources/player/boy_left_1.png create mode 100644 src/main/resources/player/boy_left_2.png create mode 100644 src/main/resources/player/boy_right_1.png create mode 100644 src/main/resources/player/boy_right_2.png create mode 100644 src/main/resources/player/boy_up_1.png create mode 100644 src/main/resources/player/boy_up_2.png create mode 100644 src/main/resources/tiles/earth.png create mode 100644 src/main/resources/tiles/grass.png create mode 100644 src/main/resources/tiles/sand.png create mode 100644 src/main/resources/tiles/tree.png create mode 100644 src/main/resources/tiles/wall.png create mode 100644 src/main/resources/tiles/water.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fec82f4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.example + My2DGameAlt + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/src/main/java/se/urmo/my2dgame/ImageUtil.java b/src/main/java/se/urmo/my2dgame/ImageUtil.java new file mode 100644 index 0000000..b6f4620 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/ImageUtil.java @@ -0,0 +1,17 @@ +package se.urmo.my2dgame; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Objects; + +public class ImageUtil { + public static BufferedImage loadImage(String name) { + try { + return ImageIO.read(Objects.requireNonNull(ImageUtil.class.getResourceAsStream(name))); + }catch (IOException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/se/urmo/my2dgame/Main.java b/src/main/java/se/urmo/my2dgame/Main.java new file mode 100644 index 0000000..87c02d7 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/Main.java @@ -0,0 +1,9 @@ +package se.urmo.my2dgame; + +import se.urmo.my2dgame.main.Game; + +public class Main { + public static void main(String[] args) { + new Game().start(); + } +} diff --git a/src/main/java/se/urmo/my2dgame/entity/Entity.java b/src/main/java/se/urmo/my2dgame/entity/Entity.java new file mode 100644 index 0000000..cb2d6e8 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/entity/Entity.java @@ -0,0 +1,46 @@ +package se.urmo.my2dgame.entity; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.EnumSet; +import java.util.Map; + + +public abstract class Entity { + public int worldX; + public int worldY; + public int speed; + + public static BufferedImage[] entityImages; + public Direction direction; + + public int spriteCount = 0; + public int spriteNum = 1; + + public Rectangle solidArea; + public boolean collisionOn = false; + + public abstract int boxLeft(); + public abstract int boxRight(); + public abstract int boxTop(); + public abstract int boxBottom(); + + public enum Direction { + N, NE, E, SE, S, SW, W, NW; + } + protected final EnumSet norths = EnumSet.of(Direction.N, Direction.NE, Direction.NW); + protected final EnumSet souths = EnumSet.of(Direction.S, Direction.SE, Direction.SW); + protected final EnumSet easts = EnumSet.of(Direction.E, Direction.NE, Direction.SE); + protected final EnumSet wests = EnumSet.of(Direction.W, Direction.NW, Direction.SW); + + protected static final Map directionMap = Map.ofEntries( + Map.entry(new Point(0, -1), Direction.N), + Map.entry(new Point(1, -1), Direction.NE), + Map.entry(new Point(1, 0), Direction.E), + Map.entry(new Point(1, 1), Direction.SE), + Map.entry(new Point(0, 1), Direction.S), + Map.entry(new Point(-1, 1), Direction.SW), + Map.entry(new Point(-1, 0), Direction.W), + Map.entry(new Point(-1, -1), Direction.NW) + ); +} diff --git a/src/main/java/se/urmo/my2dgame/entity/Player.java b/src/main/java/se/urmo/my2dgame/entity/Player.java new file mode 100644 index 0000000..77df5a5 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/entity/Player.java @@ -0,0 +1,147 @@ +package se.urmo.my2dgame.entity; + +import se.urmo.my2dgame.ImageUtil; +import se.urmo.my2dgame.main.CollisionChecker; +import se.urmo.my2dgame.main.KeyHandler; +import se.urmo.my2dgame.main.Screen; +import se.urmo.my2dgame.main.UpdateListener; + +import java.awt.*; +import java.awt.image.BufferedImage; + +public class Player extends Entity implements UpdateListener { + private static final int up1 = 0, up2 = 1, down1 = 2, down2 = 3, left1 = 4, left2 = 5, right1 = 6, right2 = 7; + private final CollisionChecker collisionChecker; + private final KeyHandler keyHandler; + public static final int SCREEN_X = Screen.SCREEN_WIDTH / 2 - (Screen.TILE_SIZE / 2); + public static final int SCREEN_Y = Screen.SCREEN_HEIGHT / 2 - (Screen.TILE_SIZE / 2); + + static { + entityImages = new BufferedImage[8]; + entityImages[up1] = ImageUtil.loadImage("/player/boy_up_1.png"); + entityImages[up2] = ImageUtil.loadImage("/player/boy_up_2.png"); + entityImages[down1] = ImageUtil.loadImage("/player/boy_down_1.png"); + entityImages[down2] = ImageUtil.loadImage("/player/boy_down_2.png"); + entityImages[left1] = ImageUtil.loadImage("/player/boy_left_1.png"); + entityImages[left2] = ImageUtil.loadImage("/player/boy_left_2.png"); + entityImages[right1] = ImageUtil.loadImage("/player/boy_right_1.png"); + entityImages[right2] = ImageUtil.loadImage("/player/boy_right_2.png"); + } + + public Player(CollisionChecker collisionChecker, KeyHandler keyHandler) { + this.collisionChecker = collisionChecker; + this.keyHandler = keyHandler; + + solidArea = new Rectangle(8, 16, 32, 32); + + worldX = Screen.TILE_SIZE * 22; + worldY = Screen.TILE_SIZE * 22; + speed = 1; + direction = Direction.S; + } + + + public void update() { + if (keyHandler.upPressed || keyHandler.downPressed + || keyHandler.leftPressed || keyHandler.rightPressed) { + + int dx = 0; + int dy = 0; + + // Vertical movement + if (keyHandler.upPressed && !keyHandler.downPressed) { + dy = -1; + } else if (keyHandler.downPressed && !keyHandler.upPressed) { + dy = 1; + } + + // Horizontal movement + if (keyHandler.rightPressed && !keyHandler.leftPressed) { + dx = 1; + } else if (keyHandler.leftPressed && !keyHandler.rightPressed) { + dx = -1; + } + + // Apply movement + worldX += dx * speed; + worldY += dy * speed; + + // Lookup direction + Point movement = new Point(dx, dy); + direction = directionMap.getOrDefault(movement, direction); + + if (direction != null && collisionChecker.checkTile(this)) { + if (norths.contains(direction)) { + worldY += speed; // negate + } + if (souths.contains(direction)) { + worldY -= speed; // negate + } + if (easts.contains(direction)) { + worldX -= speed; // negate + } + if (wests.contains(direction)) { + worldX += speed; // negate + } + } + + spriteCount++; + if (spriteCount == 30) { // sprite animation update speed - only uodate animation every 30 + if (spriteNum == 1) { + spriteNum = 2; + } else if (spriteNum == 2) { + spriteNum = 1; + } + spriteCount = 0; + } + } + } + + public void draw(Graphics2D g2d) { + BufferedImage image = null; + switch (direction) { + case N -> image = spriteNum == 1 ? entityImages[up1] : entityImages[up2]; + case S -> image = spriteNum == 1 ? entityImages[down1] : entityImages[down2]; + case W, NW, SW -> image = spriteNum == 1 ? entityImages[left1] : entityImages[left2]; + case E, NE, SE -> image = spriteNum == 1 ? entityImages[right1] : entityImages[right2]; + } + + g2d.drawImage(image, SCREEN_X, SCREEN_Y, Screen.TILE_SIZE, Screen.TILE_SIZE, null); + } + + private void drawRectangel(Graphics2D g2d) { + int num = (worldX - 24) / Screen.TILE_SIZE; + int num2 = (worldY - 24) / Screen.TILE_SIZE; + g2d.drawRect(SCREEN_X - Screen.TILE_SIZE, SCREEN_Y - Screen.TILE_SIZE, 48, 48); + g2d.drawString(num + "," + num2, SCREEN_X - Screen.TILE_SIZE + 10, SCREEN_Y - Screen.TILE_SIZE + 20); + } + + @Override + public void onUpdate() { + update(); + } + + @Override + public int boxLeft() { + // solidare left side + return this.worldX + this.solidArea.x; + } + + @Override + public int boxRight() { + // solidare right side + return this.worldX + this.solidArea.x + this.solidArea.width; + } + + @Override + public int boxTop() { + // solidarea top + return this.worldY + this.solidArea.y; + } + + @Override + public int boxBottom() { + // solidarea bottom + return this.worldY + this.solidArea.y + this.solidArea.height; + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/AssetSetter.java b/src/main/java/se/urmo/my2dgame/main/AssetSetter.java new file mode 100644 index 0000000..b9a8b68 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/AssetSetter.java @@ -0,0 +1,15 @@ +package se.urmo.my2dgame.main; + +import se.urmo.my2dgame.object.Key; + +public class AssetSetter { + Screen screen; + public AssetSetter(Screen screen) { + this.screen = screen; + } + + public void setObject() { + screen.obj[0] = new Key(23 * screen.TILE_SIZE, 7 * screen.TILE_SIZE); + screen.obj[1] = new Key(23 * screen.TILE_SIZE, 40 * screen.TILE_SIZE); + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/CollisionChecker.java b/src/main/java/se/urmo/my2dgame/main/CollisionChecker.java new file mode 100644 index 0000000..66cbe71 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/CollisionChecker.java @@ -0,0 +1,75 @@ +package se.urmo.my2dgame.main; + +import se.urmo.my2dgame.entity.Entity; +import se.urmo.my2dgame.tile.TileManager; + +public class CollisionChecker { + + private final TileManager tileManager; + + public CollisionChecker(TileManager tileManager) { + this.tileManager = tileManager; + } + + public boolean checkTile(Entity entity) { + int entityLeftCol = entity.boxLeft() / Screen.TILE_SIZE; + int entityRightCol = entity.boxRight() / Screen.TILE_SIZE; + int entityTopRow = entity.boxTop() / Screen.TILE_SIZE; + int entityBottomRow = entity.boxBottom() / Screen.TILE_SIZE; + + switch (entity.direction){ + case N -> { + entityTopRow = (entity.boxTop() - entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityTopRow, entityLeftCol, entityTopRow, entityRightCol); + } + case S -> { + entityBottomRow = (entity.boxBottom() + entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityBottomRow,entityLeftCol,entityBottomRow,entityRightCol); + } + case W -> { + entityLeftCol = (entity.boxLeft() - entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityTopRow, entityLeftCol, entityBottomRow, entityLeftCol); + } + case E -> { + entityRightCol = (entity.boxRight() + entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityTopRow, entityRightCol, entityBottomRow, entityRightCol); + } + case NE -> { + entityTopRow = (entity.boxTop() - entity.speed)/ Screen.TILE_SIZE; + entityRightCol = (entity.boxRight() + entity.speed)/ Screen.TILE_SIZE; + entityLeftCol = (entity.boxLeft() + entity.speed)/ Screen.TILE_SIZE; + entityBottomRow = (entity.boxBottom() - entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityTopRow, entityLeftCol, entityBottomRow, entityRightCol); + } + case NW -> { + entityTopRow = (entity.boxTop() - entity.speed)/ Screen.TILE_SIZE; + entityRightCol = (entity.boxRight() - entity.speed)/ Screen.TILE_SIZE; + entityLeftCol = (entity.boxLeft() - entity.speed)/ Screen.TILE_SIZE; + entityBottomRow = (entity.boxBottom() - entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityBottomRow, entityLeftCol, entityTopRow, entityRightCol); + } + case SW -> { + entityTopRow = (entity.boxTop() + entity.speed)/ Screen.TILE_SIZE; + entityRightCol = (entity.boxRight() - entity.speed)/ Screen.TILE_SIZE; + entityLeftCol = (entity.boxLeft() - entity.speed)/ Screen.TILE_SIZE; + entityBottomRow = (entity.boxBottom() + entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityTopRow, entityLeftCol, entityBottomRow, entityRightCol); + } + case SE -> { + entityTopRow = (entity.boxTop() + entity.speed)/ Screen.TILE_SIZE; + entityRightCol = (entity.boxRight() + entity.speed)/ Screen.TILE_SIZE; + entityLeftCol = (entity.boxLeft() + entity.speed)/ Screen.TILE_SIZE; + entityBottomRow = (entity.boxBottom() + entity.speed)/ Screen.TILE_SIZE; + return isNonePassable(entityBottomRow, entityLeftCol, entityTopRow, entityRightCol); + } + } + return false; + } + + private boolean isNonePassable(int row1, int col1, int row2, int col2) { + int tileNum2 = tileManager.mapTileNum[row1][col1]; + int tileNum1 = tileManager.mapTileNum[row2][col2]; + + return tileManager.tiles[tileNum1].collission || tileManager.tiles[tileNum2].collission; + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/Game.java b/src/main/java/se/urmo/my2dgame/main/Game.java new file mode 100644 index 0000000..dc7f4f6 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/Game.java @@ -0,0 +1,89 @@ +package se.urmo.my2dgame.main; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; + +public class Game implements Runnable { + private final static int FPS_SET = 120; + private final static int UPS_SET = 200; + private final static double timePerFrame = 1000000000.0 / FPS_SET; + private final static double timePerUpdate = 1000000000.0 / UPS_SET; + + private final List updateListeners = new ArrayList<>(); + + private Thread gameThread; + private final JFrame window = new JFrame(); + private final Screen screen = new Screen(this); + + public void start() { + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + window.setResizable(false); + window.setTitle("2d"); + + + window.add(screen); + + window.pack(); + + window.setLocationRelativeTo(null); + window.setVisible(true); + + screen.setupGame(); + startGameThread(); + } + + public void addUpdateListener(UpdateListener listener) { + updateListeners.add(listener); + } + + private void notifyUpdate() { + for (UpdateListener listener : updateListeners) { + listener.onUpdate(); + } + } + + public void startGameThread() { + this.gameThread = new Thread(this); + gameThread.start(); + } + + @Override + public void run() { + long previousTime = System.nanoTime(); + + int frames = 0; + int updates = 0; + long lastCheck = System.currentTimeMillis(); + + double deltaU = 0; + double deltaF = 0; + + while (gameThread !=null && gameThread.isAlive()) { + long currentTime = System.nanoTime(); + deltaU += (currentTime - previousTime) / timePerUpdate; + deltaF += (currentTime - previousTime) / timePerFrame; + + previousTime = currentTime; + + if (deltaU >= 1) { + notifyUpdate(); + updates++; + deltaU--; + } + + if (deltaF >= 1) { + screen.repaint(); // triggers JPanel paintComponent + frames++; + deltaF--; + } + + if (System.currentTimeMillis() - lastCheck >= 1000) { + lastCheck = System.currentTimeMillis(); + System.out.println("FPS: " + frames + " | UPS: " + updates); + frames = 0; + updates = 0; + } + } + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/KeyHandler.java b/src/main/java/se/urmo/my2dgame/main/KeyHandler.java new file mode 100644 index 0000000..58689c7 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/KeyHandler.java @@ -0,0 +1,48 @@ +package se.urmo.my2dgame.main; + +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +public class KeyHandler implements KeyListener { + public boolean upPressed; + public boolean leftPressed; + public boolean downPressed; + public boolean rightPressed; + + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void keyPressed(KeyEvent e) { + int keyCode = e.getKeyCode(); + if (keyCode == KeyEvent.VK_W) { + upPressed = true; + } + if (keyCode == KeyEvent.VK_S) { + downPressed = true; + } + if (keyCode == KeyEvent.VK_A) { + leftPressed = true; + } + if (keyCode == KeyEvent.VK_D) { + rightPressed = true; + } + } + + @Override + public void keyReleased(KeyEvent e) { + int keyCode = e.getKeyCode(); + if (keyCode == KeyEvent.VK_W) { + upPressed = false; + } + if (keyCode == KeyEvent.VK_S) { + downPressed = false; + } + if (keyCode == KeyEvent.VK_A) { + leftPressed = false; + } + if (keyCode == KeyEvent.VK_D) { + rightPressed = false; + } + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/Screen.java b/src/main/java/se/urmo/my2dgame/main/Screen.java new file mode 100644 index 0000000..63ee5b5 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/Screen.java @@ -0,0 +1,65 @@ +package se.urmo.my2dgame.main; + +import se.urmo.my2dgame.entity.Player; +import se.urmo.my2dgame.object.SuperObject; +import se.urmo.my2dgame.tile.TileManager; + +import javax.swing.*; +import java.awt.*; +import java.util.Arrays; +import java.util.Objects; + +public class Screen extends JPanel { + //SCREEN SETTINGS + public static final int ORIGINAL_TILE_SIZE = 16; + public static final int SCALE = 3; + public static final int TILE_SIZE = ORIGINAL_TILE_SIZE * SCALE; + public static final int MAX_SCREEN_COL = 16; + public static final int MAX_SCREEN_ROW = 12; + public static final int SCREEN_WIDTH = MAX_SCREEN_COL * TILE_SIZE; + public static final int SCREEN_HEIGHT = MAX_SCREEN_ROW * TILE_SIZE; + + //WORLD + public final int WORLD_MAX_COL = 50; + public final int WORLD_MAX_ROW = 50; + + TileManager tileManager = new TileManager(this); + KeyHandler keyHandler = new KeyHandler(); + + public CollisionChecker collisionChecker = new CollisionChecker(tileManager); + public AssetSetter assetSetter = new AssetSetter(this); + public Player player = new Player(collisionChecker, keyHandler); + public SuperObject[] obj = new SuperObject[10]; + + public Screen(Game game) { + game.addUpdateListener(player); + this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT)); + this.setBackground(Color.BLACK); + this.setDoubleBuffered(true); + this.addKeyListener(keyHandler); + this.setFocusable(true); + } + + public void setupGame(){ + assetSetter.setObject(); + } + + public void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + + tileManager.draw(g2d); + Arrays.stream(obj) + .filter(Objects::nonNull) + .forEach(o -> o.draw(g2d, this)); + player.draw(g2d); + g2d.dispose(); + } + + public boolean isWithinScreen(int worldX, int worldY) { + return worldX + TILE_SIZE > player.worldX - player.SCREEN_X && + worldX - TILE_SIZE < player.worldX + player.SCREEN_X && + worldY + TILE_SIZE > player.worldY - player.SCREEN_Y && + worldY - TILE_SIZE < player.worldY + player.SCREEN_Y; + } +} diff --git a/src/main/java/se/urmo/my2dgame/main/UpdateListener.java b/src/main/java/se/urmo/my2dgame/main/UpdateListener.java new file mode 100644 index 0000000..668e65a --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/main/UpdateListener.java @@ -0,0 +1,5 @@ +package se.urmo.my2dgame.main; + +public interface UpdateListener { + void onUpdate(); +} diff --git a/src/main/java/se/urmo/my2dgame/object/Key.java b/src/main/java/se/urmo/my2dgame/object/Key.java new file mode 100644 index 0000000..9ceefa5 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/object/Key.java @@ -0,0 +1,18 @@ +package se.urmo.my2dgame.object; + +import javax.imageio.ImageIO; +import java.io.IOException; + +public class Key extends SuperObject{ + public Key(int x, int y) { + name = "Key"; + worldX = x; + worldY = y; + + try{ + image = ImageIO.read(getClass().getResourceAsStream("/objects/key.png")); + }catch(IOException e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/se/urmo/my2dgame/object/SuperObject.java b/src/main/java/se/urmo/my2dgame/object/SuperObject.java new file mode 100644 index 0000000..6fc9604 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/object/SuperObject.java @@ -0,0 +1,26 @@ +package se.urmo.my2dgame.object; + +import se.urmo.my2dgame.main.Screen; + +import java.awt.*; +import java.awt.image.BufferedImage; + +public class SuperObject { + public String name; + public BufferedImage image; + public boolean collision = false; + public int worldX; + public int worldY; + + public void draw(Graphics2D g2d, Screen screen) { + // Only drawImage for tiles within camera + if (worldX + screen.TILE_SIZE > screen.player.worldX - screen.player.SCREEN_X && + worldX - screen.TILE_SIZE < screen.player.worldX + screen.player.SCREEN_X && + worldY + screen.TILE_SIZE > screen.player.worldY - screen.player.SCREEN_Y && + worldY - screen.TILE_SIZE < screen.player.worldY + screen.player.SCREEN_Y) { + int screenX = worldX - screen.player.worldX + screen.player.SCREEN_X; + int screenY = worldY - screen.player.worldY + screen.player.SCREEN_Y; + g2d.drawImage(image, screenX, screenY, screen.TILE_SIZE, screen.TILE_SIZE, null); + } + } +} diff --git a/src/main/java/se/urmo/my2dgame/tile/Tile.java b/src/main/java/se/urmo/my2dgame/tile/Tile.java new file mode 100644 index 0000000..3f730ad --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/tile/Tile.java @@ -0,0 +1,8 @@ +package se.urmo.my2dgame.tile; + +import java.awt.image.BufferedImage; + +public class Tile { + public BufferedImage image; + public boolean collission = false; +} diff --git a/src/main/java/se/urmo/my2dgame/tile/TileManager.java b/src/main/java/se/urmo/my2dgame/tile/TileManager.java new file mode 100644 index 0000000..c458d44 --- /dev/null +++ b/src/main/java/se/urmo/my2dgame/tile/TileManager.java @@ -0,0 +1,98 @@ +package se.urmo.my2dgame.tile; + +import se.urmo.my2dgame.main.Screen; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class TileManager { + Screen screen; + public Tile[] tiles = new Tile[10]; + public int[][] mapTileNum; + + public TileManager(Screen screen) { + this.screen = screen; + getTileImage(); + this.mapTileNum = loadMap("/maps/world01.txt"); + } + + public int[][] loadMap(String path) { + int[][] map = new int[screen.WORLD_MAX_ROW][screen.WORLD_MAX_COL]; + try { + InputStream stream = Screen.class.getResourceAsStream(path); + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + int row = 0; + String line; + while ((line = reader.readLine()) != null && row < screen.WORLD_MAX_ROW) { + map[row++] = Arrays.stream(line.split(" ")) + .mapToInt(Integer::parseInt) + .toArray(); + } + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } + + public void getTileImage() { + try { + tiles[0] = new Tile(); + tiles[0].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/grass.png")); + + tiles[1] = new Tile(); + tiles[1].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/wall.png")); + tiles[1].collission = true; + + tiles[2] = new Tile(); + tiles[2].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/water.png")); + tiles[2].collission = true; + + tiles[3] = new Tile(); + tiles[3].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/earth.png")); + + tiles[4] = new Tile(); + tiles[4].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/tree.png")); + tiles[4].collission = true; + + tiles[5] = new Tile(); + tiles[5].image = ImageIO.read(Screen.class.getResourceAsStream("/tiles/sand.png")); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void draw(Graphics2D g2d) { + int worldCol = 0; + int worldRow = 0; + + while (worldCol < screen.WORLD_MAX_COL && worldRow < screen.WORLD_MAX_ROW) { + int tileNum = mapTileNum[worldRow][worldCol]; + + int worldX = worldCol * screen.TILE_SIZE; + int worldY = worldRow * screen.TILE_SIZE; + + // Only drawImage for tiles within camera + if (screen.isWithinScreen(worldX, worldY)) { + int screenX = worldX - screen.player.worldX + screen.player.SCREEN_X; + int screenY = worldY - screen.player.worldY + screen.player.SCREEN_Y; + g2d.drawImage(tiles[tileNum].image, screenX, screenY, screen.TILE_SIZE, screen.TILE_SIZE, null); + } + + worldCol++; + + if (worldCol == screen.WORLD_MAX_COL) { + worldCol = 0; + worldRow++; + } + } + } + + +} diff --git a/src/main/resources/maps/map01.txt b/src/main/resources/maps/map01.txt new file mode 100644 index 0000000..e140f93 --- /dev/null +++ b/src/main/resources/maps/map01.txt @@ -0,0 +1,12 @@ +1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 2 2 0 0 0 0 0 0 0 1 +1 0 0 0 0 2 2 2 2 0 0 0 0 0 0 1 +1 0 0 0 0 2 2 2 2 0 0 0 0 0 0 1 +1 0 0 0 0 2 2 2 2 2 0 0 0 0 0 1 +1 0 0 0 0 2 2 2 2 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 +1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 \ No newline at end of file diff --git a/src/main/resources/maps/world01.txt b/src/main/resources/maps/world01.txt new file mode 100644 index 0000000..c1178b2 --- /dev/null +++ b/src/main/resources/maps/world01.txt @@ -0,0 +1,50 @@ +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 2 2 2 2 2 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 1 1 1 1 4 4 4 4 4 4 4 4 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 3 3 3 1 4 4 4 4 4 4 4 0 0 0 5 0 0 0 4 4 4 4 4 4 0 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 3 3 3 1 4 4 4 4 4 4 4 4 0 0 0 0 0 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 3 3 3 1 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 3 3 3 1 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 1 1 0 1 1 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 0 5 0 4 4 4 4 4 4 4 4 4 4 4 5 5 5 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 0 0 5 0 0 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 0 0 0 5 0 0 0 4 4 4 4 4 4 4 4 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 0 4 4 4 4 4 4 4 0 0 0 5 0 0 0 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 0 4 4 4 4 4 4 4 4 0 0 5 0 0 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 0 4 4 4 4 4 4 4 4 4 0 5 0 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 0 4 4 4 4 4 4 4 4 5 4 4 4 0 4 4 4 4 4 4 4 0 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 4 4 4 4 4 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 0 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 0 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 4 4 0 4 4 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 4 4 4 0 0 0 0 0 4 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 0 0 0 0 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 4 4 4 4 4 0 0 4 0 0 4 0 0 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 \ No newline at end of file diff --git a/src/main/resources/maps/world02.txt b/src/main/resources/maps/world02.txt new file mode 100644 index 0000000..81681ac --- /dev/null +++ b/src/main/resources/maps/world02.txt @@ -0,0 +1,50 @@ +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 4 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 +4 4 4 4 4 4 0 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 5 5 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 5 5 5 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 5 5 5 5 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 5 5 5 5 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 5 5 5 5 5 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 5 5 5 5 5 5 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 5 5 5 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \ No newline at end of file diff --git a/src/main/resources/objects/axe.png b/src/main/resources/objects/axe.png new file mode 100644 index 0000000000000000000000000000000000000000..68fc0a538daed6984743995b7727a3e71ee7af47 GIT binary patch literal 6807 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/boots.png b/src/main/resources/objects/boots.png new file mode 100644 index 0000000000000000000000000000000000000000..d75f642e8f71ba43b119db6859e89a173860f732 GIT binary patch literal 680 zcmV;Z0$2TsP)EX>4Tx04R}tkv&MmKpe$i(@I5K1nnT=kfAzRkSgLRRV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOibkx9)Hhls^u2g@DIN`^{2O&nHKjq-)8 z%L?Z$&T6H`TKD8H4CJ+yG}md4B90{_kc0>sHIz|-g$S)0DJD|1AM4^Dar{Yg$>b`7 zkz)Z>sE`~#_#gc4)+|g#-K0Pa=y|d2k1@c%3pDGt{e5iP%@e@;3|wh#f3*S3ev)2q zYvChcU>mr&Zfo)$aJd5vKk1SoIg*#AP$&TJXY@@uVCWX;TXTDB?c?+T$WT|yH^9Lm zFkYnW^)B!3?d_CX>@2HM@dakSAh-}0001gNklj}=z4#3HA6b13&bjjpLjU=E zj)8%Jf#Lj`7zPFg21XWq*59~!j`m()A!LJT;x!chpU>xD&Szj?U|?XPG!`f}fQ1A< z6EpxN+K{7;7z6%CR$n7Z1I{qGaq}EJk>CQ@8~^||QYkH#G;dM> O0000EX>4Tx04R}tkv&MmKpe$i(@I5K1nnT=kfAzRkSgLRRV;#q(pG5I!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOibkx9)Hhls^u2g@DIN`^{2O&nHKjq-)8 z%L?Z$&T6H`TKD8H4CJ+yG}md4B90{_kc0>sHIz|-g$S)0DJD|1AM4^Dar{Yg$>b`7 zkz)Z>sE`~#_#gc4)+|g#-K0Pa=y|d2k1@c%3pDGt{e5iP%@e@;3|wh#f3*S3ev)2q zYvChcU>mr&Zfo)$aJd5vKk1SoIg*#AP$&TJXY@@uVCWX;TXTDB?c?+T$WT|yH^9Lm zFkYnW^)B!3?d_CX>@2HM@dakSAh-}0002ANkl*P|w>(}0neb`G#zqG$_!L0{ieck4XH)~x)cwbXH%@cL%0|a5FdGO(VU&e5)~IB` z7YiGwIb(!AEE+Mw03Dpz`VeO{A{)ZQKp_}-16YVjEEtIliOmR&PqG03FLgmr3DipG P00000NkvXXu0mjfd($(4 literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/chest.png b/src/main/resources/objects/chest.png new file mode 100644 index 0000000000000000000000000000000000000000..64e06cd9fb09220e694eea605fefbd0d8d3f4ee0 GIT binary patch literal 6279 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 Y0356ttx#LJ-v9sr07*qoM6N<$f&w26e*gdg literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/door_iron.png b/src/main/resources/objects/door_iron.png new file mode 100644 index 0000000000000000000000000000000000000000..24e699e87036347623d4a971f5175a02bf489e86 GIT binary patch literal 5946 zcmeHLd0Z3M7EVij!3bKOrHG=WK`RxLOeTAp01^U332TbLv$e_0WPxl>1`=qch>GII zBCgnqqPDe`x>O4m>r%D0;!>=*fQkrcEpDZC*S_kQO)%RT4J zohgWmiS(omrBNspPi0hi0{DHA{J1|4zKelzn5LQ|9i)p(X3v=?7Q(M}HaXh)Gahj6N>?{NpwTqP(=Q zJ@di6FU~*Qz3-(R1LB#jrP9hGd0Sq=oeoJ-Z19F0_I>lubjJzL{3z(V>e`yt;drg_ zvkpPn7Y~GrC2R9iYR&~>2MZ(bZ1UbL3pzc*{r$yL8wQyadm1Wil|S7K#E#9X*t(rL zi@Et8dp16&fLA`K{f)%^jVGxJX#+v14^N1fx@Gsb{M3+?AKN%{Z-xH+u?fpUO7b`r zdM}}HwYOLNFXNhNHPrD{l-Le|`o4E<;il?uE{#5M%`g4KZ^yeiV&}=;`K~biX6cC3 zZIfc|ycxfJKXrppTyiU(wZu2)`hly9?^HxSu*Y zSfTHyzb1zz-eRs^NJ%+k;tSfZ-d%+W+4e;qS?AneUsgUZskyx^nDubogL1>X6mIz0 z%H-Yb4}3j^uU4Nzd~%PT98SO8EARi=z*3xf_sr zU7xXV+ozOQ@~*h+qe6F$E{Q6rfrGr74NZwn;t5UDCykm@JglaLUP7V1L1}PC7_YP* z_;85zNXp!jxJ81w-W$VaNBMiU70E}9_u%Y*iJw}#X{2(?o`gEyF3YNT(OL3(9Dm@s;c5ly^c}q-V&M?? z{1`v#o9$Oyf?M12cI=(M^4scyt3e0AS3zT8WALi_wr|Q=+D~X_XzP7S{RKpj3CoH2 z%}IO~e7kzJS6E8eyB+UYOHccsaZFy_Z+zogMd;lV)Q|2b{X)JckJ=y9dxM9U)=WHu>n6GAN-Z~4(|s$y?5L#CR*nPZ@oI;VMxt7_uuAizUMO_l=}0; zp}Ber<+&L~xjarOmp`gHP-`ou7R#c(4)xnNIdR{hRKKx-%|)v+H`B*72fi^jZ)RPR z;rQ;BI<}#%Xib%fR@sjl^71DGS%r~M zsQz&~yji?%*vmKmaiezKTKn1212>hdd2!|7!ePX?=E%x}tesO>lCjroi;9(p2G5$k zPfI;Gymoy4c&W-SNj?APnHvt$E;0|Nt=*q`tA*{+vUL&fgmD35!Kjf%Gu(aorSa2d z27Ws9wO129_wTq~D0(=u8pRjwKCmfwj5=z8|NTKZj`Ww;y?SO%sK=$8O;-vz<$51O zz4_j~liSKh=ll0uP&IBgmv9V6&kOmDQv7}vhs$)Foi8Dk<}1*vRu z%wUYl#<9fg7&Vfej)+l4NH9(6lmG%VMri0xv&mwYIAshMuLS%jr`Zg;3qqvJ7|E(Q zy4;FmbRLVxf|v@YF%xD4)96wh)kzYA6sfz2CA;YLQ znr$u#65Sh#BHcJ!25xd;P=t+{Ff%a34wyN8@Ptv@P0*tLQp zk_f=50qJHmYxEe~X3@JA$c>QzcR*-0WOV>$*F5k>BF8ZeVa3%}t4YQnt)-KcuA-t# zyUIlpZADyyE-;3Y71vdBVH!Q#HI%ZS1pWh4qQUC0{C7M(&~BD-IN`A3>9KgMHVs3F zC-XcG+|85#x}BZCvy^}0)bDW8&V-EuvQ|8+m;OX-O6RDvC7Fz_P|@kGHXzX;o#D4@ zGBMP(1t5-{ONc>Z(PNvo84~J5e^NGjnji10Q(Gz%eBw+z^?pzt*14bqn1ap{>81z9k3`_WY3Cv@3 z?snJi|2^)Bd5D1*y^bdRg%2qk=20*U?~ z?m+?wfrLB(6A|+vvJJtYlW_!0Ap{8#n5Th-@b7Ztuek?v$=%}$B|O0+_oQs{`uHeU zrQ{VvrIPf{W+{1vktoSFl9*w$nT#0TH_IPY{eQsqlJDv;ecNt4**3e!^f!uk05W;y&&*RqN=K@yx{7oEz~8V0W(Gg1r6|-djB?O#r)R}hp%6l zUy*;OE5qK-`!@jy Bgroof literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/heart_blank.png b/src/main/resources/objects/heart_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..a26c81bf2498b686fca575935701a63d39c4d1bf GIT binary patch literal 7168 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 E2lJ)uIRF3v literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/heart_full.png b/src/main/resources/objects/heart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..409777154e0f4e62a84de8e5d7b6b975bca027da GIT binary patch literal 7597 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 G>Hh-#7md{b literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/heart_half.png b/src/main/resources/objects/heart_half.png new file mode 100644 index 0000000000000000000000000000000000000000..42224adbe4f229a123276921b3ac508577191ec0 GIT binary patch literal 7499 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 W8A#;DBsMUULXr4~`fc}(oAqx?k3kUt literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/manacrystal_blank.png b/src/main/resources/objects/manacrystal_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..057c189736eab286cee39944c8e81c2a6610681a GIT binary patch literal 5583 zcmeHKc~}$I79T2vMJN;~i&71twoqU81d=piku}x;g;W+%naoTeC7a1W0?M-$e8?i; z25uEgvDI4jDb)`PT2T-zV2g?h3Z-Z*txwwmKCBzP6AO-RbR!n42E;&;u)^4Kk&Yvt%2Qtmy!xX+dR=$@=IGuZHKh#~jzjpCd{idx~@q1(^zlh#SaYaK&DSuyP za`f%$HHy|779z{aTjB4#C*FKu+DP?*kIwyCBrhpi zbnYeBq}~*d5r{cO6FiFyDUwSM@Ko( zF19m&~+->qucXD@+0u55a1cjt|PH*e&9*caKs*kWw5t3y#v zs{OSHN2=5D+-BF3Gxp4x?;p)2?YATK+UuJvYP+*swp__j|Ja``{W7#xzEAyPrf2Y~ z{!142vppCyHZ*OMIN7$ZLM($kTf_G#=dJAK?+W&t-<9VjwOEG4^zWJ-oyAngIDL06 z1LBI=tq0C~=dM_t@AXym2brg{-Ba*W*uK9@H;y)zW$>&W{OkHdZJ0IXA4N=GIKpi5 zh;J9Kb>6F}j4ku~c)ji)XYJcO>)9M#A9}V!tsY)*aiHQ*N_k+jTf#EiSrt;~ucIN)$vDJe6k(aYhdn;Y-8UYc_Lr`sOuPhI?M&gKwq(NNx;;w0IOs?N&D z9K)5d=GbqyR-LWjZU~*G@7r-Z?rh9@-S93+e`cD;~&58DYEM==!GE{dx=U{`X&Zx>Qw-?jCE|yJl?r zhowQAf2rc!pK94X-OhMqWjO>{aIk>Pj4%7d?d&gJi${O? z^%m`TZNu01`8gZ5o`R~Pge~|9N*{S!_viTOyG`En*Sikr2bSc~qVBb3c7Gpm+N$8b zkd4-?8*cKJ?f>SaZhCF?ht4rB1uwtz(X!QF(-fiYF8I=Pg&0Gf>)NWNMRkGn|d`d*y@c}TO1!)e_78Rj$fyaW7y$G zFaEp5*Xg3wH14GbfroCKv?U9tBqX;j-ZiDRs^&s+@@<>JOC;Lf1)CeJQ*J_eF<+oj zrLTT7^26}4yPmo6ZXR`3Ip;6;ZNAIPh0dJo8gkHTZAxDDUD|u4xA(@8`%6FW{?^eg zU$>%QII0GM9JeY!D@~Nl6CfHD4MsIGjAm46L92xzVUSS^BN-S@mSJfMwTSX_{g)K7 z0u@mbxDtj$8;YeXqH=Utd``3!$;m+YC?zP+PG}SW0u_eCWTQ%{)(eaxiiuYM{u9G= z3fTm~Gend`Nh~>3qr=D?8i&T9h8q=GEJ~mqS*Szhg1E4V2?}r}qNL-vRzRm43P~{!3oPWnYf5T0rTVu zaxja88^Pd&1LE35ug6ik7+i3`dH{gVVla4A28+t#)6MO{tVA+tt=3Pd2=t^IVJ)3W zW6)Kq$1L=Cc-A9-PqffW!HGtX!}OX=9fE~tVQSpR+^JTXsWf%C^CuDX6lqC42sY(C8h#_=m9hHF+8r2KiZ(j)39sW?nTA>tLF8bpB#On*5H78i#78B~PL!KfS_%A?8< z8Ae5zC>xf;42B$Gm{EzMjqf>$MQm9dlLH`IWRj9Cd942IA`g3?p9-qbGvsgS1 z+suAGrqhEoCs>&b8jEEzM-f2;;DkZCDO7M8M%Sv-OcTV$2*7fHv@lT}fY~$-RwD@2 zVKA=INi`a!h(g3hCMZosMHWt!i(sAxF&Ub`7)n&!M9s~C)99v4A^mCKKQP6oYYgiD zjpq?`k|jik8#KC%7+s9)T@1mW&hsSjBvTydc6wZwE&h{5{Rd7sp0H8CR-?-{^B<2b z8NV8DNlJxDDl*yB1_UrNF25em!p8Fh=r}%wq{Heo4D{QHVtY8QctRp`IDB>h%me9* zfW+e?d;c&&PSwa-jU-+8HzQ51|pnmS;ne=@w*K@g^Nr7hqKhLh`ay^p*&jfy+ zUH><^>>fRGV`^~UX8;e>&WD2sz{5C6_EuyVG)BC)ANgb*7_rqxCFvoE=0kiej5~s| zz@RlQmV{eho8n1wWxld<%j;ms6Aw?sLp3VmDGHjnTPGV7csiN5wNH5eMRx!S6NiOJ zd2LAQcIIuzW}bylV8`p4hE(FkxKK{6aoc@ujG-MmIduiCao47D?|JJ zaB^>EX>4U6ba`-PAZ2)IW&i+q+TB)Lmg^`C{MRaG2}t6(9KdkS-N7t>3XJU}o$gNe zCFezHy zhe?*b!Hzz!aax=3G5>IM?v&AU*NdE&z1-W&awzf9(TYHM-`Q+y!E&UsBC`9qu84e! z;qGW#T|3)lir3F-5brz(i`t3_!6)>i7#o1+HUjNc(sbl@Ku^OlKBfv{lBTQ%wW#b- z>iCIfw2E5P5hn69xoKie6L$#2GMHH`{fqdtLfj>2(oG{oP@xrtSTw zONOEm#$ayLm<2+(FHFHGO^Epf`t}*bDj0MV=7mLXH}3bkWBU zV@xq8NlLh;T|z#lm{Q6an`U^+tX)ey z@FoC$;r%M^PmrV!@PCc+X@5kUwtKW+K>0b^6u(3J1=I)HByU2S@~_bTh$%gj`)|}u zL*DPen})pKpzf*cr$oG>=398_r)vHTOnTuCxzPRsO!|p>@4>vEOTWLU?_s1X4Zp?n zOBm@@fWB+#GbDeC7QN|1``l4?$LFnBB-VAAeL)+&DWJdIQO7^RME?PH!Cb|xhb*lC z00D(*LqkwWLqi~Na&Km7Y-Iodc$|HaJxIe)6opSyr6LsvJE$mRs7@9{MZ`&}SOg2D ztfkB}flrLmlRyc2QR?Ah^?32GRnA28LT&EgB3`>Y30TD8)D4`4s5!y9UOeE<% z>fs-B{0VZ&eSad^g zZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{004GLL_t(I%VS`mG58O~H~}L*&6&$z zFfcGMFiek>z^RrApXO6f7#L1HVPH_m+|Gc@CD=^;Z`=*B*-Qpv00RR9!`pl386Hgc z#L$Dw1t^;F0VYaAdDH+r2Ap~Vi3vggS4xDZ1$=3MU{Z#rK%APXl9?z50MnuEX>4Tx04R}tkv&MmKpe$iQ%hAU4ptBm%urplAS&W0RV;#q(pG5I!Q}c0O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMxx6k5c1aNLh~_a1le0HI!HiqSCvD5|L^ zq7gBjSrz@S=t4hy7{jo{3@w&iOu==0-NVDzyD-mkKlkV8$>t0Octqkkrs*c}2Jy_M zsd3&X4zi+@B|aw}*Xe@9k6f1>e&bxQS>TyLJ(ZXz4ibxnHkR9%6?KJpnmCkIRLU39 z4re)UaaPJz*1RWwVIZfjB)Lv=2vIB{hB!pXsG@{2OoVAwNimS1{fLWy(Duj4C6lWJ zMvetkpg^+y;D7MDTO&U;=_CarfbYe!K1KllF3_l1*7vbxHBJEUGjOH0{FOQ|`$>AO zrG<`w-fiIGx~0i`z~v4w@T5t)WJ_L}LOu_?pV2pEfWBLxd(G*sxsTHaAVpm*-v9@P zz-WQ8*InM-+1}f~XPW)}0H3FFxnw)lJOBUyg-Jv~R5*=eU>In?h(+u_DeBP${^#W6 zFfcGMFuZyF8bkMrl`Apy5aoiLoE*4;=!Rf302}y^%Md1FG*>#SGEA8=g+WAAlt}wf zHUDQoc^Gd7!10tlBnN;G2! d6ltau006z#J!ELja4!G=002ovPDHLkV1f-g1qJ{B literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/potion_red.png b/src/main/resources/objects/potion_red.png new file mode 100644 index 0000000000000000000000000000000000000000..eab181631310d645b2e8a6e89899861fde528253 GIT binary patch literal 6388 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 GoAz&O`zyTw literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/shield_blue.png b/src/main/resources/objects/shield_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef2cac4d1bd1530d4ab6a4615f547ace325594c GIT binary patch literal 6673 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/objects/sword_normal.png b/src/main/resources/objects/sword_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..666952d1901b45ea79e93908bb5db698bcb4383d GIT binary patch literal 6592 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 Apa1{> literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_down_1.png b/src/main/resources/player/boy_down_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4807748a32a0d87fc8b5401f7943d650c6086b59 GIT binary patch literal 5968 zcmeHLdss|c8=rJlA>DLv7?UKL`!vmrrgWq6G?i|;(w;qgYBaZIre=yIhTV#$Zr?; z`s+WPsr&Jk#Y3$`rf71Vr0i#tl$eX{9I^NRijGT(hAxcDkWtiG-~|L|g@%A5l_9!o9t#zn-vINg)>ineGDeeJ>`nn}WnH*F~|E3rxAXSR!>O}yf+tJRKPV(#j~y_Vwtti$+BwSMM_oYc298 z%r^OXb|rh~mzF&_bi)H=jyZVKwW!{zJtx69@U{;)@!090UY|~;RmH3(^UH-3ZH-!7 zMOgE~aE;1hXeK6DWqR?8?FY}^T>7LjvflfKpOKqt?$Zv#7s>Yaf&Qm1or)UQHMVSH z$;zA^ZJV+&ciTPE%cR0h%bK1$lr+kA9M&z+{uk8D@X@HnCPngs+qc;s*AMdV*PfkN z+EA4lp0?z0hGCnY%O~1^N?iElcqGdAz$2YZ%^B^NWd0}i_l?>(r9oi7OecwQvL`Y4 z!R!hwCwp;yneph_qQ#>3MBDsYC-3;Gjp13xPSkJdUb{)RCav4h^j-dz-nabo?*~k` zf|e^C-c2)p9jbdg$(EJd8?y4kf-50AvdD)nZoiP3l2-dFShce}ik|XcnvR^K-51uDYvDO>XuXlkHxa zpYrPTyD62~GWAEnsktRO$09=PaHZzsgsFMW#ivn&cNzm9MMyRtxsHj9Pw~pAZA^M{ zWlFciE7T!VEuhWbmx$3Y54uo2t@e|1)3ibAM%x)Th&R?b6uZ{x9>O;D1P0iYNCR4< z8g~{<-}>%QI#^1dzqcT-b@Q|050BO*zZ;Lfi!rJ$zF+SwZ|ivF z7xgqLPT-vqD0;lAw?xBc+1RYhxLDiuckR|*iv&ImJe&XW_ycp?m;<*G(cLRgoYq!# z*kEdcK&Y(YIy!nV934MzTJTo2Gj=20<${M{g1cAlEF;Z1i8OZJF3ZGZ$^xU5kiEr5 z0g<@q$5TmM7tf%{>bK(J?NWR+Cxiz79;9ynO7miUJ>#15f^w`yabnN8uGpQu4fjv? zBla!?@>{G_^0q@c9eDhXKqJ*ZA0=chRU4nQEe2Jwb#?cLvUTfU$`CXpD zjXtLi>i$W_JsLfA`*S62=3|d$u7w} zSdN*a+3p!*XXnp*?{E`Jcw-z|;t3YmzSoJ5=9|?=<}bW>bd6eu-n8tsgjq-Qa)V7P zost{CDW8C~7~>`YuU-uUq&EJCG~hyRSR*2m&!~Cl@|M{FtsZ zP{_vsY#|H6$oV4pkU=19?BpT<42Psh78J@A&`~c>ok1bFY&vR@6%)r4IYMDvml!eR z731a&#)N}ZHpvSi(pt9fg9&k;CNhDCjJQJBJ-8+Ddwf zl#OM;4H7&b7=R_gfe3oN9A&D?j3_{LPkU(lW(y53SDH-WAQUWQulyURe94s7^((_20`3$DV7aN6) zp=pUQ7Nd{Fcpgeu_#0q8_fcVAesb{31}8XrJ^a;I4YjSvbMIe;wY&U>p-*j zV9-$n4DM@>2M>^PgknBiUR(iND3g30^5*g(FDamq4NoTG$YcV6h$B%6I5OcY$QKez z;51jT;&B+l&AQZxi1ffb3#lq0w>A=zgit2!wmHqH+XpUkCkP5}# zLLrZiQbdbXP%4WGX)|0dG*=<0G*p5iwxZ&OYt8`(#VVUN*dKxa!sHbulnMSfp0Cg^ zEcRllOehX_7rV2TLZI}=Jl_Ldl)Wb%xN6{FHMD&UjiFjN{ z{H;!(^X9+cM%WMM=--)-gbi6c3PsUy6^BXPWr82N{|<17!IcX_0*UZPp^th>_n^$?4gV@&E|+XZJp0(=4+>aKbCZjXMeN*ZmCe5V{%xt(6)z3rBhK_xfiLYh z{<#9ChWt)S3zWz0U4_ z#M%C;EuEgzZXPm=4ZMHAqt2=MxRL*)wO22;v{%?1U5r-o`A#wi(1aJig literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_down_2.png b/src/main/resources/player/boy_down_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff298c2a3ee3e53f0ce4ef63892401f05130dab GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_left_1.png b/src/main/resources/player/boy_left_1.png new file mode 100644 index 0000000000000000000000000000000000000000..85d10ad33f68d5ab6bac832ac733124671e44549 GIT binary patch literal 6068 zcmeHLdtA$H8y}sNc$Rcf4m0vdt^KyP+NPCkv88D$N{W8leyeFG+p1MhPNAaY7}7y1 zhtNSD5{XCUaVUBmLP-ZjL`4aa_qP@DK3>o3^LgL@^!cpqzVGk#y{`LvU)ObSzc}{% zxuf*V^biQdC?Sw{j!gfzszCk&YTw{+;M%g7e>b)dOlAtJ@anl zr2UL5#VE&!ysm=kIj%_hb@%&Kb84TTwduA=>3&+|%*M@0+tpO_-e1yvc^h*}-KNQw z&*nHjj19fFYt!Upjl|due!DV?^l_Eu{BaCh%=653HDhIaxesi&zV&S8wTyrLoPsEM z+7J_GW`2iccvFA%rR&q@Bb!1iCb%UZcdNu}&q|a2gTuH| z4V#KqFWr!|+2>lTz4*mO15&QG?d9{k$7S!UX!}U2H+vej<1Eg1^iiZq0-A0beR@TO zHInmg>0Ggf(kVCnf>pHhsSDN&pv{5B3tS{hpfn`}RnTKrydWAr#Uo-HYA2gs444&p zu}V2sV*#K|(tE=Mrj{k)rvp_BTz2sGQ2#VAJ6AAmx5$Q^yu8~Q*?3ouAl~(8xU#<> zW93?-TWneTQF+ywhBB934w27NdmZ0YzxQYeh#u*<4mEkhRO>}4N?o+;{w&7U>hb>F zIC>oJfaXEnB*R6&x-l$0TZM&J9b>G?tzK-$a%1n`bX~mSEEeYYRsWikm*JW~B;I7Z zR@&A4Hj?ElJe+xp5?1TqOI5TL9E>JrPCIt0Ir7f6Dl?H=LR@3OsCl%ztlib~>l*aq zw-N&!^tIVH2&9{wqZY(N<|%EAyGEOl+2)VDY)v(yPmYs47+?1R2y0?3?n_r@rjm(= z`kZ!qMi<*(dk`KOaBTBIR`pT44Hb6d_bsn@eKCu^Hm}vVeM}EDK9xU0;PAHMP-tTf zcU5pm{PKvT-+Gk4v|7Z9?bpbxPHy*d&8mRPX)lat_K9SHORi!_qpu?8g@u;o)X(a~ zRn*+|OP;oH?#)>p{aZd{W-dAVlzii1qI;@FN*8Wp5XE|NZ+lTu-2A+g3Tx%1`D$G4>SNQ{x|BSW% z`7;Qarx%BWtXNj;H*sR$ghf=`>~P)O_Zsv_!x7mB-xM$p8*&_v72nQoj?DJ&fTCW` z{BU?uOkKpPC#RPk$lY9bz2y0+NNjzg@e;;?nBMM{=Oe7f^n{y4nM|8;>xi6m>T!Ml z-R9s&dur=}h%KAFOG6&I)=cT_o*CH@Bk`RuW_?03v^Vrf%jt`ER+d>%e^0MFL78#s zb&$=m-Tb^i=8fsv@yLIxW>4F~$+Z)7#^p1XHZGZYrAPls$=i-4215DOmn-+CMdrWj zuYQk|ODmeJl2YzxbtT4RaHC(ZH}Ul=GUiwrJbu1;lUd(%iLA4rQA?3aP+l+}d25>7 zcX`w})~Vd33lj@(H^1cn(Hi+ara4^y_ulP#iS2CP-)4TuH>K1EOzHP{Zz9ZE!AN}F zz(yd3trO5_Y$lENsVl<0FePd$m2r_hcD=i2_6#GPnXwe!p;YVGjU-p2O#vAvjC@0Y z@U}?=0mH*@yjIQHXs1mJbxZ>NC-`YOcj}Z?Rx+zyT+d=HPsDazXo*Vct!g~ihsam} z=G-F=JCqD%HQ{i3ml$c}Jz1Z=T+<+KPXxMT_nOD=ienNx!WN{pM0H%ho%e{P{f6E| zK45O#rQLPyK(@U8*U<&rvXJS9iRQOZT~lhHT@Ohn6O5JoKmW{XjiZ%u3Zh#^^DSr= zY12kq<;;0I`wq1Jm2u$j9^7M&Z%0Oli!3Tbau$>otkc|voSeAkl*SElo9wmkIm0`XkzhR~Cy_O{xujrP=AE z;q6U56g|hm56LW zo`eJ0C`D5E7DFH$oRm_K8w@E>94JsArlLE}l%i1r9u@6PWC1KG4GI!4B4m(f#C$Jq zL@<}kLpwR@IVdSGfe2E7D5Xd!mQ$2ew3?R!e^yOn(I_=U5llt?g_j95NJMKQoZhvZzDK&lW(#3&Uf$dQC7sAx32jv6F~SGg`qcyiEzYOJQ0D|lEY zJRrdPfdN=N0FW>M9)l-ihuXudEY@dhv3yWPSWm1Hlwxr<09GXW%0jMi3H{>ln-+2} z_{##;1CmQZWL(H46cQ_@40S3MhRBEd43R^sDRtaJ9v=$_rS?43W-gP({%oU?F;F0q zsx4ILp-3M0Gfo;J6RI&hE*26(A~+B^%#8aAuMqIR9MD($QLX$f5ZK*k{;$xV^is#7 z)|En+a6?p1nRF^z6)%M+;R<*Z^+!99MBw0YBn-qQ@i7E@K8WGi$p$qgKWeY)Snd*Ht@c?L4~8zbCX}U^LK@ zgaWlxD3rPlP(bd0{Bkf9;;D}S)^T8o8w832A-LZT7Tc$J!8a0_Z)?vd5%D+-p1|i} z2zFdJhwUK{g9q$D9FD`m+wuku_%pj)!dHZWGRQd)&H?zG;o?%CGiv%^{#kw$$Thmz?vqJhQn1Hq;L-tf7kstfCCI}0xl$$OTHKSP{@ERLoOmX z=7Bl*f`ji%?B@$}FiTX0^nd&t%)bAl2blV&lONLer(8ef`XL2=2>dgwVmSga(oppphDc5^g(r0sOqPpIi>`*= z2u<(WX_w*WD_Tstvlr=V!uE{Oe*nl0A49!l0<+`vJFYXZYV3R<|j! zJkg4xENf`rGHBR^^!+Ic%GM(Lz!-88~S=X}D)n>k7+Ys)di zrT}$2{kOF24K(;`d$jb!^!EqW7(b!f;`hzFP+gQJdbHSU_-T{UEi3xVXx<`o?RO1; o6UHL2aEw!7xI=J-@3_94F7xTRvjf)t3m4Nbu>b%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_left_2.png b/src/main/resources/player/boy_left_2.png new file mode 100644 index 0000000000000000000000000000000000000000..92f39a8e0f28bfa384d3574261871cd0eb1e7fa9 GIT binary patch literal 6011 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_right_1.png b/src/main/resources/player/boy_right_1.png new file mode 100644 index 0000000000000000000000000000000000000000..247ecea4fae6769d5ffac74e32a9089341f4435d GIT binary patch literal 6059 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 drbJ%+h&?1T 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/player/boy_up_2.png b/src/main/resources/player/boy_up_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc797a91d7045c9544f124d1711b9e4d187be97 GIT binary patch literal 5861 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 TL$Lp?0f6fl>{~QBcFDg1(>T4R literal 0 HcmV?d00001 diff --git a/src/main/resources/tiles/earth.png b/src/main/resources/tiles/earth.png new file mode 100644 index 0000000000000000000000000000000000000000..9255b38a3e3598938a8caf80b93035d995d5ce69 GIT binary patch literal 614 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/tiles/tree.png b/src/main/resources/tiles/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d91bafe3e327e127353894c7ad17730246bdb0 GIT binary patch literal 6311 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 FV1n`81O5O2 literal 0 HcmV?d00001