diff --git a/forge-adventure/fallback_skin/title_bg_lq.png b/forge-adventure/fallback_skin/title_bg_lq.png index c59b8bec200..c0461536ff2 100644 Binary files a/forge-adventure/fallback_skin/title_bg_lq.png and b/forge-adventure/fallback_skin/title_bg_lq.png differ diff --git a/forge-gui-android/assets/fallback_skin/title_bg_lq.png b/forge-gui-android/assets/fallback_skin/title_bg_lq.png index c59b8bec200..35f6ac78158 100644 Binary files a/forge-gui-android/assets/fallback_skin/title_bg_lq.png and b/forge-gui-android/assets/fallback_skin/title_bg_lq.png differ diff --git a/forge-gui-mobile-dev/fallback_skin/title_bg_lq.png b/forge-gui-mobile-dev/fallback_skin/title_bg_lq.png index c59b8bec200..d76fb626eb9 100644 Binary files a/forge-gui-mobile-dev/fallback_skin/title_bg_lq.png and b/forge-gui-mobile-dev/fallback_skin/title_bg_lq.png differ diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 67e2eab6e5d..c36c8a1bc24 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -69,10 +69,12 @@ public class RewardData { private static Iterable allCards; private static Iterable allEnemyCards; - private void initializeAllCards(){ + static private void initializeAllCards(){ RewardData legals = Config.instance().getConfigData().legalCards; - if(legals==null) allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); - else allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true)); + if(legals==null) + allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); + else + allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true)); //Filter out specific cards. allCards = Iterables.filter(allCards, new Predicate() { @Override @@ -92,7 +94,7 @@ public class RewardData { }); } - public Iterable getAllCards() { + static public Iterable getAllCards() { if(allCards == null) initializeAllCards(); return allCards; } diff --git a/forge-gui-mobile/src/forge/adventure/data/WorldData.java b/forge-gui-mobile/src/forge/adventure/data/WorldData.java index 16ae480c029..72391d7ac6a 100644 --- a/forge-gui-mobile/src/forge/adventure/data/WorldData.java +++ b/forge-gui-mobile/src/forge/adventure/data/WorldData.java @@ -24,6 +24,7 @@ public class WorldData implements Serializable { public float playerStartPosY; public float noiseZoomBiome; public int tileSize; + public int miniMapTileSize; public BiomeData roadTileset; public String biomesSprites; public float maxRoadDistance; diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 45575505465..9611188798e 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -93,8 +93,8 @@ public class AdventurePlayer implements Serializable, SaveFileContent { gold = 0; maxLife = 20; life = 20; - maxMana = 100; - mana = 100; + maxMana = 10; + mana = 10; clearDecks(); inventoryItems.clear(); equippedItems.clear(); diff --git a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java index bd376fbb89c..aff42929c41 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java @@ -132,7 +132,6 @@ public class ArenaScene extends UIScene implements IAfterMatch { private void startButton() { if(roundsWon ==0) { - goldLabel.setVisible(false); startDialog.show(stage); } else @@ -143,6 +142,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { int roundsWon =0; private void startArena() { + goldLabel.setVisible(false); arenaStarted=true; startButton.setText(Forge.getLocalizer().getMessage("lblContinue")); doneButton.setText(Forge.getLocalizer().getMessage("lblConcede")); @@ -152,26 +152,26 @@ public class ArenaScene extends UIScene implements IAfterMatch { } @Override public void setWinner(boolean winner) { - Array winners=new Array<>(); - Array winnersEnemies=new Array<>(); - for(int i=0;i winners=new Array<>(); + Array winnersEnemies=new Array<>(); + for(int i=0;i editions = StaticData.instance().getSortedEditions(); 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 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())); }).collect(Collectors.toList()); editionList = ui.findActor("BSelectPlane"); @@ -222,8 +230,7 @@ public class SpellSmithScene extends UIScene { public void filterResults() { - RewardData R = new RewardData(); - Iterable P = R.getAllCards(); + Iterable P = RewardData.getAllCards(); goldLabel.setText("Gold: "+ Current.player().getGold()); float totalCost = basePrice * Current.player().goldModifier(); final List colorFilter = new ArrayList<>(); @@ -251,7 +258,9 @@ public class SpellSmithScene extends UIScene { P = StreamSupport.stream(P.spliterator(), false).filter(input -> { //L|Basic Land, C|Common, U|Uncommon, R|Rare, M|Mythic Rare, S|Special, N|None 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(!rarity.isEmpty()) if (!input.getRarity().toString().equals(rarity)) return false; if(cost_low > -1) { diff --git a/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java b/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java index dacaddb6b18..86116073ae2 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java +++ b/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java @@ -154,6 +154,18 @@ public static ConsoleCommandInterpreter getInstance() Current.player().giveGold(amount); 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 -> { if(s.length<1) return "Command needs 1 parameter: Amount."; int amount; diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 6a95edcb0cc..432e2af860d 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -283,7 +283,9 @@ public class CardUtil { if(reward.getType()== Reward.Type.Life) return reward.getCount()*500; 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; } diff --git a/forge-gui-mobile/src/forge/adventure/util/DrawOnPixmap.java b/forge-gui-mobile/src/forge/adventure/util/DrawOnPixmap.java index cd813bb9ba7..c794b6577e9 100644 --- a/forge-gui-mobile/src/forge/adventure/util/DrawOnPixmap.java +++ b/forge-gui-mobile/src/forge/adventure/util/DrawOnPixmap.java @@ -24,9 +24,9 @@ public abstract class DrawOnPixmap { textureData.prepare(); } 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) { //used for big numbers on Gold/Life for reward... BitmapFont font = bigText ? Controls.getBitmapFont("big") : Controls.getBitmapFont("default"); diff --git a/forge-gui-mobile/src/forge/adventure/world/World.java b/forge-gui-mobile/src/forge/adventure/world/World.java index add36048111..6afb79eed3c 100644 --- a/forge-gui-mobile/src/forge/adventure/world/World.java +++ b/forge-gui-mobile/src/forge/adventure/world/World.java @@ -32,8 +32,7 @@ import java.util.*; * Class that will create the world from the configuration */ public class World implements Disposable, SaveFileContent { - private WorldData data; - static final private int hudMapScale=4; + private WorldData data; private Pixmap biomeImage; private long[][] biomeMap; private int[][] terrainMap; @@ -292,6 +291,9 @@ public class World implements Disposable, SaveFileContent { long startTime = System.currentTimeMillis(); loadWorldData(); +////////////////// +///////// initialize +////////////////// if (seed == 0) { seed = random.nextLong(); @@ -306,7 +308,6 @@ public class World implements Disposable, SaveFileContent { //save at all data biomeMap = new long[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 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}; currentTime[0] = measureGenerationTime("loading data", currentTime[0]); HashMap structureDataMap = new HashMap<>(); +////////////////// +///////// calculation structure position with wavefunctioncollapse +////////////////// for (BiomeData biome : data.GetBiomes()) { if (biome.structures != null) { 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(() -> { for (BiomeData biome : data.GetBiomes()) { @@ -371,9 +376,6 @@ public class World implements Disposable, SaveFileContent { color.toHsv(hsv); int count = (int) ((noiseValue - 0.5) * 10 / 4); //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]); int terrainCounter = 1; 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; if (terrainNoise >= terrain.min && terrainNoise <= terrain.max) { terrainMap[x][y] = terrainCounter; + //pix.fillRectangle(x*data.miniMapTileSize, y*data.miniMapTileSize,data.miniMapTileSize,data.miniMapTileSize); } terrainCounter++; } @@ -404,8 +407,8 @@ public class World implements Disposable, SaveFileContent { int structureIndex = structure.objectID(structureXStart, structureYStart); if (structureIndex >= 0) { - pix.setColor(data.mappingInfo[structureIndex].getColor()); - pix.fillRectangle(x*hudMapScale, y*hudMapScale,hudMapScale,hudMapScale); + //pix.setColor(data.mappingInfo[structureIndex].getColor()); + //pix.fillRectangle(x*data.miniMapTileSize, y*data.miniMapTileSize,data.miniMapTileSize,data.miniMapTileSize); terrainMap[x][y] = terrainCounter + structureIndex; if (structure.collision(structureXStart, structureYStart)) terrainMap[x][y] |= collisionBit; @@ -423,6 +426,9 @@ public class World implements Disposable, SaveFileContent { } currentTime[0] = measureGenerationTime("biomes in total", currentTime[0]); +////////////////// +///////// set poi placement +////////////////// mapPoiIds = new PointOfInterestMap(getChunkSize(), data.tileSize, data.width / getChunkSize(), data.height / getChunkSize()); List towns = new ArrayList<>(); List notTowns = new ArrayList<>(); @@ -505,8 +511,8 @@ public class World implements Disposable, SaveFileContent { if(marker!=null) { - int xInPixels= (int) ((x / data.tileSize)*hudMapScale); - int yInPixels= (int) ((height-(y / data.tileSize))*hudMapScale); + int xInPixels= (int) ((x / data.tileSize)*data.miniMapTileSize); + int yInPixels= (int) ((height-(y / data.tileSize))*data.miniMapTileSize); xInPixels-=(marker.getRegionWidth() /2); yInPixels-=(marker.getRegionHeight() /2); drawPixmapLater(mapMarkerPixmap,marker.getRegionX(),marker.getRegionY(), @@ -527,7 +533,9 @@ public class World implements Disposable, SaveFileContent { } currentTime[0] = measureGenerationTime("poi placement", currentTime[0]); - //sort towns +////////////////// +///////// sort towns and build roads in between +////////////////// List> allSortedTowns = new ArrayList<>(); HashSet 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))); } biomeIndex[0]++; - pix.setColor(0.8f, 0.8f, 0.9f, 1f); //reset terrain path to the next town for (Pair poiToTown : allPOIPathsToNextTown) { @@ -635,11 +642,10 @@ public class World implements Disposable, SaveFileContent { int sy = startY < y1 ? 1 : -1; int err = dx - dy; int e2; - while (true) { + for (int i=0;i<1000;i++) { if (startX < 0 || startY <= 0 || startX >= width || startY > height) continue; biomeMap[startX][height - startY] |= (1L << biomeIndex[0]); terrainMap[startX][height - startY] = 0; - pix.fillRectangle(startX*hudMapScale, (height - startY)*hudMapScale,hudMapScale,hudMapScale); if (startX == x1 && startY == y1) break; @@ -655,6 +661,70 @@ public class World implements Disposable, SaveFileContent { } 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>> entry:pixmapHash.entrySet()) + { + entry.getValue().getLeft().dispose(); + for(Map.Entry 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()); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { @@ -685,7 +755,6 @@ public class World implements Disposable, SaveFileContent { } } } - drawPixmapNow(pix); mapMarkerPixmap.dispose(); biomeImage = pix; measureGenerationTime("sprites", currentTime[0]); @@ -699,6 +768,42 @@ public class World implements Disposable, SaveFileContent { return this; } + HashMap>> 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> 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 { Pixmap mapMarkerPixmap; diff --git a/forge-gui/res/adventure/Shandalar/config.json b/forge-gui/res/adventure/Shandalar/config.json index 1ad952fb260..26ac2cc900b 100644 --- a/forge-gui/res/adventure/Shandalar/config.json +++ b/forge-gui/res/adventure/Shandalar/config.json @@ -36,11 +36,28 @@ "Study Hall", "Witch's Clinic" ], - "restrictedEditions": [], + "restrictedEditions": [ + "HTR", + "HTR17", + "HTR18", + "HTR19", + "HTR20", + "PCEL", + "DS0", + "HHO", + "CMB1", + "UNF", + "UGL", + "UNH", + "UND", + "PUST", + "UST" + ], "difficulties": [ { "name": "Easy", "startingLife": 16, + "startingMana": 32, "staringMoney": 500, "enemyLifeFactor": 0.8, "spawnRank": 0, @@ -68,6 +85,7 @@ },{ "name": "Normal", "startingLife": 12, + "startingMana": 25, "staringMoney": 250, "startingDifficulty": true, "enemyLifeFactor": 1.0, @@ -95,6 +113,7 @@ },{ "name": "Hard", "startingLife": 8, + "startingMana": 10, "staringMoney": 125, "enemyLifeFactor": 1.5, "spawnRank": 2, diff --git a/forge-gui/res/adventure/Shandalar/maps/main.tiled-session b/forge-gui/res/adventure/Shandalar/maps/main.tiled-session index 8f94a983c3a..1c27e159d6e 100644 --- a/forge-gui/res/adventure/Shandalar/maps/main.tiled-session +++ b/forge-gui/res/adventure/Shandalar/maps/main.tiled-session @@ -6,9 +6,9 @@ "activeFile": "map/main_story/plains_capital.tmx", "automapping.whileDrawing": false, "expandedProjectPaths": [ + "map", "tileset", "obj", - "map", "map/main_story" ], "file.lastUsedOpenFilter": "All Files (*)", @@ -1548,11 +1548,14 @@ } }, "map/forest_town.tmx": { + "expandedObjectLayers": [ + 4 + ], "scale": 1.5, "selectedLayer": 4, "viewCenter": { - "x": 254.99999999999997, - "y": 133 + "x": 239.66666666666666, + "y": 154 } }, "map/fort_1.tmx": { @@ -2124,48 +2127,60 @@ "scale": 1.5, "selectedLayer": 4, "viewCenter": { - "x": 93, - "y": 911.3333333333333 + "x": 239.66666666666666, + "y": 911.6666666666666 } }, "map/main_story/forest_capital.tmx": { - "scale": 2, - "selectedLayer": 1, + "expandedObjectLayers": [ + 4 + ], + "scale": 3, + "selectedLayer": 5, "viewCenter": { - "x": 320.25, - "y": 320 + "x": 319.8333333333333, + "y": 319.8333333333333 } }, "map/main_story/green_castle.tmx": { "scale": 3, "selectedLayer": 4, "viewCenter": { - "x": 245.66666666666666, - "y": 239.66666666666666 + "x": 239.83333333333331, + "y": 239.83333333333331 } }, "map/main_story/island_capital.tmx": { - "scale": 3, - "selectedLayer": 1, + "expandedObjectLayers": [ + 4 + ], + "scale": 1, + "selectedLayer": 5, "viewCenter": { - "x": 237.83333333333331, - "y": 227 + "x": 319.5, + "y": 319.5 } }, "map/main_story/mountain_capital.tmx": { - "scale": 1.5, - "selectedLayer": 2, + "expandedObjectLayers": [ + 4 + ], + "scale": 4, + "selectedLayer": 5, "viewCenter": { - "x": 117.66666666666663, - "y": 412 + "x": 373.125, + "y": 216.75 } }, "map/main_story/plains_capital.tmx": { - "scale": 3, - "selectedLayer": 4, + "expandedObjectLayers": [ + 4 + ], + "scale": 2, + "selectedLayer": 5, "viewCenter": { - "x": 527.8333333333333, - "y": 385.66666666666663 + "x": 410.75, + "y": 173.5 } }, "map/main_story/red_castle.tmx": { @@ -2173,7 +2188,7 @@ "selectedLayer": 4, "viewCenter": { "x": 239.75, - "y": 240 + "y": 239.75 } }, "map/main_story/skep.tmx": { @@ -2188,16 +2203,19 @@ "scale": 1.5, "selectedLayer": 4, "viewCenter": { - "x": 240.9999999999999, - "y": 239.33333333333331 + "x": 239.66666666666666, + "y": 239.66666666666669 } }, "map/main_story/swamp_capital.tmx": { + "expandedObjectLayers": [ + 4 + ], "scale": 3, "selectedLayer": 5, "viewCenter": { - "x": 408.16666666666663, - "y": 257.3333333333333 + "x": 319.8333333333333, + "y": 319.8333333333333 } }, "map/main_story/unbenannt.tmx": { @@ -2220,8 +2238,8 @@ "scale": 4, "selectedLayer": 4, "viewCenter": { - "x": 302.875, - "y": 185 + "x": 239.875, + "y": 239.875 } }, "map/maze_1.tmx": { @@ -2829,13 +2847,15 @@ "map/main_story/final_castle.tmx", "map/main_story/white_castle.tmx", "tileset/main.tsx", - "tileset/buildings.tsx" + "tileset/buildings.tsx", + "map/forest_town.tmx" ], "project": "main.tiled-project", "property.type": "string", "recentFiles": [ "map/main_story/green_castle.tmx", "map/main_story/red_castle.tmx", + "map/forest_town.tmx", "tileset/buildings.tsx", "tileset/main.tsx", "map/main_story/white_castle.tmx", @@ -2844,8 +2864,7 @@ "map/main_story/island_capital.tmx", "map/main_story/mountain_capital.tmx", "map/main_story/swamp_capital.tmx", - "map/main_story/forest_capital.tmx", - "map/main_story/plains_capital.tmx" + "map/main_story/forest_capital.tmx" ], "resizeMap.removeObjects": true, "textEdit.monospace": true diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx index 1d95860399d..185c0948e4a 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/forest_capital.tmx @@ -1,5 +1,5 @@ - + @@ -30,55 +30,20 @@ - eJzt1DsKgDAMBuB/8QEKnTP0PHoq9Up6OVezi0UwEEn/Dzq0U54FiIjemTIwZ+8ofLEGdlhLW7sAh3hHYYfz8T+D9mMM2hOveWt0Z9tAe0tlkXYo4h/9lFOnb/3HXCPWi4jqtCRg1bMl70juTinfiaheFwqTDNA= + eJzt1DkKgDAQBdDfuAupp8h59FTqlfRytk4vBsHAyOQ/SJFUswYgInpnisAcraOwxRrkw1rmtQtwiHUU+XA+/qfTfvROe2I1b5XubO1obylt0BkbneyQxz/6KadG39qPuXqsFxGVaQnAqmcL1pHcnZK+E1G5Ls9cDMw= - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -92,15 +57,50 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx index 9403542ef4e..d04bb11f3b8 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/island_capital.tmx @@ -90,13 +90,13 @@ - + - + diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx index e8d72bfd64c..5cc73871ac8 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/mountain_capital.tmx @@ -12,7 +12,7 @@ - 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= @@ -92,13 +92,13 @@ - + - + diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx index bb9d1f95e14..8e84c7c50bb 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/plains_capital.tmx @@ -25,12 +25,12 @@ - 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= - eJzt1E0OgjAQBeC3UnasK+lhYCOJXgI3LZdAjuXRXDI7IpZGw88ovC9p0r/FSzodgIimcAbwMmqjnYRCjhZIrHaKV4+TdoLlHGx4PnY2vPPP8gwoMu0U+1bJ37p9+L8u8lbXkfc6S12WNj4P3Z2Tk2ye9bRLS9VfrD+H9rbUn4m+1aTAXUabaid59zTxNRER9X65nxPRejqGURMa + eJzt1E0OgjAQBeC3EnddF9LD6EYSvARswEsIx/JoLp2dEUqDkTKA70ua9G/xkmkHIKJf1BZoZNysdhLySRxwdNopPj1S7QTxHJx/PnbWv7Nlpww4Z9op/lspf6ua+L8KqdV1pF4XeZe5C899d4nmEOv9hfqzb29P/ZnoW3cDtDI6o51k6GnDayIieltzPyei5bwA2sMSFQ== @@ -133,7 +133,7 @@ "itemNames": ["Gold Armor","Gold Shield","Gold Boots","Bronze Sword"] } ],[{ - "type": "items", + "type": "item", "probability": 1, "count": 1, "itemNames": ["Gold Armor","Gold Shield","Gold Boots","Bronze Sword"] diff --git a/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx b/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx index b2605d08523..7c0999dcaa5 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/main_story/swamp_capital.tmx @@ -1,5 +1,5 @@ - + @@ -92,13 +92,13 @@ - + - + diff --git a/forge-gui/res/adventure/Shandalar/world/items.json b/forge-gui/res/adventure/Shandalar/world/items.json index a35c33e2a47..1d4b168bbcd 100644 --- a/forge-gui/res/adventure/Shandalar/world/items.json +++ b/forge-gui/res/adventure/Shandalar/world/items.json @@ -754,7 +754,7 @@ "commandOnUse": "teleport to poi Spawn", "iconName": "ColorlessRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -767,7 +767,7 @@ "commandOnUse": "teleport to poi \"Plains Capital\"", "iconName": "WhiteRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -780,7 +780,7 @@ "commandOnUse": "teleport to poi \"Swamp Capital\"", "iconName": "BlackRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -793,7 +793,7 @@ "commandOnUse": "teleport to poi \"Island Capital\"", "iconName": "BlueRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -806,7 +806,7 @@ "commandOnUse": "teleport to poi \"Mountain Capital\"", "iconName": "RedRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -819,7 +819,7 @@ "commandOnUse": "teleport to poi \"Forest Capital\"", "iconName": "GreenRune", "questItem": true, - "manaNeeded": 10, + "manaNeeded": 1, "cost": 100 }, { @@ -833,7 +833,7 @@ "commandOnUse": "heal percent 0.5", "iconName": "WhiteStaff", "questItem": true, - "manaNeeded": 50, + "manaNeeded": 5, "cost": 1000 }, { @@ -847,7 +847,7 @@ "commandOnUse": "hide 10", "iconName": "BlackStaff", "questItem": true, - "manaNeeded": 50, + "manaNeeded": 5, "cost": 1000 }, { @@ -858,8 +858,9 @@ }, "description": "Lets you fly for some time", "commandOnUse": "fly 10", + "iconName": "BlueStaff", "questItem": true, - "manaNeeded": 50, + "manaNeeded": 5, "cost": 1000 }, { @@ -872,7 +873,7 @@ "commandOnUse": "remove enemy nearest", "iconName": "RedStaff", "questItem": true, - "manaNeeded": 50, + "manaNeeded": 5, "cost": 1000 }, { @@ -886,7 +887,7 @@ "commandOnUse": "sprint 10", "iconName": "GreenStaff", "questItem": true, - "manaNeeded": 50, + "manaNeeded": 5, "cost": 1000 } ] \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/world/tilesets/autotiles.png b/forge-gui/res/adventure/Shandalar/world/tilesets/autotiles.png index d3dc55c0a94..f784da2c77e 100644 Binary files a/forge-gui/res/adventure/Shandalar/world/tilesets/autotiles.png and b/forge-gui/res/adventure/Shandalar/world/tilesets/autotiles.png differ diff --git a/forge-gui/res/adventure/Shandalar/world/tilesets/structures.png b/forge-gui/res/adventure/Shandalar/world/tilesets/structures.png index b77300326d7..d75441d3dde 100644 Binary files a/forge-gui/res/adventure/Shandalar/world/tilesets/structures.png and b/forge-gui/res/adventure/Shandalar/world/tilesets/structures.png differ diff --git a/forge-gui/res/adventure/Shandalar/world/world.json b/forge-gui/res/adventure/Shandalar/world/world.json index 953bf8fb70f..f73b5d45a01 100644 --- a/forge-gui/res/adventure/Shandalar/world/world.json +++ b/forge-gui/res/adventure/Shandalar/world/world.json @@ -4,6 +4,7 @@ "playerStartPosX": 0.5, "playerStartPosY": 0.5, "noiseZoomBiome": 30, +"miniMapTileSize": 4, "tileSize": 16, "roadTileset": { "tilesetAtlas": "world/tilesets/terrain.atlas",