expanded teleport actor on maps added capitals

This commit is contained in:
Grimm
2022-08-17 16:57:56 +02:00
parent acaec64078
commit 745e9bc3ee
30 changed files with 2109 additions and 1814 deletions

View File

@@ -1,6 +1,7 @@
package forge.adventure.editor; package forge.adventure.editor;
import forge.adventure.data.PointOfInterestData; import forge.adventure.data.PointOfInterestData;
import forge.adventure.util.Config;
import javax.swing.*; import javax.swing.*;
@@ -16,6 +17,7 @@ public class PointOfInterestEdit extends JComponent {
JTextField sprite = new JTextField(); JTextField sprite = new JTextField();
FilePicker map = new FilePicker(new String[]{"tmx"}); FilePicker map = new FilePicker(new String[]{"tmx"});
JSpinner radiusFactor= new JSpinner(new SpinnerNumberModel(0.0f, 0.0f, 2.0f, 0.1f)); JSpinner radiusFactor= new JSpinner(new SpinnerNumberModel(0.0f, 0.0f, 2.0f, 0.1f));
SwingAtlasPreview preview=new SwingAtlasPreview(256,2000);
private boolean updating=false; private boolean updating=false;
@@ -34,6 +36,7 @@ public class PointOfInterestEdit extends JComponent {
parameters.add("Sprite:",sprite); parameters.add("Sprite:",sprite);
parameters.add("Map:",map); parameters.add("Map:",map);
parameters.add("Radius factor:",radiusFactor); parameters.add("Radius factor:",radiusFactor);
parameters.add(preview);
add(parameters); add(parameters);
@@ -80,6 +83,7 @@ public class PointOfInterestEdit extends JComponent {
map.getEdit().setText(currentData.map); map.getEdit().setText(currentData.map);
radiusFactor.setValue(currentData.radiusFactor); radiusFactor.setValue(currentData.radiusFactor);
preview.setSpritePath(currentData.spriteAtlas,currentData.sprite);
updating=false; updating=false;
} }
} }

View File

