Render world map with more details

Changed SpellSmithScene to not display empty edition and fixed edition filter.
This commit is contained in:
Grimm
2022-09-16 02:28:43 +02:00
parent f9de0c1678
commit 5bae834f09
23 changed files with 318 additions and 147 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

@@ -69,10 +69,12 @@ public class RewardData {
private static Iterable<PaperCard> allCards; private static Iterable<PaperCard> allCards;
private static Iterable<PaperCard> allEnemyCards; private static Iterable<PaperCard> allEnemyCards;
private void initializeAllCards(){ static private void initializeAllCards(){
RewardData legals = Config.instance().getConfigData().legalCards; RewardData legals = Config.instance().getConfigData().legalCards;
if(legals==null) allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); if(legals==null)
else allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true)); allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt();
else
allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true));
//Filter out specific cards. //Filter out specific cards.
allCards = Iterables.filter(allCards, new Predicate<PaperCard>() { allCards = Iterables.filter(allCards, new Predicate<PaperCard>() {
@Override @Override
@@ -92,7 +94,7 @@ public class RewardData {
}); });
} }
public Iterable<PaperCard> getAllCards() { static public Iterable<PaperCard> getAllCards() {
if(allCards == null) initializeAllCards(); if(allCards == null) initializeAllCards();
return allCards; return allCards;
} }

View File

