diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index ee4b008766b..0183fc15070 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -4,9 +4,7 @@ import java.util.ArrayDeque; import java.util.Deque; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ShaderProgram; @@ -44,6 +42,8 @@ public class Graphics { private final ShaderProgram shaderWarp = new ShaderProgram(Gdx.files.internal("shaders").child("grayscale.vert"), Gdx.files.internal("shaders").child("warp.frag")); private final ShaderProgram shaderUnderwater = new ShaderProgram(Gdx.files.internal("shaders").child("grayscale.vert"), Gdx.files.internal("shaders").child("underwater.frag")); + private Texture dummyTexture = null; + public Graphics() { ShaderProgram.pedantic = false; } @@ -87,6 +87,7 @@ public class Graphics { shaderGrayscale.dispose(); shaderUnderwater.dispose(); shaderWarp.dispose(); + if(dummyTexture != null) dummyTexture.dispose(); } public SpriteBatch getBatch() { @@ -1124,4 +1125,14 @@ public class Graphics { int brightness = ((c_r * 299) + (c_g * 587) + (c_b * 114)) / 1000; return brightness > 155 ? Color.valueOf("#171717") : Color.valueOf("#fffffd"); } + + public Texture getDummyTexture(){ + if (dummyTexture == null){ + Pixmap P = new Pixmap(1, 1, Pixmap.Format.RGBA8888); + P.setColor(1f,1f,1f,1f); + P.drawPixel(0, 0); + dummyTexture = new Texture(P); + } + return dummyTexture; + } } diff --git a/forge-gui-mobile/src/forge/adventure/character/EnemySprite.java b/forge-gui-mobile/src/forge/adventure/character/EnemySprite.java index 40fb555258f..a4d65058e0e 100644 --- a/forge-gui-mobile/src/forge/adventure/character/EnemySprite.java +++ b/forge-gui-mobile/src/forge/adventure/character/EnemySprite.java @@ -1,9 +1,12 @@ package forge.adventure.character; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Array; +import forge.Forge; import forge.adventure.data.EffectData; import forge.adventure.data.EnemyData; import forge.adventure.data.RewardData; @@ -47,7 +50,6 @@ public class EnemySprite extends CharacterSprite { return data; } - public Array getRewards() { Array ret=new Array(); if(data.rewards == null) @@ -58,5 +60,57 @@ public class EnemySprite extends CharacterSprite { return ret; } + private void drawColorHints(Batch batch){ + int size = Math.min(data.colors.length(), 6); + int DX = Math.round(getX() - 2); + int DY = Math.round(getY()); + + for(int i = 0; i < size; i++){ + char C = data.colors.toUpperCase().charAt(i); + switch (C) { + default: break; + case 'C': { + batch.setColor(Color.DARK_GRAY); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + case 'B': { + batch.setColor(Color.PURPLE); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + case 'G': { + batch.setColor(Color.GREEN); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + case 'R': { + batch.setColor(Color.RED); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + case 'U': { + batch.setColor(Color.BLUE); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + case 'W': { + batch.setColor(Color.WHITE); + batch.draw(Forge.getGraphics().getDummyTexture(), DX, DY, 2, 2); + DY += 2; break; + } + } + } + batch.setColor(Color.WHITE); + } + + @Override + public void draw(Batch batch, float parentAlpha) { + super.draw(batch, parentAlpha); + if(Current.player().hasColorView() && !data.colors.isEmpty()) { + drawColorHints(batch); + } + } + } diff --git a/forge-gui-mobile/src/forge/adventure/character/PlayerSprite.java b/forge-gui-mobile/src/forge/adventure/character/PlayerSprite.java index 7431fbaf1f4..eac20f7d387 100644 --- a/forge-gui-mobile/src/forge/adventure/character/PlayerSprite.java +++ b/forge-gui-mobile/src/forge/adventure/character/PlayerSprite.java @@ -25,8 +25,9 @@ public class PlayerSprite extends CharacterSprite { PlayerSprite.this.updatePlayer(); } }); - playerSpeed=Config.instance().getConfigData().playerBaseSpeed; - Current.player().onEquipmentChanged(() -> playerSpeedEquipmentModifier=Current.player().equipmentSpeed()); + playerSpeed = Config.instance().getConfigData().playerBaseSpeed; + Current.player().onBlessing( () -> playerSpeedEquipmentModifier = Current.player().equipmentSpeed() ); + Current.player().onEquipmentChanged( () -> playerSpeedEquipmentModifier=Current.player().equipmentSpeed() ); } private void updatePlayer() { diff --git a/forge-gui-mobile/src/forge/adventure/data/DialogData.java b/forge-gui-mobile/src/forge/adventure/data/DialogData.java index 27aa1d982e3..3a9de3564f1 100644 --- a/forge-gui-mobile/src/forge/adventure/data/DialogData.java +++ b/forge-gui-mobile/src/forge/adventure/data/DialogData.java @@ -16,6 +16,8 @@ public class DialogData { static public class ActionData { public String removeItem; //Remove item name from inventory. public String addItem; //Add item name to inventory. + public int addLife = 0; //Gives the player X health. Negative to take. + public int addGold = 0; //Gives the player X gold. Negative to take. public int deleteMapObject = 0; //Remove ID from the map. -1 for self. public int battleWithActorID = 0; //Start a battle with enemy ID. -1 for self if possible. public EffectData giveBlessing; //Give a blessing to the player. @@ -27,6 +29,8 @@ public class DialogData { public int flag = 0; //Check for a local dungeon flag. public int actorID = 0; //Check for an actor ID. public String hasBlessing = null; //Check for specific blessing, if named. + public int hasGold = 0; //Check for player gold. True if gold is equal or higher than X. + public int hasLife = 0; //Check for player life. True if life is equal or higher than X. public String colorIdentity = null;//Check for player's current color identity. public boolean not = false; //Reverse the result of a condition ("actorID":"XX" + "not":true => true if XX is not in the map.) } diff --git a/forge-gui-mobile/src/forge/adventure/data/EffectData.java b/forge-gui-mobile/src/forge/adventure/data/EffectData.java index 4b313b95efb..da8b0d99c78 100644 --- a/forge-gui-mobile/src/forge/adventure/data/EffectData.java +++ b/forge-gui-mobile/src/forge/adventure/data/EffectData.java @@ -51,6 +51,8 @@ public class EffectData implements Serializable { String description = ""; if(this.name != null && !this.name.isEmpty()) description += this.name + "\n"; + if(this.colorView) + description += "Manasight.\n"; if(this.lifeModifier != 0) description += "Life: " + ((this.lifeModifier > 0) ? "+" : "") + this.lifeModifier + "\n"; if(this.startBattleWithCard != null && this.startBattleWithCard.length != 0) diff --git a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java index 846d288aaa0..c78e63ce026 100644 --- a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java +++ b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java @@ -1,7 +1,11 @@ package forge.adventure.data; import forge.adventure.util.CardUtil; +import forge.card.ColorSet; import forge.deck.Deck; +import forge.deck.DeckProxy; +import forge.game.GameType; +import forge.model.FModel; /** * Data class that will be used to read Json configuration files @@ -19,29 +23,25 @@ public class EnemyData { public int life; public RewardData[] rewards; public String[] equipment; + public String colors = ""; - public EnemyData() - { - - } + public EnemyData() { } public EnemyData(EnemyData enemyData) { - name =enemyData.name; - sprite =enemyData.sprite; - deck =enemyData.deck; - ai =enemyData.ai; - spawnRate =enemyData.spawnRate; - difficulty =enemyData.difficulty ; - speed =enemyData.speed; - life =enemyData.life; - equipment =enemyData.equipment; - if(enemyData.rewards==null) - { + name = enemyData.name; + sprite = enemyData.sprite; + deck = enemyData.deck; + ai = enemyData.ai; + spawnRate = enemyData.spawnRate; + difficulty = enemyData.difficulty; + speed = enemyData.speed; + life = enemyData.life; + equipment = enemyData.equipment; + colors = enemyData.colors; + if(enemyData.rewards == null) { rewards=null; - } - else - { - rewards =new RewardData[enemyData.rewards.length]; - for(int i=0;i(getAllEnemies())) - { + for(EnemyData data: new Array.ArrayIterator<>(getAllEnemies())) { if(data.name.equals(enemy)) return data; } diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index eee7f13c514..eb83097dc10 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -48,11 +48,8 @@ public class AdventurePlayer implements Serializable, SaveFileContent { private final Array inventoryItems=new Array<>(); private final HashMap equippedItems=new HashMap<>(); - public AdventurePlayer() - { - - for(int i=0;i 0.0) { //Avoid negative speeds. It would be silly. + if(data != null && data.effect.moveSpeed > 0.0) //Avoid negative speeds. It would be silly. factor*=data.effect.moveSpeed; - } + } + if(blessing != null) { //If a blessing gives speed, take it into account. + if(blessing.moveSpeed > 0.0) + factor *= blessing.moveSpeed; } return factor; } diff --git a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java index 65aea1de226..dea63ec1147 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java @@ -63,91 +63,92 @@ public class InventoryScene extends UIScene { @Override public void resLoaded() { super.resLoaded(); - equipOverlay = new Texture(Config.instance().getFile(Paths.ITEMS_EQUIP)); - ui.onButtonPress("return", () -> done()); - leave = ui.findActor("return"); - ui.onButtonPress("delete", () -> confirm.show(stage)); - ui.onButtonPress("equip", () -> equip()); - equipButton = ui.findActor("equip"); - deleteButton = ui.findActor("delete"); - itemDescription = ui.findActor("item_description"); - leave.getLabel().setText(Forge.getLocalizer().getMessage("lblBack")); + equipOverlay = new Texture(Config.instance().getFile(Paths.ITEMS_EQUIP)); + ui.onButtonPress("return", () -> done()); + leave = ui.findActor("return"); + ui.onButtonPress("delete", () -> confirm.show(stage)); + ui.onButtonPress("equip", () -> equip()); + equipButton = ui.findActor("equip"); + deleteButton = ui.findActor("delete"); + itemDescription = ui.findActor("item_description"); + itemDescription.setAlignment(Align.topLeft); + leave.getLabel().setText(Forge.getLocalizer().getMessage("lblBack")); - inventoryButtons=new Array<>(); - equipmentSlots=new HashMap<>(); + inventoryButtons=new Array<>(); + equipmentSlots=new HashMap<>(); - Array children = ui.getChildren(); - for (int i = 0, n = children.size; i < n; i++) + Array children = ui.getChildren(); + for (int i = 0, n = children.size; i < n; i++) + { + + if(children.get(i).getName()!=null&&children.get(i).getName().startsWith("Equipment")) { - - if(children.get(i).getName()!=null&&children.get(i).getName().startsWith("Equipment")) - { - String slotName=children.get(i).getName().split("_")[1]; - equipmentSlots.put(slotName, (Button) children.get(i)); - Actor slot=children.get(i); - slot.addListener(new ChangeListener() { - @Override - public void changed(ChangeEvent event, Actor actor) { - Button button=((Button) actor); - if(button.isChecked()) + String slotName=children.get(i).getName().split("_")[1]; + equipmentSlots.put(slotName, (Button) children.get(i)); + Actor slot=children.get(i); + slot.addListener(new ChangeListener() { + @Override + public void changed(ChangeEvent event, Actor actor) { + Button button=((Button) actor); + if(button.isChecked()) + { + for(Button otherButton:equipmentSlots.values()) { - for(Button otherButton:equipmentSlots.values()) - { - if(button!=otherButton&&otherButton.isChecked()){ - otherButton.setChecked(false); - } - } - String item=Current.player().itemInSlot(slotName); - if(item!=null&&item!="") - { - Button changeButton=null; - for(Button invButton:inventoryButtons) - { - if(itemLocation.get(invButton)!=null&&itemLocation.get(invButton).equals(item)) - { - changeButton=invButton; - break; - } - } - if(changeButton!=null) - changeButton.setChecked(true); - } - else - { - setSelected(null); + if(button!=otherButton&&otherButton.isChecked()){ + otherButton.setChecked(false); } } - + String item=Current.player().itemInSlot(slotName); + if(item!=null&&item!="") + { + Button changeButton=null; + for(Button invButton:inventoryButtons) + { + if(itemLocation.get(invButton)!=null&&itemLocation.get(invButton).equals(item)) + { + changeButton=invButton; + break; + } + } + if(changeButton!=null) + changeButton.setChecked(true); + } + else + { + setSelected(null); + } } - }); - } + + } + }); } - inventory = new Table(Controls.GetSkin()); - ScrollPane scrollPane = ui.findActor("inventory"); - scrollPane.setScrollingDisabled(true,false); - scrollPane.setActor(inventory); - columns= (int) (scrollPane.getWidth()/createInventorySlot().getWidth()); - columns-=1; - if(columns<=0)columns=1; - scrollPane.setActor(inventory); - confirm = new Dialog("\n "+Forge.getLocalizer().getMessage("lblDelete"), Controls.GetSkin()) + } + inventory = new Table(Controls.GetSkin()); + ScrollPane scrollPane = ui.findActor("inventory"); + scrollPane.setScrollingDisabled(true,false); + scrollPane.setActor(inventory); + columns= (int) (scrollPane.getWidth()/createInventorySlot().getWidth()); + columns-=1; + if(columns<=0)columns=1; + scrollPane.setActor(inventory); + confirm = new Dialog("\n "+Forge.getLocalizer().getMessage("lblDelete"), Controls.GetSkin()) + { + protected void result(Object object) { - protected void result(Object object) - { - if(object!=null&&object.equals(true)) - delete(); - confirm.hide(); - }; + if(object!=null&&object.equals(true)) + delete(); + confirm.hide(); }; + }; - confirm.button(Forge.getLocalizer().getMessage("lblYes"), true); - confirm.button(Forge.getLocalizer().getMessage("lblNo"), false); - ui.addActor(confirm); - confirm.hide(); + confirm.button(Forge.getLocalizer().getMessage("lblYes"), true); + confirm.button(Forge.getLocalizer().getMessage("lblNo"), false); + ui.addActor(confirm); + confirm.hide(); - itemDescription.setWrap(true); - //makes confirm dialog hidden immediately when you open inventory first time.. - confirm.getColor().a = 0; + itemDescription.setWrap(true); + //makes confirm dialog hidden immediately when you open inventory first time.. + confirm.getColor().a = 0; } private void setSelected(Button actor) { @@ -198,17 +199,15 @@ public class InventoryScene extends UIScene { } - private void updateInventory() - { + private void updateInventory() { inventoryButtons.clear(); inventory.clear(); - for(int i=0;i { + SceneType.InventoryScene.instance.resLoaded(); + SceneType.PlayerStatisticScene.instance.resLoaded(); + + return "Force reload status scenes. Might be unstable."; + }); + registerCommand(new String[]{"dumpEnemyDeckColors"}, s -> { + for(EnemyData E : new Array.ArrayIterator<>(WorldData.getAllEnemies())){ + Deck D = E.generateDeck(); + DeckProxy DP = new DeckProxy(D, "Constructed", GameType.Constructed, null); + ColorSet colorSet = DP.getColor(); + System.out.printf("%s: Colors: %s (%s%s%s%s%s%s)\n", D.getName(), DP.getColor(), + (colorSet.hasBlack() ? "B" : ""), + (colorSet.hasGreen() ? "G" : ""), + (colorSet.hasRed() ? "R" : ""), + (colorSet.hasBlue() ? "U" : ""), + (colorSet.hasWhite() ? "W" : ""), + (colorSet.isColorless() ? "C" : "") + ); + } + return "Enemy deck color list dumped to stdout."; + }); registerCommand(new String[]{"heal", "amount"}, s -> { if(s.length<1) return "Command needs 1 parameter"; int N = 0; diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java index 770245fe57c..8766a73ddd7 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java @@ -206,8 +206,8 @@ public class MapStage extends GameStage { for (MapActor actor : new Array.ArrayIterator<>(actors)) { actor.remove(); foregroundSprites.removeActor(actor); - } + actors = new Array<>(); width = Float.parseFloat(map.getProperties().get("width").toString()); height = Float.parseFloat(map.getProperties().get("height").toString()); @@ -220,8 +220,8 @@ public class MapStage extends GameStage { MapProperties MP = map.getProperties(); if( MP.get("dungeonEffect") != null && !MP.get("dungeonEffect").toString().isEmpty()){ - JSONStringLoader json = new JSONStringLoader(); - effect = json.parse(EffectData.class, map.getProperties().get("dungeonEffect").toString(), ""); + JSONStringLoader J = new JSONStringLoader(); + effect = J.parse(EffectData.class, map.getProperties().get("dungeonEffect").toString(), ""); effectDialog(effect); } if (MP.get("preventEscape") != null) preventEscape = (boolean)MP.get("preventEscape"); @@ -266,7 +266,6 @@ public class MapStage extends GameStage { private void loadObjects(MapLayer layer, String sourceMap) { player.setMoveModifier(2); for (MapObject obj : layer.getObjects()) { - MapProperties prop = obj.getProperties(); Object typeObject = prop.get("type"); if (typeObject != null) { @@ -297,7 +296,12 @@ public class MapStage extends GameStage { case "enemy": Object E = prop.get("enemy"); if(E != null && !E.toString().isEmpty()) { - EnemySprite mob = new EnemySprite(id, WorldData.getEnemy(E.toString())); + EnemyData EN = WorldData.getEnemy(E.toString()); + if(EN == null){ + System.err.printf("Enemy \"%s\" not found.", E.toString()); + break; + } + EnemySprite mob = new EnemySprite(id, EN); Object D = prop.get("dialog"); //Check if the enemy has a dialogue attached to it. if (D != null && !D.toString().isEmpty()) { mob.dialog = new MapDialog(D.toString(), this, mob.getId()); @@ -314,6 +318,7 @@ public class MapStage extends GameStage { if (D != null && !D.toString().isEmpty()) { mob.effect = JSONStringLoader.parse(EffectData.class, D.toString(), ""); } + //TODO: Additional rewards. addMapActor(obj, mob); } break; @@ -321,6 +326,8 @@ public class MapStage extends GameStage { TiledMapTileMapObject obj2 = (TiledMapTileMapObject) obj; DummySprite D = new DummySprite(id, obj2.getTextureRegion(), this); addMapActor(obj, D); + //TODO: Ability to toggle their solid state. + //TODO: Ability to move them (using a sequence such as "UULU" for up, up, left, up). break; case "inn": addMapActor(obj, new OnCollide(new Runnable() { @@ -436,7 +443,8 @@ public class MapStage extends GameStage { return false; } - public boolean lookForID(int id){ + public boolean lookForID(int id){ //Search actor by ID. + for(MapActor A : new Array.ArrayIterator<>(actors)){ if(A.getId() == id) return true; @@ -444,7 +452,7 @@ public class MapStage extends GameStage { return false; } - public EnemySprite getEnemyByID(int id) { + public EnemySprite getEnemyByID(int id) { //Search actor by ID, enemies only. for(MapActor A : new Array.ArrayIterator<>(actors)){ if(A instanceof EnemySprite && A.getId() == id) return ((EnemySprite) A); @@ -492,7 +500,7 @@ public class MapStage extends GameStage { currentMob = mob; if (mob.dialog != null){ //This enemy has something to say. Display a dialog like if it was a DialogActor. resetPosition(); - showDialog(); + //showDialog(); mob.dialog.activate(); } else { //Duel the enemy. beginDuel(mob); @@ -534,7 +542,7 @@ public class MapStage extends GameStage { } }, ScreenUtils.getFrameBufferTexture(), true, false)); } - startPause(0.4f, new Runnable() { + startPause(0.3f, new Runnable() { @Override public void run() { DuelScene S = ((DuelScene) SceneType.DuelScene.instance); @@ -568,7 +576,6 @@ public class MapStage extends GameStage { } public void resetPosition() { - player.setPosition(oldPosition4); stop(); } diff --git a/forge-gui-mobile/src/forge/adventure/util/MapDialog.java b/forge-gui-mobile/src/forge/adventure/util/MapDialog.java index b5e62212b86..55cf33466fd 100644 --- a/forge-gui-mobile/src/forge/adventure/util/MapDialog.java +++ b/forge-gui-mobile/src/forge/adventure/util/MapDialog.java @@ -40,7 +40,6 @@ public class MapDialog { return; } this.data = JSONStringLoader.parse(Array.class, DialogData.class, S, defaultJSON); - } private void loadDialog(DialogData dialog) { //Displays a dialog with dialogue and possible choices. @@ -91,6 +90,13 @@ public class MapDialog { if (E.addItem != null){ //Gives an item to the player. Current.player().addItem(E.addItem); } + if(E.addLife != 0){ //Gives (positive or negative) life to the player. Cannot go over max health. + Current.player().heal(E.addLife); + } + if(E.addGold != 0){ //Gives (positive or negative) gold to the player. + if(E.addGold > 0) Current.player().giveGold(E.addGold); + else Current.player().takeGold(-E.addGold); + } if (E.deleteMapObject != 0){ //Removes a dummy object from the map. if(E.deleteMapObject < 0) stage.deleteObject(parentID); else stage.deleteObject(E.deleteMapObject); @@ -106,6 +112,9 @@ public class MapDialog { Current.player().setColorIdentity(E.setColorIdentity); } //Create map object. + //Toggle dummy object's hitbox. (Like to make a door passable) + //Set world flag. + //Set dungeon flag. } } @@ -123,6 +132,16 @@ public class MapDialog { if(!condition.not) return false; } else if(condition.not) return false; } + if(condition.hasGold != 0){ //Check for at least X gold. + if(player.getGold() < condition.hasGold){ + if(!condition.not) return false; + } else if(condition.not) return false; + } + if(condition.hasLife != 0){ //Check for at least X life.. + if(player.getLife() < condition.hasLife + 1){ + if(!condition.not) return false; + } else if(condition.not) return false; + } if(condition.hasBlessing != null && !condition.hasBlessing.isEmpty()){ //Check for a named blessing. if(!player.hasBlessing(condition.hasBlessing)){ if(!condition.not) return false; diff --git a/forge-gui/res/adventure/Shandalar/maps/map/debug_map.tmx b/forge-gui/res/adventure/Shandalar/maps/map/debug_map.tmx index becd63abe59..8f45f3f34a9 100644 --- a/forge-gui/res/adventure/Shandalar/maps/map/debug_map.tmx +++ b/forge-gui/res/adventure/Shandalar/maps/map/debug_map.tmx @@ -1,5 +1,5 @@ - + @@ -32,8 +32,7 @@ - - + { @@ -77,12 +76,11 @@ - + - [ @@ -207,5 +205,68 @@ + + + [ + { + "effect":[], + "text":"I have some things to offer for that life you have...", + "condition":[], + "options":[ + { "name":"You are suspicious and have two shadows, I'm out." }, + { + "name":"I'll vanquish you, demon!", + "text": "Oh look we got a tough guy over here!", + "options": [ { "name": "I FEAR NOTHING!!", "effect": [ { "battleWithActorID": -1 } ]} ] + }, + { + "name": "I dig your edge.", + "condition": [ { "colorIdentity": "B", "not": true }, { "hasLife": 2 } ], + "text": "You can be dark and edgy like me. Maybe for some of your life force...", + "options": [ { "name": "I'm doing nothing better with it.", "effect": [ { "setColorIdentity": "B", "addLife": -2 } ]} ] + }, + { + "name": "I dig your edge.", + "condition": [ { "colorIdentity": "B", "not": true }, { "hasLife": 2, "not": true } ], + "text": "You don't have enough life force...come back with more to offer.", + "options": [ { "name": "Aw man..." } ] + }, + { + "name": "Any cool demon deals?", + "condition": [ { "colorIdentity": "B" }, { "hasGold": 200 } ], + "text": "I can offer you this Treasure for the fair price of 200 gold.", + "options": [ + { "name": "This gem has a lot of edge, just like me. Deal!" , "effect": [ { "addGold": -20000, "addItem": "Treasure" } ] }, + { "name": "I'll think about it." } + ] + }, + { + "name":"Got any fancy demon blessing?", + "condition": [ {"colorIdentity": "B"}, { "item": "Treasure" }, { "hasBlessing": "Debug Demon", "not": true } ], + "text": "Give me that Treasure of yours...\n(+1 health, Manasight, move speed 120%, Lord of the Pit starts in play)", + "options": [ + { "name": "That's shady."}, + { + "name": "What can possibly go wrong?", + "effect": [ + { "removeItem": "Treasure", "giveBlessing": { "name": "Debug Demon" , "lifeModifier": 1, "colorView": true, "moveSpeed": 2, "startBattleWithCard": [ "Lord of the Pit" ] } } + ] + } + ] + } + ] + } +] + + + + + + + [ + { "cardName": "Black Lotus", "type":"card", "count":1 } +] + + diff --git a/forge-gui/res/adventure/Shandalar/maps/obj/scroll.tx b/forge-gui/res/adventure/Shandalar/maps/obj/scroll.tx new file mode 100644 index 00000000000..8b317692960 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/maps/obj/scroll.tx @@ -0,0 +1,10 @@ + + diff --git a/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.png b/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.png index d069b144752..c590e2df4e9 100644 Binary files a/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.png and b/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.png differ diff --git a/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.xcf b/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.xcf index 1cb8d253696..a2f068736f6 100644 Binary files a/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.xcf and b/forge-gui/res/adventure/Shandalar/maps/tileset/buildings.xcf differ diff --git a/forge-gui/res/adventure/Shandalar/sprites/1life.atlas b/forge-gui/res/adventure/Shandalar/sprites/1life.atlas index 4718bc62b7f..1dfa6cf6e68 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/1life.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/1life.atlas @@ -1,5 +1,5 @@ treasure.png -size: 64,112 +size: 64,128 format: RGBA8888 filter: Nearest,Nearest repeat: none diff --git a/forge-gui/res/adventure/Shandalar/sprites/2life.atlas b/forge-gui/res/adventure/Shandalar/sprites/2life.atlas index 20651148734..30ed39daf9c 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/2life.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/2life.atlas @@ -1,5 +1,5 @@ treasure.png -size: 64,112 +size: 64,128 format: RGBA8888 filter: Nearest,Nearest repeat: none diff --git a/forge-gui/res/adventure/Shandalar/sprites/3life.atlas b/forge-gui/res/adventure/Shandalar/sprites/3life.atlas index abc2ae050f5..9a3b13fe131 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/3life.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/3life.atlas @@ -1,5 +1,5 @@ treasure.png -size: 64,112 +size: 64,128 format: RGBA8888 filter: Nearest,Nearest repeat: none diff --git a/forge-gui/res/adventure/Shandalar/sprites/booster.atlas b/forge-gui/res/adventure/Shandalar/sprites/booster.atlas index f852f7067d0..db4bc8eb158 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/booster.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/booster.atlas @@ -1,5 +1,5 @@ treasure.png -size: 64,112 +size: 64,128 format: RGBA8888 filter: Nearest,Nearest repeat: none diff --git a/forge-gui/res/adventure/Shandalar/sprites/gold.atlas b/forge-gui/res/adventure/Shandalar/sprites/gold.atlas index 6d45a763d5f..77f40aabc45 100644 --- a/forge-gui/res/adventure/Shandalar/sprites/gold.atlas +++ b/forge-gui/res/adventure/Shandalar/sprites/gold.atlas @@ -1,5 +1,5 @@ treasure.png -size: 64,112 +size: 64,128 format: RGBA8888 filter: Nearest,Nearest repeat: none diff --git a/forge-gui/res/adventure/Shandalar/sprites/scroll.atlas b/forge-gui/res/adventure/Shandalar/sprites/scroll.atlas new file mode 100644 index 00000000000..fed15bd9fa6 --- /dev/null +++ b/forge-gui/res/adventure/Shandalar/sprites/scroll.atlas @@ -0,0 +1,17 @@ +treasure.png +size: 64,128 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +Idle + xy: 0, 112 + size: 16, 16 +Idle + xy: 16, 112 + size: 16, 16 +Idle + xy: 32, 112 + size: 16, 16 +Idle + xy: 48, 112 + size: 16, 16 diff --git a/forge-gui/res/adventure/Shandalar/sprites/treasure.png b/forge-gui/res/adventure/Shandalar/sprites/treasure.png index 3f58ea7ef2f..a25b381e9bf 100644 Binary files a/forge-gui/res/adventure/Shandalar/sprites/treasure.png and b/forge-gui/res/adventure/Shandalar/sprites/treasure.png differ diff --git a/forge-gui/res/adventure/Shandalar/ui/inventory.json b/forge-gui/res/adventure/Shandalar/ui/inventory.json index 49f633773b0..27790c85833 100644 --- a/forge-gui/res/adventure/Shandalar/ui/inventory.json +++ b/forge-gui/res/adventure/Shandalar/ui/inventory.json @@ -3,64 +3,65 @@ "height": 270, "yDown": true, "elements": [ - { + { "type": "Image", "image": "ui/title_bg.png", "width": 480, "height": 270 - }, { + }, + { "type": "Image", - "image": "ui/equipment.png", - "x": 8, + "image": "ui/equipment.png", + "x": 8, "y": 8, "width": 129, "height": 243 - }, + }, { "type": "ImageButton", - "name": "Equipment_Neck", - "style": "item_frame", + "name": "Equipment_Neck", + "style": "item_frame", "width": 20, "height": 20, "x": 62, "y": 40 - } , + }, { "type": "ImageButton", - "name": "Equipment_Body", - "style": "item_frame", + "name": "Equipment_Body", + "style": "item_frame", "width": 20, "height": 20, "x": 62, "y": 85 - } , + }, { "type": "ImageButton", - "name": "Equipment_Boots", - "style": "item_frame", + "name": "Equipment_Boots", + "style": "item_frame", "width": 20, "height": 20, "x": 62, "y": 220 - } , + }, { "type": "ImageButton", - "name": "Equipment_Left", - "style": "item_frame", + "name": "Equipment_Left", + "style": "item_frame", "width": 20, "height": 20, "x": 17, "y": 130 - } , + }, { "type": "ImageButton", - "name": "Equipment_Right", - "style": "item_frame", + "name": "Equipment_Right", + "style": "item_frame", "width": 20, "height": 20, "x": 107, "y": 130 - } , + }, { "type": "Scroll", "name": "inventory", @@ -68,22 +69,22 @@ "y": 110, "width": 330, "height": 100 - }, + }, { - "type": "Window", + "type": "Window", "x": 145, "y": 8, "width": 330, "height": 98 - } , + }, { "type": "Label", "name": "item_description", "x": 155, - "y": 8, + "y": 12, "width": 310, - "height": 98 - } , + "height": 94 + }, { "type": "TextButton", "name": "return", @@ -99,17 +100,17 @@ "text": "Equip", "width": 60, "height": 30, - "x": 330, + "x": 320, "y": 222 - } , + }, { "type": "TextButton", "name": "delete", - "text": "Delete", + "text": "Discard", "width": 60, "height": 30, "x": 240, "y": 222 - } + } ] } \ No newline at end of file diff --git a/forge-gui/res/adventure/Shandalar/ui/statistic.json b/forge-gui/res/adventure/Shandalar/ui/statistic.json index 6e5512fd0f9..ae71365194c 100644 --- a/forge-gui/res/adventure/Shandalar/ui/statistic.json +++ b/forge-gui/res/adventure/Shandalar/ui/statistic.json @@ -43,20 +43,11 @@ "width": 64, "height": 64 }, - { - "type": "Label", - "name": "playerName", - "x": 400, - "y": 20, - "width": 80, - "height": 24, - "font": "black" - }, { "type": "Label", "name": "totalWins", "x": 410, - "y": 99, + "y": 102, "width": 80, "height": 24, "font": "black" @@ -66,7 +57,7 @@ "name": "wins", "text": "Win:", "x": 330, - "y": 99, + "y": 102, "width": 80, "height": 24, "font": "black" @@ -75,7 +66,7 @@ "type": "Label", "name": "totalLoss", "x": 410, - "y": 111, + "y": 113, "width": 80, "height": 24, "font": "black" @@ -85,7 +76,7 @@ "name": "loss", "text": "Loss:", "x": 330, - "y": 111, + "y": 113, "width": 80, "height": 24, "font": "black" @@ -94,7 +85,7 @@ "type": "Label", "name": "lossWinRatio", "x": 410, - "y": 123, + "y": 125, "width": 80, "height": 24, "font": "black" @@ -104,19 +95,19 @@ "name": "winloss", "text": "Win Loss Ratio:", "x": 330, - "y": 123, + "y": 125, "width": 80, "height": 24, "font": "black" }, { - "type": "Scroll", - "name": "blessingInfo", + "type": "Scroll", + "name": "blessingInfo", "style": "nobg", - "x": 305, - "y": 135, - "width": 150, - "height": 88 + "x": 308, + "y": 143, + "width": 144, + "height": 72 }, { "type": "TextButton", @@ -125,13 +116,13 @@ "width": 100, "height": 30, "x": 335, - "y": 226 + "y": 224 }, { "type": "Image", "name": "lifeIcon", "image": "ui/life.png", - "x": 400, + "x": 392, "y": 40, "width": 16, "height": 16 @@ -140,18 +131,27 @@ "type": "Image", "name": "goldIcon", "image": "ui/money.png", - "x": 400, + "x": 392, "y": 60, "width": 16, "height": 16 }, + { + "type": "Label", + "name": "playerName", + "x": 394, + "y": 20, + "width": 80, + "height": 24, + "font": "black" + }, { "type": "Label", "name": "lifePoints", "font": "black", "width": 64, "height": 16, - "x": 420, + "x": 410, "y": 40 }, { @@ -160,7 +160,7 @@ "font": "black", "width": 64, "height": 16, - "x": 420, + "x": 410, "y": 60 }, { diff --git a/forge-gui/res/adventure/Shandalar/world/enemies.json b/forge-gui/res/adventure/Shandalar/world/enemies.json index 0ad7e9eba39..d89d087227d 100644 --- a/forge-gui/res/adventure/Shandalar/world/enemies.json +++ b/forge-gui/res/adventure/Shandalar/world/enemies.json @@ -2,7 +2,7 @@ { "name": "Adventurer", "sprite": "sprites/swordsman_3.atlas", - "deck": "decks/adventurer.dck", + "deck": "decks/adventurer.dck", "colors": "UW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -25,7 +25,7 @@ { "name": "Amonkhet Minotaur", "sprite": "sprites/warden.atlas", - "deck": "decks/amonkhet_minotaur.dck", + "deck": "decks/amonkhet_minotaur.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -47,7 +47,7 @@ }, { "name": "Ape", - "sprite": "sprites/behemoth.atlas", + "sprite": "sprites/behemoth.atlas", "colors": "GR", "deck": "decks/ape.json", "spawnRate": 0.2, "difficulty": 0.1, @@ -71,7 +71,7 @@ { "name": "Archer", "sprite": "sprites/archer_2.atlas", - "deck": "decks/human_archer.dck", + "deck": "decks/human_archer.dck", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -94,7 +94,7 @@ { "name": "Ashmouth Devil", "sprite": "sprites/devil.atlas", - "deck": "decks/ashmouth_devil.dck", + "deck": "decks/ashmouth_devil.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -117,7 +117,7 @@ { "name": "Axgard Dwarf", "sprite": "sprites/dwarf_8.atlas", - "deck": "decks/axgard_dwarf.dck", + "deck": "decks/axgard_dwarf.dck", "colors": "RW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -139,7 +139,7 @@ }, { "name": "Bandit", - "sprite": "sprites/dwarf_7.atlas", + "sprite": "sprites/dwarf_7.atlas", "colors": "BR", "deck": "decks/bandit.dck", "spawnRate": 0.2, "difficulty": 0.1, @@ -162,7 +162,7 @@ }, { "name": "Bear", - "sprite": "sprites/bear.atlas", + "sprite": "sprites/bear.atlas", "colors": "G", "deck": "decks/bear.json", "spawnRate": 0.2, "difficulty": 0.1, @@ -186,7 +186,7 @@ { "name": "Beholder", "sprite": "sprites/beholder.atlas", - "deck": "decks/beholder.dck", + "deck": "decks/beholder.dck", "colors": "BRU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -209,7 +209,7 @@ { "name": "Berserker", "sprite": "sprites/dwarf_5.atlas", - "deck": "decks/berserker.json", + "deck": "decks/berserker.json", "colors": "BGR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -232,7 +232,7 @@ { "name": "Big Zombie", "sprite": "sprites/zombie_2.atlas", - "deck": "decks/zombie_bad.json", + "deck": "decks/zombie_bad.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -266,7 +266,7 @@ { "name": "Bird", "sprite": "sprites/griffin_2.atlas", - "deck": "decks/bird_blue.json", + "deck": "decks/bird_blue.json", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -289,7 +289,7 @@ { "name": "Black Wiz1", "sprite": "sprites/black_wizard.atlas", - "deck": "decks/black_bad.json", + "deck": "decks/black_bad.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -312,7 +312,7 @@ { "name": "Black Wiz2", "sprite": "sprites/black_wiz2.atlas", - "deck": "decks/fear.dck", + "deck": "decks/fear.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -335,7 +335,7 @@ { "name": "Black Wiz3", "sprite": "sprites/black_wiz3.atlas", - "deck": "decks/black_wiz3.dck", + "deck": "decks/black_wiz3.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -358,7 +358,7 @@ { "name": "Blue Wiz1", "sprite": "sprites/mage.atlas", - "deck": "decks/blue_bad.json", + "deck": "decks/blue_bad.json", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -381,7 +381,7 @@ { "name": "Blue Wiz2", "sprite": "sprites/blue_wiz2.atlas", - "deck": "decks/mill.dck", + "deck": "decks/mill.dck", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -404,7 +404,7 @@ { "name": "Blue Wiz3", "sprite": "sprites/mage_2.atlas", - "deck": "decks/counter.dck", + "deck": "decks/counter.dck", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -427,7 +427,7 @@ { "name": "Boggart", "sprite": "sprites/goblin_2.atlas", - "deck": "decks/eyeblight.dck", + "deck": "decks/eyeblight.dck", "colors": "GR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 27, @@ -461,7 +461,7 @@ { "name": "Cat", "sprite": "sprites/lion.atlas", - "deck": "decks/cat.json", + "deck": "decks/cat.json", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 27, @@ -484,7 +484,7 @@ { "name": "Cathar", "sprite": "sprites/cathar.atlas", - "deck": "decks/cathar.dck", + "deck": "decks/cathar.dck", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -507,7 +507,7 @@ { "name": "Centaur", "sprite": "sprites/centaur.atlas", - "deck": "decks/centaur.json", + "deck": "decks/centaur.json", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -530,7 +530,7 @@ { "name": "Centaur Warrior", "sprite": "sprites/centaur_2.atlas", - "deck": "decks/centaur_warrior.dck", + "deck": "decks/centaur_warrior.dck", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -553,7 +553,7 @@ { "name": "ClayGolem", "sprite": "sprites/golem_2.atlas", - "deck": "decks/golem_good.json", + "deck": "decks/golem_good.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 19, @@ -585,7 +585,7 @@ { "name": "Cleric", "sprite": "sprites/cleric.atlas", - "deck": "decks/cleric.json", + "deck": "decks/cleric.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -608,7 +608,7 @@ { "name": "Construct", "sprite": "sprites/golem_3.atlas", - "deck": "decks/artificer.dck", + "deck": "decks/artificer.dck", "colors": "RU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 21, @@ -631,7 +631,7 @@ { "name": "Cyclops", "sprite": "sprites/cyclops.atlas", - "deck": "decks/cyclops.dck", + "deck": "decks/cyclops.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 16, @@ -654,7 +654,7 @@ { "name": "Dark Knight", "sprite": "sprites/death_knight.atlas", - "deck": "decks/death_knight.json", + "deck": "decks/death_knight.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -677,7 +677,7 @@ { "name": "Dawnhart Witch", "sprite": "sprites/dawnhart_witch.atlas", - "deck": "decks/dawnhart_witch.dck", + "deck": "decks/dawnhart_witch.dck", "colors": "GW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -700,7 +700,7 @@ { "name": "Death Knight", "sprite": "sprites/death_knight_2.atlas", - "deck": "decks/death_knight.dck", + "deck": "decks/death_knight.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -723,7 +723,7 @@ { "name": "Demon", "sprite": "sprites/demon_3.atlas", - "deck": "decks/demon.json", + "deck": "decks/demon.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -746,7 +746,7 @@ { "name": "Devil", "sprite": "sprites/imp.atlas", - "deck": "decks/devil.json", + "deck": "decks/devil.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -769,7 +769,7 @@ { "name": "Dino", "sprite": "sprites/ancient.atlas", - "deck": "decks/dinosaurs.json", + "deck": "decks/dinosaurs.json", "colors": "GRW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -805,7 +805,7 @@ { "name": "Dinosaur", "sprite": "sprites/ancient_2.atlas", - "deck": "decks/dinosaur_w_r.dck", + "deck": "decks/dinosaur_w_r.dck", "colors": "RW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -841,7 +841,7 @@ { "name": "Djinn", "sprite": "sprites/djinn.atlas", - "deck": "decks/djinn.json", + "deck": "decks/djinn.json", "colors": "RU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 32, @@ -864,7 +864,7 @@ { "name": "Dragon", "sprite": "sprites/dragon.atlas", - "deck": "decks/dragon.dck", + "deck": "decks/dragon.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -887,7 +887,7 @@ { "name": "Dwarf", "sprite": "sprites/dwarf_2.atlas", - "deck": "decks/dwarf.json", + "deck": "decks/dwarf.json", "colors": "RW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -909,7 +909,7 @@ }, { "name": "Efreet", - "sprite": "sprites/efreet_2.atlas", + "sprite": "sprites/efreet_2.atlas", "colors": "RU", "deck": "decks/efreet.dck", "spawnRate": 0.2, "difficulty": 0.1, @@ -933,7 +933,7 @@ { "name": "Eldraine Faerie", "sprite": "sprites/pixie.atlas", - "deck": "decks/eldraine_faerie.dck", + "deck": "decks/eldraine_faerie.dck", "colors": "GU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -956,7 +956,7 @@ { "name": "Eldraine Knight", "sprite": "sprites/paladin_2.atlas", - "deck": "decks/eldraine_knight.dck", + "deck": "decks/eldraine_knight.dck", "colors": "RW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -979,7 +979,7 @@ { "name": "Eldrazi", "sprite": "sprites/mindelemental.atlas", - "deck": "decks/eldrazi.json", + "deck": "decks/eldrazi.json", "colors": "BGU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -1002,7 +1002,7 @@ { "name": "Elemental", "sprite": "sprites/crystalelemental.atlas", - "deck": "decks/elemental_blue.json", + "deck": "decks/elemental_blue.json", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1025,7 +1025,7 @@ { "name": "Elf", "sprite": "sprites/druid.atlas", - "deck": "decks/elf_bad.json", + "deck": "decks/elf_bad.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1059,7 +1059,7 @@ { "name": "Elf warrior", "sprite": "sprites/hunter.atlas", - "deck": "decks/elf_mid.json", + "deck": "decks/elf_mid.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -1093,7 +1093,7 @@ { "name": "Elk", "sprite": "sprites/deer_2.atlas", - "deck": "decks/elk.dck", + "deck": "decks/elk.dck", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 29, @@ -1116,7 +1116,7 @@ { "name": "Faerie", "sprite": "sprites/pixie_2.atlas", - "deck": "decks/faerie.json", + "deck": "decks/faerie.json", "colors": "BGU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1139,7 +1139,7 @@ { "name": "Fire Elemental", "sprite": "sprites/fireelemental.atlas", - "deck": "decks/fire_elemental.dck", + "deck": "decks/fire_elemental.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1162,7 +1162,7 @@ { "name": "Flame Elemental", "sprite": "sprites/magmaelemental.atlas", - "deck": "decks/flame_elemental.dck", + "deck": "decks/flame_elemental.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 23, @@ -1185,7 +1185,7 @@ { "name": "Gargoyle", "sprite": "sprites/gargoyle.atlas", - "deck": "decks/gargoyle.json", + "deck": "decks/gargoyle.json", "colors": "RUW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1208,7 +1208,7 @@ { "name": "Gargoyle 2", "sprite": "sprites/gargoyle_2.atlas", - "deck": "decks/gargoyle.dck", + "deck": "decks/gargoyle.dck", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1231,7 +1231,7 @@ { "name": "Geist", "sprite": "sprites/ghost.atlas", - "deck": "decks/ghost_blue.dck", + "deck": "decks/ghost_blue.dck", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 32, @@ -1254,7 +1254,7 @@ { "name": "Ghoul", "sprite": "sprites/ghoul.atlas", - "deck": "decks/ghoul.dck", + "deck": "decks/ghoul.dck", "colors": "BU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -1277,7 +1277,7 @@ { "name": "Ghost", "sprite": "sprites/ghost_2.atlas", - "deck": "decks/ghost.json", + "deck": "decks/ghost.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1300,7 +1300,7 @@ { "name": "Giant Spider", "sprite": "sprites/spider_2.atlas", - "deck": "decks/spider_token.dck", + "deck": "decks/spider_token.dck", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 23, @@ -1323,7 +1323,7 @@ { "name": "Goblin", "sprite": "sprites/goblin.atlas", - "deck": "decks/goblin_bad.json", + "deck": "decks/goblin_bad.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 27, @@ -1365,7 +1365,7 @@ { "name": "Goblin Chief", "sprite": "sprites/wolf_rider_2.atlas", - "deck": "decks/goblin_good.json", + "deck": "decks/goblin_good.json", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 29, @@ -1399,7 +1399,7 @@ { "name": "Goblin Warrior", "sprite": "sprites/wolf_rider.atlas", - "deck": "decks/goblin_mid.json", + "deck": "decks/goblin_mid.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 28, @@ -1433,7 +1433,7 @@ { "name": "Golem", "sprite": "sprites/golem.atlas", - "deck": "decks/golem.json", + "deck": "decks/golem.json", "colors": "GW", "spawnRate": 0.1, "difficulty": 0.1, "speed": 20, @@ -1471,7 +1471,7 @@ { "name": "Golem that is Generous", "sprite": "sprites/golem.atlas", - "deck": "decks/golem.json", + "deck": "decks/golem.json", "colors": "GW", "spawnRate": 0.1, "difficulty": 0.1, "speed": 20, @@ -1521,7 +1521,7 @@ { "name": "Gorgon", "sprite": "sprites/gorgone.atlas", - "deck": "decks/gorgon.dck", + "deck": "decks/gorgon.dck", "colors": "BG", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -1544,7 +1544,7 @@ { "name": "Gorgon 2", "sprite": "sprites/gorgonen.atlas", - "deck": "decks/gorgon_2.dck", + "deck": "decks/gorgon_2.dck", "colors": "BG", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -1567,7 +1567,7 @@ { "name": "Green Beast", "sprite": "sprites/basilisk.atlas", - "deck": "decks/beast_green.json", + "deck": "decks/beast_green.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -1590,7 +1590,7 @@ { "name": "Green Wiz1", "sprite": "sprites/green_wiz1.atlas", - "deck": "decks/green_bad.json", + "deck": "decks/green_bad.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1613,7 +1613,7 @@ { "name": "Green Wiz2", "sprite": "sprites/green_wiz2.atlas", - "deck": "decks/trample.dck", + "deck": "decks/trample.dck", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1636,7 +1636,7 @@ { "name": "Green Wiz3", "sprite": "sprites/green_wiz3.atlas", - "deck": "decks/ramp.dck", + "deck": "decks/ramp.dck", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1659,7 +1659,7 @@ { "name": "Griffin", "sprite": "sprites/griffin.atlas", - "deck": "decks/griffin.json", + "deck": "decks/griffin.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 32, @@ -1682,7 +1682,7 @@ { "name": "Harpy", "sprite": "sprites/harpy.atlas", - "deck": "decks/harpy.dck", + "deck": "decks/harpy.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1705,7 +1705,7 @@ { "name": "Harpy 2", "sprite": "sprites/harpy_2.atlas", - "deck": "decks/harpy_2.dck", + "deck": "decks/harpy_2.dck", "colors": "BU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -1728,7 +1728,7 @@ { "name": "Hellhound", "sprite": "sprites/hellhound_2.atlas", - "deck": "decks/hellhound.dck", + "deck": "decks/hellhound.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -1751,7 +1751,7 @@ { "name": "High Elf", "sprite": "sprites/druid_2.atlas", - "deck": "decks/elf_good.json", + "deck": "decks/elf_good.json", "colors": "BG", "spawnRate": 0.2, "difficulty": 0.1, "speed": 26, @@ -1785,7 +1785,7 @@ { "name": "High Vampire", "sprite": "sprites/vampire_2.atlas", - "deck": "decks/vampire.json", + "deck": "decks/vampire.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 32, @@ -1808,7 +1808,7 @@ { "name": "Horseman", "sprite": "sprites/cavalier_2.atlas", - "deck": "decks/horsemanship.dck", + "deck": "decks/horsemanship.dck", "colors": "UW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -1842,7 +1842,7 @@ { "name": "Human", "sprite": "sprites/pikeman.atlas", - "deck": "decks/human_bad.json", + "deck": "decks/human_bad.json", "colors": "BRW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 23, @@ -1876,7 +1876,7 @@ { "name": "Human elite", "sprite": "sprites/legionite.atlas", - "deck": "decks/human_good.json", + "deck": "decks/human_good.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -1910,7 +1910,7 @@ { "name": "Human guard", "sprite": "sprites/swordsman.atlas", - "deck": "decks/human_mid.json", + "deck": "decks/human_mid.json", "colors": "BW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -1944,7 +1944,7 @@ { "name": "Hydra", "sprite": "sprites/hydra.atlas", - "deck": "decks/hydra.json", + "deck": "decks/hydra.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -1978,7 +1978,7 @@ { "name": "Immersturm Demon", "sprite": "sprites/devil_2.atlas", - "deck": "decks/immersturm_demon.dck", + "deck": "decks/immersturm_demon.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -2001,7 +2001,7 @@ { "name": "Khan", "sprite": "sprites/cavalier.atlas", - "deck": "decks/mardu.dck", + "deck": "decks/mardu.dck", "colors": "BRW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -2024,7 +2024,7 @@ { "name": "Knight", "sprite": "sprites/paladin.atlas", - "deck": "decks/knight.json", + "deck": "decks/knight.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 30, @@ -2058,7 +2058,7 @@ { "name": "Lich", "sprite": "sprites/lich_2.atlas", - "deck": "decks/lich.dck", + "deck": "decks/lich.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 20, @@ -2081,7 +2081,7 @@ { "name": "Merfolk", "sprite": "sprites/waterelemental.atlas", - "deck": "decks/merfolk_bad.json", + "deck": "decks/merfolk_bad.json", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 23, @@ -2115,7 +2115,7 @@ { "name": "Merfolk Avatar", "sprite": "sprites/iceelemental.atlas", - "deck": "decks/merfolk_good.json", + "deck": "decks/merfolk_good.json", "colors": "GU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2149,7 +2149,7 @@ { "name": "Merfolk Fighter", "sprite": "sprites/merfolk.atlas", - "deck": "decks/merfolk_lords.dck", + "deck": "decks/merfolk_lords.dck", "colors": "GU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -2183,7 +2183,7 @@ { "name": "Merfolk Lord", "sprite": "sprites/merfolk_lord.atlas", - "deck": "decks/merfolk_lord2.dck", + "deck": "decks/merfolk_lord2.dck", "colors": "GU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2206,7 +2206,7 @@ { "name": "Merfolk Soldier", "sprite": "sprites/mermaid.atlas", - "deck": "decks/merfolk_v_goblins.dck", + "deck": "decks/merfolk_v_goblins.dck", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -2240,7 +2240,7 @@ { "name": "Merfolk warrior", "sprite": "sprites/airelemental.atlas", - "deck": "decks/merfolk_mid.json", + "deck": "decks/merfolk_mid.json", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2274,7 +2274,7 @@ { "name": "Mimic", "sprite": "sprites/mimic.atlas", - "deck": "decks/mimic.dck", + "deck": "decks/mimic.dck", "colors": "BU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -2297,7 +2297,7 @@ { "name": "Minotaur", "sprite": "sprites/minotaur.atlas", - "deck": "decks/minotaur.json", + "deck": "decks/minotaur.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2320,7 +2320,7 @@ { "name": "Minotaur Flayer", "sprite": "sprites/warden_2.atlas", - "deck": "decks/minotaur.dck", + "deck": "decks/minotaur.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2343,7 +2343,7 @@ { "name": "Monk", "sprite": "sprites/monk.atlas", - "deck": "decks/angel.json", + "deck": "decks/angel.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2366,7 +2366,7 @@ { "name": "Rakdos Devil", "sprite": "sprites/juggler.atlas", - "deck": "decks/rakdos_devil.dck", + "deck": "decks/rakdos_devil.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2389,7 +2389,7 @@ { "name": "Red Beast", "sprite": "sprites/basilisk_2.atlas", - "deck": "decks/beast_red.json", + "deck": "decks/beast_red.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 23, @@ -2412,7 +2412,7 @@ { "name": "Red Wiz1", "sprite": "sprites/enchanter.atlas", - "deck": "decks/red_bad.json", + "deck": "decks/red_bad.json", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2435,7 +2435,7 @@ { "name": "Red Wiz2", "sprite": "sprites/red_wiz2.atlas", - "deck": "decks/haste_burn.dck", + "deck": "decks/haste_burn.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2458,7 +2458,7 @@ { "name": "Red Wiz3", "sprite": "sprites/red_wiz3.atlas", - "deck": "decks/lava_axe.dck", + "deck": "decks/lava_axe.dck", "colors": "R", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2481,7 +2481,7 @@ { "name": "Rogue", "sprite": "sprites/rogue.atlas", - "deck": "decks/rogue.json", + "deck": "decks/rogue.json", "colors": "BU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2504,7 +2504,7 @@ { "name": "Satyr", "sprite": "sprites/satyr.atlas", - "deck": "decks/satyr.dck", + "deck": "decks/satyr.dck", "colors": "GR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2527,7 +2527,7 @@ { "name": "Sea Monster", "sprite": "sprites/leech_2.atlas", - "deck": "decks/sea_monster.dck", + "deck": "decks/sea_monster.dck", "colors": "U", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -2550,7 +2550,7 @@ { "name": "Shaman", "sprite": "sprites/shaman_2.atlas", - "deck": "decks/shaman.json", + "deck": "decks/shaman.json", "colors": "GR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2573,7 +2573,7 @@ { "name": "Skeleton", "sprite": "sprites/skeleton.atlas", - "deck": "decks/skeleton.dck", + "deck": "decks/skeleton.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 20, @@ -2595,7 +2595,7 @@ { "name": "Skeleton Soldier", "sprite": "sprites/skeleton_2.atlas", - "deck": "decks/skeleton_2.dck", + "deck": "decks/skeleton_2.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 20, @@ -2617,7 +2617,7 @@ { "name": "Sliver", "sprite": "sprites/sliver.atlas", - "deck": "decks/sliver.json", + "deck": "decks/sliver.json", "colors": "GRW", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2639,7 +2639,7 @@ { "name": "Snake", "sprite": "sprites/big_snake.atlas", - "deck": "decks/snake.json", + "deck": "decks/snake.json", "colors": "GU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2662,7 +2662,7 @@ { "name": "Spider", "sprite": "sprites/spider.atlas", - "deck": "decks/spider.json", + "deck": "decks/spider.json", "colors": "BG", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -2685,7 +2685,7 @@ { "name": "Tarkir Djinn", "sprite": "sprites/djinn_2.atlas", - "deck": "decks/djinn_tarkir.dck", + "deck": "decks/djinn_tarkir.dck", "colors": "RU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -2708,7 +2708,7 @@ { "name": "Treefolk", "sprite": "sprites/treant.atlas", - "deck": "decks/treefolk.json", + "deck": "decks/treefolk.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 16, @@ -2731,7 +2731,7 @@ { "name": "Treefolk Guardian", "sprite": "sprites/treant_2.atlas", - "deck": "decks/treefolk.dck", + "deck": "decks/treefolk.dck", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "speed": 16, @@ -2754,7 +2754,7 @@ { "name": "Troll", "sprite": "sprites/troll.atlas", - "deck": "decks/troll.json", + "deck": "decks/troll.json", "colors": "GR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2777,7 +2777,7 @@ { "name": "Vampire", "sprite": "sprites/vampire.atlas", - "deck": "decks/vampire.dck", + "deck": "decks/vampire.dck", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -2793,7 +2793,7 @@ { "name": "Vampire Lord", "sprite": "sprites/vampire_3.atlas", - "deck": "decks/vampire_blood_token_fly.dck", + "deck": "decks/vampire_blood_token_fly.dck", "colors": "BR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 31, @@ -2809,7 +2809,7 @@ { "name": "Viashino", "sprite": "sprites/battler.atlas", - "deck": "decks/viashino.dck", + "deck": "decks/viashino.dck", "colors": "BGR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2832,7 +2832,7 @@ { "name": "Viper", "sprite": "sprites/big_snake_2.atlas", - "deck": "decks/snake.dck", + "deck": "decks/snake.dck", "colors": "BG", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -2855,7 +2855,7 @@ { "name": "Werewolf", "sprite": "sprites/hellhound.atlas", - "deck": "decks/werewolf.dck", + "deck": "decks/werewolf.dck", "colors": "GR", "spawnRate": 0.2, "difficulty": 0.1, "speed": 26, @@ -2877,7 +2877,7 @@ { "name": "White Dwarf", "sprite": "sprites/dwarf_6.atlas", - "deck": "decks/white_dwarf.dck", + "deck": "decks/white_dwarf.dck", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 22, @@ -2900,7 +2900,7 @@ { "name": "White Wiz1", "sprite": "sprites/priest.atlas", - "deck": "decks/white_bad.json", + "deck": "decks/white_bad.json", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2923,7 +2923,7 @@ { "name": "White Wiz2", "sprite": "sprites/white_wiz2.atlas", - "deck": "decks/basri.dck", + "deck": "decks/basri.dck", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2946,7 +2946,7 @@ { "name": "White Wiz3", "sprite": "sprites/white_wiz3.atlas", - "deck": "decks/human_soldier_token.dck", + "deck": "decks/human_soldier_token.dck", "colors": "W", "spawnRate": 0.2, "difficulty": 0.1, "speed": 24, @@ -2969,7 +2969,7 @@ { "name": "Wurm", "sprite": "sprites/leech.atlas", - "deck": "decks/wurm.json", + "deck": "decks/wurm.json", "colors": "G", "spawnRate": 0.2, "difficulty": 0.1, "ai": "reckless", @@ -3004,7 +3004,7 @@ { "name": "Yeti", "sprite": "sprites/yeti_2.atlas", - "deck": "decks/yeti.dck", + "deck": "decks/yeti.dck", "colors": "GRU", "spawnRate": 0.2, "difficulty": 0.1, "speed": 25, @@ -3027,7 +3027,7 @@ { "name": "Zombie", "sprite": "sprites/zombie.atlas", - "deck": "decks/zombie_bad.json", + "deck": "decks/zombie_bad.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 15, @@ -3061,7 +3061,7 @@ { "name": "Zombie Lord", "sprite": "sprites/lich.atlas", - "deck": "decks/zombie_good.json", + "deck": "decks/zombie_good.json", "colors": "B", "spawnRate": 0.2, "difficulty": 0.1, "speed": 21, @@ -3095,7 +3095,7 @@ { "name": "Sliver Queen", "sprite": "sprites/boss/sliver_queen.atlas", - "deck": "decks/boss/sliver_queen.dck", + "deck": "decks/boss/sliver_queen.dck", "colors": "BGRUW", "speed": 1, "life": 50, "rewards": [ @@ -3119,7 +3119,7 @@ { "name": "Griselbrand", "sprite": "sprites/boss/griselbrand.atlas", - "deck": "decks/boss/griselbrand.dck", + "deck": "decks/boss/griselbrand.dck", "colors": "B", "speed": 1, "life": 40, "rewards": [ @@ -3143,7 +3143,7 @@ { "name": "Akroma", "sprite": "sprites/boss/akroma.atlas", - "deck": "decks/boss/akroma.dck", + "deck": "decks/boss/akroma.dck", "colors": "W", "speed": 1, "life": 80, "rewards": [ @@ -3167,7 +3167,7 @@ { "name": "Emrakul", "sprite": "sprites/boss/emrakul.atlas", - "deck": "decks/boss/emrakul.dck", + "deck": "decks/boss/emrakul.dck", "colors": "C", "speed": 1, "life": 40, "rewards": [ @@ -3185,7 +3185,7 @@ { "name": "Ghalta", "sprite": "sprites/boss/ghalta.atlas", - "deck": "decks/boss/ghalta.dck", + "deck": "decks/boss/ghalta.dck", "colors": "G", "speed": 1, "life": 80, "rewards": [ @@ -3209,7 +3209,7 @@ { "name": "Lorthos", "sprite": "sprites/boss/lorthos.atlas", - "deck": "decks/boss/lorthos.dck", + "deck": "decks/boss/lorthos.dck", "colors": "U", "speed": 1, "life": 80, "rewards": [ @@ -3233,7 +3233,7 @@ { "name": "Lathliss", "sprite": "sprites/boss/lathiss.atlas", - "deck": "decks/boss/lathliss.dck", + "deck": "decks/boss/lathliss.dck", "colors": "R", "speed": 1, "life": 80, "rewards": [ diff --git a/forge-gui/res/adventure/Shandalar/world/items.json b/forge-gui/res/adventure/Shandalar/world/items.json index 9e2c5c04708..10e260dd25c 100644 --- a/forge-gui/res/adventure/Shandalar/world/items.json +++ b/forge-gui/res/adventure/Shandalar/world/items.json @@ -587,6 +587,14 @@ ] } }, + { + "name": "Manasight Amulet", + "equipmentSlot": "Neck", + "iconName": "RelicAmulet", + "effect": { + "colorView": true + } + }, { "name": "Amulet of Kroog", "equipmentSlot": "Neck",