@@ -18,6 +18,7 @@ public class PointOfInterestEditor extends JComponent {
JList<PointOfInterestData> list = new JList<>(model); JList<PointOfInterestData> list = new JList<>(model);
JToolBar toolBar = new JToolBar("toolbar"); JToolBar toolBar = new JToolBar("toolbar");
PointOfInterestEdit edit=new PointOfInterestEdit(); PointOfInterestEdit edit=new PointOfInterestEdit();
static HashMap<String,SwingAtlas> atlas=new HashMap<>(); static HashMap<String,SwingAtlas> atlas=new HashMap<>();

View File

@@ -6,6 +6,7 @@ import org.apache.commons.lang3.tuple.Pair;
import javax.swing.*; import javax.swing.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -17,9 +18,13 @@ public class SwingAtlasPreview extends Box {
private String sprite=""; private String sprite="";
private String spriteName=""; private String spriteName="";
Timer timer; Timer timer;
public SwingAtlasPreview() { public SwingAtlasPreview()
{
this(32,200);
}
public SwingAtlasPreview(int imageSize,int timeDelay) {
super(BoxLayout.Y_AXIS); super(BoxLayout.Y_AXIS);
timer = new Timer(200, new AbstractAction() { timer = new Timer(timeDelay, new AbstractAction() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
counter++; counter++;
@@ -28,7 +33,9 @@ public class SwingAtlasPreview extends Box {
} }
} }
}); });
this.imageSize=imageSize;
} }
static Map<String,Map<Integer,SwingAtlas>> cache=new HashMap<>();
public SwingAtlasPreview(int size) { public SwingAtlasPreview(int size) {
this(); this();
imageSize=size; imageSize=size;
@@ -47,7 +54,16 @@ public class SwingAtlasPreview extends Box {
labels.clear(); labels.clear();
this.sprite=sprite; this.sprite=sprite;
this.spriteName=name; this.spriteName=name;
SwingAtlas atlas=new SwingAtlas(Config.instance().getFile(sprite),imageSize); SwingAtlas atlas;
if(!cache.containsKey(sprite))
{
cache.put(sprite,new HashMap<>() );
}
if(!cache.get(sprite).containsKey(imageSize))
{
cache.get(sprite).put(imageSize,new SwingAtlas(Config.instance().getFile(sprite),imageSize) );
}
atlas=cache.get(sprite).get(imageSize);
int maxCount=0; int maxCount=0;
for(Map.Entry<String, ArrayList<ImageIcon>> element:atlas.getImages().entrySet()) for(Map.Entry<String, ArrayList<ImageIcon>> element:atlas.getImages().entrySet())
{ {

View File

@@ -37,6 +37,7 @@ public class CharacterSprite extends MapActor {
} }
protected void load(String path) { protected void load(String path) {
if(path==null||path.isEmpty())return;
TextureAtlas atlas = Config.instance().getAtlas(path); TextureAtlas atlas = Config.instance().getAtlas(path);
/* /*
for (Texture texture : new ObjectSet.ObjectSetIterator<>( atlas.getTextures())) for (Texture texture : new ObjectSet.ObjectSetIterator<>( atlas.getTextures()))

View File

@@ -8,17 +8,23 @@ import forge.adventure.util.MapDialog;
/** /**
* Map actor that will show a text message with optional choices * Map actor that will show a text message with optional choices
*/ */
public class DialogActor extends MapActor { public class DialogActor extends CharacterSprite {
private final MapStage stage; private final MapStage stage;
private final TextureRegion textureRegion; private final TextureRegion textureRegion;
private final MapDialog dialog; private final MapDialog dialog;
public DialogActor(MapStage stage, int id, String S, TextureRegion textureRegion) { public DialogActor(MapStage stage, int id, String S, TextureRegion textureRegion) {
super(id); super(id,"");
this.stage = stage; this.stage = stage;
dialog = new MapDialog(S, stage, id); dialog = new MapDialog(S, stage, id);
this.textureRegion = textureRegion; this.textureRegion = textureRegion;
} }
public DialogActor(MapStage stage, int id, String S, String sprite) {
super(id,sprite);
this.stage = stage;
dialog = new MapDialog(S, stage, id);
this.textureRegion = null;
}
@Override @Override
public void onPlayerCollide() { public void onPlayerCollide() {
@@ -29,8 +35,10 @@ public class DialogActor extends MapActor {
@Override @Override
public void draw(Batch batch, float alpha) { public void draw(Batch batch, float alpha) {
batch.draw(textureRegion, getX(), getY(), getWidth(), getHeight()); if(textureRegion!=null)
super.draw(batch, alpha); batch.draw(textureRegion, getX(), getY(), getWidth(), getHeight());
else
super.draw(batch, alpha);
} }
} }

View File

@@ -1,5 +1,6 @@
package forge.adventure.character; package forge.adventure.character;
import com.badlogic.gdx.math.Vector2;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.adventure.scene.TileMapScene; import forge.adventure.scene.TileMapScene;
import forge.adventure.stage.MapStage; import forge.adventure.stage.MapStage;
@@ -12,29 +13,28 @@ public class EntryActor extends MapActor{
private final MapStage stage; private final MapStage stage;
String targetMap; String targetMap;
public EntryActor(MapStage stage,String sourceMap, int id,String targetMap,float x,float y,float w,float h,String direction) public EntryActor(MapStage stage, int id,String targetMap,float x,float y,float w,float h,String direction,boolean spawnPlayerThere)
{ {
super(id); super(id);
this.stage = stage; this.stage = stage;
this.targetMap = targetMap; this.targetMap = targetMap;
if((targetMap==null||targetMap.isEmpty()&&sourceMap.isEmpty())||//if target is null and "from world" if(spawnPlayerThere) //or if source is this target
!sourceMap.isEmpty()&&targetMap.equals(sourceMap)) //or if source is this target
{ {
switch(direction) switch(direction)
{ {
case "up": case "up":
stage.GetPlayer().setPosition(x,y+h); stage.GetPlayer().setPosition(x+w/2-stage.GetPlayer().getWidth()/2,y+h);
break; break;
case "down": case "down":
stage.GetPlayer().setPosition(x,y-stage.GetPlayer().getHeight()); stage.GetPlayer().setPosition(x+w/2-stage.GetPlayer().getWidth()/2,y-stage.GetPlayer().getHeight());
break; break;
case "right": case "right":
stage.GetPlayer().setPosition(x-stage.GetPlayer().getWidth(),y); stage.GetPlayer().setPosition(x-stage.GetPlayer().getWidth(),y+h/2-stage.GetPlayer().getHeight()/2);
break; break;
case "left": case "left":
stage.GetPlayer().setPosition(x+w,y); stage.GetPlayer().setPosition(x+w,y+h/2-stage.GetPlayer().getHeight()/2);
break; break;
} }

View File

@@ -23,6 +23,13 @@ public class ItemData {
public String iconName; public String iconName;
public boolean questItem=false; public boolean questItem=false;
public int cost=1000; public int cost=1000;
public boolean usableOnMap;
public boolean usableInPoi;
public String commandOnUse;
public int manaNeeded;
public ItemData() public ItemData()
{ {

View File

@@ -19,6 +19,10 @@ public class PointOfInterestData {
public String sprite; public String sprite;
public String map; public String map;
public float radiusFactor; public float radiusFactor;
public float offsetX=0f;
public float offsetY=0f;
public boolean markOnMap;

View File

@@ -46,6 +46,7 @@ public class GameScene extends HudScene {
Forge.clearTransitionScreen(); Forge.clearTransitionScreen();
Forge.clearCurrentScreen(); Forge.clearCurrentScreen();
super.enter(); super.enter();
WorldStage.getInstance().handlePointsOfInterestCollision();
} }
} }

View File

@@ -78,6 +78,7 @@ public class MapStage extends GameStage {
//These maps are defined as embedded properties within the Tiled maps. //These maps are defined as embedded properties within the Tiled maps.
private EffectData effect; //"Dungeon Effect": Character Effect applied to all adversaries within the map. private EffectData effect; //"Dungeon Effect": Character Effect applied to all adversaries within the map.
private boolean preventEscape = false; //Prevents player from escaping the dungeon by any means that aren't an exit. private boolean preventEscape = false; //Prevents player from escaping the dungeon by any means that aren't an exit.
private boolean foundPlayerSpawn;
public boolean getDialogOnlyInput() { public boolean getDialogOnlyInput() {
@@ -343,6 +344,7 @@ public class MapStage extends GameStage {
GetPlayer().stop(); GetPlayer().stop();
spriteLayer = null; spriteLayer = null;
foundPlayerSpawn=false;
for (MapLayer layer : map.getLayers()) { for (MapLayer layer : map.getLayers()) {
if (layer.getProperties().containsKey("spriteLayer") && layer.getProperties().get("spriteLayer", boolean.class)) { if (layer.getProperties().containsKey("spriteLayer") && layer.getProperties().get("spriteLayer", boolean.class)) {
spriteLayer = layer; spriteLayer = layer;
@@ -404,7 +406,18 @@ public class MapStage extends GameStage {
float y = Float.parseFloat(prop.get("y").toString()); float y = Float.parseFloat(prop.get("y").toString());
float w = Float.parseFloat(prop.get("width").toString()); float w = Float.parseFloat(prop.get("width").toString());
float h = Float.parseFloat(prop.get("height").toString()); float h = Float.parseFloat(prop.get("height").toString());
EntryActor entry = new EntryActor(this, sourceMap, id, prop.get("teleport").toString(), x, y, w, h, prop.get("direction").toString());
String targetMap=prop.get("teleport").toString();
boolean spawnPlayerThere=(targetMap==null||targetMap.isEmpty()&&sourceMap.isEmpty())||//if target is null and "from world"
!sourceMap.isEmpty()&&targetMap.equals(sourceMap);
if(foundPlayerSpawn)
spawnPlayerThere=false;
if((prop.containsKey("spawn")&&prop.get("spawn").toString()=="true")&&spawnPlayerThere)
{
foundPlayerSpawn=true;
spawnPlayerThere=true;
}//set spawn to option with "spawn" over other entries
EntryActor entry = new EntryActor(this, id, prop.get("teleport").toString(), x, y, w, h, prop.get("direction").toString(),spawnPlayerThere);
addMapActor(obj, entry); addMapActor(obj, entry);
break; break;
case "reward": case "reward":
@@ -486,7 +499,11 @@ public class MapStage extends GameStage {
case "dialog": case "dialog":
if(obj instanceof TiledMapTileMapObject) { if(obj instanceof TiledMapTileMapObject) {
TiledMapTileMapObject tiledObj = (TiledMapTileMapObject) obj; TiledMapTileMapObject tiledObj = (TiledMapTileMapObject) obj;
DialogActor dialog = new DialogActor(this, id, prop.get("dialog").toString(), tiledObj.getTextureRegion()); DialogActor dialog;
if(prop.containsKey("sprite"))
dialog= new DialogActor(this, id, prop.get("dialog").toString(), prop.get("sprite").toString());
else
dialog= new DialogActor(this, id, prop.get("dialog").toString(), tiledObj.getTextureRegion());
addMapActor(obj, dialog); addMapActor(obj, dialog);
} }
break; break;

View File

@@ -81,7 +81,7 @@ public class WorldBackground extends Actor {
} }
private void loadChunk(int x, int y) { public void loadChunk(int x, int y) {
if (chunksSprites[x][y] == null) if (chunksSprites[x][y] == null)
chunksSprites[x][y] = MapSprite.GetMapSprites(x, y); chunksSprites[x][y] = MapSprite.GetMapSprites(x, y);

View File

@@ -1,6 +1,7 @@
package forge.adventure.stage; package forge.adventure.stage;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.GridPoint2;
import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
@@ -176,7 +177,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
} }
} }
private void handlePointsOfInterestCollision() { public void handlePointsOfInterestCollision() {
for (Actor actor : foregroundSprites.getChildren()) { for (Actor actor : foregroundSprites.getChildren()) {
if (actor.getClass() == PointOfInterestMapSprite.class) { if (actor.getClass() == PointOfInterestMapSprite.class) {
@@ -286,6 +287,9 @@ public class WorldStage extends GameStage implements SaveFileContent {
"\nEnemy will use Preconstructed or Random Generated Decks. Genetic AI Decks will be available to some enemies on Hard difficulty.", WorldSave.getCurrentSave().getPlayer().getSelectedDeck()); "\nEnemy will use Preconstructed or Random Generated Decks. Genetic AI Decks will be available to some enemies on Hard difficulty.", WorldSave.getCurrentSave().getPlayer().getSelectedDeck());
WorldSave.getCurrentSave().getPlayer().clearAnnounceFantasy(); WorldSave.getCurrentSave().getPlayer().clearAnnounceFantasy();
} }
GridPoint2 pos = background.translateFromWorldToChunk(player.getX(), player.getY());
background.loadChunk(pos.x,pos.y);
handlePointsOfInterestCollision();
} }
@Override @Override

View File

@@ -426,7 +426,7 @@ public class World implements Disposable, SaveFileContent {
List<Rectangle> otherPoints = new ArrayList<>(); List<Rectangle> otherPoints = new ArrayList<>();
clearTerrain((int) (data.width * data.playerStartPosX), (int) (data.height * data.playerStartPosY), 10); clearTerrain((int) (data.width * data.playerStartPosX), (int) (data.height * data.playerStartPosY), 10);
otherPoints.add(new Rectangle(((float) data.width * data.playerStartPosX * (float) data.tileSize) - data.tileSize * 3, ((float) data.height * data.playerStartPosY * data.tileSize) - data.tileSize * 3, data.tileSize * 6, data.tileSize * 6)); //otherPoints.add(new Rectangle(((float) data.width * data.playerStartPosX * (float) data.tileSize) - data.tileSize * 3, ((float) data.height * data.playerStartPosY * data.tileSize) - data.tileSize * 3, data.tileSize * 6, data.tileSize * 6));
int biomeIndex2 = -1; int biomeIndex2 = -1;
for (BiomeData biome : data.GetBiomes()) { for (BiomeData biome : data.GetBiomes()) {
biomeIndex2++; biomeIndex2++;
@@ -443,6 +443,9 @@ public class World implements Disposable, SaveFileContent {
y *= (biome.height * height / 2); y *= (biome.height * height / 2);
y += (height - (biome.startPointY * height)); y += (height - (biome.startPointY * height));
y += (poi.offsetY * (biome.height * height));
x += (poi.offsetX * (biome.width * width));
if ((int) x < 0 || (int) y <= 0 || (int) y >= height || (int) x >= width || biomeIndex2 != highestBiome(getBiome((int) x, (int) y))) { if ((int) x < 0 || (int) y <= 0 || (int) y >= height || (int) x >= width || biomeIndex2 != highestBiome(getBiome((int) x, (int) y))) {
continue; continue;
} }
@@ -492,8 +495,16 @@ public class World implements Disposable, SaveFileContent {
Color color = biome.GetColor(); Color color = biome.GetColor();
pix.setColor(color.r, 0.1f, 0.1f, 1); if(poi.markOnMap)
pix.fillRectangle((int) x / data.tileSize - 3, height - (int) y / data.tileSize - 3, 6, 6); {
pix.setColor(0.1f, 0.1f, 1f, 1);
pix.fillCircle((int) x / data.tileSize - 3, height - (int) y / data.tileSize - 3, 10);
}
else
{
pix.setColor(1, 0.1f, 0.1f, 1);
pix.fillCircle((int) x / data.tileSize - 3, height - (int) y / data.tileSize - 3, 3);
}
if (poi.type != null && poi.type.equals("town")) { if (poi.type != null && poi.type.equals("town")) {

View File

@@ -3,13 +3,13 @@
"height": 4300, "height": 4300,
"width": 2 "width": 2
}, },
"activeFile": "map/main_story/skep.tmx", "activeFile": "map/main_story/spawn.tmx",
"automapping.whileDrawing": false, "automapping.whileDrawing": false,
"expandedProjectPaths": [ "expandedProjectPaths": [
"map/main_story", "map/main_story",
"map", "map",
"obj", "tileset",
"tileset" "obj"
], ],
"file.lastUsedOpenFilter": "All Files (*)", "file.lastUsedOpenFilter": "All Files (*)",
"fileStates": { "fileStates": {
@@ -1428,14 +1428,11 @@
} }
}, },
"map/debug_map.tmx": { "map/debug_map.tmx": {
"expandedObjectLayers": [
4
],
"scale": 3, "scale": 3,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 179.5, "x": 221.66666666666663,
"y": 274.3333333333333 "y": 302.83333333333337
} }
}, },
"map/djinnpalace_1.tmx": { "map/djinnpalace_1.tmx": {
@@ -2095,23 +2092,23 @@
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 235.25, "x": 235.5,
"y": 208.5 "y": 208.75
} }
}, },
"map/main_story/blue_castle.tmx": { "map/main_story/blue_castle.tmx": {
"scale": 3, "scale": 3,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 215.16666666666666, "x": 214.99999999999997,
"y": 331.3333333333333 "y": 331.16666666666663
} }
}, },
"map/main_story/colorless_castle.tmx": { "map/main_story/colorless_castle.tmx": {
"scale": 2, "scale": 2,
"selectedLayer": 1, "selectedLayer": 1,
"viewCenter": { "viewCenter": {
"x": 242.75, "x": 243,
"y": 339.25 "y": 339.25
} }
}, },
@@ -2124,41 +2121,83 @@
} }
}, },
"map/main_story/final_castle.tmx": { "map/main_story/final_castle.tmx": {
"expandedObjectLayers": [
4
],
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 273, "x": 240,
"y": 250.66666666666669 "y": 912
}
},
"map/main_story/forest_capital.tmx": {
"scale": 1,
"selectedLayer": 0,
"viewCenter": {
"x": 240,
"y": 136
} }
}, },
"map/main_story/green_castle.tmx": { "map/main_story/green_castle.tmx": {
"scale": 3, "scale": 3,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 218.5, "x": 232,
"y": 308 "y": 239.66666666666666
}
},
"map/main_story/island_capital.tmx": {
"scale": 1,
"selectedLayer": 0,
"viewCenter": {
"x": 240,
"y": 136
}
},
"map/main_story/mountain_capital.tmx": {
"scale": 1,
"selectedLayer": 0,
"viewCenter": {
"x": 240,
"y": 136
}
},
"map/main_story/plains_capital.tmx": {
"scale": 8,
"selectedLayer": 5,
"viewCenter": {
"x": 320,
"y": 320
} }
}, },
"map/main_story/red_castle.tmx": { "map/main_story/red_castle.tmx": {
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 272.25, "x": 232,
"y": 328 "y": 240
} }
}, },
"map/main_story/skep.tmx": { "map/main_story/skep.tmx": {
"expandedObjectLayers": [
4
],
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 232.33333333333331, "x": 358.6666666666667,
"y": 233.3333333333333 "y": 348.3333333333333
}
},
"map/main_story/spawn.tmx": {
"scale": 1.5,
"selectedLayer": 4,
"viewCenter": {
"x": 840.6666666666667,
"y": 323.6666666666667
}
},
"map/main_story/swamp_capital.tmx": {
"scale": 1,
"selectedLayer": 0,
"viewCenter": {
"x": 240,
"y": 136
} }
}, },
"map/main_story/unbenannt.tmx": { "map/main_story/unbenannt.tmx": {
@@ -2169,6 +2208,14 @@
"y": 480.34259430595574 "y": 480.34259430595574
} }
}, },
"map/main_story/white_capital.tmx": {
"scale": 1,
"selectedLayer": 0,
"viewCenter": {
"x": 232,
"y": 240
}
},
"map/main_story/white_castle.tmx": { "map/main_story/white_castle.tmx": {
"scale": 2, "scale": 2,
"selectedLayer": 4, "selectedLayer": 4,
@@ -2707,14 +2754,11 @@
} }
}, },
"map/waste_town.tmx": { "map/waste_town.tmx": {
"expandedObjectLayers": [
4
],
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 214.33333333333331, "x": 214.66666666666663,
"y": 298.6666666666667 "y": 299
} }
}, },
"map/waste_town_2.tmx": { "map/waste_town_2.tmx": {
@@ -2758,12 +2802,12 @@
} }
}, },
"tileset/buildings.tsx": { "tileset/buildings.tsx": {
"scaleInDock": 1.5, "scaleInDock": 3,
"scaleInEditor": 2 "scaleInEditor": 2
}, },
"tileset/main.tsx": { "tileset/main.tsx": {
"dynamicWrapping": false, "dynamicWrapping": false,
"scaleInDock": 1, "scaleInDock": 3,
"scaleInEditor": 2 "scaleInEditor": 2
} }
}, },
@@ -2774,25 +2818,32 @@
"map.tileWidth": 16, "map.tileWidth": 16,
"map.width": 90, "map.width": 90,
"openFiles": [ "openFiles": [
"map/waste_town.tmx", "map/main_story/green_castle.tmx",
"map/main_story/skep.tmx", "map/main_story/red_castle.tmx",
"map/debug_map.tmx" "map/main_story/white_capital.tmx",
"map/main_story/forest_capital.tmx",
"map/main_story/swamp_capital.tmx",
"map/main_story/mountain_capital.tmx",
"map/main_story/island_capital.tmx",
"map/main_story/plains_capital.tmx",
"map/main_story/spawn.tmx",
"map/main_story/final_castle.tmx"
], ],
"project": "main.tiled-project", "project": "main.tiled-project",
"property.type": "string", "property.type": "string",
"recentFiles": [ "recentFiles": [
"map/magetower_10.tmx", "map/main_story/green_castle.tmx",
"map/magetower_12.tmx", "map/main_story/red_castle.tmx",
"map/magetower_11.tmx", "map/main_story/white_capital.tmx",
"map/main_story/blue_castle.tmx", "map/main_story/forest_capital.tmx",
"map/waste_town.tmx", "map/main_story/swamp_capital.tmx",
"map/debug_map.tmx", "map/main_story/mountain_capital.tmx",
"map/main_story/island_capital.tmx",
"map/main_story/plains_capital.tmx",
"map/main_story/final_castle.tmx",
"map/main_story/spawn.tmx",
"map/main_story/skep.tmx", "map/main_story/skep.tmx",
"map/waste_town_3.tmx", "map/debug_map.tmx"
"map/waste_town_2.tmx",
"map/snowabbey_1.tmx",
"map/snowabbey_2.tmx",
"map/snowabbey_3.tmx"
], ],
"resizeMap.removeObjects": true, "resizeMap.removeObjects": true,
"textEdit.monospace": true "textEdit.monospace": true

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<template> <template>
<tileset firstgid="1" source="../tileset/buildings.tsx"/> <tileset firstgid="1" source="../tileset/buildings.tsx"/>
<object name="Inn" type="spellsmith" gid="1391" width="16" height="16"/> <object name="Spellsmith" type="spellsmith" gid="1391" width="16" height="16"/>
</template> </template>

