fixed inventory and improved saving

This commit is contained in:
musilto9 2020-04-15 18:07:17 +02:00
parent 6fac3fdeee
commit 227c6751fc
22 changed files with 295 additions and 228 deletions

View File

@ -0,0 +1,138 @@
package ruscz.game.gameOfProd.Cells;
import ruscz.game.gameOfProd.Dialog.Dialog;
import ruscz.game.gameOfProd.Image.ImageCell;
import ruscz.game.gameOfProd.Inventory.InventoryManager;
import ruscz.game.gameOfProd.Inventory.Item;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedList;
import java.util.Scanner;
public class ChestCell extends InteractionCell {
private LinkedList<Item> chestInventory;
private boolean showItem;
private boolean isActive;
public ChestCell(int x, int y, String inventory, Dialog dialog, ImageCell imageCell, WindowOfFreeMove window, boolean paint) {
super(x, y, null, dialog, imageCell, window, paint);
this.showItem = false;
this.chestInventory = new LinkedList<>();
this.isActive = true;
fillChest(inventory);
}
public ChestCell(int x, int y, String inventory, Dialog dialog, ImageCell imageCell, WindowOfFreeMove window) {
super(x, y, null, dialog, imageCell, window, false);
this.showItem = true;
this.chestInventory = new LinkedList<>();
this.isActive = true;
fillChest(inventory);
}
private void fillChest(String inventory) {
try {
File inventoryInfo = new File("src/main/resources/chests/" + inventory + ".txt");
Scanner scanner = new Scanner(inventoryInfo);
while (scanner.hasNextLine()) {
String[] itemData = scanner.nextLine().split(" ");
if(itemData[0].equals("<message>")) this.message = itemData[1];
else {
if (itemData.length == 4) {
Item item = new Item(itemData[0], Integer.parseInt(itemData[1]), Integer.parseInt(itemData[2]), itemData[3]);
chestInventory.add(item);
} else {
Item item = new Item(itemData[0], Integer.parseInt(itemData[1]), itemData[2]);
chestInventory.add(item);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private void putItemToInventory() {
if (chestInventory.size() == 0) {
endEvent();
isActive = false;
return;
}
Item item = chestInventory.getFirst();
InventoryManager.addItem(item);
chestInventory.remove(item);
String data = item.getName() + " was added to your inventory.";
dialog.hideText();
dialog.setText(data);
dialog.showText();
if (chestInventory.size() == 0 && message == null) {
showItem = false;
}
}
@Override
public void startEvent() {
if (message != null)
super.startEvent();
else readNextLine();
}
@Override
public void readNextLine() {
if (message != null) {
if (scanner.hasNextLine() && !dialog.getTimerIsRunning()) {
String data = scanner.nextLine();
if (data.equals("<end>")) {
isActive = false;
endEvent();
}
else if (data.equals("<item>")) {
putItemToInventory();
}
else {
if (data.contains("<br/>"))
data = "<html>" + data + "</html>";
dialog.hideText();
dialog.setText(data);
dialog.showText();
}
}
else {
dialog.skipShowText();
}
}
else {
putItemToInventory();
}
}
@Override
public void paint(Graphics2D g) {
if (showItem)
g.drawImage(super.getImageCell().getImagesOfItems().get(chestInventory.getFirst().getImage()), getX() * getSize(),
getY() * getSize(), getSize() / 2, getSize() / 2, null);
else if (paint) {
g.drawImage(super.getImageCell().getImagesOfTiles().get(super.getImageCell().getImageFromCellMap("CHEST")), getX() * getSize(),
getY() * getSize(), getSize(), getSize(), null);
}
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
public boolean getPaint() {
return paint;
}
public boolean getShowItem() {
return showItem;
}
}

View File

@ -15,10 +15,10 @@ import java.util.Scanner;
public class InteractionCell extends Cell {
protected String message;
protected ruscz.game.gameOfProd.Dialog.Dialog dialog;
private Scanner scanner;
protected Scanner scanner;
private ImageCell imageCell;
private WindowOfFreeMove window;
private boolean paint;
protected boolean paint;
public InteractionCell(int x, int y, String message, Dialog dialog, ImageCell imageCell, WindowOfFreeMove window, boolean paint) {
super(x, y, WindowOfFreeMove.CELL_SIZE, Color.ORANGE);
@ -93,11 +93,11 @@ public class InteractionCell extends Cell {
else if (data.contains("<additem>")) {
String[] dialogInfo = data.split(" ");
Item item;
if (dialogInfo.length == 4) {
item = new Item(dialogInfo[1], Integer.parseInt(dialogInfo[2]), dialogInfo[3]);
if (dialogInfo.length == 5) {
item = new Item(dialogInfo[1], Integer.parseInt(dialogInfo[2]), Integer.parseInt(dialogInfo[3]), dialogInfo[4]);
}
else {
item = new Item(dialogInfo[1], dialogInfo[2]);
item = new Item(dialogInfo[1], Integer.parseInt(dialogInfo[2]), dialogInfo[3]);
}
InventoryManager.addItem(item);
String name = dialogInfo[1].replace("-", " ");

View File

@ -110,19 +110,19 @@ public class Person extends Cell {
else {
door.readNextLine();
}
} else if (isItemInFront(x, y, directionSight)) {
} else if (isChestInFront(x, y, directionSight)) {
if (!isInEvent) {
isInEvent = true;
map.findItemByXY(x, y, directionSight).startEvent();
map.findChestByXY(x, y, directionSight).startEvent();
}
else {
map.findItemByXY(x, y, directionSight).endEvent();
map.findChestByXY(x, y, directionSight).readNextLine();
}
}
break;
}
if (directionMove != WindowOfFreeMove.KEY_EVENT) {
if (directionMove != 0 && !map.isBusyCell(x, y, true) && !map.isInteractionCell(x, y) && !map.isClosedDoor(x, y) && !map.isItem(x, y)) {
if (directionMove != 0 && !map.isBusyCell(x, y, true) && !map.isInteractionCell(x, y) && !map.isClosedDoor(x, y) && !map.isChest(x, y)) {
directionMoveLast = directionMove;
isMoving = true;
} else if (directionMove != 0 && map.isBusyCell(x, y, true)) {
@ -131,7 +131,7 @@ public class Person extends Cell {
directionMoveLast = 0;
} else if (directionMove != 0 && map.isClosedDoor(x, y)) {
directionMoveLast = 0;
} else if (directionMove != 0 && map.isItem(x, y)) {
} else if (directionMove != 0 && map.isChest(x, y)) {
directionMoveLast = 0;
}
if (map.isCellMoveTo(x, y) && !map.isClosedDoor(x, y)) {
@ -141,7 +141,7 @@ public class Person extends Cell {
map.findEventByXY(x, y).moveToMap();
}
} else {
if (!map.isInteractionCell(x, y) && !map.isBusyCell(x, y, true) && !map.isClosedDoor(x, y) && !map.isItem(x, y)) {
if (!map.isInteractionCell(x, y) && !map.isBusyCell(x, y, true) && !map.isClosedDoor(x, y) && !map.isChest(x, y)) {
set(x, y);
}
}
@ -171,9 +171,9 @@ public class Person extends Cell {
return map.isDoor(coords[0], coords[1]);
}
private boolean isItemInFront(int x, int y, int directionSight) {
private boolean isChestInFront(int x, int y, int directionSight) {
int[] coords = map.directionSightSwitch(x, y, directionSight);
return map.isActiveItem(coords[0], coords[1]);
return map.isActiveChest(coords[0], coords[1]);
}
public void stopPerson(){
@ -287,4 +287,8 @@ public class Person extends Cell {
public static void setInEvent(boolean isInEvent) {
Person.isInEvent = isInEvent;
}
public int getDirectionSight() {
return directionSight;
}
}

View File

@ -1,70 +1,29 @@
package ruscz.game.gameOfProd.Inventory;
import ruscz.game.gameOfProd.Cells.InteractionCell;
import ruscz.game.gameOfProd.Cells.Person;
import ruscz.game.gameOfProd.Dialog.Dialog;
import ruscz.game.gameOfProd.Image.ImageCell;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
import java.awt.*;
public class Item extends InteractionCell {
public class Item {
private ItemAction itemAction;
private String name;
private int multiplicity;
private int image;
private boolean isActive;
public Item(int x, int y, String name, Dialog dialog, ImageCell imageCell, WindowOfFreeMove window, int multiplicity, int image, String itemAction) {
super(x, y, null, dialog, imageCell, window, true);
message = parseNameToMessage(name);
public Item(String name, int multiplicity, int image, String itemAction) {
this.name = parseName(name);
this.image = image;
this.multiplicity = multiplicity;
setItemActionByName(itemAction);
this.isActive = true;
}
public Item(int x, int y, String name, Dialog dialog, ImageCell imageCell, WindowOfFreeMove window, int image, String itemAction) {
super(x, y, null, dialog, imageCell, window, true);
message = parseNameToMessage(name);
public Item(String name, int image, String itemAction) {
this.name = parseName(name);
this.image = image;
this.multiplicity = 1;
setItemActionByName(itemAction);
this.isActive = true;
}
public Item(String name, String itemAction) {
super(-1, -1, null, null, null, null, true);
message = parseNameToMessage(name);
this.multiplicity = 1;
setItemActionByName(itemAction);
this.isActive = false;
}
public Item(String name, int multiplicity, String itemAction) {
super(-1, -1, null, null, null, null, true);
message = parseNameToMessage(name);
this.multiplicity = multiplicity;
setItemActionByName(itemAction);
this.isActive = false;
}
@Override
public void startEvent() {
WindowOfFreeMove.setCanPersonMove(false);
this.dialog.hideText();
this.dialog.setText(message);
this.dialog.showText();
InventoryManager.addItem(this);
}
@Override
public void endEvent() {
this.isActive = false;
this.dialog.hideText();
this.dialog.setImageDialog(null);
Person.setInEvent(false);
WindowOfFreeMove.setCanPersonMove(true);
private String parseName(String name) {
name = name.replace("-", " ");
name = name.substring(0, 1).toUpperCase() + name.substring(1);
return name;
}
private void setItemActionByName(String action) {
@ -87,32 +46,13 @@ public class Item extends InteractionCell {
}
}
private String parseNameToMessage(String name) {
name = name.replace("-", " ");
this.name = name.substring(0,1).toUpperCase() + name.substring(1);
String message = this.name + " was added to your inventory.";
return message;
}
public String getName() { return name; }
public int getImage() { return image; }
public int getMultiplicity() { return multiplicity; }
public void hideItem() {
isActive = false;
}
public boolean isActive() {
return isActive;
}
@Override
public void paint(Graphics2D g) {
if (isActive) {
g.drawImage(super.getImageCell().getImagesOfItems().get(image), getX() * getSize(),
getY() * getSize(), getSize() / 2, getSize() / 2, null);
}
public ItemAction getItemAction() {
return itemAction;
}
}

View File

@ -21,7 +21,7 @@ public class Map {
private LinkedList<InteractionCell> interactionCells;
private LinkedList<TriggerCell> triggerCells;
private LinkedList<DoorCell> doorCells;
private LinkedList<Item> items;
private LinkedList<ChestCell> chestCells;
private LinkedList<Npc> npcs;
private int idExit;
private ImageCell imageCell;
@ -30,14 +30,14 @@ public class Map {
private static Scanner scanner;
public Map(TypeOfCell[][] mapArray) {
idExit = 0;
idExit = -1;
moveToCells = new LinkedList<>();
interactionCells = new LinkedList<>();
triggerCells = new LinkedList<>();
doorCells = new LinkedList<>();
block = new LinkedList<>();
imageCell = new ImageCell();
items = new LinkedList<>();
chestCells = new LinkedList<>();
npcs = new LinkedList<>();
this.mapArray = mapArray;
person = new Person(this);
@ -111,18 +111,19 @@ public class Map {
map.addInteractionEvent(new TriggerCell(x, y, trigger[1], new Dialog(window.getDialogBar()), map.getImageCell(), window));
} else if (line[x].equals("SPAWN")) {
map.setSpawnPoint(x, y);
map.idExit = 0;
} else if (line[x].contains("DOOR") && !line[x].contains("DOORTO")) {
String[] door = line[x].split(",");
if (door.length == 2)
map.addInteractionEvent(new DoorCell(x, y, Boolean.parseBoolean(door[1]), map.getImageCell(), window));
else
map.addInteractionEvent(new DoorCell(x, y, Boolean.parseBoolean(door[1]), door[2], new Dialog(window.getDialogBar()), map.getImageCell(), window));
} else if (line[x].contains("ITEM")) {
String[] item = line[x].split(",");
if (item.length == 5)
map.addInteractionEvent(new Item(x, y, item[1], new Dialog(window.getDialogBar()), map.getImageCell(), window, Integer.parseInt(item[2]), Integer.parseInt(item[3]), item[4]));
} else if (line[x].contains("CHEST")) {
String[] chest = line[x].split(",");
if (chest.length == 3)
map.addInteractionEvent(new ChestCell(x, y, chest[1], new Dialog(window.getDialogBar()), map.getImageCell(), window, Boolean.parseBoolean(chest[2])));
else
map.addInteractionEvent(new Item(x, y, item[1], new Dialog(window.getDialogBar()), map.getImageCell(), window, Integer.parseInt(item[2]), item[3]));
map.addInteractionEvent(new ChestCell(x, y, chest[1], new Dialog(window.getDialogBar()), map.getImageCell(), window));
}
}
}
@ -186,9 +187,9 @@ public class Map {
doorCells.add(doorCell);
}
public void addInteractionEvent(Item item) {
mapArray[item.getX()][item.getY()] = TypeOfCell.EVENT;
items.add(item);
public void addInteractionEvent(ChestCell chestCell) {
mapArray[chestCell.getX()][chestCell.getY()] = TypeOfCell.EVENT;
chestCells.add(chestCell);
}
public void setNpcs(Npc npc){
@ -231,7 +232,7 @@ public class Map {
public LinkedList<DoorCell> getDoorCells() { return doorCells; }
public LinkedList<Item> getItems() { return items; }
public LinkedList<ChestCell> getChestCells() { return chestCells; }
public void setIdExit(int id) {
this.idExit = id;
@ -304,16 +305,16 @@ public class Map {
return false;
}
public boolean isActiveItem(int x, int y) {
for (Item item : items)
if (x == item.getX() && y == item.getY() && item.getClass().getName().equals("ruscz.game.gameOfProd.Inventory.Item") && item.isActive())
public boolean isActiveChest(int x, int y) {
for (ChestCell cell : chestCells)
if (x == cell.getX() && y == cell.getY() && cell.getClass().getName().equals("ruscz.game.gameOfProd.Cells.ChestCell") && cell.isActive())
return true;
return false;
}
public boolean isItem(int x, int y) {
for (Item item : items)
if (x == item.getX() && y == item.getY() && item.getClass().getName().equals("ruscz.game.gameOfProd.Inventory.Item"))
public boolean isChest(int x, int y) {
for (ChestCell cell : chestCells)
if (x == cell.getX() && y == cell.getY() && cell.getClass().getName().equals("ruscz.game.gameOfProd.Cells.ChestCell"))
return true;
return false;
}
@ -369,11 +370,18 @@ public class Map {
return null;
}
public Item findItemByXY(int x, int y, int directionSight) {
public ChestCell findChestByXY(int x, int y, int directionSight) {
int[] coords = directionSightSwitch(x, y, directionSight);
for (Item item : items)
if (coords[0] == item.getX() && coords[1] == item.getY())
return item;
for (ChestCell cell : chestCells)
if (coords[0] == cell.getX() && coords[1] == cell.getY())
return cell;
return null;
}
public ChestCell findChestByXY(int x, int y) {
for (ChestCell cell : chestCells)
if (x == cell.getX() && y == cell.getY())
return cell;
return null;
}

View File

@ -1,6 +1,9 @@
package ruscz.game.gameOfProd.Save;
import ruscz.game.gameOfProd.Cells.ChestCell;
import ruscz.game.gameOfProd.Cells.TriggerCell;
import ruscz.game.gameOfProd.Inventory.InventoryManager;
import ruscz.game.gameOfProd.Inventory.Item;
import ruscz.game.gameOfProd.Map.Map;
import ruscz.game.gameOfProd.Map.MapManager;
import ruscz.game.gameOfProd.Windows.WindowOfFreeMove;
@ -30,8 +33,8 @@ public class LoadManager {
loadNewGame();
loadPerson();
loadEvents();
loadVillage();
loadInventory();
loadVillage();
}
public void clearSave() {
@ -93,6 +96,8 @@ public class LoadManager {
case "<location>":
window.setMapManager(Map.findMapByName(getValue(scanner.nextLine()), window));
mapManager.getActualMap().getPerson().set(Integer.parseInt(getValue(scanner.nextLine())), Integer.parseInt(getValue(scanner.nextLine())));
mapManager.getActualMap().getPerson().setDirectionSight(Integer.parseInt(getValue(scanner.nextLine())));
mapManager.getActualMap().setIdExit(100);
break;
}
}
@ -109,15 +114,17 @@ public class LoadManager {
Map map = null;
while (scanner.hasNextLine()) {
if (scanner.nextLine().equals("<map>")) {
String data = scanner.nextLine();
if (data.equals("<map>")) {
map = Map.findMapByName(getValue(scanner.nextLine()), window);
}
else if (scanner.nextLine().contains("<event>")) {
else if (data.contains("<trigger>")) {
TriggerCell triggerCell = map.findTriggerByXY(Integer.parseInt(getValue(scanner.nextLine())), Integer.parseInt(getValue(scanner.nextLine())));
triggerCell.setActive(Boolean.parseBoolean(getValue(scanner.nextLine())));
}
else {
scanner.nextLine();
else if (data.contains("<chest>")) {
ChestCell chestCell = map.findChestByXY(Integer.parseInt(getValue(scanner.nextLine())), Integer.parseInt(getValue(scanner.nextLine())));
chestCell.setActive(Boolean.parseBoolean(getValue(scanner.nextLine())));
}
}
scanner.close();
@ -126,6 +133,27 @@ public class LoadManager {
}
}
private void loadInventory() {
try {
File inventoryFile = new File("src/main/resources/save/savedGame/inventory.txt");
Scanner scanner = new Scanner(inventoryFile);
while (scanner.hasNextLine()) {
String data = scanner.nextLine();
switch (data) {
case "<item>":
Item item = new Item(getValue(scanner.nextLine()), Integer.parseInt(getValue(scanner.nextLine())), Integer.parseInt(getValue(scanner.nextLine())), getValue(scanner.nextLine()));
InventoryManager.addItem(item);
break;
}
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private void loadVillage() {
try {
File villageFile = new File("src/main/resources/save/savedGame/village.txt");
@ -137,17 +165,6 @@ public class LoadManager {
//TODO: loadVillage
}
private void loadInventory() {
try {
File inventoryFile = new File("src/main/resources/save/savedGame/inventory.txt");
Scanner scanner = new Scanner(inventoryFile);
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//TODO: loadInventory
}
private String getValue(String line) {
return line.substring(line.indexOf(">") + 1, line.lastIndexOf("<"));
}

View File

@ -1,7 +1,10 @@
package ruscz.game.gameOfProd.Save;
import ruscz.game.gameOfProd.Cells.ChestCell;
import ruscz.game.gameOfProd.Cells.Person;
import ruscz.game.gameOfProd.Cells.TriggerCell;
import ruscz.game.gameOfProd.Inventory.InventoryManager;
import ruscz.game.gameOfProd.Inventory.Item;
import ruscz.game.gameOfProd.Map.Map;
import ruscz.game.gameOfProd.Map.MapManager;
@ -19,8 +22,8 @@ public class SaveManager {
public void saveGame() {
savePerson();
saveEvents();
saveVillage();
saveInventory();
saveVillage();
}
private void savePerson() {
@ -32,6 +35,7 @@ public class SaveManager {
" <map>" + mapManager.getActualMap().getName() + "</map>" + System.lineSeparator() +
" <x>" + person.getX() + "</x>" + System.lineSeparator() +
" <y>" + person.getY() + "</y>" + System.lineSeparator() +
" <direction>" + person.getDirectionSight() + "</direction>" + System.lineSeparator() +
"</location>";
writer.write(location);
writer.close();
@ -52,11 +56,20 @@ public class SaveManager {
" <events>" + System.lineSeparator();
for (TriggerCell triggerCell : map.getTriggerCells()) {
String event =
" <event>" + System.lineSeparator() +
" <trigger>" + System.lineSeparator() +
" <x>" + triggerCell.getX() + "</x>" + System.lineSeparator() +
" <y>" + triggerCell.getY() + "</y>" + System.lineSeparator() +
" <active>" + triggerCell.getActive() + "</active>" + System.lineSeparator() +
" </event>" + System.lineSeparator();
" </trigger>" + System.lineSeparator();
mapInfo += event;
}
for (ChestCell chestCell : map.getChestCells()) {
String event =
" <chest>" + System.lineSeparator() +
" <x>" + chestCell.getX() + "</x>" + System.lineSeparator() +
" <y>" + chestCell.getY() + "</y>" + System.lineSeparator() +
" <active>" + chestCell.isActive() + "</active>" + System.lineSeparator() +
" </chest>" + System.lineSeparator();
mapInfo += event;
}
mapInfo +=
@ -71,6 +84,25 @@ public class SaveManager {
}
}
private void saveInventory() {
try {
FileWriter writer = new FileWriter("src/main/resources/save/savedGame/inventory.txt");
String inventory = "";
for (Item item : InventoryManager.getInventory()) {
inventory += "<item>" + System.lineSeparator() +
" <name>" + item.getName().toLowerCase().replace(" ", "-") + "</name>" + System.lineSeparator() +
" <multiplicity>" + item.getMultiplicity() + "</multiplicity>" + System.lineSeparator() +
" <image>" + item.getImage() + "</image>" + System.lineSeparator() +
" <action>" + item.getItemAction().toString().toLowerCase() + "</action>" + System.lineSeparator() +
"</item>" + System.lineSeparator();
}
writer.write(inventory);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void saveVillage() {
try {
FileWriter writer = new FileWriter("src/main/resources/save/savedGame/village.txt");
@ -81,15 +113,4 @@ public class SaveManager {
e.printStackTrace();
}
}
private void saveInventory() {
try {
FileWriter writer = new FileWriter("src/main/resources/save/savedGame/inventory.txt");
String inventory = "TODO: Inventory";
writer.write(inventory);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -170,7 +170,7 @@ public class WindowOfFreeMove extends JLayeredPane {
boss.setNpcs(npc2);
musicManager = new MusicManager("Town1.wav");
// musicManager.playMusic();
musicManager.playMusic();
Timer timer = new Timer(10, actionEvent -> {
mapManager.getActualMap().getPerson().move();
@ -203,6 +203,9 @@ public class WindowOfFreeMove extends JLayeredPane {
for (Cell cell : mapManager.getActualMap().getInteractionEventCells()) {
if (cell.getY() == i) cell.paint(g2D);
}
for (ChestCell cell : mapManager.getActualMap().getChestCells()) {
if (cell.getY() == i && cell.getPaint()) cell.paint(g2D);
}
if (mapManager.getActualMap().getPerson().getY() == (i-1) && mapManager.getActualMap().getPerson().getDirectionMoveLast() == KEY_UP) mapManager.getActualMap().getPerson().paint(g2D);
for (Block cell : mapManager.getActualMap().getBlocks()) {
if (cell.getY() == i && cell.isPartial()) cell.paint(g2D);
@ -216,8 +219,8 @@ public class WindowOfFreeMove extends JLayeredPane {
for (int j = 0; j < mapManager.getActualMap().getCanvasSize()[1]; j++) {
mapManager.getActualMap().getImageCell().paintForeground(g2D, j, i);
}
for (Item item : mapManager.getActualMap().getItems()) {
if (item.getY() == i) item.paint(g2D);
for (ChestCell cell : mapManager.getActualMap().getChestCells()) {
if (cell.getY() == i && cell.getShowItem()) cell.paint(g2D);
}
}
}

View File

@ -0,0 +1 @@
white-key-card 19 key

View File

@ -0,0 +1,2 @@
blue-key-card 39 key
<message> trash

View File

@ -1,4 +1,3 @@
Just like the trash you are..
You found a Blue key card.
<additem> blue-key-card key
<item>
<end>

View File

@ -3,3 +3,4 @@ MOVETO 1
EVENT 3
TRIGGER 4
DOOR dark-door.png,32
CHEST 390

View File

@ -7,6 +7,6 @@
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

View File

@ -8,7 +8,7 @@ BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK EMPTY EMPTY EMPTY BLOCK BL
BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK EMPTY moveto,1,2,openspace EMPTY EMPTY EMPTY EMPTY BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK
BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK EMPTY moveto,1,2,openspace EMPTY EMPTY EMPTY EMPTY BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK
BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK EMPTY EMPTY EMPTY BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK
BLOCK inter,trash EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK
BLOCK CHEST,trashcan,true EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK
BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY block
BLOCK BLOCK,d EMPTY BLOCK,d BLOCK,d BLOCK,d BLOCK,d EMPTY BLOCK,d BLOCK,d BLOCK,d BLOCK,d EMPTY BLOCK,d BLOCK,d BLOCK,d BLOCK,d EMPTY BLOCK,d BLOCK
BLOCK BLOCK DOOR,true,locked BLOCK BLOCK BLOCK BLOCK DOOR,true,locked BLOCK BLOCK BLOCK BLOCK DOOR,true,locked BLOCK BLOCK BLOCK BLOCK DOORTO,locked,true,white-key-card,2,1,treasure BLOCK BLOCK

View File

@ -6,7 +6,7 @@ BLOCK block EMPTY EMPTY EMPTY EMPTY EMPTY block BLOCK,u EMPTY EMPTY EMPTY BLOCK
BLOCK block EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY DOOR,false EMPTY EMPTY EMPTY BLOCK EMPTY block block block block EMPTY block
BLOCK BLOCK,d EMPTY BLOCK,d BLOCK,d BLOCK,d EMPTY BLOCK,d BLOCK EMPTY EMPTY EMPTY BLOCK EMPTY block block block block EMPTY block
BLOCK BLOCK DOOR,true,locked,false BLOCK BLOCK BLOCK DOOR,true BLOCK BLOCK EMPTY EMPTY EMPTY BLOCK EMPTY block block block block EMPTY block
BLOCK block EMPTY block BLOCK block EMPTY block BLOCK EMPTY EMPTY EMPTY BLOCK EMPTY block ITEM,white-key-card,19,key block block EMPTY block
BLOCK block EMPTY block BLOCK block EMPTY block BLOCK EMPTY EMPTY EMPTY BLOCK EMPTY block CHEST,confroom block block EMPTY block
BLOCK block EMPTY block BLOCK block EMPTY block BLOCK EMPTY EMPTY EMPTY BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK
BLOCK block EMPTY block BLOCK block EMPTY block BLOCK EMPTY EMPTY EMPTY BLOCK BLOCK,d BLOCK,d BLOCK,d EMPTY BLOCK,d BLOCK,d BLOCK
BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK EMPTY EMPTY EMPTY BLOCK BLOCK BLOCK BLOCK DOOR,true,blue-key-card BLOCK BLOCK BLOCK

View File

@ -0,0 +1,5 @@
BLOCK 0
MOVETO 0
EVENT 0
TRIGGER 0
DOOR dark-door.png,32

View File

@ -0,0 +1,10 @@
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0

View File

@ -5,7 +5,7 @@
3 13 23 33 43 53 63 73 83 93 103 113 123
4 14 24 34 44 54 64 74 84 94 104 114 124
5 15 25 35 45 55 65 75 85 95 105 115 125
6 13 26 36 46 56 66 76 86 96 106 116 126
6 16 26 36 46 56 66 76 86 96 106 116 126
7 17 27 37 47 57 67 77 87 97 107 117 127
8 18 28 38 48 58 68 78 88 98 108 118 128
9 19 29 39 49 59 69 79 89 99 109 119 129

View File

@ -1,75 +0,0 @@
<map>
<mapName>m1</mapName>
<events>
</events>
</map>
<map>
<mapName>m2</mapName>
<events>
<event>
<x>7</x>
<y>2</y>
<active>true</active>
</event>
</events>
</map>
<map>
<mapName>m3</mapName>
<events>
<event>
<x>2</x>
<y>5</y>
<active>true</active>
</event>
</events>
</map>
<map>
<mapName>m4</mapName>
<events>
<event>
<x>3</x>
<y>3</y>
<active>true</active>
</event>
</events>
</map>
<map>
<mapName>m5</mapName>
<events>
</events>
</map>
<map>
<mapName>m6</mapName>
<events>
<event>
<x>11</x>
<y>11</y>
<active>true</active>
</event>
</events>
</map>
<map>
<mapName>openspace</mapName>
<events>
</events>
</map>
<map>
<mapName>office</mapName>
<events>
</events>
</map>
<map>
<mapName>boss</mapName>
<events>
<event>
<x>4</x>
<y>18</y>
<active>true</active>
</event>
</events>
</map>
<map>
<mapName>treasure</mapName>
<events>
</events>
</map>

View File

@ -1 +0,0 @@
TODO: Inventory

View File

@ -1,5 +0,0 @@
<location>
<map>office</map>
<x>17</x>
<y>11</y>
</location>

View File

@ -1 +0,0 @@
TODO: Village