forked from jzitnik/twodcraft
feat: Started implementing pig and health and hunger
This commit is contained in:
parent
91882fabc0
commit
e8e9d826bb
@ -1,16 +1,16 @@
|
||||
package cz.jzitnik;
|
||||
|
||||
import cz.jzitnik.game.Game;
|
||||
import cz.jzitnik.game.threads.HealthRegenerationThread;
|
||||
import cz.jzitnik.game.threads.HungerDrainThread;
|
||||
import cz.jzitnik.game.threads.InputHandlerThread;
|
||||
import cz.jzitnik.game.ui.*;
|
||||
import cz.jzitnik.tui.MouseHandler;
|
||||
import cz.jzitnik.game.SpriteLoader;
|
||||
import cz.jzitnik.tui.ScreenRenderer;
|
||||
import org.jline.terminal.MouseEvent;
|
||||
import org.jline.terminal.Terminal;
|
||||
import org.jline.terminal.TerminalBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
public class Main {
|
||||
@ -29,101 +29,28 @@ public class Main {
|
||||
var screenRenderer = new ScreenRenderer(spriteList, terminal);
|
||||
var game = new Game();
|
||||
|
||||
MouseHandler mouseHandler = new MouseHandler(game, terminal, screenRenderer);
|
||||
|
||||
final boolean[] isRunning = {true};
|
||||
|
||||
Thread inputThread = new Thread(() -> {
|
||||
try {
|
||||
while (isRunning[0]) {
|
||||
int key = terminal.reader().read();
|
||||
Thread inputHandlerThread = new InputHandlerThread(game, terminal, screenRenderer, isRunning);
|
||||
Thread healingThread = new HealthRegenerationThread(game.getPlayer());
|
||||
Thread hungerDrainThread = new HungerDrainThread(game.getPlayer());
|
||||
|
||||
// Check for mouse event sequence
|
||||
if (key == 27) { // ESC
|
||||
key = terminal.reader().read();
|
||||
if (key == '[') {
|
||||
key = terminal.reader().read();
|
||||
if (key == 'M') {
|
||||
MouseEvent mouseEvent = terminal.readMouseEvent();
|
||||
switch (game.getWindow()) {
|
||||
case WORLD -> mouseHandler.handle(mouseEvent);
|
||||
case INVENTORY -> InventoryClickHandler.click(mouseEvent, terminal, screenRenderer, game, Optional.empty(), Optional.empty());
|
||||
case CRAFTING_TABLE -> game.getGameStates().craftingTable.click(mouseEvent, terminal, screenRenderer);
|
||||
case CHEST -> ((Chest) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX].stream().filter(i -> i.getBlockId().equals("chest")).toList().getFirst().getData()).click(game, mouseEvent, terminal, screenRenderer);
|
||||
case FURNACE -> ((Furnace) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX].stream().filter(i -> i.getBlockId().equals("furnace")).toList().getFirst().getData()).click(game, mouseEvent, terminal, screenRenderer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
healingThread.start();
|
||||
hungerDrainThread.start();
|
||||
inputHandlerThread.start();
|
||||
|
||||
switch (key) {
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
game.changeSlot(key - 49, screenRenderer);
|
||||
break;
|
||||
case 'a':
|
||||
game.movePlayerLeft(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
break;
|
||||
case 'd':
|
||||
game.movePlayerRight(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
break;
|
||||
case ' ':
|
||||
game.movePlayerUp(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
break;
|
||||
case 'e':
|
||||
if (game.getWindow() != Window.WORLD) {
|
||||
game.getInventory().setSelectedItemInv(-1);
|
||||
CloseHandler.handle(game.getWindow(), game);
|
||||
game.setWindow(Window.WORLD);
|
||||
} else {
|
||||
game.setWindow(Window.INVENTORY);
|
||||
}
|
||||
screenRenderer.render(game);
|
||||
break;
|
||||
case 'q':
|
||||
System.out.println("Exiting game...");
|
||||
isRunning[0] = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
inputThread.start();
|
||||
|
||||
// Game loop (rendering the game)
|
||||
while (isRunning[0]) {
|
||||
if (game.getWindow() == Window.WORLD) {
|
||||
// Rerender the game only when default window
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
try {
|
||||
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Disable mouse tracking on exit
|
||||
terminal.trackMouse(Terminal.MouseTracking.Off);
|
||||
|
||||
terminal.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException | InterruptedException _) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -238,9 +238,12 @@ public class Game {
|
||||
world[cords2[1]][cords2[0]].add(player.getPlayerBlock1());
|
||||
world[cords2[1] + 1][cords2[0]].add(player.getPlayerBlock2());
|
||||
world[cords2[1]][cords2[0]].remove(player.getPlayerBlock2());
|
||||
player.addFalling();
|
||||
|
||||
screenRenderer.render(this);
|
||||
} else {
|
||||
player.fell();
|
||||
screenRenderer.render(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,30 @@ import lombok.Setter;
|
||||
@Setter
|
||||
public class Player {
|
||||
private int health = 10;
|
||||
private int hunger = 6;
|
||||
private int hunger = 10;
|
||||
private int fallDistance = 0;
|
||||
private Block playerBlock1;
|
||||
private Block playerBlock2;
|
||||
|
||||
public synchronized void heal() {
|
||||
if (hunger > 3 && health < 10) {
|
||||
health = Math.min(health + 1, 10);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void drainHunger() {
|
||||
if (hunger > 0) {
|
||||
hunger--;
|
||||
}
|
||||
}
|
||||
|
||||
public void addFalling() {
|
||||
fallDistance++;
|
||||
}
|
||||
|
||||
public void fell() {
|
||||
int damage = Math.max(fallDistance - 3, 0);
|
||||
health = Math.max(0, health - damage);
|
||||
fallDistance = 0;
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,9 @@ public class SpriteLoader {
|
||||
ITEM_CHEST,
|
||||
|
||||
HEART,
|
||||
HUNGER
|
||||
HUNGER,
|
||||
|
||||
PIG,
|
||||
}
|
||||
|
||||
public static final HashMap<SPRITES, Sprite> SPRITES_MAP = new HashMap<>();
|
||||
@ -91,6 +93,8 @@ public class SpriteLoader {
|
||||
|
||||
SPRITES_MAP.put(SPRITES.HEART, new Heart());
|
||||
SPRITES_MAP.put(SPRITES.HUNGER, new Hunger());
|
||||
|
||||
SPRITES_MAP.put(SPRITES.PIG, new Pig());
|
||||
}
|
||||
|
||||
public static SpriteList<SPRITES> load() {
|
||||
|
25
src/main/java/cz/jzitnik/game/sprites/Pig.java
Normal file
25
src/main/java/cz/jzitnik/game/sprites/Pig.java
Normal file
@ -0,0 +1,25 @@
|
||||
package cz.jzitnik.game.sprites;
|
||||
|
||||
import cz.jzitnik.tui.ResourceLoader;
|
||||
import cz.jzitnik.tui.Sprite;
|
||||
|
||||
public class Pig extends Sprite {
|
||||
public enum PigState{
|
||||
LEFT,
|
||||
RIGHT,
|
||||
}
|
||||
|
||||
public String getSprite() {
|
||||
return getSprite(PigState.RIGHT);
|
||||
}
|
||||
|
||||
public String getSprite(Enum e) {
|
||||
return ResourceLoader.loadResource(
|
||||
switch (e) {
|
||||
case PigState.LEFT -> "mobs/pigrev.ans";
|
||||
case PigState.RIGHT -> "mobs/pig.ans";
|
||||
default -> throw new IllegalStateException("Unexpected value: " + e);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ import cz.jzitnik.tui.ResourceLoader;
|
||||
import cz.jzitnik.tui.Sprite;
|
||||
|
||||
public class SimpleSprite extends Sprite {
|
||||
private String resource;
|
||||
private final String resource;
|
||||
|
||||
public SimpleSprite(String resource) {
|
||||
this.resource = resource;
|
||||
|
@ -0,0 +1,21 @@
|
||||
package cz.jzitnik.game.threads;
|
||||
|
||||
import cz.jzitnik.game.Player;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class HealthRegenerationThread extends Thread {
|
||||
private final Player player;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(4000); // Heal every 4 seconds
|
||||
player.heal();
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
21
src/main/java/cz/jzitnik/game/threads/HungerDrainThread.java
Normal file
21
src/main/java/cz/jzitnik/game/threads/HungerDrainThread.java
Normal file
@ -0,0 +1,21 @@
|
||||
package cz.jzitnik.game.threads;
|
||||
|
||||
import cz.jzitnik.game.Player;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class HungerDrainThread extends Thread {
|
||||
private final Player player;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(30000);
|
||||
player.drainHunger();
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
package cz.jzitnik.game.threads;
|
||||
|
||||
import cz.jzitnik.game.Game;
|
||||
import cz.jzitnik.game.ui.*;
|
||||
import cz.jzitnik.tui.MouseHandler;
|
||||
import cz.jzitnik.tui.ScreenRenderer;
|
||||
import org.jline.terminal.MouseEvent;
|
||||
import org.jline.terminal.Terminal;
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
public class InputHandlerThread extends Thread {
|
||||
private final Game game;
|
||||
private final Terminal terminal;
|
||||
private final ScreenRenderer screenRenderer;
|
||||
private final MouseHandler mouseHandler;
|
||||
private final boolean[] isRunning;
|
||||
|
||||
public InputHandlerThread(Game game, Terminal terminal, ScreenRenderer screenRenderer, boolean[] isRunning) {
|
||||
this.game = game;
|
||||
this.terminal = terminal;
|
||||
this.screenRenderer = screenRenderer;
|
||||
this.mouseHandler = new MouseHandler(game, terminal, screenRenderer);
|
||||
this.isRunning = isRunning;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
while (isRunning[0]) {
|
||||
int key = terminal.reader().read();
|
||||
|
||||
if (key == 27) { // ESC
|
||||
key = terminal.reader().read();
|
||||
if (key == '[') {
|
||||
key = terminal.reader().read();
|
||||
if (key == 'M') {
|
||||
MouseEvent mouseEvent = terminal.readMouseEvent();
|
||||
switch (game.getWindow()) {
|
||||
case WORLD -> mouseHandler.handle(mouseEvent);
|
||||
case INVENTORY -> InventoryClickHandler.click(mouseEvent, terminal, screenRenderer, game, Optional.empty(), Optional.empty());
|
||||
case CRAFTING_TABLE -> game.getGameStates().craftingTable.click(mouseEvent, terminal, screenRenderer);
|
||||
case CHEST -> ((Chest) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX]
|
||||
.stream().filter(i -> i.getBlockId().equals("chest")).toList().getFirst().getData())
|
||||
.click(game, mouseEvent, terminal, screenRenderer);
|
||||
case FURNACE -> ((Furnace) game.getWorld()[game.getGameStates().clickY][game.getGameStates().clickX]
|
||||
.stream().filter(i -> i.getBlockId().equals("furnace")).toList().getFirst().getData())
|
||||
.click(game, mouseEvent, terminal, screenRenderer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
case '1', '2', '3', '4', '5', '6', '7', '8', '9' -> game.changeSlot(key - 49, screenRenderer);
|
||||
case 'a' -> {
|
||||
game.movePlayerLeft(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case 'd' -> {
|
||||
game.movePlayerRight(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case ' ' -> {
|
||||
game.movePlayerUp(screenRenderer);
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case 'e' -> {
|
||||
if (game.getWindow() != Window.WORLD) {
|
||||
game.getInventory().setSelectedItemInv(-1);
|
||||
CloseHandler.handle(game.getWindow(), game);
|
||||
game.setWindow(Window.WORLD);
|
||||
} else {
|
||||
game.setWindow(Window.INVENTORY);
|
||||
}
|
||||
screenRenderer.render(game);
|
||||
}
|
||||
case 'q' -> {
|
||||
System.out.println("Exiting game...");
|
||||
isRunning[0] = false;
|
||||
}
|
||||
default -> {}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ public class Chest {
|
||||
int widthPixels = COLUMN_AMOUNT * (CELL_WIDTH + BORDER_SIZE) + BORDER_SIZE;
|
||||
var inventory = game.getInventory();
|
||||
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
|
||||
List<String> sprites = game.getInventory().getSprites(items, spriteList, inventory.getSelectedItemInv() - 50);
|
||||
|
||||
@ -63,7 +63,7 @@ public class Chest {
|
||||
int y = mouseEvent.getY();
|
||||
int widthPixels = COLUMN_AMOUNT * (CELL_WIDTH + BORDER_SIZE) + BORDER_SIZE + 5;
|
||||
int heightPixels = ROW_AMOUNT * (CELL_HEIGHT) - 10;
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
|
||||
if (x > moveLeft && x <= moveLeft + widthPixels && y > 0 && y <= heightPixels && mouseEvent.getType() == MouseEvent.Type.Pressed) {
|
||||
if (mouseEvent.getType() != MouseEvent.Type.Pressed) return;
|
||||
|
@ -56,7 +56,7 @@ public class CraftingTable {
|
||||
int widthPixels = COLUMN_AMOUNT * (CELL_WIDTH + BORDER_SIZE) + BORDER_SIZE;
|
||||
var inventory = game.getInventory();
|
||||
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
|
||||
List<String> sprites = game.getInventory().getSprites(items, spriteList, inventory.getSelectedItemInv() - 50);
|
||||
|
||||
|
@ -34,7 +34,7 @@ public class Furnace {
|
||||
public void render(Game game, StringBuilder buffer, Terminal terminal, SpriteList spriteList) {
|
||||
int widthPixels = COLUMN_AMOUNT * (CELL_WIDTH + BORDER_SIZE) + BORDER_SIZE;
|
||||
var inventory = game.getInventory();
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
|
||||
List<String> sprites = game.getInventory().getSprites(items, spriteList, inventory.getSelectedItemInv() - 50);
|
||||
|
||||
@ -113,7 +113,7 @@ public class Furnace {
|
||||
int x = mouseEvent.getX();
|
||||
int y = mouseEvent.getY();
|
||||
int widthPixels = COLUMN_AMOUNT * (CELL_WIDTH + BORDER_SIZE) + BORDER_SIZE;
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
|
||||
if (x > moveLeft && x <= moveLeft + CELL_WIDTH + BORDER_SIZE && y > 0 && y < CELL_HEIGHT && mouseEvent.getType() == MouseEvent.Type.Pressed) {
|
||||
InventoryItem selectedItem = game.getInventory().getSelectedItemNo(Optional.of(items));
|
||||
|
@ -12,10 +12,10 @@ import static cz.jzitnik.game.ui.Inventory.INVENTORY_SIZE_PX;
|
||||
public class Healthbar {
|
||||
public static void render(StringBuilder buffer, SpriteList spriteList, Terminal terminal, Game game) {
|
||||
int termWidth = terminal.getWidth();
|
||||
int startLeft = (termWidth / 2) - (INVENTORY_SIZE_PX / 2);
|
||||
int startLeft = Math.max(0, (termWidth / 2) - (INVENTORY_SIZE_PX / 2));
|
||||
|
||||
int heartSize = 9 * 20;
|
||||
int moveLeft = INVENTORY_SIZE_PX - (heartSize * 2);
|
||||
int moveLeft = Math.max(0, INVENTORY_SIZE_PX - (heartSize * 2));
|
||||
|
||||
String[] spriteOn = spriteList.getSprite(SpriteLoader.SPRITES.HEART).getSprite(Heart.HeartState.ON).split("\n");
|
||||
String[] spriteOff = spriteList.getSprite(SpriteLoader.SPRITES.HEART).getSprite(Heart.HeartState.OFF).split("\n");
|
||||
|
@ -147,7 +147,7 @@ public class Inventory {
|
||||
int widthPixels = COLUMN_AMOUNT * (50 + 4) + 2;
|
||||
int heightPixels = ROW_AMOUNT * (25 + 1);
|
||||
|
||||
int moveLeft = (terminal.getWidth() / 2) - (widthPixels / 2);
|
||||
int moveLeft = Math.max(0, (terminal.getWidth() / 2) - (widthPixels / 2));
|
||||
int moveTop = moveTopCustom.orElse((terminal.getHeight() / 2) - (heightPixels / 2));
|
||||
|
||||
List<String> sprites = getSprites(items, spriteList, selectedItemInv);
|
||||
|
@ -27,11 +27,11 @@ public class InventoryClickHandler {
|
||||
}
|
||||
|
||||
private static int calculateMoveLeft(Terminal terminal) {
|
||||
return (terminal.getWidth() / 2) - ((COLUMN_AMOUNT * (50 + 4) + 2) / 2);
|
||||
return Math.max(0, (terminal.getWidth() / 2) - ((COLUMN_AMOUNT * (50 + 4) + 2) / 2));
|
||||
}
|
||||
|
||||
private static int calculateMoveTop(Terminal terminal) {
|
||||
return (terminal.getHeight() / 2) - ((ROW_AMOUNT * (25 + 1)) / 2);
|
||||
return Math.max(0, (terminal.getHeight() / 2) - ((ROW_AMOUNT * (25 + 1)) / 2));
|
||||
}
|
||||
|
||||
private static boolean handleCraftingTableClick(MouseEvent mouseEvent, int x, int y, Inventory inventory, ScreenRenderer screenRenderer, Game game, int moveLeft, int moveTop, Optional<InventoryItem[]> i) {
|
||||
|
@ -74,7 +74,6 @@ public class ScreenRenderer {
|
||||
int visibleWidth = endX - startX;
|
||||
int visibleHeight = endY - startY;
|
||||
|
||||
// If the width is odd, reduce viewXRadius by 1
|
||||
if (visibleWidth % 2 != 0) {
|
||||
endX = Math.max(startX, endX - 1);
|
||||
}
|
||||
@ -100,22 +99,7 @@ public class ScreenRenderer {
|
||||
);
|
||||
|
||||
if (selectedBlock.isPresent() && selectedBlock.get().get(0) == x && selectedBlock.get().get(1) == y) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓".repeat(50));
|
||||
stringBuilder.append("\n");
|
||||
|
||||
for (int i = 0; i < 23; i++) {
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[0m ".repeat(46));
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\n");
|
||||
}
|
||||
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓".repeat(50));
|
||||
stringBuilder.append("\n");
|
||||
StringBuilder stringBuilder = getStringBuilder();
|
||||
|
||||
sprites.add(stringBuilder.toString());
|
||||
}
|
||||
@ -151,4 +135,24 @@ public class ScreenRenderer {
|
||||
System.out.println(main);
|
||||
}
|
||||
|
||||
private static StringBuilder getStringBuilder() {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓".repeat(50));
|
||||
stringBuilder.append("\n");
|
||||
|
||||
for (int i = 0; i < 23; i++) {
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[0m ".repeat(46));
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓");
|
||||
stringBuilder.append("\n");
|
||||
}
|
||||
|
||||
stringBuilder.append("\033[38;5;231;48;5;231m▓".repeat(50));
|
||||
stringBuilder.append("\n");
|
||||
return stringBuilder;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,14 +6,12 @@ import java.util.HashMap;
|
||||
public class SpriteList<E extends Enum<E>> {
|
||||
private final EnumMap<E, Sprite> sprites;
|
||||
|
||||
// Constructor that takes an Enum class and a HashMap
|
||||
public SpriteList(Class<E> enumClass, HashMap<E, Sprite> initialMap) {
|
||||
sprites = new EnumMap<>(enumClass);
|
||||
|
||||
// Initialize with values from the provided HashMap
|
||||
for (E key : enumClass.getEnumConstants()) {
|
||||
if (!initialMap.containsKey(key)) {
|
||||
throw new RuntimeException("TODO: Missing sprite");
|
||||
throw new RuntimeException("Error: Missing sprite: " + key);
|
||||
}
|
||||
Sprite value = initialMap.get(key);
|
||||
sprites.put(key, value);
|
||||
|
25
src/main/resources/textures/mobs/pig.ans
Normal file
25
src/main/resources/textures/mobs/pig.ans
Normal file
@ -0,0 +1,25 @@
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;255;150;147m [48;2;255;159;155m [48;2;255;162;160m [48;2;247;129;135m [48;2;254;148;145m [48;2;251;149;145m [48;2;254;163;162m [48;2;255;168;167m [48;2;255;165;167m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;248;138;133m [48;2;242;144;134m [48;2;239;130;127m [48;2;251;143;137m [48;2;255;154;153m [48;2;255;155;156m [48;2;252;143;140m [48;2;254;138;138m [48;2;253;141;153m [49m [49m [m
|
||||
[48;2;246;143;144m [48;2;247;137;138m [48;2;248;138;139m [48;2;249;140;146m [48;2;254;150;148m [48;2;254;152;148m [48;2;250;137;141m [48;2;251;143;143m [48;2;254;139;142m [48;2;253;152;151m [48;2;254;151;148m [48;2;254;150;144m [48;2;255;148;147m [48;2;255;144;151m [48;2;255;149;149m [48;2;255;145;145m [48;2;255;143;145m [48;2;255;157;156m [48;2;196;118;121m [48;2;200;118;125m [48;2;206;123;131m [48;2;210;129;134m [48;2;253;166;167m [48;2;255;173;174m [49m [49m [m
|
||||
[48;2;236;141;140m [48;2;244;145;139m [48;2;248;140;142m [48;2;245;136;138m [48;2;255;147;144m [48;2;252;147;143m [48;2;249;133;135m [48;2;254;150;144m [48;2;255;140;143m [48;2;253;158;151m [48;2;253;137;142m [48;2;255;150;145m [48;2;255;150;147m [48;2;253;151;148m [48;2;255;147;145m [48;2;255;150;157m [48;2;255;135;142m [48;2;255;144;148m [48;2;197;122;123m [48;2;199;118;128m [48;2;204;123;129m [48;2;149;76;80m [48;2;213;139;138m [48;2;253;172;171m [49m [49m [m
|
||||
[48;2;244;135;135m [48;2;245;135;134m [48;2;249;143;143m [48;2;250;138;136m [48;2;255;145;140m [48;2;253;145;142m [48;2;251;141;142m [48;2;255;133;132m [48;2;249;129;130m [48;2;253;133;137m [48;2;255;146;141m [48;2;255;135;136m [48;2;255;136;137m [48;2;252;126;135m [48;2;255;135;134m [48;2;255;135;136m [48;2;253;137;139m [48;2;254;140;147m [48;2;197;116;117m [48;2;193;117;122m [48;2;202;122;130m [48;2;148;80;78m [48;2;213;133;129m [48;2;254;164;166m [49m [49m [m
|
||||
[48;2;246;133;135m [48;2;245;135;138m [48;2;249;143;143m [48;2;248;138;137m [48;2;254;143;141m [48;2;253;142;140m [48;2;250;141;139m [48;2;254;131;131m [48;2;250;128;129m [48;2;251;132;135m [48;2;254;136;136m [48;2;251;128;129m [48;2;248;125;125m [48;2;244;115;116m [48;2;239;116;113m [48;2;255;133;133m [48;2;255;136;140m [48;2;255;139;142m [48;2;197;114;116m [48;2;195;115;122m [48;2;203;121;127m [48;2;147;79;78m [48;2;156;95;95m [48;2;252;165;166m [48;2;254;173;175m [m
|
||||
[48;2;249;145;143m [48;2;240;133;136m [48;2;249;141;141m [48;2;249;135;139m [48;2;233;121;116m [48;2;237;119;119m [48;2;230;110;111m [48;2;234;108;109m [48;2;230;104;103m [48;2;237;112;109m [48;2;236;109;108m [48;2;241;116;112m [48;2;239;118;112m [48;2;242;108;105m [48;2;236;108;104m [48;2;253;134;130m [48;2;255;136;140m [48;2;198;117;114m [48;2;188;113;114m [48;2;198;118;121m [48;2;141;73;73m [48;2;255;170;166m [48;2;254;174;171m [48;2;254;175;171m [m
|
||||
[48;2;242;142;144m [48;2;249;151;148m [48;2;245;137;133m [48;2;246;139;135m [48;2;248;149;144m [48;2;251;145;146m [48;2;248;125;125m [48;2;250;136;131m [48;2;241;132;125m [48;2;250;125;130m [48;2;255;146;143m [48;2;255;153;141m [48;2;254;155;141m [48;2;250;135;130m [48;2;253;138;135m [48;2;250;130;131m [48;2;252;128;129m [48;2;255;141;141m [48;2;202;125;118m [48;2;249;143;141m [48;2;254;142;144m [48;2;255;153;156m [48;2;255;154;159m [48;2;255;171;173m [48;2;252;171;173m [m
|
||||
[48;2;246;144;146m [48;2;244;146;143m [48;2;241;138;133m [48;2;245;131;134m [48;2;240;127;129m [48;2;243;127;130m [48;2;245;127;127m [48;2;245;127;126m [48;2;247;122;118m [48;2;250;117;118m [48;2;239;115;117m [48;2;251;126;130m [48;2;252;127;131m [48;2;250;126;128m [48;2;252;132;133m [48;2;254;131;133m [48;2;253;131;131m [48;2;255;140;147m [48;2;201;119;115m [48;2;254;151;152m [48;2;255;155;155m [48;2;255;162;160m [48;2;254;161;162m [49m [49m [m
|
||||
[48;2;246;147;142m [48;2;241;133;131m [48;2;244;130;130m [48;2;248;136;135m [48;2;228;113;110m [48;2;231;113;109m [48;2;233;108;105m [48;2;234;107;103m [48;2;235;102;100m [48;2;239;107;105m [48;2;220;96;97m [48;2;237;104;105m [48;2;238;105;106m [48;2;235;111;104m [48;2;239;109;109m [48;2;243;115;112m [48;2;255;141;140m [48;2;248;147;137m [48;2;196;120;124m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;242;128;129m [48;2;237;123;125m [48;2;243;124;128m [48;2;234;115;117m [48;2;233;111;116m [48;2;234;111;116m [48;2;247;126;127m [48;2;243;117;117m [48;2;244;120;120m [48;2;247;114;115m [48;2;245;132;126m [48;2;249;123;127m [48;2;250;124;128m [48;2;254;146;136m [48;2;255;135;133m [48;2;254;140;140m [48;2;253;137;137m [48;2;253;154;146m [48;2;216;130;130m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;242;146;142m [48;2;238;149;145m [48;2;244;141;147m [48;2;245;147;148m [48;2;243;156;154m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;251;152;146m [48;2;249;156;151m [48;2;252;147;151m [48;2;253;153;155m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;242;137;141m [48;2;237;134;138m [48;2;244;149;145m [48;2;244;161;155m [48;2;248;162;161m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;250;144;146m [48;2;246;140;142m [48;2;254;154;152m [48;2;255;167;160m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;239;128;132m [48;2;241;137;138m [48;2;241;152;146m [48;2;244;149;147m [48;2;246;157;153m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;249;137;139m [48;2;249;142;142m [48;2;251;157;152m [48;2;254;158;155m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;234;134;130m [48;2;240;136;137m [48;2;244;151;149m [48;2;246;150;149m [48;2;247;153;150m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;250;133;138m [48;2;250;142;142m [48;2;249;158;153m [48;2;254;154;152m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;238;151;138m [48;2;237;139;136m [48;2;243;139;140m [48;2;240;136;136m [48;2;239;142;146m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;251;156;143m [48;2;245;141;145m [48;2;250;144;146m [48;2;248;140;140m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;234;130;126m [48;2;230;116;121m [48;2;234;128;128m [48;2;235;131;130m [48;2;230;135;135m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;244;136;131m [48;2;237;121;124m [48;2;242;132;133m [48;2;246;136;135m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[48;2;240;128;126m [48;2;236;131;128m [48;2;237;128;125m [48;2;243;128;131m [48;2;233;127;131m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;249;132;132m [48;2;246;137;134m [48;2;246;133;129m [48;2;251;132;134m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
25
src/main/resources/textures/mobs/pigrev.ans
Normal file
25
src/main/resources/textures/mobs/pigrev.ans
Normal file
@ -0,0 +1,25 @@
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [48;2;255;165;167m [48;2;255;168;167m [48;2;254;161;162m [48;2;251;149;145m [48;2;254;148;145m [48;2;246;129;133m [48;2;255;162;160m [48;2;254;159;155m [48;2;255;150;147m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [48;2;253;141;153m [48;2;254;138;138m [48;2;252;143;140m [48;2;255;155;158m [48;2;254;155;156m [48;2;251;142;137m [48;2;239;130;127m [48;2;242;144;135m [48;2;248;136;132m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
|
||||
[49m [49m [48;2;255;173;175m [48;2;255;166;165m [48;2;210;128;134m [48;2;204;123;131m [48;2;200;118;126m [48;2;196;118;121m [48;2;255;157;156m [48;2;255;143;145m [48;2;255;147;145m [48;2;255;149;149m [48;2;255;144;149m [48;2;255;148;146m [48;2;255;151;148m [48;2;255;152;151m [48;2;254;139;142m [48;2;251;143;141m [48;2;250;137;141m [48;2;254;152;148m [48;2;255;150;148m [48;2;249;140;146m [48;2;248;138;139m [48;2;247;139;136m [48;2;246;143;144m [m
|
||||
[49m [49m [48;2;253;172;171m [48;2;213;139;136m [48;2;149;76;82m [48;2;204;123;129m [48;2;200;119;128m [48;2;198;123;123m [48;2;255;147;148m [48;2;255;135;142m [48;2;255;150;157m [48;2;254;147;147m [48;2;255;151;148m [48;2;255;150;147m [48;2;253;137;142m [48;2;253;156;149m [48;2;255;140;143m [48;2;255;150;144m [48;2;249;133;135m [48;2;252;147;143m [48;2;255;147;146m [48;2;247;138;139m [48;2;248;140;140m [48;2;244;145;139m [48;2;239;141;140m [m
|
||||
[49m [49m [48;2;254;164;166m [48;2;213;132;131m [48;2;148;80;79m [48;2;203;122;128m [48;2;193;117;122m [48;2;197;118;118m [48;2;255;140;145m [48;2;255;137;139m [48;2;255;133;136m [48;2;255;135;134m [48;2;252;126;135m [48;2;255;136;137m [48;2;255;133;136m [48;2;255;146;141m [48;2;252;135;137m [48;2;248;131;130m [48;2;255;133;132m [48;2;251;141;142m [48;2;253;145;142m [48;2;253;144;141m [48;2;250;138;136m [48;2;251;143;141m [48;2;245;135;134m [48;2;244;135;135m [m
|
||||
[48;2;254;173;175m [48;2;255;165;166m [48;2;156;94;95m [48;2;147;79;78m [48;2;203;121;127m [48;2;195;116;122m [48;2;197;115;116m [48;2;255;139;142m [48;2;255;136;142m [48;2;253;133;132m [48;2;239;116;113m [48;2;244;115;116m [48;2;248;127;125m [48;2;251;129;129m [48;2;254;136;138m [48;2;251;132;135m [48;2;250;129;129m [48;2;254;131;131m [48;2;251;140;139m [48;2;253;143;140m [48;2;254;143;141m [48;2;250;138;137m [48;2;249;143;143m [48;2;245;135;138m [48;2;246;133;135m [m
|
||||
[48;2;255;175;171m [48;2;254;175;171m [48;2;255;170;166m [48;2;141;73;73m [48;2;198;118;121m [48;2;188;113;114m [48;2;198;117;113m [48;2;255;138;140m [48;2;255;136;140m [48;2;253;134;130m [48;2;236;108;105m [48;2;242;108;105m [48;2;240;118;113m [48;2;241;116;112m [48;2;238;108;108m [48;2;237;112;108m [48;2;230;105;103m [48;2;234;108;109m [48;2;230;110;111m [48;2;237;119;118m [48;2;233;121;117m [48;2;248;135;139m [48;2;249;143;143m [48;2;242;133;136m [48;2;249;147;143m [m
|
||||
[48;2;254;170;173m [48;2;255;168;173m [48;2;255;154;158m [48;2;255;153;157m [48;2;255;142;144m [48;2;250;143;141m [48;2;201;125;119m [48;2;255;141;141m [48;2;254;128;131m [48;2;250;130;131m [48;2;253;138;135m [48;2;251;135;130m [48;2;255;152;141m [48;2;255;146;143m [48;2;250;127;130m [48;2;243;132;125m [48;2;251;136;131m [48;2;248;125;127m [48;2;251;147;147m [48;2;248;148;144m [48;2;246;139;135m [48;2;245;137;135m [48;2;249;151;148m [48;2;242;142;144m [m
|
||||
[49m [49m [48;2;254;162;162m [48;2;255;162;160m [48;2;255;155;155m [48;2;254;151;152m [48;2;202;116;115m [48;2;255;140;145m [48;2;253;129;131m [48;2;254;129;133m [48;2;252;132;133m [48;2;250;126;128m [48;2;252;127;131m [48;2;251;126;130m [48;2;239;114;117m [48;2;250;117;118m [48;2;245;122;119m [48;2;245;125;126m [48;2;242;127;130m [48;2;240;127;129m [48;2;245;131;134m [48;2;243;138;135m [48;2;244;146;143m [48;2;247;144;147m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;195;119;126m [48;2;250;147;137m [48;2;255;141;140m [48;2;243;115;112m [48;2;239;109;109m [48;2;234;111;106m [48;2;237;105;106m [48;2;237;104;105m [48;2;222;96;97m [48;2;239;107;105m [48;2;235;101;100m [48;2;234;106;103m [48;2;232;110;105m [48;2;231;113;109m [48;2;228;113;110m [48;2;248;136;135m [48;2;244;130;130m [48;2;241;133;131m [48;2;244;147;142m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;215;135;130m [48;2;255;154;146m [48;2;253;137;137m [48;2;254;140;140m [48;2;253;135;133m [48;2;254;146;136m [48;2;249;125;127m [48;2;249;123;127m [48;2;245;132;126m [48;2;247;114;115m [48;2;244;120;123m [48;2;241;117;116m [48;2;246;126;127m [48;2;234;111;116m [48;2;233;111;116m [48;2;234;115;118m [48;2;243;124;128m [48;2;237;121;124m [48;2;242;128;128m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;253;153;155m [48;2;252;147;151m [48;2;249;156;151m [48;2;251;152;147m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;243;156;155m [48;2;245;147;148m [48;2;244;141;145m [48;2;238;149;145m [48;2;242;146;140m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;255;167;161m [48;2;254;154;152m [48;2;244;140;142m [48;2;250;145;146m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;248;162;161m [48;2;244;161;155m [48;2;244;149;147m [48;2;239;134;138m [48;2;242;137;141m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;254;158;154m [48;2;251;157;153m [48;2;249;142;142m [48;2;248;137;139m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;244;157;153m [48;2;244;149;147m [48;2;241;152;146m [48;2;241;137;138m [48;2;239;130;133m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;254;154;152m [48;2;251;158;153m [48;2;250;142;142m [48;2;250;133;138m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;247;153;151m [48;2;246;150;149m [48;2;244;151;149m [48;2;240;136;137m [48;2;234;134;130m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;248;142;140m [48;2;250;144;146m [48;2;247;141;145m [48;2;250;156;142m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;238;142;146m [48;2;240;136;137m [48;2;242;139;140m [48;2;237;137;137m [48;2;238;150;138m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;246;136;135m [48;2;242;132;133m [48;2;237;121;124m [48;2;244;136;131m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;229;135;135m [48;2;235;131;130m [48;2;234;128;128m [48;2;231;116;121m [48;2;234;130;126m [m
|
||||
[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;251;132;134m [48;2;246;133;129m [48;2;246;137;134m [48;2;248;132;132m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;232;126;130m [48;2;243;128;131m [48;2;237;128;125m [48;2;236;131;128m [48;2;240;128;126m [m
|
Loading…
x
Reference in New Issue
Block a user