View File

@@ -4,12 +4,6 @@ size: 448,800
format: RGBA8888 format: RGBA8888
filter: Nearest,Nearest filter: Nearest,Nearest
repeat: none repeat: none
IslandTown
xy: 144, 0
size: 48, 48
IslandTown
xy: 144, 0
size: 48, 48
IslandTown IslandTown
xy: 144, 0 xy: 144, 0
size: 48, 48 size: 48, 48
@@ -19,33 +13,33 @@ MountainTown
SwampTown SwampTown
xy: 0, 0 xy: 0, 0
size: 48, 48 size: 48, 48
SwampTown
xy: 97, 336
size: 32, 32
ForestTown ForestTown
xy: 352, 496 xy: 352, 496
size: 32, 32 size: 32, 32
ForestTown
xy: 384, 496
size: 32, 32
ForestTown
xy: 416, 496
size: 32, 32
ForestTown
xy: 0, 48
size: 32, 32
PlainsTown PlainsTown
xy: 96, 0 xy: 96, 0
size: 48, 48 size: 48, 48
PlainsTown
xy: 160, 272
size: 32, 32
WasteTown WasteTown
xy: 272, 128 xy: 272, 128
size: 48, 48 size: 48, 48
WasteTown IslandCapital
xy: 320, 128 xy: 128, 592
size: 48, 48 size: 64, 64
MountainCapital
xy: 128, 720
size: 64, 64
SwampCapital
xy: 128, 464
size: 64, 64
ForestCapital
xy: 64, 656
size: 64, 64
PlainsCapital
xy: 0, 464
size: 64, 64
Spawn
xy: 304, 288
size: 16, 16
Gate Gate
xy: 384, 128 xy: 384, 128
size: 64, 48 size: 64, 48

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