@@ -24,6 +24,7 @@ public class WorldData implements Serializable {
public float playerStartPosY; public float playerStartPosY;
public float noiseZoomBiome; public float noiseZoomBiome;
public int tileSize; public int tileSize;
public int miniMapTileSize;
public BiomeData roadTileset; public BiomeData roadTileset;
public String biomesSprites; public String biomesSprites;
public float maxRoadDistance; public float maxRoadDistance;

View File

@@ -93,8 +93,8 @@ public class AdventurePlayer implements Serializable, SaveFileContent {
gold = 0; gold = 0;
maxLife = 20; maxLife = 20;
life = 20; life = 20;
maxMana = 100; maxMana = 10;
mana = 100; mana = 10;
clearDecks(); clearDecks();
inventoryItems.clear(); inventoryItems.clear();
equippedItems.clear(); equippedItems.clear();

View File

@@ -132,7 +132,6 @@ public class ArenaScene extends UIScene implements IAfterMatch {
private void startButton() { private void startButton() {
if(roundsWon ==0) if(roundsWon ==0)
{ {
goldLabel.setVisible(false);
startDialog.show(stage); startDialog.show(stage);
} }
else else
@@ -143,6 +142,7 @@ public class ArenaScene extends UIScene implements IAfterMatch {
int roundsWon =0; int roundsWon =0;
private void startArena() { private void startArena() {
goldLabel.setVisible(false);
arenaStarted=true; arenaStarted=true;
startButton.setText(Forge.getLocalizer().getMessage("lblContinue")); startButton.setText(Forge.getLocalizer().getMessage("lblContinue"));
doneButton.setText(Forge.getLocalizer().getMessage("lblConcede")); doneButton.setText(Forge.getLocalizer().getMessage("lblConcede"));
@@ -286,10 +286,10 @@ public class ArenaScene extends UIScene implements IAfterMatch {
doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); doneButton.setText(Forge.getLocalizer().getMessage("lblDone"));
arenaData=data; arenaData=data;
//rand.setSeed(seed); allow to reshuffle arena enemies for now //rand.setSeed(seed); allow to reshuffle arena enemies for now
enemies.clear(); enemies.clear();
for(Actor fighter:fighters)
arenaPlane.removeActor(fighter);
fighters.clear(); fighters.clear();
arenaPlane.clear();
roundsWon =0; roundsWon =0;
int numberOfEnemies= (int) (Math.pow(2f, data.rounds)-1); int numberOfEnemies= (int) (Math.pow(2f, data.rounds)-1);

View File

@@ -19,6 +19,7 @@ import forge.adventure.util.RewardActor;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.FModel;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.*; import java.util.*;
@@ -59,7 +60,14 @@ public class SpellSmithScene extends UIScene {
List<CardEdition> editions = StaticData.instance().getSortedEditions(); List<CardEdition> editions = StaticData.instance().getSortedEditions();
editions = editions.stream().filter(input -> { editions = editions.stream().filter(input -> {
if(input == null) return false; if(input == null)
return false;
if(input.getType()== CardEdition.Type.REPRINT||input.getType()== CardEdition.Type.PROMO||input.getType()== CardEdition.Type.COLLECTOR_EDITION)
return false;
List<PaperCard> it = StreamSupport.stream(RewardData.getAllCards().spliterator(), false)
.filter(input2 -> input2.getEdition().equals(input.getCode())).collect(Collectors.toList());
if(it.size()==0)
return false;
return(!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getCode())); return(!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getCode()));
}).collect(Collectors.toList()); }).collect(Collectors.toList());
editionList = ui.findActor("BSelectPlane"); editionList = ui.findActor("BSelectPlane");
@@ -222,8 +230,7 @@ public class SpellSmithScene extends UIScene {
public void filterResults() { public void filterResults() {
RewardData R = new RewardData(); Iterable<PaperCard> P = RewardData.getAllCards();
Iterable<PaperCard> P = R.getAllCards();
goldLabel.setText("Gold: "+ Current.player().getGold()); goldLabel.setText("Gold: "+ Current.player().getGold());
float totalCost = basePrice * Current.player().goldModifier(); float totalCost = basePrice * Current.player().goldModifier();
final List<String> colorFilter = new ArrayList<>(); final List<String> colorFilter = new ArrayList<>();
@@ -251,7 +258,9 @@ public class SpellSmithScene extends UIScene {
P = StreamSupport.stream(P.spliterator(), false).filter(input -> { P = StreamSupport.stream(P.spliterator(), false).filter(input -> {
//L|Basic Land, C|Common, U|Uncommon, R|Rare, M|Mythic Rare, S|Special, N|None //L|Basic Land, C|Common, U|Uncommon, R|Rare, M|Mythic Rare, S|Special, N|None
if (input == null) return false; if (input == null) return false;
if(!edition.isEmpty()) if (!input.getEdition().equals(edition)) return false; final CardEdition cardEdition = FModel.getMagicDb().getEditions().get(edition);
if(cardEdition!=null&&cardEdition.getCardInSet(input.getName()).size()==0) return false;
if(colorFilter.size() > 0) if(input.getRules().getColor() != ColorSet.fromNames(colorFilter)) return false; if(colorFilter.size() > 0) if(input.getRules().getColor() != ColorSet.fromNames(colorFilter)) return false;
if(!rarity.isEmpty()) if (!input.getRarity().toString().equals(rarity)) return false; if(!rarity.isEmpty()) if (!input.getRarity().toString().equals(rarity)) return false;
if(cost_low > -1) { if(cost_low > -1) {

View File

@@ -154,6 +154,18 @@ public static ConsoleCommandInterpreter getInstance()
Current.player().giveGold(amount); Current.player().giveGold(amount);
return "Added "+amount+" gold"; return "Added "+amount+" gold";
}); });
registerCommand(new String[]{"give", "mana"}, s -> {
if(s.length<1) return "Command needs 1 parameter: Amount.";
int amount;
try {
amount=Integer.parseInt(s[0]);
}
catch (Exception e) {
return "Can not convert " + s[0] + " to number";
}
Current.player().addMaxMana(amount);
return "Added " + amount + " max mana";
});
registerCommand(new String[]{"give", "life"}, s -> { registerCommand(new String[]{"give", "life"}, s -> {
if(s.length<1) return "Command needs 1 parameter: Amount."; if(s.length<1) return "Command needs 1 parameter: Amount.";
int amount; int amount;

View File

@@ -283,7 +283,9 @@ public class CardUtil {
if(reward.getType()== Reward.Type.Life) if(reward.getType()== Reward.Type.Life)
return reward.getCount()*500; return reward.getCount()*500;
if(reward.getType()== Reward.Type.Mana) if(reward.getType()== Reward.Type.Mana)
return reward.getCount()*50; return reward.getCount()*500;
if(reward.getType()== Reward.Type.Gold)
return reward.getCount();
return 1000; return 1000;
} }

View File

@@ -24,9 +24,9 @@ public abstract class DrawOnPixmap {
textureData.prepare(); textureData.prepare();
} }
on.drawPixmap(textureData.consumePixmap(), x, y, from.getRegionX(), from.getRegionY(), from.getRegionWidth(), from.getRegionHeight()); on.drawPixmap(textureData.consumePixmap(), x, y, from.getRegionX(), from.getRegionY(), from.getRegionWidth(), from.getRegionHeight());
} }
public static void drawText(Pixmap drawingMap, String itemText, int x, int y, float width, boolean bigText, Color color) { public static void drawText(Pixmap drawingMap, String itemText, int x, int y, float width, boolean bigText, Color color) {
//used for big numbers on Gold/Life for reward... //used for big numbers on Gold/Life for reward...
BitmapFont font = bigText ? Controls.getBitmapFont("big") : Controls.getBitmapFont("default"); BitmapFont font = bigText ? Controls.getBitmapFont("big") : Controls.getBitmapFont("default");

View File

@@ -33,7 +33,6 @@ import java.util.*;
*/ */
public class World implements Disposable, SaveFileContent { public class World implements Disposable, SaveFileContent {
private WorldData data; private WorldData data;
static final private int hudMapScale=4;
private Pixmap biomeImage; private Pixmap biomeImage;
private long[][] biomeMap; private long[][] biomeMap;
private int[][] terrainMap; private int[][] terrainMap;
@@ -292,6 +291,9 @@ public class World implements Disposable, SaveFileContent {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
loadWorldData(); loadWorldData();
//////////////////
///////// initialize
//////////////////
if (seed == 0) { if (seed == 0) {
seed = random.nextLong(); seed = random.nextLong();
@@ -306,7 +308,6 @@ public class World implements Disposable, SaveFileContent {
//save at all data //save at all data
biomeMap = new long[width][height]; biomeMap = new long[width][height];
terrainMap = new int[width][height]; terrainMap = new int[width][height];
Pixmap pix = new Pixmap(width*hudMapScale, height*hudMapScale, Pixmap.Format.RGBA8888);
for (int x = 0; x < width; x++) { for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) { for (int y = 0; y < height; y++) {
@@ -315,13 +316,13 @@ public class World implements Disposable, SaveFileContent {
} }
} }
pix.setColor(1, 0, 0, 1);
pix.fill();
final int[] biomeIndex = {-1}; final int[] biomeIndex = {-1};
currentTime[0] = measureGenerationTime("loading data", currentTime[0]); currentTime[0] = measureGenerationTime("loading data", currentTime[0]);
HashMap<BiomeStructureData, BiomeStructure> structureDataMap = new HashMap<>(); HashMap<BiomeStructureData, BiomeStructure> structureDataMap = new HashMap<>();
//////////////////
///////// calculation structure position with wavefunctioncollapse
//////////////////
for (BiomeData biome : data.GetBiomes()) { for (BiomeData biome : data.GetBiomes()) {
if (biome.structures != null) { if (biome.structures != null) {
int biomeWidth = (int) Math.round(biome.width * (double) width); int biomeWidth = (int) Math.round(biome.width * (double) width);
@@ -338,6 +339,10 @@ public class World implements Disposable, SaveFileContent {
} }
} }
} }
//////////////////
///////// calculation each biome position based on noise and radius
//////////////////
FThreads.invokeInEdtNowOrLater(() -> { FThreads.invokeInEdtNowOrLater(() -> {
for (BiomeData biome : data.GetBiomes()) { for (BiomeData biome : data.GetBiomes()) {
@@ -371,9 +376,6 @@ public class World implements Disposable, SaveFileContent {
color.toHsv(hsv); color.toHsv(hsv);
int count = (int) ((noiseValue - 0.5) * 10 / 4); int count = (int) ((noiseValue - 0.5) * 10 / 4);
//hsv[2]+=(count*0.2); //hsv[2]+=(count*0.2);
color.fromHsv(hsv);
pix.setColor(color.r, color.g, color.b, 1);
pix.fillRectangle(x*hudMapScale, y*hudMapScale,hudMapScale,hudMapScale);
biomeMap[x][y] |= (1L << biomeIndex[0]); biomeMap[x][y] |= (1L << biomeIndex[0]);
int terrainCounter = 1; int terrainCounter = 1;
terrainMap[x][y] = 0; terrainMap[x][y] = 0;
@@ -382,6 +384,7 @@ public class World implements Disposable, SaveFileContent {
float terrainNoise = ((float) noise.eval(x / (float) width * (noiseZoom * terrain.resolution), y / (float) height * (noiseZoom * terrain.resolution)) + 1) / 2; float terrainNoise = ((float) noise.eval(x / (float) width * (noiseZoom * terrain.resolution), y / (float) height * (noiseZoom * terrain.resolution)) + 1) / 2;
if (terrainNoise >= terrain.min && terrainNoise <= terrain.max) { if (terrainNoise >= terrain.min && terrainNoise <= terrain.max) {
terrainMap[x][y] = terrainCounter; terrainMap[x][y] = terrainCounter;
//pix.fillRectangle(x*data.miniMapTileSize, y*data.miniMapTileSize,data.miniMapTileSize,data.miniMapTileSize);
} }
terrainCounter++; terrainCounter++;
} }
@@ -404,8 +407,8 @@ public class World implements Disposable, SaveFileContent {
int structureIndex = structure.objectID(structureXStart, structureYStart); int structureIndex = structure.objectID(structureXStart, structureYStart);
if (structureIndex >= 0) { if (structureIndex >= 0) {
pix.setColor(data.mappingInfo[structureIndex].getColor()); //pix.setColor(data.mappingInfo[structureIndex].getColor());
pix.fillRectangle(x*hudMapScale, y*hudMapScale,hudMapScale,hudMapScale); //pix.fillRectangle(x*data.miniMapTileSize, y*data.miniMapTileSize,data.miniMapTileSize,data.miniMapTileSize);
terrainMap[x][y] = terrainCounter + structureIndex; terrainMap[x][y] = terrainCounter + structureIndex;
if (structure.collision(structureXStart, structureYStart)) if (structure.collision(structureXStart, structureYStart))
terrainMap[x][y] |= collisionBit; terrainMap[x][y] |= collisionBit;
@@ -423,6 +426,9 @@ public class World implements Disposable, SaveFileContent {
} }
currentTime[0] = measureGenerationTime("biomes in total", currentTime[0]); currentTime[0] = measureGenerationTime("biomes in total", currentTime[0]);
//////////////////
///////// set poi placement
//////////////////
mapPoiIds = new PointOfInterestMap(getChunkSize(), data.tileSize, data.width / getChunkSize(), data.height / getChunkSize()); mapPoiIds = new PointOfInterestMap(getChunkSize(), data.tileSize, data.width / getChunkSize(), data.height / getChunkSize());
List<PointOfInterest> towns = new ArrayList<>(); List<PointOfInterest> towns = new ArrayList<>();
List<PointOfInterest> notTowns = new ArrayList<>(); List<PointOfInterest> notTowns = new ArrayList<>();
@@ -505,8 +511,8 @@ public class World implements Disposable, SaveFileContent {
if(marker!=null) if(marker!=null)
{ {
int xInPixels= (int) ((x / data.tileSize)*hudMapScale); int xInPixels= (int) ((x / data.tileSize)*data.miniMapTileSize);
int yInPixels= (int) ((height-(y / data.tileSize))*hudMapScale); int yInPixels= (int) ((height-(y / data.tileSize))*data.miniMapTileSize);
xInPixels-=(marker.getRegionWidth() /2); xInPixels-=(marker.getRegionWidth() /2);
yInPixels-=(marker.getRegionHeight() /2); yInPixels-=(marker.getRegionHeight() /2);
drawPixmapLater(mapMarkerPixmap,marker.getRegionX(),marker.getRegionY(), drawPixmapLater(mapMarkerPixmap,marker.getRegionX(),marker.getRegionY(),
@@ -527,7 +533,9 @@ public class World implements Disposable, SaveFileContent {
} }
currentTime[0] = measureGenerationTime("poi placement", currentTime[0]); currentTime[0] = measureGenerationTime("poi placement", currentTime[0]);
//sort towns //////////////////
///////// sort towns and build roads in between
//////////////////
List<Pair<PointOfInterest, PointOfInterest>> allSortedTowns = new ArrayList<>(); List<Pair<PointOfInterest, PointOfInterest>> allSortedTowns = new ArrayList<>();
HashSet<Long> usedEdges = new HashSet<>();//edge is first 32 bits id of first id and last 32 bits id of second HashSet<Long> usedEdges = new HashSet<>();//edge is first 32 bits id of first id and last 32 bits id of second
@@ -583,7 +591,6 @@ public class World implements Disposable, SaveFileContent {
allPOIPathsToNextTown.add(Pair.of(poi, towns.get(smallestIndex))); allPOIPathsToNextTown.add(Pair.of(poi, towns.get(smallestIndex)));
} }
biomeIndex[0]++; biomeIndex[0]++;
pix.setColor(0.8f, 0.8f, 0.9f, 1f);
//reset terrain path to the next town //reset terrain path to the next town
for (Pair<PointOfInterest, PointOfInterest> poiToTown : allPOIPathsToNextTown) { for (Pair<PointOfInterest, PointOfInterest> poiToTown : allPOIPathsToNextTown) {
@@ -635,11 +642,10 @@ public class World implements Disposable, SaveFileContent {
int sy = startY < y1 ? 1 : -1; int sy = startY < y1 ? 1 : -1;
int err = dx - dy; int err = dx - dy;
int e2; int e2;
while (true) { for (int i=0;i<1000;i++) {
if (startX < 0 || startY <= 0 || startX >= width || startY > height) continue; if (startX < 0 || startY <= 0 || startX >= width || startY > height) continue;
biomeMap[startX][height - startY] |= (1L << biomeIndex[0]); biomeMap[startX][height - startY] |= (1L << biomeIndex[0]);
terrainMap[startX][height - startY] = 0; terrainMap[startX][height - startY] = 0;
pix.fillRectangle(startX*hudMapScale, (height - startY)*hudMapScale,hudMapScale,hudMapScale);
if (startX == x1 && startY == y1) if (startX == x1 && startY == y1)
break; break;
@@ -655,6 +661,70 @@ public class World implements Disposable, SaveFileContent {
} }
currentTime[0] = measureGenerationTime("roads", currentTime[0]); currentTime[0] = measureGenerationTime("roads", currentTime[0]);
//////////////////
///////// draw mini map
//////////////////
Pixmap pix = new Pixmap(width*data.miniMapTileSize, height*data.miniMapTileSize, Pixmap.Format.RGBA8888);
pix.setColor(1, 0, 0, 1);
pix.fill();
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
if(highestBiome(biomeMap[x][y])>=data.GetBiomes().size())
{
Pixmap smallPixmap=createSmallPixmap(data.roadTileset.tilesetAtlas,data.roadTileset.tilesetName,0);
pix.drawPixmap(smallPixmap,x*data.miniMapTileSize, y*data.miniMapTileSize);
}
else
{
BiomeData biome=data.GetBiomes().get( highestBiome(biomeMap[x][y]));
int terrainIndex=terrainMap[x][y]&~terrainMask;
if(terrainIndex>biome.terrain.length)
{
Pixmap smallPixmap=createSmallPixmap(biome.tilesetAtlas,biome.tilesetName,0);
pix.drawPixmap(smallPixmap,x*data.miniMapTileSize, y*data.miniMapTileSize);
terrainIndex-=biome.terrain.length;
terrainIndex--;
for(BiomeStructureData structData:biome.structures)
{
if(terrainIndex>=structData.mappingInfo.length)
{
terrainIndex-=structData.mappingInfo.length;
continue;
}
smallPixmap=createSmallPixmap(structData.structureAtlasPath,structData.mappingInfo[terrainIndex].name,0);
pix.drawPixmap(smallPixmap,x*data.miniMapTileSize, y*data.miniMapTileSize);
break;
}
}
else
{
Pixmap smallPixmap=createSmallPixmap(biome.tilesetAtlas,biome.tilesetName,terrainIndex);
pix.drawPixmap(smallPixmap,x*data.miniMapTileSize, y*data.miniMapTileSize);
}
}
}
}
for(Map.Entry<String, Pair<Pixmap, HashMap<String, Pixmap>>> entry:pixmapHash.entrySet())
{
entry.getValue().getLeft().dispose();
for(Map.Entry<String, Pixmap> pairEntry:entry.getValue().getRight().entrySet())
{
pairEntry.getValue().dispose();
}
}
drawPixmapNow(pix);
currentTime[0] = measureGenerationTime("mini map", currentTime[0]);
//////////////////
///////// distribute small rocks and trees across the map
//////////////////
mapObjectIds = new SpritesDataMap(getChunkSize(), data.tileSize, data.width / getChunkSize()); mapObjectIds = new SpritesDataMap(getChunkSize(), data.tileSize, data.width / getChunkSize());
for (int x = 0; x < width; x++) { for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) { for (int y = 0; y < height; y++) {
@@ -685,7 +755,6 @@ public class World implements Disposable, SaveFileContent {
} }
} }
} }
drawPixmapNow(pix);
mapMarkerPixmap.dispose(); mapMarkerPixmap.dispose();
biomeImage = pix; biomeImage = pix;
measureGenerationTime("sprites", currentTime[0]); measureGenerationTime("sprites", currentTime[0]);
@@ -699,6 +768,42 @@ public class World implements Disposable, SaveFileContent {
return this; return this;
} }
HashMap<String,Pair<Pixmap,HashMap<String,Pixmap>>> pixmapHash=new HashMap<>();
private Pixmap createSmallPixmap(String tilesetName, String key, int i) {
if(i>2)i=2;
String tileSetNameWithIndex;
if(i==0)
tileSetNameWithIndex=(key);
else
tileSetNameWithIndex=(key+"_"+i);
if(!pixmapHash.containsKey(tilesetName))
{
TextureAtlas.AtlasRegion region;
TextureAtlas atlas=Config.instance().getAtlas(tilesetName);
region=atlas.findRegion(tileSetNameWithIndex);
TextureData data=region.getTexture().getTextureData();
if (!data.isPrepared()) {
data.prepare();
}
pixmapHash.put(tilesetName,Pair.of(data.consumePixmap(),new HashMap<>()));
}
Pair<Pixmap,HashMap<String,Pixmap>> pair=pixmapHash.get(tilesetName);
if(!pair.getRight().containsKey(tileSetNameWithIndex))
{
TextureAtlas atlas=Config.instance().getAtlas(tilesetName);
TextureAtlas.AtlasRegion region=atlas.findRegion(tileSetNameWithIndex);
int tileSize=data.tileSize;
Pixmap smallPixmap=new Pixmap(data.miniMapTileSize,data.miniMapTileSize, Pixmap.Format.RGBA8888);
smallPixmap.setColor(0,0,0,0);
smallPixmap.fill();
smallPixmap.drawPixmap(pair.getLeft(),0,0,region.getRegionX(),region.getRegionY(),data.miniMapTileSize,data.miniMapTileSize);
pair.getRight().put(tileSetNameWithIndex,smallPixmap);
}
return pair.getRight().get(tileSetNameWithIndex);
}
class DrawInfo class DrawInfo
{ {
Pixmap mapMarkerPixmap; Pixmap mapMarkerPixmap;

View File

@@ -36,11 +36,28 @@
"Study Hall", "Study Hall",
"Witch's Clinic" "Witch's Clinic"
], ],
"restrictedEditions": [], "restrictedEditions": [
"HTR",
"HTR17",
"HTR18",
"HTR19",
"HTR20",
"PCEL",
"DS0",
"HHO",
"CMB1",
"UNF",
"UGL",
"UNH",
"UND",
"PUST",
"UST"
],
"difficulties": [ "difficulties": [
{ {
"name": "Easy", "name": "Easy",
"startingLife": 16, "startingLife": 16,
"startingMana": 32,
"staringMoney": 500, "staringMoney": 500,
"enemyLifeFactor": 0.8, "enemyLifeFactor": 0.8,
"spawnRank": 0, "spawnRank": 0,
@@ -68,6 +85,7 @@
},{ },{
"name": "Normal", "name": "Normal",
"startingLife": 12, "startingLife": 12,
"startingMana": 25,
"staringMoney": 250, "staringMoney": 250,
"startingDifficulty": true, "startingDifficulty": true,
"enemyLifeFactor": 1.0, "enemyLifeFactor": 1.0,
@@ -95,6 +113,7 @@
},{ },{
"name": "Hard", "name": "Hard",
"startingLife": 8, "startingLife": 8,
"startingMana": 10,
"staringMoney": 125, "staringMoney": 125,
"enemyLifeFactor": 1.5, "enemyLifeFactor": 1.5,
"spawnRank": 2, "spawnRank": 2,

View File

@@ -6,9 +6,9 @@
"activeFile": "map/main_story/plains_capital.tmx", "activeFile": "map/main_story/plains_capital.tmx",
"automapping.whileDrawing": false, "automapping.whileDrawing": false,
"expandedProjectPaths": [ "expandedProjectPaths": [
"map",
"tileset", "tileset",
"obj", "obj",
"map",
"map/main_story" "map/main_story"
], ],
"file.lastUsedOpenFilter": "All Files (*)", "file.lastUsedOpenFilter": "All Files (*)",
@@ -1548,11 +1548,14 @@
} }
}, },
"map/forest_town.tmx": { "map/forest_town.tmx": {
"expandedObjectLayers": [
4
],
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 254.99999999999997, "x": 239.66666666666666,
"y": 133 "y": 154
} }
}, },
"map/fort_1.tmx": { "map/fort_1.tmx": {
@@ -2124,48 +2127,60 @@
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 93, "x": 239.66666666666666,
"y": 911.3333333333333 "y": 911.6666666666666
} }
}, },
"map/main_story/forest_capital.tmx": { "map/main_story/forest_capital.tmx": {
"scale": 2, "expandedObjectLayers": [
"selectedLayer": 1, 4
],
"scale": 3,
"selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 320.25, "x": 319.8333333333333,
"y": 320 "y": 319.8333333333333
} }
}, },
"map/main_story/green_castle.tmx": { "map/main_story/green_castle.tmx": {
"scale": 3, "scale": 3,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 245.66666666666666, "x": 239.83333333333331,
"y": 239.66666666666666 "y": 239.83333333333331
} }
}, },
"map/main_story/island_capital.tmx": { "map/main_story/island_capital.tmx": {
"scale": 3, "expandedObjectLayers": [
"selectedLayer": 1, 4
],
"scale": 1,
"selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 237.83333333333331, "x": 319.5,
"y": 227 "y": 319.5
} }
}, },
"map/main_story/mountain_capital.tmx": { "map/main_story/mountain_capital.tmx": {
"scale": 1.5, "expandedObjectLayers": [
"selectedLayer": 2, 4
],
"scale": 4,
"selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 117.66666666666663, "x": 373.125,
"y": 412 "y": 216.75
} }
}, },
"map/main_story/plains_capital.tmx": { "map/main_story/plains_capital.tmx": {
"scale": 3, "expandedObjectLayers": [
"selectedLayer": 4, 4
],
"scale": 2,
"selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 527.8333333333333, "x": 410.75,
"y": 385.66666666666663 "y": 173.5
} }
}, },
"map/main_story/red_castle.tmx": { "map/main_story/red_castle.tmx": {
@@ -2173,7 +2188,7 @@
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 239.75, "x": 239.75,
"y": 240 "y": 239.75
} }
}, },
"map/main_story/skep.tmx": { "map/main_story/skep.tmx": {
@@ -2188,16 +2203,19 @@
"scale": 1.5, "scale": 1.5,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 240.9999999999999, "x": 239.66666666666666,
"y": 239.33333333333331 "y": 239.66666666666669
} }
}, },
"map/main_story/swamp_capital.tmx": { "map/main_story/swamp_capital.tmx": {
"expandedObjectLayers": [
4
],
"scale": 3, "scale": 3,
"selectedLayer": 5, "selectedLayer": 5,
"viewCenter": { "viewCenter": {
"x": 408.16666666666663, "x": 319.8333333333333,
"y": 257.3333333333333 "y": 319.8333333333333
} }
}, },
"map/main_story/unbenannt.tmx": { "map/main_story/unbenannt.tmx": {
@@ -2220,8 +2238,8 @@
"scale": 4, "scale": 4,
"selectedLayer": 4, "selectedLayer": 4,
"viewCenter": { "viewCenter": {
"x": 302.875, "x": 239.875,
"y": 185 "y": 239.875
} }
}, },
"map/maze_1.tmx": { "map/maze_1.tmx": {
@@ -2829,13 +2847,15 @@
"map/main_story/final_castle.tmx", "map/main_story/final_castle.tmx",
"map/main_story/white_castle.tmx", "map/main_story/white_castle.tmx",
"tileset/main.tsx", "tileset/main.tsx",
"tileset/buildings.tsx" "tileset/buildings.tsx",
"map/forest_town.tmx"
], ],
"project": "main.tiled-project", "project": "main.tiled-project",
"property.type": "string", "property.type": "string",
"recentFiles": [ "recentFiles": [
"map/main_story/green_castle.tmx", "map/main_story/green_castle.tmx",
"map/main_story/red_castle.tmx", "map/main_story/red_castle.tmx",
"map/forest_town.tmx",
"tileset/buildings.tsx", "tileset/buildings.tsx",
"tileset/main.tsx", "tileset/main.tsx",
"map/main_story/white_castle.tmx", "map/main_story/white_castle.tmx",
@@ -2844,8 +2864,7 @@
"map/main_story/island_capital.tmx", "map/main_story/island_capital.tmx",
"map/main_story/mountain_capital.tmx", "map/main_story/mountain_capital.tmx",
"map/main_story/swamp_capital.tmx", "map/main_story/swamp_capital.tmx",
"map/main_story/forest_capital.tmx", "map/main_story/forest_capital.tmx"
"map/main_story/plains_capital.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"?>
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="40" height="40" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="64"> <map version="1.9" tiledversion="1.9.1" orientation="orthogonal" renderorder="right-down" width="40" height="40" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="71">
<editorsettings> <editorsettings>
<export target="wastetown..tmx" format="tmx"/> <export target="wastetown..tmx" format="tmx"/>
</editorsettings> </editorsettings>
@@ -30,55 +30,20 @@
</layer> </layer>
<layer id="5" name="Overlay" width="40" height="40"> <layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib"> <data encoding="base64" compression="zlib">
eJzt1DsKgDAMBuB/8QEKnTP0PHoq9Up6OVezi0UwEEn/Dzq0U54FiIjemTIwZ+8ofLEGdlhLW7sAh3hHYYfz8T+D9mMM2hOveWt0Z9tAe0tlkXYo4h/9lFOnb/3HXCPWi4jqtCRg1bMl70juTinfiaheFwqTDNA= eJzt1DkKgDAQBdDfuAupp8h59FTqlfRytk4vBsHAyOQ/SJFUswYgInpnisAcraOwxRrkw1rmtQtwiHUU+XA+/qfTfvROe2I1b5XubO1obylt0BkbneyQxz/6KadG39qPuXqsFxGVaQnAqmcL1pHcnZK+E1G5Ls9cDMw=
</data> </data>
</layer> </layer>
<objectgroup id="4" name="Objects"> <objectgroup id="4" name="Objects">
<object id="41" template="../../obj/shop.tx" x="513" y="242">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="56" template="../../obj/shop.tx" x="208" y="162"> <object id="56" template="../../obj/shop.tx" x="208" y="162">
<properties> <properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/> <property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties> </properties>
</object> </object>
<object id="57" template="../../obj/shop.tx" x="449" y="132">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="43" template="../../obj/shop.tx" x="97" y="419">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="47" template="../../obj/inn.tx" x="199" y="419"/> <object id="47" template="../../obj/inn.tx" x="199" y="419"/>
<object id="49" template="../../obj/shop.tx" x="466" y="417">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="50" template="../../obj/shop.tx" x="450" y="309">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="51" template="../../obj/shop.tx" x="530" y="390">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="52" template="../../obj/shop.tx" x="256" y="194">
<properties>
<property name="shopList" value="Human,Boros,Orzhov,Selesnya,Selesnya,Azorius,White,Creature,Instant,Angel"/>
</properties>
</object>
<object id="53" template="../../obj/spellsmith.tx" x="327" y="228"/> <object id="53" template="../../obj/spellsmith.tx" x="327" y="228"/>
<object id="55" template="../../obj/shop.tx" x="479" y="453"> <object id="55" template="../../obj/shop.tx" x="479" y="453">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="Forest"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
@@ -92,15 +57,50 @@
<object id="61" template="../../obj/arena.tx" x="352" y="583"/> <object id="61" template="../../obj/arena.tx" x="352" y="583"/>
<object id="62" template="../../obj/shop.tx" x="361" y="370"> <object id="62" template="../../obj/shop.tx" x="361" y="370">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="GreenEquipment"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
<object id="63" template="../../obj/shop.tx" x="216" y="290"> <object id="63" template="../../obj/shop.tx" x="216" y="290">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="GreenItems"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
<object id="64" template="../../obj/shop.tx" x="466" y="417">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="65" template="../../obj/shop.tx" x="529" y="386">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="66" template="../../obj/shop.tx" x="449" y="305">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="67" template="../../obj/shop.tx" x="513" y="241">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="68" template="../../obj/shop.tx" x="448" y="130">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="69" template="../../obj/shop.tx" x="257" y="194">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
<object id="70" template="../../obj/shop.tx" x="97" y="417">
<properties>
<property name="shopList" value="Instant,Creature,Green,Gruul,Selesnya,Golgari,Simic,Elf "/>
</properties>
</object>
</objectgroup> </objectgroup>
</map> </map>

View File

@@ -90,13 +90,13 @@
<object id="61" template="../../obj/arena.tx" x="216" y="403"/> <object id="61" template="../../obj/arena.tx" x="216" y="403"/>
<object id="62" template="../../obj/shop.tx" x="360" y="370"> <object id="62" template="../../obj/shop.tx" x="360" y="370">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="BlueItems"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
<object id="63" template="../../obj/shop.tx" x="263" y="371"> <object id="63" template="../../obj/shop.tx" x="263" y="371">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="BlueEquipment"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>

View File

@@ -12,7 +12,7 @@
</layer> </layer>
<layer id="2" name="Ground" width="40" height="40"> <layer id="2" name="Ground" width="40" height="40">
<data encoding="base64" compression="zlib"> <data encoding="base64" compression="zlib">
eJzdmc1u00AQx4dYFFo1uTT2IcYhCKQCByRUPs4InqDwJnAnLULio6SJKB8VZy6FlymovAAtJ9QmHHJmB+/K4/Xsem2Z4DDSX7vtbta//MfeeqerLYCXzay2hFRs+ABP/Ljd1PRY6EKQzL0s1rvagkysNwBeeQAT0U6ljoW2vUQnZEzpOcP2rJm+xvkgZsC2J9SXXL0gzWaLMcM09LJzJkQ4f7WV5rpi+P400MdIcB213dgwBtKfX43s2Eibo9iwNXmmxw7pKx9t3l0/xTPqnunzBl46566eucZrx3kcvx54z+Jz8Ebobc30rhl7iXxrwrsbNdNNmU/Ma535MOaN77bQlxnrVgE+OjarsDHMK9/BCkDgV6tvK9Xx+X71PpnWNDHs1JzPNqbWOt0BWOjE/bALcK6bXf8oAvgRJT+HoZgXxv1ItN3w7/EtLAKccdBHy9jZRZ5P/R2exf13Zyl/TpX+PWwXezaRL2/OI8M7I8fwczmfvUi4+GcKjgHPCsfL9eXD4N6v5oHvotgPLsk9waXP8X0X+82h3HM+y3Zbtp9kO4zsfNz7H4657ilUd5fM+0pZ//LGioQpv3uaZ3uad+htUb4q8lskivKVye89je9pJ+kPNe8Gmqf/Mr8u8T/x7ZY8ryJf2bP0+6Y7XxnheshX1VlwHvhM7wd14Xsha5D7rfLn1gPZfpV8+9rvywrXw/eXw3ZSx+NqSlhDesDU7LjQn1/usx/clvoTmN/NnFrj2FBTdOHDz255APcbsSjrNUN9bUT6mN++zzOuyzWxZmy6hgvflNRr1Tqu+cD8bshacl9jpPXiE3INm5ccH62HTwknZRxBNtS9oWrJ3SDt45isperueR6Y+CYap+176nlDLlWL75G6MlerpvV3vY7M8Q0s/zvQPVRs1AvUb9TBixY= eJzdmc1u00AQx4dYFFo1uTT2IalDEEgFDkiIFs4InqDwJnAnLULio6SJaPkQ515KX6ag8gK0nFCbcMiZHbwrj9ez67VlgsNIf62TXa9/+Y+9XU9XGgCv62ltCanY8AGe+VG7qemp0OUgHntNzHejAalYrwG88QDGop1InQpte7HOSJ/SS4btRT15jUtBxIBtV6gnubpBks0WI4Zp4KXHjIlw/EojyXXd8PtpoI+h4DppurFh9KU/v2rpvqE2RrFha/JMjx1yrHy0eXfrHM+oe6aP63vJnLt65hpvHcdx/HrgPYvPwa7Qu4rpfT3yEvluC+9WK6Y1mU/Ma5X5MGaN767QlynrTg4+2jetsDHMKt/REkDgl6tvS+Xx+X75PpnmNDHsVJzP1qfmOt8CmGtFx+0OwHInPf9JCPAjjD+HbYBOW54j2uX23+Obmwe44KA9S9/FeZ5P/R2exv13byF7TJn+PW7mezaRL2vME8OekWP4uZjNnidc/DMFx4DvCqeL1eXD4PZXs8B3RawHV+Wa4HLM8X0X682xXHMOZLst28+yHYR2Pm7/h32uawrV/QXzulLUv6y+PGHK777m2b7mHXqbl6+M/OaJvHxF8vtA43veio8Hmnd9zdN/mV+X+J/4PhZ8X0W+ou/SH+rufEWE8yFfWe+Cs8Bn2h9Uhe+VrEEeNoq/tx7J9qvkO9S+LyqcD/cvx824jsfVlLCG9Iip2XGhP7/cuZ/cpvoTmN/NjFrjyFBTdOHDc7c8gIe1SJT1pqG+NiTHmN+ezzOuyzmxZmy6hgvfhNRr1Tyu+cD8bshack9jpPXiM3INm5ccH62HTwgnZRxCOtS9oWrJnSDp44jMperuWR6Y+MYap+136nlDLlWL75K6MlerpvV3vY7M8fUt/zvQPVRs1AvUb9TxixY=
</data> </data>
</layer> </layer>
<layer id="6" name="Ground2" width="40" height="40"> <layer id="6" name="Ground2" width="40" height="40">
@@ -92,13 +92,13 @@
<object id="61" template="../../obj/arena.tx" x="200" y="258"/> <object id="61" template="../../obj/arena.tx" x="200" y="258"/>
<object id="62" template="../../obj/shop.tx" x="361" y="258"> <object id="62" template="../../obj/shop.tx" x="361" y="258">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="RedEquipment"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
<object id="63" template="../../obj/shop.tx" x="409" y="259"> <object id="63" template="../../obj/shop.tx" x="409" y="259">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="RedItems"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>

View File

@@ -25,12 +25,12 @@
<property name="spriteLayer" type="bool" value="true"/> <property name="spriteLayer" type="bool" value="true"/>
</properties> </properties>
<data encoding="base64" compression="zlib"> <data encoding="base64" compression="zlib">
eJztmEsOgjAQhmdnaAIrVxo3ngIfG+M59CZ6EB9svBO683ESbaSx4vTFIJbYP5mknTrTD5AhU4B2aBMDbD2xXfzJlyYAo8KmDzsSbFIhx0Taf5zo+bB1F6UVcpj2T6VrPv2AL5fuo4qPet/qyKWKbTvfIaLvQYk15Zwx+h6U2MBHi5X9w8HLL8aCD1uTfU3wXR4snehp12I8Z+9zeXxjdntwLfoAyz6ND5NPzxeTT3yrHsC65y8fVot1fOXfN/l+CJsjPmEu70cdfJh8er6YfOLT1efyOjb/ZX0u1+jw/7PL6QNfpun3OJ9tD7qPv8On6gl5v8T5csW6KqZuPszfLb5zZ/Y+/5aa6I8oCnw0tZkv05wfmbRBzp8wnyleVZuo50NYvEtOm/Mhsa6q06aarOMz5cTiZbnUXtvaXDUn9fwsKOhfdAehc9Wd eJztmEsOgjAQhmdnJMGVK4gbT4HixnAO3eol9CC+Nt4J3fk4iRBpLDh9wACW2D+ZpJ06088WhrQA3dDOBdgbYgf3my8YAEwymyV2IVhYIUfIzT8dyPmw8TIKKuRQzR9w//n6A76YW0cRH3Xd6sgliu0637lPn4MSq8o5d+hzUGItHy2W949HHz9rMz5sjPe1wXdPWHr9tz2yduTk+3z76ejNkWrhAyx9Gh8mk/YXk0l8Gw9g6+nxrZK9Whf2q2k+rBbL1q/4+zbfD2YR4mNW5v2ogw+TSc8fJpP4ZPW5OI71f1mfizXaPn96OU3gO0nOeymf7hn06DbDJzoTpuellC8WjIti6ubD/MPsO3dz8v2m1Mb5iCLLR1OX+U6S+yOVdsj9E+ZTxYtqE/V+CIsvk1PnfoiNi+q0qibL+FQ5sXheZWqvbm2umpN6f2Zl9S96AU0B1qI=
</data> </data>
</layer> </layer>
<layer id="5" name="Overlay" width="40" height="40"> <layer id="5" name="Overlay" width="40" height="40">
<data encoding="base64" compression="zlib"> <data encoding="base64" compression="zlib">
eJzt1E0OgjAQBeC3UnasK+lhYCOJXgI3LZdAjuXRXDI7IpZGw88ovC9p0r/FSzodgIimcAbwMmqjnYRCjhZIrHaKV4+TdoLlHGx4PnY2vPPP8gwoMu0U+1bJ37p9+L8u8lbXkfc6S12WNj4P3Z2Tk2ye9bRLS9VfrD+H9rbUn4m+1aTAXUabaid59zTxNRER9X65nxPRejqGURMa eJzt1E0OgjAQBeC3EnddF9LD6EYSvARswEsIx/JoLp2dEUqDkTKA70ua9G/xkmkHIKJf1BZoZNysdhLySRxwdNopPj1S7QTxHJx/PnbWv7Nlpww4Z9op/lspf6ua+L8KqdV1pF4XeZe5C899d4nmEOv9hfqzb29P/ZnoW3cDtDI6o51k6GnDayIieltzPyei5bwA2sMSFQ==
</data> </data>
</layer> </layer>
<objectgroup id="4" name="Objects"> <objectgroup id="4" name="Objects">
@@ -133,7 +133,7 @@
&quot;itemNames&quot;: [&quot;Gold Armor&quot;,&quot;Gold Shield&quot;,&quot;Gold Boots&quot;,&quot;Bronze Sword&quot;] &quot;itemNames&quot;: [&quot;Gold Armor&quot;,&quot;Gold Shield&quot;,&quot;Gold Boots&quot;,&quot;Bronze Sword&quot;]
} }
],[{ ],[{
&quot;type&quot;: &quot;items&quot;, &quot;type&quot;: &quot;item&quot;,
&quot;probability&quot;: 1, &quot;probability&quot;: 1,
&quot;count&quot;: 1, &quot;count&quot;: 1,
&quot;itemNames&quot;: [&quot;Gold Armor&quot;,&quot;Gold Shield&quot;,&quot;Gold Boots&quot;,&quot;Bronze Sword&quot;] &quot;itemNames&quot;: [&quot;Gold Armor&quot;,&quot;Gold Shield&quot;,&quot;Gold Boots&quot;,&quot;Bronze Sword&quot;]

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="40" height="40" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="64"> <map version="1.9" tiledversion="1.9.1" orientation="orthogonal" renderorder="right-down" width="40" height="40" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="64">
<editorsettings> <editorsettings>
<export format="tmx"/> <export format="tmx"/>
</editorsettings> </editorsettings>
@@ -92,13 +92,13 @@
<object id="61" template="../../obj/arena.tx" x="168" y="178"/> <object id="61" template="../../obj/arena.tx" x="168" y="178"/>
<object id="62" template="../../obj/shop.tx" x="216" y="241"> <object id="62" template="../../obj/shop.tx" x="216" y="241">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="BlackItems"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>
<object id="63" template="../../obj/shop.tx" x="115" y="241"> <object id="63" template="../../obj/shop.tx" x="115" y="241">
<properties> <properties>
<property name="shopList" value="Plains"/> <property name="shopList" value="BlackEquipment"/>
<property name="signYOffset" type="float" value="0"/> <property name="signYOffset" type="float" value="0"/>
</properties> </properties>
</object> </object>

View File

@@ -754,7 +754,7 @@
"commandOnUse": "teleport to poi Spawn", "commandOnUse": "teleport to poi Spawn",
"iconName": "ColorlessRune", "iconName": "ColorlessRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -767,7 +767,7 @@
"commandOnUse": "teleport to poi \"Plains Capital\"", "commandOnUse": "teleport to poi \"Plains Capital\"",
"iconName": "WhiteRune", "iconName": "WhiteRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -780,7 +780,7 @@
"commandOnUse": "teleport to poi \"Swamp Capital\"", "commandOnUse": "teleport to poi \"Swamp Capital\"",
"iconName": "BlackRune", "iconName": "BlackRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -793,7 +793,7 @@
"commandOnUse": "teleport to poi \"Island Capital\"", "commandOnUse": "teleport to poi \"Island Capital\"",
"iconName": "BlueRune", "iconName": "BlueRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -806,7 +806,7 @@
"commandOnUse": "teleport to poi \"Mountain Capital\"", "commandOnUse": "teleport to poi \"Mountain Capital\"",
"iconName": "RedRune", "iconName": "RedRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -819,7 +819,7 @@
"commandOnUse": "teleport to poi \"Forest Capital\"", "commandOnUse": "teleport to poi \"Forest Capital\"",
"iconName": "GreenRune", "iconName": "GreenRune",
"questItem": true, "questItem": true,
"manaNeeded": 10, "manaNeeded": 1,
"cost": 100 "cost": 100
}, },
{ {
@@ -833,7 +833,7 @@
"commandOnUse": "heal percent 0.5", "commandOnUse": "heal percent 0.5",
"iconName": "WhiteStaff", "iconName": "WhiteStaff",
"questItem": true, "questItem": true,
"manaNeeded": 50, "manaNeeded": 5,
"cost": 1000 "cost": 1000
}, },
{ {
@@ -847,7 +847,7 @@
"commandOnUse": "hide 10", "commandOnUse": "hide 10",
"iconName": "BlackStaff", "iconName": "BlackStaff",
"questItem": true, "questItem": true,
"manaNeeded": 50, "manaNeeded": 5,
"cost": 1000 "cost": 1000
}, },
{ {
@@ -858,8 +858,9 @@
}, },
"description": "Lets you fly for some time", "description": "Lets you fly for some time",
"commandOnUse": "fly 10", "commandOnUse": "fly 10",
"iconName": "BlueStaff",
"questItem": true, "questItem": true,
"manaNeeded": 50, "manaNeeded": 5,
"cost": 1000 "cost": 1000
}, },
{ {
@@ -872,7 +873,7 @@
"commandOnUse": "remove enemy nearest", "commandOnUse": "remove enemy nearest",
"iconName": "RedStaff", "iconName": "RedStaff",
"questItem": true, "questItem": true,
"manaNeeded": 50, "manaNeeded": 5,
"cost": 1000 "cost": 1000
}, },
{ {
@@ -886,7 +887,7 @@
"commandOnUse": "sprint 10", "commandOnUse": "sprint 10",
"iconName": "GreenStaff", "iconName": "GreenStaff",
"questItem": true, "questItem": true,
"manaNeeded": 50, "manaNeeded": 5,
"cost": 1000 "cost": 1000
} }
] ]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -4,6 +4,7 @@
"playerStartPosX": 0.5, "playerStartPosX": 0.5,
"playerStartPosY": 0.5, "playerStartPosY": 0.5,
"noiseZoomBiome": 30, "noiseZoomBiome": 30,
"miniMapTileSize": 4,
"tileSize": 16, "tileSize": 16,
"roadTileset": { "roadTileset": {
"tilesetAtlas": "world/tilesets/terrain.atlas", "tilesetAtlas": "world/tilesets/terrain.atlas",