After

Width:  |  Height:  |  Size: 228 KiB

View File

@@ -234,3 +234,24 @@ FortuneCoin
SpiritGuard SpiritGuard
xy: 192,160 xy: 192,160
size: 16, 16 size: 16, 16
MulticolorRune
xy: 352,64
size: 16, 16
ColorlessRune
xy: 336,80
size: 16, 16
BlackRune
xy: 352,80
size: 16, 16
RedRune
xy: 336,96
size: 16, 16
GreenRune
xy: 352,96
size: 16, 16
BlueRune
xy: 336,112
size: 16, 16
WhiteRune
xy: 352,112
size: 16, 16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 270 KiB

View File

@@ -1,5 +1,5 @@
player.png knight.png
size: 64,96 size: 64,96
format: RGBA8888 format: RGBA8888
filter: Nearest,Nearest filter: Nearest,Nearest

View File

@@ -59,6 +59,7 @@
"pointsOfInterest": [ "pointsOfInterest": [
"Black Castle", "Black Castle",
"Swamp Town", "Swamp Town",
"Swamp Capital",
"Swamp Town2", "Swamp Town2",
"Zombie Town", "Zombie Town",
"Graveyard", "Graveyard",

View File

@@ -49,6 +49,7 @@
"pointsOfInterest": [ "pointsOfInterest": [
"Blue Castle", "Blue Castle",
"Island Town", "Island Town",
"Island Capital",
"NestU", "NestU",
"MerfolkPool", "MerfolkPool",
"MerfolkPool1", "MerfolkPool1",

View File

@@ -63,6 +63,7 @@
], ],
"pointsOfInterest": [ "pointsOfInterest": [
"Green Castle", "Green Castle",
"Forest Capital",
"Forest Town", "Forest Town",
"ElfTown", "ElfTown",
"WurmPond", "WurmPond",

View File

@@ -1,317 +1,387 @@
[ [
{ {
"name": "Sol Ring", "name": "Sol Ring",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Sol Ring" "Sol Ring"
] ]
}, },
"iconName": "SolRing" "iconName": "SolRing"
}, },
{ {
"name": "Mox Emerald", "name": "Mox Emerald",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Mox Emerald" "Mox Emerald"
] ]
}, },
"description": "", "description": "",
"iconName": "MoxEmerald" "iconName": "MoxEmerald"
}, },
{ {
"name": "Black Lotus", "name": "Black Lotus",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Black Lotus" "Black Lotus"
] ]
}, },
"iconName": "BlackLotus" "iconName": "BlackLotus"
}, },
{ {
"name": "Mox Jet", "name": "Mox Jet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Mox Jet" "Mox Jet"
] ]
}, },
"iconName": "MoxJet" "iconName": "MoxJet"
}, },
{ {
"name": "Mox Pearl", "name": "Mox Pearl",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Mox Pearl" "Mox Pearl"
] ]
}, },
"description": "", "description": "",
"iconName": "MoxPearl" "iconName": "MoxPearl"
}, },
{ {
"name": "Mox Ruby", "name": "Mox Ruby",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Mox Ruby" "Mox Ruby"
] ]
}, },
"iconName": "MoxRuby" "iconName": "MoxRuby"
}, },
{ {
"name": "Mox Sapphire", "name": "Mox Sapphire",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Mox Sapphire" "Mox Sapphire"
] ]
}, },
"iconName": "MoxSapphire" "iconName": "MoxSapphire"
}, },
{ {
"name": "Life Amulet", "name": "Life Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"lifeModifier": 2 "lifeModifier": 2
}, },
"iconName": "LifeAmulet" "iconName": "LifeAmulet"
}, },
{ {
"name": "Red Key", "name": "Red Key",
"description": "A mysterious red key.", "description": "A mysterious red key.",
"iconName": "RedKey", "iconName": "RedKey",
"questItem": true "questItem": true
}, },
{ {
"name": "White Key", "name": "White Key",
"description": "A mysterious white key.", "description": "A mysterious white key.",
"iconName": "WhiteKey", "iconName": "WhiteKey",
"questItem": true "questItem": true
}, },
{ {
"name": "Blue Key", "name": "Blue Key",
"description": "A mysterious blue key.", "description": "A mysterious blue key.",
"iconName": "BlueKey", "iconName": "BlueKey",
"questItem": true "questItem": true
}, },
{ {
"name": "Green Key", "name": "Green Key",
"description": "A mysterious green key.", "description": "A mysterious green key.",
"iconName": "GreenKey", "iconName": "GreenKey",
"questItem": true "questItem": true
}, },
{ {
"name": "Black Key", "name": "Black Key",
"description": "A mysterious black key.", "description": "A mysterious black key.",
"iconName": "BlackKey", "iconName": "BlackKey",
"questItem": true "questItem": true
}, },
{ {
"name": "Strange Key", "name": "Strange Key",
"description": "A mysterious key.", "description": "A mysterious key.",
"iconName": "StrangeKey", "iconName": "StrangeKey",
"questItem": true "questItem": true
}, },
{ {
"name": "Jungle Shield", "name": "Jungle Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"g_0_1_plant" "g_0_1_plant"
] ]
}, },
"iconName": "JungleShield" "iconName": "JungleShield"
}, },
{ {
"name": "Iron Shield", "name": "Iron Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_0_2_a_wall_defender" "c_0_2_a_wall_defender"
] ]
}, },
"iconName": "IronShield", "iconName": "IronShield",
"cost": 500 "cost": 500
}, },
{ {
"name": "Steel Shield", "name": "Steel Shield",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"lifeModifier": 1, "lifeModifier": 1,
"startBattleWithCard": [ "startBattleWithCard": [
"w_0_3_wall_defender" "w_0_3_wall_defender"
] ]
}, },
"iconName": "SteelShield", "iconName": "SteelShield",
"cost": 1500 "cost": 1500
}, },
{ {
"name": "Spirit Guard", "name": "Spirit Guard",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"lifeModifier": 2, "lifeModifier": 2,
"startBattleWithCard": [ "startBattleWithCard": [
"Geist of the Archives" "Geist of the Archives"
] ]
}, },
"iconName": "SpiritGuard" "iconName": "SpiritGuard"
}, },
{ {
"name": "Iron Armor", "name": "Iron Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"effect": { "effect": {
"lifeModifier": 3 "lifeModifier": 3
}, },
"iconName": "IronArmor", "iconName": "IronArmor",
"cost": 500 "cost": 500
}, },
{ {
"name": "Steel Armor", "name": "Steel Armor",
"equipmentSlot": "Body", "equipmentSlot": "Body",
"effect": { "effect": {
"lifeModifier": 5 "lifeModifier": 5
}, },
"iconName": "SteelArmor", "iconName": "SteelArmor",
"cost": 1500 "cost": 1500
}, },
{ {
"name": "Leather Boots", "name": "Leather Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"effect": { "effect": {
"moveSpeed": 1.2 "moveSpeed": 1.2
}, },
"iconName": "LeatherBoots" "iconName": "LeatherBoots"
}, },
{ {
"name": "Iron Boots", "name": "Iron Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"effect": { "effect": {
"lifeModifier": 1, "lifeModifier": 1,
"moveSpeed": 1.35 "moveSpeed": 1.35
}, },
"iconName": "IronBoots", "iconName": "IronBoots",
"cost": 500 "cost": 500
}, },
{ {
"name": "Steel Boots", "name": "Steel Boots",
"equipmentSlot": "Boots", "equipmentSlot": "Boots",
"effect": { "effect": {
"lifeModifier": 2, "lifeModifier": 2,
"moveSpeed": 1.4 "moveSpeed": 1.4
}, },
"iconName": "SteelBoots", "iconName": "SteelBoots",
"cost": 1500 "cost": 1500
}, },
{ {
"name": "Cheat", "name": "Cheat",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Blightsteel Colossus", "Blightsteel Colossus",
"Lightning Greaves" "Lightning Greaves"
] ]
}, },
"iconName": "Goose" "iconName": "Goose"
}, },
{ {
"name": "Shell Wand", "name": "Shell Wand",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"effect": { "effect": {
"opponent": { "opponent": {
"lifeModifier": -2 "lifeModifier": -2
} }
}, },
"iconName": "ShellWand" "iconName": "ShellWand"
}, },
{ {
"name": "Flame Sword", "name": "Flame Sword",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"effect": { "effect": {
"opponent": { "opponent": {
"lifeModifier": -5 "lifeModifier": -5
} }
}, },
"iconName": "FlameSword" "iconName": "FlameSword"
}, },
{ {
"name": "Dungeon Map", "name": "Dungeon Map",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"Dungeon Map" "Dungeon Map"
] ]
}, },
"iconName": "DungeonMap" "iconName": "DungeonMap"
}, },
{ {
"name": "Blood Vial", "name": "Blood Vial",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_a_blood_draw" "c_a_blood_draw"
] ]
}, },
"iconName": "Blood" "iconName": "Blood"
}, },
{ {
"name": "Charm", "name": "Charm",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_a_clue_draw" "c_a_clue_draw"
] ]
}, },
"iconName": "Clue" "iconName": "Clue"
}, },
{ {
"name": "Snack", "name": "Snack",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_a_food_sac" "c_a_food_sac"
] ]
}, },
"iconName": "Cheese" "iconName": "Cheese"
}, },
{ {
"name": "Change", "name": "Change",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_a_gold_sac" "c_a_gold_sac"
] ]
}, },
"iconName": "Gold" "iconName": "Gold"
}, },
{ {
"name": "Treasure", "name": "Treasure",
"equipmentSlot": "Right", "equipmentSlot": "Right",
"effect": { "effect": {
"startBattleWithCard": [ "startBattleWithCard": [
"c_a_treasure_sac" "c_a_treasure_sac"
] ]
}, },
"iconName": "Treasure" "iconName": "Treasure"
}, },
{ {
"name": "Manasight Amulet", "name": "Manasight Amulet",
"equipmentSlot": "Neck", "equipmentSlot": "Neck",
"description": "Grants Manasight, letting you know the colors used by your adversaries.", "effect": {
"effect": { "colorView": true
"colorView": true },
}, "description": "Grants Manasight, letting you know the colors used by your adversaries.",
"iconName": "RelicAmulet" "iconName": "RelicAmulet"
}, },
{ {
"name": "Fortune Coin", "name": "Fortune Coin",
"equipmentSlot": "Left", "equipmentSlot": "Left",
"effect": { "effect": {
"goldModifier": 0.85, "name": "",
"cardRewardBonus": 1 "goldModifier": 0.85,
}, "cardRewardBonus": 1
"iconName": "FortuneCoin" },
} "description": "",
"iconName": "FortuneCoin"
},
{
"name": "Colorless rune",
"equipmentSlot": "",
"effect": {
"name": "",
"goldModifier": 0.85,
"cardRewardBonus": 1
},
"description": "Teleports you to the center",
"iconName": "ColorlessRune",
"questItem": true,
"cost": 100
},
{
"name": "White rune",
"equipmentSlot": "",
"effect": {
"name": ""
},
"description": "Teleports you to the plains",
"iconName": "WhiteRune",
"questItem": true,
"cost": 100
},
{
"name": "Black rune",
"equipmentSlot": "",
"effect": {
"name": ""
},
"description": "Teleports you to the swamp",
"iconName": "BlackRune",
"questItem": true,
"cost": 100
},
{
"name": "Blue rune",
"equipmentSlot": "",
"effect": {
"name": ""
},
"description": "Teleports you to the island",
"iconName": "BlueRune",
"questItem": true,
"cost": 100
},
{
"name": "Red rune",
"equipmentSlot": "",
"effect": {
"name": ""
},
"description": "Teleports you to the mountain",
"iconName": "RedRune",
"questItem": true,
"cost": 100
},
{
"name": "Green rune",
"equipmentSlot": "",
"effect": {
"name": ""
},
"description": "Teleports you to the forest",
"iconName": "GreenRune",
"questItem": true,
"cost": 100
}
] ]

File diff suppressed because it is too large Load Diff

View File

@@ -63,6 +63,7 @@
"pointsOfInterest": [ "pointsOfInterest": [
"Red Castle", "Red Castle",
"Mountain Town", "Mountain Town",
"Mountain Capital",
"YuleTown", "YuleTown",
"BarbarianCamp", "BarbarianCamp",
"BarbarianCamp1", "BarbarianCamp1",

View File

@@ -54,6 +54,7 @@
"Doppelganger" "Doppelganger"
], ],
"pointsOfInterest": [ "pointsOfInterest": [
"Spawn",
"Final Castle", "Final Castle",
"Colorless Castle", "Colorless Castle",
"Skep", "Skep",

View File

@@ -51,6 +51,7 @@
"pointsOfInterest": [ "pointsOfInterest": [
"White Castle", "White Castle",
"Plains Town", "Plains Town",
"Plains Capital",
"Monastery", "Monastery",
"Monastery1", "Monastery1",
"Monastery2", "Monastery2",

View File

@@ -1,8 +1,8 @@
{ {
"width": 700, "width": 700,
"height": 700, "height": 700,
"playerStartPosX": 0.5025, "playerStartPosX": 0.5,
"playerStartPosY": 0.495, "playerStartPosY": 0.5,
"noiseZoomBiome": 30, "noiseZoomBiome": 30,
"tileSize": 16, "tileSize": 16,
"roadTileset": { "roadTileset": {