diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 001e2328747..439dbc05cdc 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -2424,6 +2424,18 @@ public class ComputerUtil { } } } + } else if ("ProtectionFromType".equals(logic)) { + // TODO: protection vs. damage-dealing and milling instants/sorceries in low creature decks and the like? + // Maybe non-creature artifacts in certain cases? + List choices = ImmutableList.of("Creature", "Planeswalker"); // types that make sense to get protected against + CardCollection evalList = new CardCollection(); + + evalList.addAll(ai.getOpponents().getCardsIn(ZoneType.Battlefield)); + + chosen = ComputerUtilCard.getMostProminentCardType(evalList, choices); + if (StringUtils.isEmpty(chosen)) { + chosen = "Creature"; // if in doubt, choose Creature, I guess + } } else { // Are we picking a type to reduce costs for that type? diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index a54865c18d4..a223fddb600 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -28,6 +28,7 @@ import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetRestrictions; import forge.game.staticability.StaticAbilityMustTarget; import forge.game.zone.ZoneType; @@ -116,6 +117,8 @@ public class ChangeZoneAi extends SpellAbilityAi { if (aiLogic != null) { if (aiLogic.equals("Always")) { return true; + } else if (aiLogic.startsWith("ExileSpell")) { + return doExileSpellLogic(aiPlayer, sa); } else if (aiLogic.startsWith("SacAndUpgrade")) { // Birthing Pod, Natural Order, etc. return doSacAndUpgradeLogic(aiPlayer, sa); } else if (aiLogic.startsWith("SacAndRetFromGrave")) { // Recurring Nightmare, etc. @@ -2075,6 +2078,36 @@ public class ChangeZoneAi extends SpellAbilityAi { } } + private boolean doExileSpellLogic(final Player aiPlayer, final SpellAbility sa) { + String aiLogic = sa.getParamOrDefault("AILogic", ""); + SpellAbilityStackInstance top = aiPlayer.getGame().getStack().peek(); + List dangerousApi = Arrays.asList(ApiType.DealDamage, ApiType.DamageAll, ApiType.Destroy, ApiType.DestroyAll, ApiType.Sacrifice, ApiType.SacrificeAll); + int manaCost = 0; + int minCost = 0; + + if (aiLogic.contains(".")) { + minCost = Integer.parseInt(aiLogic.substring(aiLogic.indexOf(".") + 1)); + } + + if (top != null) { + SpellAbility topSA = top.getSpellAbility(false); + if (topSA != null) { + if (topSA.getPayCosts().hasManaCost()) { + manaCost = topSA.getPayCosts().getTotalMana().getCMC(); + } + + if ((manaCost >= minCost || dangerousApi.contains(topSA.getApi())) + && topSA.getActivatingPlayer().isOpponentOf(aiPlayer) + && sa.canTargetSpellAbility(topSA)) { + sa.resetTargets(); + sa.getTargets().add(topSA); + return sa.isTargetNumberValid(); + } + } + } + return false; + } + private static CardCollection getSafeTargetsIfUnlessCostPaid(Player ai, SpellAbility sa, Iterable potentialTgts) { // Determines if the controller of each potential target can negate the ChangeZone effect // by paying the Unless cost. Returns the list of targets that can be saved that way. diff --git a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java index 5a76b6c82da..089c236120c 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java @@ -114,13 +114,14 @@ public class SacrificeAi extends SpellAbilityAi { } final String defined = sa.getParamOrDefault("Defined", "You"); + final String targeted = sa.getParamOrDefault("ValidTgts", ""); final String valid = sa.getParamOrDefault("SacValid", "Self"); if (valid.equals("Self")) { // Self Sacrifice. - } else if (defined.equals("Player") + } else if (defined.equals("Player") || targeted.equals("Player") || targeted.equals("Opponent") || ((defined.equals("Player.Opponent") || defined.equals("Opponent")) && !sa.isTrigger())) { // is either "Defined$ Player.Opponent" or "Defined$ Opponent" obsolete? - + // If Sacrifice hits both players: // Only cast it if Human has the full amount of valid // Only cast it if AI doesn't have the full amount of Valid diff --git a/forge-game/src/main/java/forge/game/cost/CostPutCounter.java b/forge-game/src/main/java/forge/game/cost/CostPutCounter.java index ca4d4fd2b45..f81e34fda7e 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPutCounter.java +++ b/forge-game/src/main/java/forge/game/cost/CostPutCounter.java @@ -141,7 +141,7 @@ public class CostPutCounter extends CostPartWithList { public final boolean canPay(final SpellAbility ability, final Player payer, final boolean effect) { final Card source = ability.getHostCard(); if (this.payCostFromSource()) { - return source.isInPlay() && source.canReceiveCounters(this.counter); + return source.isInPlay() && (getAbilityAmount(ability) == 0 || source.canReceiveCounters(this.counter)); } // 3 Cards have Put a -1/-1 Counter on a Creature you control. diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 5957d90ef78..e2c3fc90fdf 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -104,6 +104,7 @@ public class Forge implements ApplicationListener { public static boolean isTabletDevice = false; public static String locale = "en-US"; public Assets assets; + private ForgePreferences forgePreferences; public static boolean hdbuttons = false; public static boolean hdstart = false; public static boolean isPortraitMode = false; @@ -145,6 +146,11 @@ public class Forge implements ApplicationListener { private Forge() { } + private ForgePreferences getForgePreferences() { + if (forgePreferences == null) + forgePreferences = new ForgePreferences(); + return forgePreferences; + } public static Localizer getLocalizer() { if (localizer == null) localizer = Localizer.getInstance(); @@ -179,33 +185,38 @@ public class Forge implements ApplicationListener { */ Gdx.input.setCatchKey(Keys.BACK, true); destroyThis = true; //Prevent back() - ForgePreferences prefs = new ForgePreferences(); if (Files.exists(Paths.get(ForgeConstants.DEFAULT_SKINS_DIR+ForgeConstants.ADV_TEXTURE_BG_FILE))) - selector = prefs.getPref(FPref.UI_SELECTOR_MODE); + selector = getForgePreferences().getPref(FPref.UI_SELECTOR_MODE); + boolean landscapeMode = GuiBase.isAndroid() ? !isPortraitMode : screenWidth > screenHeight; + //update landscape mode preference if it doesn't match what the app loaded as + if (getForgePreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE) != landscapeMode) { + getForgePreferences().setPref(FPref.UI_LANDSCAPE_MODE, landscapeMode); + getForgePreferences().save(); + } String skinName; if (FileUtil.doesFileExist(ForgeConstants.MAIN_PREFS_FILE)) { - skinName = prefs.getPref(FPref.UI_SKIN); + skinName = getForgePreferences().getPref(FPref.UI_SKIN); } else { skinName = "default"; //use default skin if preferences file doesn't exist yet } FSkin.loadLight(skinName, splashScreen); - textureFiltering = prefs.getPrefBoolean(FPref.UI_LIBGDX_TEXTURE_FILTERING); - showFPS = prefs.getPrefBoolean(FPref.UI_SHOW_FPS); - autoAIDeckSelection = prefs.getPrefBoolean(FPref.UI_AUTO_AIDECK_SELECTION); - altPlayerLayout = prefs.getPrefBoolean(FPref.UI_ALT_PLAYERINFOLAYOUT); - altZoneTabs = prefs.getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS); - animatedCardTapUntap = prefs.getPrefBoolean(FPref.UI_ANIMATED_CARD_TAPUNTAP); - enableUIMask = prefs.getPref(FPref.UI_ENABLE_BORDER_MASKING); - if (prefs.getPref(FPref.UI_ENABLE_BORDER_MASKING).equals("true")) //override old settings if not updated + textureFiltering = getForgePreferences().getPrefBoolean(FPref.UI_LIBGDX_TEXTURE_FILTERING); + showFPS = getForgePreferences().getPrefBoolean(FPref.UI_SHOW_FPS); + autoAIDeckSelection = getForgePreferences().getPrefBoolean(FPref.UI_AUTO_AIDECK_SELECTION); + altPlayerLayout = getForgePreferences().getPrefBoolean(FPref.UI_ALT_PLAYERINFOLAYOUT); + altZoneTabs = getForgePreferences().getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS); + animatedCardTapUntap = getForgePreferences().getPrefBoolean(FPref.UI_ANIMATED_CARD_TAPUNTAP); + enableUIMask = getForgePreferences().getPref(FPref.UI_ENABLE_BORDER_MASKING); + if (getForgePreferences().getPref(FPref.UI_ENABLE_BORDER_MASKING).equals("true")) //override old settings if not updated enableUIMask = "Full"; - else if (prefs.getPref(FPref.UI_ENABLE_BORDER_MASKING).equals("false")) + else if (getForgePreferences().getPref(FPref.UI_ENABLE_BORDER_MASKING).equals("false")) enableUIMask = "Off"; - enablePreloadExtendedArt = prefs.getPrefBoolean(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART); - locale = prefs.getPref(FPref.UI_LANGUAGE); - autoCache = prefs.getPrefBoolean(FPref.UI_AUTO_CACHE_SIZE); - disposeTextures = prefs.getPrefBoolean(FPref.UI_ENABLE_DISPOSE_TEXTURES); - CJK_Font = prefs.getPref(FPref.UI_CJK_FONT); + enablePreloadExtendedArt = getForgePreferences().getPrefBoolean(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART); + locale = getForgePreferences().getPref(FPref.UI_LANGUAGE); + autoCache = getForgePreferences().getPrefBoolean(FPref.UI_AUTO_CACHE_SIZE); + disposeTextures = getForgePreferences().getPrefBoolean(FPref.UI_ENABLE_DISPOSE_TEXTURES); + CJK_Font = getForgePreferences().getPref(FPref.UI_CJK_FONT); if (autoCache) { //increase cacheSize for devices with RAM more than 5GB, default is 300. Some phones have more than 10GB RAM (Mi 10, OnePlus 8, S20, etc..) @@ -379,12 +390,6 @@ public class Forge implements ApplicationListener { //adjust height modifier adjustHeightModifier(getScreenWidth(), getScreenHeight()); - //update landscape mode preference if it doesn't match what the app loaded as - if (FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE) != isLandscapeMode()) { - FModel.getPreferences().setPref(FPref.UI_LANDSCAPE_MODE, isLandscapeMode()); - FModel.getPreferences().save(); - } - FThreads.invokeInBackgroundThread(() -> FThreads.invokeInEdtLater(() -> { //load skin full FSkin.loadFull(splashScreen); diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index eb167bd9fd4..85d491a5cc9 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -305,7 +305,7 @@ public class DuelScene extends ForgeScene { } else if (this.eventData != null){ deck = eventData.nextOpponent.getDeck(); } else { - deck = currentEnemy.copyPlayerDeck ? this.playerDeck : currentEnemy.generateDeck(Current.player().isFantasyMode(), Current.player().isUsingCustomDeck() || Current.player().getDifficulty().name.equalsIgnoreCase("Hard")); + deck = currentEnemy.copyPlayerDeck ? this.playerDeck : currentEnemy.generateDeck(Current.player().isFantasyMode(), Current.player().isUsingCustomDeck() || Current.player().getDifficulty().name.equalsIgnoreCase("Insane") || Current.player().getDifficulty().name.equalsIgnoreCase("Hard")); } RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(playerCount, appliedVariants, deck, null, false, null, null); diff --git a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java index f8fc39e8fb3..303e9feb087 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java @@ -109,6 +109,7 @@ public class MapViewScene extends UIScene { TextraButton questButton = ui.findActor("quest"); if (questButton != null) { questButton.setDisabled(labels.isEmpty()); + questButton.setVisible(!labels.isEmpty()); } super.enter(); } diff --git a/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java b/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java index 7a03cf71c22..166a9249ead 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java @@ -30,7 +30,6 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; * Scene to handle settings of the base forge and adventure mode */ public class SettingsScene extends UIScene { - static public ForgePreferences Preference; private final Table settingGroup; TextraButton backButton; //TextraButton newPlane; @@ -99,9 +98,6 @@ public class SettingsScene extends UIScene { super(Forge.isLandscapeMode() ? "ui/settings.json" : "ui/settings_portrait.json"); settingGroup = new Table(); - if (Preference == null) { - Preference = FModel.getPreferences(); - } //temporary disable custom world until it works correctly on each update /*selectSourcePlane = Controls.newComboBox(); newPlaneName = Controls.newTextField(""); @@ -131,10 +127,10 @@ public class SettingsScene extends UIScene { mode = "720p"; Graphics.setVideoMode(mode); - //update preference for classic mode if needed - if (Preference.getPref(ForgePreferences.FPref.UI_VIDEO_MODE).equals(mode)) { - Preference.setPref(ForgePreferences.FPref.UI_VIDEO_MODE, mode); - Preference.save(); + //update + if (!FModel.getPreferences().getPref(ForgePreferences.FPref.UI_VIDEO_MODE).equalsIgnoreCase(mode)) { + FModel.getPreferences().setPref(ForgePreferences.FPref.UI_VIDEO_MODE, mode); + FModel.getPreferences().save(); } return null; }); @@ -194,10 +190,8 @@ public class SettingsScene extends UIScene { Config.instance().getSettingData().fullScreen = value; Config.instance().saveSettings(); //update - if (Preference.getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_MODE) != value) { - Preference.setPref(ForgePreferences.FPref.UI_LANDSCAPE_MODE, value); - Preference.save(); - } + FModel.getPreferences().setPref(ForgePreferences.FPref.UI_FULLSCREEN_MODE, Config.instance().getSettingData().fullScreen); + FModel.getPreferences().save(); } }); } @@ -237,16 +231,18 @@ public class SettingsScene extends UIScene { addCheckBox(Forge.getLocalizer().getMessage("lblLandscapeMode"), ForgePreferences.FPref.UI_LANDSCAPE_MODE); addCheckBox(Forge.getLocalizer().getMessage("lblAnimatedCardTapUntap"), ForgePreferences.FPref.UI_ANIMATED_CARD_TAPUNTAP); if (!GuiBase.isAndroid()) { - final String[] item = {Preference.getPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING)}; + final String[] item = {FModel.getPreferences().getPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING)}; SelectBox borderMask = Controls.newComboBox(new String[]{"Off", "Crop", "Full", "Art"}, item[0], o -> { String mode = (String) o; if (mode == null) mode = "Crop"; item[0] = mode; - //update preference for classic mode if needed - Preference.setPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING, mode); - Preference.save(); - Forge.enableUIMask = Preference.getPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING); + //update + if (!FModel.getPreferences().getPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING).equalsIgnoreCase(mode)) { + FModel.getPreferences().setPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING, mode); + FModel.getPreferences().save(); + Forge.enableUIMask = FModel.getPreferences().getPref(ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING); + } ImageCache.clearGeneratedCards(); ImageCache.disposeTextures(); return null; @@ -277,12 +273,12 @@ public class SettingsScene extends UIScene { private void addInputField(String name, ForgePreferences.FPref pref) { TextField box = Controls.newTextField(""); - box.setText(Preference.getPref(pref)); + box.setText(FModel.getPreferences().getPref(pref)); box.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - Preference.setPref(pref, ((TextField) actor).getText()); - Preference.save(); + FModel.getPreferences().setPref(pref, ((TextField) actor).getText()); + FModel.getPreferences().save(); } }); @@ -292,12 +288,12 @@ public class SettingsScene extends UIScene { private void addCheckBox(String name, ForgePreferences.FPref pref) { CheckBox box = Controls.newCheckBox(""); - box.setChecked(Preference.getPrefBoolean(pref)); + box.setChecked(FModel.getPreferences().getPrefBoolean(pref)); box.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - Preference.setPref(pref, ((CheckBox) actor).isChecked()); - Preference.save(); + FModel.getPreferences().setPref(pref, ((CheckBox) actor).isChecked()); + FModel.getPreferences().save(); } }); @@ -307,12 +303,12 @@ public class SettingsScene extends UIScene { private void addSettingSlider(String name, ForgePreferences.FPref pref, int min, int max) { Slider slide = Controls.newSlider(min, max, 1, false); - slide.setValue(Preference.getPrefInt(pref)); + slide.setValue(FModel.getPreferences().getPrefInt(pref)); slide.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - Preference.setPref(pref, String.valueOf((int) ((Slider) actor).getValue())); - Preference.save(); + FModel.getPreferences().setPref(pref, String.valueOf((int) ((Slider) actor).getValue())); + FModel.getPreferences().save(); if (ForgePreferences.FPref.UI_VOL_MUSIC.equals(pref)) SoundSystem.instance.refreshVolume(); } diff --git a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java index c109466cde6..34d4e789cc7 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java @@ -10,6 +10,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.*; import com.badlogic.gdx.scenes.scene2d.actions.Actions; +import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction; import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.utils.ActorGestureListener; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; @@ -22,6 +23,7 @@ import com.github.tommyettinger.textra.TextraButton; import com.github.tommyettinger.textra.TextraLabel; import com.github.tommyettinger.textra.TypingLabel; import forge.Forge; +import forge.adventure.character.CharacterSprite; import forge.adventure.data.AdventureQuestData; import forge.adventure.data.ItemData; import forge.adventure.player.AdventurePlayer; @@ -342,6 +344,7 @@ public class GameHUD extends Stage { } //unequip and reequip abilities updateAbility(); + restorePlayerCollision(); if (openMapActor != null) { String val = "[%80]" + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom"); for (AdventureQuestData adq: Current.player().getQuests()) { @@ -487,12 +490,17 @@ public class GameHUD extends Stage { private void setAudio(MusicPlaylist playlist) { if (playlist.equals(currentAudioPlaylist)) return; + System.out.println("Playlist: "+playlist); unloadAudio(); + System.out.println("Playlist: "+playlist); audio = getMusic(playlist); } private Pair getMusic(MusicPlaylist playlist) { - FileHandle file = Gdx.files.absolute(playlist.getNewRandomFilename()); + String filename = playlist.getNewRandomFilename(); + if (filename == null) + return null; + FileHandle file = Gdx.files.absolute(filename); Music music = Forge.getAssets().getMusic(file); if (music != null) { currentAudioPlaylist = playlist; @@ -673,8 +681,10 @@ public class GameHUD extends Stage { } public void playerIdle() { if (MapStage.getInstance().isInMap()) { + MapStage.getInstance().startPause(1f); MapStage.getInstance().getPlayerSprite().stop(); } else { + WorldStage.getInstance().startPause(1f); WorldStage.getInstance().getPlayerSprite().stop(); } } @@ -771,7 +781,7 @@ public class GameHUD extends Stage { changeBGM(MusicPlaylist.WHITE); break; case "waste": - changeBGM(MusicPlaylist.MENUS); + changeBGM(MusicPlaylist.COLORLESS); break; default: break; @@ -783,4 +793,25 @@ public class GameHUD extends Stage { SoundSystem.instance.setBackgroundMusic(playlist); } } + void flicker(CharacterSprite sprite) { + if (sprite.getCollisionHeight() == 0f) { + SequenceAction flicker = new SequenceAction(Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), new Action() { + @Override + public boolean act(float v) { + Timer.schedule(new Timer.Task() { + @Override + public void run() { + sprite.resetCollisionHeight(); + } + }, 0.5f); + return true; + } + }); + sprite.addAction(flicker); + } + } + void restorePlayerCollision() { + flicker(MapStage.getInstance().getPlayerSprite()); + flicker(WorldStage.getInstance().getPlayerSprite()); + } } diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java index 17e3a89a9f3..f1c642dc42d 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java @@ -1126,6 +1126,7 @@ public class MapStage extends GameStage { if (Controllers.getCurrent() != null && Controllers.getCurrent().canVibrate()) Controllers.getCurrent().startVibration(duration, 1); Forge.restrictAdvMenus = true; + player.clearCollisionHeight(); startPause(0.8f, () -> { Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2"); SoundSystem.instance.play(SoundEffectType.ManaBurn, false); diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index 9a2d7125508..39ec6bbfcba 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -117,6 +117,7 @@ public class WorldStage extends GameStage implements SaveFileContent { if (Controllers.getCurrent() != null && Controllers.getCurrent().canVibrate()) Controllers.getCurrent().startVibration(duration, 1); Forge.restrictAdvMenus = true; + player.clearCollisionHeight(); startPause(0.8f, () -> { Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2"); SoundSystem.instance.play(SoundEffectType.ManaBurn, false); @@ -347,7 +348,6 @@ public class WorldStage extends GameStage implements SaveFileContent { setBounds(WorldSave.getCurrentSave().getWorld().getWidthInPixels(), WorldSave.getCurrentSave().getWorld().getHeightInPixels()); GridPoint2 pos = background.translateFromWorldToChunk(player.getX(), player.getY()); background.loadChunk(pos.x, pos.y); - handlePointsOfInterestCollision(); } @Override diff --git a/forge-gui/res/adventure/Shandalar/world/world.json b/forge-gui/res/adventure/Shandalar/world/world.json index f57c8eb4d90..60a70832fb3 100644 --- a/forge-gui/res/adventure/Shandalar/world/world.json +++ b/forge-gui/res/adventure/Shandalar/world/world.json @@ -15,7 +15,7 @@ "maxRoadDistance": 1000, "biomesNames": [ "world/biomes/base.json", - "world/biomes/waste.json", + "world/biomes/colorless.json", "world/biomes/white.json", "world/biomes/blue.json", "world/biomes/black.json", diff --git a/forge-gui/res/adventure/Shandalar/music/black/black1.mp3 b/forge-gui/res/adventure/common/music/black/black1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/black/black1.mp3 rename to forge-gui/res/adventure/common/music/black/black1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/blue/blue1.mp3 b/forge-gui/res/adventure/common/music/blue/blue1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/blue/blue1.mp3 rename to forge-gui/res/adventure/common/music/blue/blue1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/boss/boss1.mp3 b/forge-gui/res/adventure/common/music/boss/boss1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/boss/boss1.mp3 rename to forge-gui/res/adventure/common/music/boss/boss1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/boss/boss2.mp3 b/forge-gui/res/adventure/common/music/boss/boss2.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/boss/boss2.mp3 rename to forge-gui/res/adventure/common/music/boss/boss2.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/castle/castle1.mp3 b/forge-gui/res/adventure/common/music/castle/castle1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/castle/castle1.mp3 rename to forge-gui/res/adventure/common/music/castle/castle1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/cave/cave1.mp3 b/forge-gui/res/adventure/common/music/cave/cave1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/cave/cave1.mp3 rename to forge-gui/res/adventure/common/music/cave/cave1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/menus/menu1.mp3 b/forge-gui/res/adventure/common/music/colorless/menu1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/menus/menu1.mp3 rename to forge-gui/res/adventure/common/music/colorless/menu1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/green/green1.mp3 b/forge-gui/res/adventure/common/music/green/green1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/green/green1.mp3 rename to forge-gui/res/adventure/common/music/green/green1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/match/match1.mp3 b/forge-gui/res/adventure/common/music/match/match1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/match/match1.mp3 rename to forge-gui/res/adventure/common/music/match/match1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/match/match2.mp3 b/forge-gui/res/adventure/common/music/match/match2.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/match/match2.mp3 rename to forge-gui/res/adventure/common/music/match/match2.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/match/match3.mp3 b/forge-gui/res/adventure/common/music/match/match3.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/match/match3.mp3 rename to forge-gui/res/adventure/common/music/match/match3.mp3 diff --git a/forge-gui/res/adventure/common/music/menus/menu1.mp3 b/forge-gui/res/adventure/common/music/menus/menu1.mp3 new file mode 100644 index 00000000000..539fe0131af Binary files /dev/null and b/forge-gui/res/adventure/common/music/menus/menu1.mp3 differ diff --git a/forge-gui/res/adventure/Shandalar/music/red/red1.mp3 b/forge-gui/res/adventure/common/music/red/red1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/red/red1.mp3 rename to forge-gui/res/adventure/common/music/red/red1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/town/town1.mp3 b/forge-gui/res/adventure/common/music/town/town1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/town/town1.mp3 rename to forge-gui/res/adventure/common/music/town/town1.mp3 diff --git a/forge-gui/res/adventure/Shandalar/music/white/white1.mp3 b/forge-gui/res/adventure/common/music/white/white1.mp3 similarity index 100% rename from forge-gui/res/adventure/Shandalar/music/white/white1.mp3 rename to forge-gui/res/adventure/common/music/white/white1.mp3 diff --git a/forge-gui/res/adventure/common/world/biomes/black.json b/forge-gui/res/adventure/common/world/biomes/black.json index aee2248968c..5815a3276c6 100644 --- a/forge-gui/res/adventure/common/world/biomes/black.json +++ b/forge-gui/res/adventure/common/world/biomes/black.json @@ -23,11 +23,8 @@ "height": 0.7, "color": "110903", "spriteNames": [ - "SwampTree", - "SwampTree2", "DarkGras", "Skull", - "SwampRock", "DarkWood", "Reed", "Waterlily", @@ -120,22 +117,46 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/swamp_forest.png", - "maskPath": "world/masks/ring.png", + "structureAtlasPath": "world/structures/black_structures.atlas", + "sourcePath": "world/structures/models/black.png", + "maskPath": "world/structures/masks/ring.png", "height": 0.5, "width": 0.5, "symmetry": 8, - "periodicOutput": false, "mappingInfo": [ { - "name": "swamp_forest", - "color": "007000", + "name": "water", + "color": "00ffff", "collision": true }, { - "name": "swamp_water", - "color": "005050", + "name": "tree", + "color": "004000", + "collision": true + }, + { + "name": "tree2", + "color": "008000", + "collision": true + }, + { + "name": "tree3", + "color": "ff00ff", + "collision": true + }, + { + "name": "tree4", + "color": "00f000", + "collision": true + }, + { + "name": "rock", + "color": "808080", + "collision": true + }, + { + "name": "rock2", + "color": "ff0000", "collision": true } ] @@ -144,27 +165,41 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/swamp_ruins.png", - "maskPath": "world/masks/circle.png", + "structureAtlasPath": "world/structures/black_structures.atlas", + "sourcePath": "world/structures/models/black.png", + "maskPath": "world/structures/masks/circle.png", "height": 0.20000002, "width": 0.20000002, - "symmetry": 1, - "periodicOutput": false, + "symmetry": 8, "mappingInfo": [ { - "name": "deep_swamp", - "color": "002000", + "name": "muck", + "color": "00ffff", "collision": true }, { - "name": "structure", - "color": "505050", + "name": "dead_tree", + "color": "004000", "collision": true }, { - "name": "swamp_forest2", - "color": "007000", + "name": "dead_tree2", + "color": "008000", + "collision": true + }, + { + "name": "dead_tree3", + "color": "ff00ff", + "collision": true + }, + { + "name": "rock", + "color": "808080", + "collision": true + }, + { + "name": "rock2", + "color": "ff0000", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/biomes/blue.json b/forge-gui/res/adventure/common/world/biomes/blue.json index 473a447e1fb..9914d918d23 100644 --- a/forge-gui/res/adventure/common/world/biomes/blue.json +++ b/forge-gui/res/adventure/common/world/biomes/blue.json @@ -23,8 +23,6 @@ "height": 0.7, "color": "10a2e0", "spriteNames": [ - "IslandTree", - "Coral", "Shell" ], "enemies": [ @@ -108,47 +106,93 @@ ], "structures": [ { + "N":2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/water.png", - "maskPath": "world/masks/circle.png", - "height": 0.20000002, - "width": 0.20000002, + "structureAtlasPath": "world/structures/blue_structures.atlas", + "sourcePath": "world/structures/models/blue.png", + "maskPath": "world/structures/masks/circle.png", + "height": 0.1, + "width": 0.1, "symmetry": 8, "periodicOutput": false, "mappingInfo": [ { "name": "water", - "color": "0070a0", + "color": "00ffff", "collision": true }, { - "name": "island_forest", - "color": "00a000", + "name": "tree", + "color": "00ff00", + "collision": true + }, + { + "name": "tree2", + "color": "008000", + "collision": true + }, + { + "name": "pineapple", + "color": "ffff00", + "collision": true + }, + { + "name": "rock", + "color": "ff8000", + "collision": true + }, + { + "name": "rock2", + "color": "804000", + "collision": true + }, + { + "name": "rock3", + "color": "402000", + "collision": true + }, + { + "name": "rock4", + "color": "201000", "collision": true } ] }, { + "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/island_forest.png", - "maskPath": "world/masks/ring.png", + "structureAtlasPath": "world/structures/blue_structures.atlas", + "sourcePath": "world/structures/models/beach.png", + "maskPath": "world/structures/masks/ring.png", "height": 0.5, "width": 0.5, "symmetry": 8, - "periodicOutput": false, "mappingInfo": [ { "name": "water", - "color": "0070a0", + "color": "00ffff", "collision": true }, { - "name": "island_forest", - "color": "00a000", + "name": "tree", + "color": "00ff00", + "collision": true + }, + { + "name": "tree2", + "color": "008000", + "collision": true + }, + { + "name": "dune", + "color": "ff8000", + "collision": true + }, + { + "name": "dune2", + "color": "402000", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/biomes/waste.json b/forge-gui/res/adventure/common/world/biomes/colorless.json similarity index 56% rename from forge-gui/res/adventure/common/world/biomes/waste.json rename to forge-gui/res/adventure/common/world/biomes/colorless.json index c93077309c7..41424b80af7 100644 --- a/forge-gui/res/adventure/common/world/biomes/waste.json +++ b/forge-gui/res/adventure/common/world/biomes/colorless.json @@ -5,15 +5,15 @@ "distWeight": 1, "name": "waste", "tilesetAtlas": "world/tilesets/terrain.atlas", -"tilesetName": "Waste", +"tilesetName": "Colorless", "terrain": [ { - "spriteName": "Waste_1", + "spriteName": "Colorless_1", "max": 0.2, "resolution": 5 }, { - "spriteName": "Waste_2", + "spriteName": "Colorless_2", "min": 0.8, "max": 1, "resolution": 5 @@ -23,9 +23,7 @@ "height": 0.85, "color": "aeaeae", "spriteNames": [ - "WasteTree", - "Stone", - "WasteRock" + "Stone" ], "enemies": [ "Adept Black Wizard", @@ -118,44 +116,94 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/waste_structure.png", - "maskPath": "world/masks/circle.png", - "periodicInput": false, - "height": 0.20000002, - "width": 0.20000002, - "symmetry": 4, + "structureAtlasPath": "world/structures/colorless_structures.atlas", + "sourcePath": "world/structures/models/colorless.png", + "maskPath": "world/structures/masks/circle.png", + "height": 0.25, + "width": 0.25, + "symmetry": 8, "mappingInfo": [ { - "name": "waste_structure", - "color": "444444", + "name": "crater", + "color": "808080", "collision": true }, { - "name": "waste_mountain", - "color": "9a9a9a", + "name": "tree", + "color": "ff0000", + "collision": true + }, + { + "name": "tree2", + "color": "00ff00", + "collision": true + }, + { + "name": "tree3", + "color": "0000ff", + "collision": true + }, + { + "name": "tree4", + "color": "00ffff", + "collision": true + }, + { + "name": "rock", + "color": "ff00ff", + "collision": true + }, + { + "name": "mountain", + "color": "000000", "collision": true } ] }, { + "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/hole.png", - "maskPath": "world/masks/ring.png", + "structureAtlasPath": "world/structures/colorless_structures.atlas", + "sourcePath": "world/structures/models/colorless.png", + "maskPath": "world/structures/masks/ring.png", "height": 0.5, "width": 0.5, - "periodicOutput": false, + "symmetry": 8, "mappingInfo": [ { "name": "hole", - "color": "111111", + "color": "808080", "collision": true }, { - "name": "waste_mountain", - "color": "9a9a9a", + "name": "tree", + "color": "ff0000", + "collision": true + }, + { + "name": "tree2", + "color": "00ff00", + "collision": true + }, + { + "name": "tree3", + "color": "0000ff", + "collision": true + }, + { + "name": "tree4", + "color": "00ffff", + "collision": true + }, + { + "name": "rock", + "color": "ff00ff", + "collision": true + }, + { + "name": "mountain", + "color": "000000", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/biomes/green.json b/forge-gui/res/adventure/common/world/biomes/green.json index 27cc104a4b3..d57989463d0 100644 --- a/forge-gui/res/adventure/common/world/biomes/green.json +++ b/forge-gui/res/adventure/common/world/biomes/green.json @@ -23,9 +23,6 @@ "height": 0.7, "color": "59a650", "spriteNames": [ - "WoodTree", - "WoodTree2", - "Bush", "Stump", "Moss", "Stone", @@ -122,39 +119,66 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/forest.png", - "maskPath": "world/masks/circle.png", - "height": 0.20000002, - "width": 0.20000002, + "structureAtlasPath": "world/structures/green_structures.atlas", + "sourcePath": "world/structures/models/green.png", + "maskPath": "world/structures/masks/circle.png", + "height": 0.5, + "width": 0.5, "symmetry": 1, "mappingInfo": [ { - "name": "forest", - "color": "007000", - "collision": true - } - ] - }, - { - "N": 2, - "x": 0.5, - "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/lake.png", - "maskPath": "world/masks/ring.png", - "height": 0.5, - "width": 0.5, - "periodicOutput": false, - "mappingInfo": [ - { - "name": "lake", - "color": "0070a0", + "name": "water", + "color": "000080", "collision": true }, { - "name": "forest2", - "color": "009000", + "name": "tree", + "color": "008000", + "collision": true + }, + { + "name": "tree2", + "color": "004000", + "collision": true + }, + { + "name": "vine", + "color": "8080ff", + "collision": true + }, + { + "name": "tree3", + "color": "00c000", + "collision": true + }, + { + "name": "tree4", + "color": "00f000", + "collision": true + }, + { + "name": "tree5", + "color": "006000", + "collision": true + }, + { + "name": "rock", + "color": "808080", + "collision": true + }, + { + "name": "mountain", + "color": "ff0000", + "collision": true + }, + { + "name": "plant", + "color": "800000", + "collision": true + }, + { + "name": "bush", + "color": "ff8080", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/biomes/ifnir.json b/forge-gui/res/adventure/common/world/biomes/ifnir.json index dfe531b754f..350c5cd7cb3 100644 --- a/forge-gui/res/adventure/common/world/biomes/ifnir.json +++ b/forge-gui/res/adventure/common/world/biomes/ifnir.json @@ -23,8 +23,7 @@ "height": 1, "color": "110903", "spriteNames": [ - "Skull", - "PlainsRock" + "Skull" ], "enemies": [ "Ammit", @@ -60,9 +59,9 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/mountain.png", - "maskPath": "world/masks/circle.png", + "structureAtlasPath": "world/structures/structures.atlas", + "sourcePath": "world/structures/models/mountain.png", + "maskPath": "world/structures/masks/circle.png", "height": 0.5, "width": 0.5, "symmetry": 8, diff --git a/forge-gui/res/adventure/common/world/biomes/outlands.json b/forge-gui/res/adventure/common/world/biomes/outlands.json index 20245de45ac..ff3d4b8ceba 100644 --- a/forge-gui/res/adventure/common/world/biomes/outlands.json +++ b/forge-gui/res/adventure/common/world/biomes/outlands.json @@ -31,7 +31,7 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", + "structureAtlasPath": "world/structures/structures.atlas", "sourcePath": "world/models/fill.png", "maskPath": "world/masks/fill.png", "height": 0.99, diff --git a/forge-gui/res/adventure/common/world/biomes/ramunap.json b/forge-gui/res/adventure/common/world/biomes/ramunap.json index 8157dde434d..722f2ae1146 100644 --- a/forge-gui/res/adventure/common/world/biomes/ramunap.json +++ b/forge-gui/res/adventure/common/world/biomes/ramunap.json @@ -45,9 +45,9 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/mountain.png", - "maskPath": "world/masks/circle.png", + "structureAtlasPath": "world/structures/structures.atlas", + "sourcePath": "world/structures/models/mountain.png", + "maskPath": "world/structures/masks/circle.png", "height": 0.5, "width": 0.5, "periodicOutput": false, diff --git a/forge-gui/res/adventure/common/world/biomes/red.json b/forge-gui/res/adventure/common/world/biomes/red.json index b1bad77d6b3..0985e016231 100644 --- a/forge-gui/res/adventure/common/world/biomes/red.json +++ b/forge-gui/res/adventure/common/world/biomes/red.json @@ -23,9 +23,6 @@ "height": 0.7, "color": "b63729", "spriteNames": [ - "MountainTree", - "MountainTree2", - "MountainRock", "Gravel" ], "enemies": [ @@ -127,21 +124,41 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/mountain.png", - "maskPath": "world/masks/ring.png", + "structureAtlasPath": "world/structures/red_structures.atlas", + "sourcePath": "world/structures/models/red.png", + "maskPath": "world/structures/masks/ring.png", "height": 0.5, "width": 0.5, - "periodicOutput": false, + "symmetry": 8, "mappingInfo": [ { "name": "mountain", - "color": "a07020", + "color": "ff0000", "collision": true }, { - "name": "mountain_forest", - "color": "007000", + "name": "tree", + "color": "00ff00", + "collision": true + }, + { + "name": "tree2", + "color": "00ffff", + "collision": true + }, + { + "name": "tree3", + "color": "0000ff", + "collision": true + }, + { + "name": "tree4", + "color": "ff00ff", + "collision": true + }, + { + "name": "rock", + "color": "ffff00", "collision": true } ] @@ -149,15 +166,37 @@ { "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/lava.png", - "maskPath": "world/masks/circle.png", + "structureAtlasPath": "world/structures/red_structures.atlas", + "sourcePath": "world/structures/models/volcano.png", + "maskPath": "world/structures/masks/circle.png", "height": 0.2, "width": 0.2, + "N": 2, + "symmetry": 8, "mappingInfo": [ { "name": "lava", - "color": "ff5000", + "color": "ffff00", + "collision": true + }, + { + "name": "mountain", + "color": "ff0000", + "collision": true + }, + { + "name": "dead_tree", + "color": "000000", + "collision": true + }, + { + "name": "dead_tree2", + "color": "808080", + "collision": true + }, + { + "name": "rock", + "color": "0000ff", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/biomes/shefet.json b/forge-gui/res/adventure/common/world/biomes/shefet.json index e17fa445638..8a70df0282b 100644 --- a/forge-gui/res/adventure/common/world/biomes/shefet.json +++ b/forge-gui/res/adventure/common/world/biomes/shefet.json @@ -23,7 +23,6 @@ "height": 0.5, "color": "efe697", "spriteNames": [ - "PlainsRock", "Skull" ], "enemies": [ diff --git a/forge-gui/res/adventure/common/world/biomes/white.json b/forge-gui/res/adventure/common/world/biomes/white.json index 60d6b810ad1..6bf5c73f376 100644 --- a/forge-gui/res/adventure/common/world/biomes/white.json +++ b/forge-gui/res/adventure/common/world/biomes/white.json @@ -23,9 +23,6 @@ "height": 0.7, "color": "efe697", "spriteNames": [ - "PlainsTree", - "Cactus", - "PlainsRock", "DarkGras" ], "enemies": [ @@ -117,33 +114,74 @@ "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/plains_forest.png", - "maskPath": "world/masks/circle.png", + "structureAtlasPath": "world/structures/white_structures.atlas", + "sourcePath": "world/structures/models/white.png", + "maskPath": "world/structures/masks/circle.png", "height": 0.20000002, "width": 0.20000002, "symmetry": 8, "mappingInfo": [ { - "name": "plains_forest", - "color": "9c4000", + "name": "tree", + "color": "ff8000", + "collision": true + }, + { + "name": "tree2", + "color": "008000", + "collision": true + }, + { + "name": "tree3", + "color": "00ff00", "collision": true } ] }, { + "N": 2, "x": 0.5, "y": 0.5, - "structureAtlasPath": "world/tilesets/structures.atlas", - "sourcePath": "world/models/plateau.png", - "maskPath": "world/masks/ring.png", + "symmetry": 8, + "structureAtlasPath": "world/structures/white_structures.atlas", + "sourcePath": "world/structures/models/desert.png", + "maskPath": "world/structures/masks/ring.png", "height": 0.5, "width": 0.5, - "periodicOutput": false, "mappingInfo": [ { "name": "plateau", - "color": "caaa66", + "color": "804000", + "collision": true + }, + { + "name": "rock", + "color": "402000", + "collision": true + }, + { + "name": "mesa", + "color": "201000", + "collision": true + }, + { + "name": "plateau", + "color": "804000", + "collision": true + }, + { + "name": "cactus", + "color": "00ff00", + "collision": true + }, + { + "name": "cactus2", + "color": "008000", + "collision": true + }, + { + "name": "cactus3", + "color": "004000", "collision": true } ] diff --git a/forge-gui/res/adventure/common/world/enemies.json b/forge-gui/res/adventure/common/world/enemies.json index af69df3441f..6596fe86d44 100644 --- a/forge-gui/res/adventure/common/world/enemies.json +++ b/forge-gui/res/adventure/common/world/enemies.json @@ -12542,7 +12542,7 @@ "spawnRate": 1, "difficulty": 0.1, "speed": 25, - "scale": 0.6, + "scale": 1.3, "life": 11, "rewards": [ { diff --git a/forge-gui/res/adventure/common/world/sprites/map_sprites.atlas b/forge-gui/res/adventure/common/world/sprites/map_sprites.atlas index fd1b23ea6e2..90bc5f6c636 100644 --- a/forge-gui/res/adventure/common/world/sprites/map_sprites.atlas +++ b/forge-gui/res/adventure/common/world/sprites/map_sprites.atlas @@ -5,289 +5,382 @@ filter: Nearest,Nearest repeat: none DarkWood xy: 0, 0 - size: 16, 16 + size: 16, 16 DarkWood xy: 16, 0 - size: 16, 16 + size: 16, 16 DarkWood xy: 32, 0 - size: 16, 16 + size: 16, 16 DarkWood xy: 48, 0 - size: 16, 16 + size: 16, 16 Reed xy: 64, 0 - size: 16, 16 + size: 16, 16 Reed xy: 80, 0 - size: 16, 16 -Reed - xy: 64, 16 - size: 16, 16 -Reed - xy: 80, 16 - size: 16, 16 + size: 16, 16 DarkWood xy: 96, 0 - size: 16, 16 + size: 16, 16 DarkWood xy: 112, 0 - size: 16, 16 -Waterlily - xy: 96, 16 - size: 16, 16 -Waterlily - xy: 112, 16 - size: 16, 16 -Shroom - xy: 96, 32 - size: 16, 16 -Shroom - xy: 96, 48 - size: 16, 16 -Shroom2 - xy: 112, 32 - size: 16, 16 -Shroom2 - xy: 112, 48 - size: 16, 16 + size: 16, 16 DarkWood xy: 0, 16 - size: 16, 16 + size: 16, 16 DarkWood xy: 16, 16 - size: 16, 16 + size: 16, 16 DarkWood xy: 32, 16 - size: 16, 16 + size: 16, 16 DarkWood xy: 48, 16 - size: 16, 16 + size: 16, 16 +Reed + xy: 64, 16 + size: 16, 16 +Reed + xy: 80, 16 + size: 16, 16 +Waterlily + xy: 96, 16 + size: 16, 16 +Waterlily + xy: 112, 16 + size: 16, 16 DarkGras xy: 0, 32 - size: 16, 16 + size: 16, 16 DarkGras xy: 16, 32 - size: 16, 16 -DarkGras - xy: 0, 48 - size: 16, 16 -DarkGras - xy: 16, 48 - size: 16, 16 + size: 16, 16 Stone xy: 32, 32 - size: 16, 16 + size: 16, 16 Stone xy: 48, 32 - size: 16, 16 -Stone - xy: 32, 48 - size: 16, 16 -Stone - xy: 48, 48 - size: 16, 16 + size: 16, 16 Gravel xy: 64, 32 - size: 16, 16 + size: 16, 16 Gravel xy: 80, 32 - size: 16, 16 + size: 16, 16 +Shroom + xy: 96, 32 + size: 16, 16 +Shroom2 + xy: 112, 32 + size: 16, 16 +DarkGras + xy: 0, 48 + size: 16, 16 +DarkGras + xy: 16, 48 + size: 16, 16 +Shroom + xy: 96, 48 + size: 16, 16 +Shroom2 + xy: 112, 48 + size: 16, 16 +Stone + xy: 32, 48 + size: 16, 16 +Stone + xy: 48, 48 + size: 16, 16 Gravel xy: 64, 48 - size: 16, 16 + size: 16, 16 Gravel xy: 80, 48 - size: 16, 16 + size: 16, 16 Flower xy: 0, 64 - size: 16, 16 + size: 16, 16 Flower xy: 16, 64 - size: 16, 16 -Flower - xy: 0, 80 - size: 16, 16 -Flower - xy: 16, 80 - size: 16, 16 + size: 16, 16 Stone xy: 32, 64 - size: 16, 16 + size: 16, 16 Stone xy: 48, 64 - size: 16, 16 -Stone - xy: 32, 80 - size: 16, 16 -Stone - xy: 48, 80 - size: 16, 16 + size: 16, 16 Moss xy: 64, 64 - size: 16, 16 + size: 16, 16 Moss xy: 80, 64 - size: 16, 16 -Moss - xy: 64, 80 - size: 16, 16 -Moss - xy: 80, 80 - size: 16, 16 + size: 16, 16 Wood xy: 96, 64 - size: 16, 16 + size: 16, 16 Wood xy: 112, 64 - size: 16, 16 + size: 16, 16 +Flower + xy: 0, 80 + size: 16, 16 +Flower + xy: 16, 80 + size: 16, 16 +Stone + xy: 32, 80 + size: 16, 16 +Stone + xy: 48, 80 + size: 16, 16 +Moss + xy: 64, 80 + size: 16, 16 +Moss + xy: 80, 80 + size: 16, 16 Wood xy: 96, 80 - size: 16, 16 + size: 16, 16 Wood xy: 112, 80 - size: 16, 16 + size: 16, 16 WasteTree xy: 0, 96 - size: 16, 16 + size: 16, 16 WasteTree xy: 16, 96 - size: 16, 16 + size: 16, 16 WasteTree xy: 32, 96 - size: 16, 16 + size: 16, 16 WasteRock xy: 48, 96 - size: 16, 16 + size: 16, 16 WasteRock xy: 64, 96 - size: 16, 16 -SwampTree - xy: 0, 112 - size: 16, 16 -SwampTree - xy: 16, 112 - size: 16, 16 -SwampTree - xy: 32, 112 - size: 16, 16 -Skull - xy: 48, 112 - size: 16, 16 -Skull - xy: 112, 144 - size: 16, 16 -Skull - xy: 112, 128 - size: 16, 16 -SwampRock - xy: 64, 112 - size: 16, 16 -SwampRock - xy: 80, 112 - size: 16, 16 -SwampTree2 - xy: 96, 112 - size: 16, 16 -SwampTree2 - xy: 112, 112 - size: 16, 16 + size: 16, 16 +Placeholder + xy: 80, 96 + size: 16,16 SwampTree2 xy: 96, 96 - size: 16, 16 + size: 16, 16 SwampTree2 xy: 112, 96 - size: 16, 16 + size: 16, 16 +SwampTree + xy: 0, 112 + size: 16, 16 +SwampTree + xy: 16, 112 + size: 16, 16 +SwampTree + xy: 32, 112 + size: 16, 16 +Skull + xy: 48, 112 + size: 16, 16 +SwampRock + xy: 64, 112 + size: 16, 16 +SwampRock + xy: 80, 112 + size: 16, 16 +SwampTree2 + xy: 96, 112 + size: 16, 16 +SwampTree2 + xy: 112, 112 + size: 16, 16 PlainsTree xy: 0, 128 - size: 16, 16 + size: 16, 16 PlainsTree xy: 16, 128 - size: 16, 16 + size: 16, 16 Cactus xy: 32, 128 - size: 16, 16 + size: 16, 16 Cactus xy: 48, 128 - size: 16, 16 + size: 16, 16 Cactus xy: 64, 128 - size: 16, 16 + size: 16, 16 PlainsRock - xy: 70, 128 - size: 16, 16 + xy: 80, 128 + size: 16, 16 PlainsRock xy: 96, 128 - size: 16, 16 + size: 16, 16 +Skull + xy: 112, 128 + size: 16, 16 IslandTree xy: 0, 144 - size: 16, 16 + size: 16, 16 IslandTree xy: 16, 144 - size: 16, 16 + size: 16, 16 Coral xy: 32, 144 - size: 16, 16 + size: 16, 16 Shell xy: 48, 144 - size: 16, 16 + size: 16, 16 Shell xy: 64, 144 - size: 16, 16 + size: 16, 16 +Placeholder + xy: 80, 144 + size: 16, 16 +Placeholder + xy: 96, 144 + size: 16, 16 +Skull + xy: 112, 144 + size: 16, 16 WoodTree xy: 0, 160 - size: 16, 16 + size: 16, 16 WoodTree xy: 16, 160 - size: 16, 16 + size: 16, 16 WoodTree xy: 32, 160 - size: 16, 16 + size: 16, 16 WoodTree xy: 48, 160 - size: 16, 16 + size: 16, 16 WoodTree2 xy: 64, 160 - size: 16, 16 + size: 16, 16 WoodTree2 xy: 80, 160 - size: 16, 16 + size: 16, 16 Bush xy: 96, 160 - size: 16, 16 + size: 16, 16 Stump xy: 112, 160 - size: 16, 16 + size: 16, 16 MountainTree xy: 0, 176 - size: 16, 16 + size: 16, 16 MountainTree xy: 16, 176 - size: 16, 16 + size: 16, 16 MountainTree2 xy: 32, 176 - size: 16, 16 + size: 16, 16 MountainTree2 xy: 48, 176 - size: 16, 16 -MountainTree2 - xy: 96, 176 - size: 16, 16 -MountainTree2 - xy: 112, 176 - size: 16, 16 + size: 16, 16 MountainRock xy: 64, 176 - size: 16, 16 + size: 16, 16 MountainRock xy: 80, 176 - size: 16, 16 + size: 16, 16 +MountainTree2 + xy: 96, 176 + size: 16, 16 +MountainTree2 + xy: 112, 176 + size: 16, 16 +WoodTree + xy: 0, 192 + size: 16, 16 +AutumnTree + xy: 16, 192 + size: 16, 16 +WinterTree + xy: 32, 192 + size: 16, 16 +AutumnTree + xy: 48, 192 + size: 16, 16 +Coral + xy: 64, 192 + size: 16, 16 +SnowMountain + xy: 80, 192 + size: 16, 16 +Coral + xy: 96, 192 + size: 16, 16 +AutumnTree + xy: 112, 192 + size: 16, 16 +Placeholder + xy: 0, 208 + size: 16, 16 +AutumnTree + xy: 16, 208 + size: 16, 16 +SwampTree + xy: 32, 208 + size: 16, 16 +Coral + xy: 48, 208 + size: 16, 16 +WoodTree + xy: 64, 208 + size: 16, 16 +IslandRock + xy: 80, 208 + size: 16, 16 +WoodRock + xy: 96, 208 + size: 16, 16 +Placeholder + xy: 112, 208 + size: 16, 16 +LargeWoodRock + xy: 0, 224 + size: 32, 32 +LargeIslandRock + xy: 32, 224 + size: 32, 32 +LargeWasteRock + xy: 64, 224 + size: 32, 32 LargeMountainRock xy: 96, 224 - size: 32, 32 + size: 32, 32 LargePlainsRock xy: 96, 256 - size: 32, 32 + size: 32, 32 +Placeholder + xy: 0, 256 + size: 16, 16 +WasteRock + xy: 16, 256 + size: 16, 16 LargeSwampRock xy: 32, 256 - size: 32, 32 \ No newline at end of file + size: 32, 32 +PlainsRock + xy: 64, 256 + size: 16, 16 +PlainsRock + xy: 80, 256 + size: 16, 16 +LargePlainsRock + xy: 96, 256 + size: 32, 32 +WoodRock + xy: 0, 272 + size: 16, 16 +SwampRock + xy: 16, 272 + size: 16, 16 +WinterTree: + xy: 64, 272 + size: 16, 16 +WinterTree: + xy: 80, 272 + size: 16, 16 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/sprites/map_sprites.json b/forge-gui/res/adventure/common/world/sprites/map_sprites.json index 6aa2f183d0a..9324d76a928 100644 --- a/forge-gui/res/adventure/common/world/sprites/map_sprites.json +++ b/forge-gui/res/adventure/common/world/sprites/map_sprites.json @@ -2,7 +2,7 @@ "textureAtlas":"world/sprites/map_sprites.atlas", "sprites":[ { -"name":"DarkWood", +"name":"DarkWood", "startArea":0.2, "endArea":0.7, "layer":-1, @@ -22,7 +22,7 @@ "layer":-1, "density":0.03 },{ -"name":"Reed", +"name":"Reed", "startArea":0.9, "endArea":0.99, "layer":0, @@ -46,7 +46,7 @@ "name":"Stone", "startArea":0.2, "endArea":0.7, -"layer":-1, +"layer":-1, "resolution" :5, "density":0.01 },{ @@ -79,21 +79,21 @@ "name":"WasteTree", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :10, "density":0.7 },{ "name":"WasteRock", "startArea":0.8, "endArea":1.0, -"layer":0, +"layer":1, "resolution" :10, "density":0.5 },{ "name":"SwampTree", "startArea":0.8, "endArea":1.0, -"layer":0, +"layer":1, "resolution" :10, "density":0.5 },{ @@ -106,45 +106,45 @@ "name":"SwampRock", "startArea":0.5, "endArea":0.6, -"layer":0, +"layer":1, "density":0.1 },{ "name":"SwampTree2", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :10, "density":0.7 },{ "name":"PlainsTree", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :10, "density":0.7 },{ "name":"Cactus", "startArea":0.5, -"layer":0, +"layer":1, "endArea":0.7, "density":0.06 },{ "name":"PlainsRock", "startArea":0.7, -"layer":0, +"layer":1, "endArea":0.99, "density":0.06 },{ "name":"IslandTree", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :10, "density":0.7 },{ "name":"Coral", "startArea":0.0, -"layer":0, +"layer":1, "endArea":0.9, "density":0.01 },{ @@ -157,65 +157,65 @@ "name":"WoodTree", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :10, "density":0.7 },{ "name":"WoodTree2", "startArea":0.8, "endArea":0.99, -"layer":0, +"layer":1, "resolution" :5, "density":0.7 },{ "name":"Bush", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :5, "density":0.4 },{ "name":"Stump", "startArea":0.0, -"layer":0, +"layer":-1, "endArea":0.9, "density":0.01 },{ "name":"MountainTree", "startArea":0.0, "endArea":0.2, -"layer":0, +"layer":1, "resolution" :5, "density":0.7 },{ "name":"MountainTree2", "startArea":0.8, "endArea":0.99, -"layer":0, +"layer":1, "resolution" :5, "density":0.7 },{ "name":"MountainRock", "startArea":0.1, -"layer":0, +"layer":1, "endArea":0.9, "density":0.08 },{ "name":"LargeMountainRock", "startArea":0.0, -"layer":0, +"layer":1, "endArea":0.9, "density":0.02 },{ "name":"LargePlainsRock", "startArea":0.0, -"layer":0, +"layer":1, "endArea":0.9, "density":0.01 },{ "name":"LargeSwampRock", "startArea":0.0, -"layer":0, +"layer":1, "endArea":0.9, "density":0.01 } diff --git a/forge-gui/res/adventure/common/world/structures/black_structures.atlas b/forge-gui/res/adventure/common/world/structures/black_structures.atlas new file mode 100644 index 00000000000..470505cba3d --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/black_structures.atlas @@ -0,0 +1,38 @@ +black_structures.png +size: 192,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +water + xy: 0, 0 + size: 48, 64 +muck + xy: 48,0 + size:48,64 +tree + xy: 96,0 + size: 48,64 +tree2 + xy:144,0 + size:48,64 +dead_tree + xy: 0,64 + size: 48,64 +dead_tree2 + xy: 48,64 + size: 48,64 +tree3 + xy: 96,64 + size: 48,64 +tree4 + xy:144,64 + size:48,64 +rock + xy: 0, 128 + size: 48, 64 +rock2 + xy: 48, 128 + size: 48,64 +dead_tree3 + xy:96,128 + size:48,64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/black_structures.png b/forge-gui/res/adventure/common/world/structures/black_structures.png new file mode 100644 index 00000000000..ab1ff230166 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/black_structures.png differ diff --git a/forge-gui/res/adventure/common/world/structures/blue_structures.atlas b/forge-gui/res/adventure/common/world/structures/blue_structures.atlas new file mode 100644 index 00000000000..7250edec4f5 --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/blue_structures.atlas @@ -0,0 +1,34 @@ +blue_structures.png +size: 192,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +water + xy: 0, 0 + size: 48, 64 +tree + xy: 48,0 + size:48,64 +tree2 + xy: 96,0 + size: 48,64 +rock + xy: 0,64 + size: 48,64 +rock2 + xy: 48,64 + size: 48,64 +pineapple + xy: 96,64 + size: 48,64 +rock3 + xy: 0, 128 + size: 48, 64 +rock4 + xy: 48, 128 + size: 48,64 +dune + xy:96,128 + size:48,64 +dune2 + xy:144,128 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/blue_structures.png b/forge-gui/res/adventure/common/world/structures/blue_structures.png new file mode 100644 index 00000000000..c4093113714 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/blue_structures.png differ diff --git a/forge-gui/res/adventure/common/world/structures/colorless_structures.atlas b/forge-gui/res/adventure/common/world/structures/colorless_structures.atlas new file mode 100644 index 00000000000..32547a101c0 --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/colorless_structures.atlas @@ -0,0 +1,29 @@ +colorless_structures.png +size: 144,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +hole + xy: 0, 0 + size: 48, 64 +crater + xy: 48,0 + size:48,64 +tree + xy: 96,0 + size: 48,64 +tree2 + xy: 0,64 + size: 48,64 +tree3 + xy: 48,64 + size: 48,64 +tree4 + xy: 96,64 + size: 48,64 +rock + xy: 0, 128 + size: 48, 64 +mountain + xy: 48, 128 + size: 48,64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/colorless_structures.png b/forge-gui/res/adventure/common/world/structures/colorless_structures.png new file mode 100644 index 00000000000..3c1158ba5f2 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/colorless_structures.png differ diff --git a/forge-gui/res/adventure/common/world/structures/green_structures.atlas b/forge-gui/res/adventure/common/world/structures/green_structures.atlas new file mode 100644 index 00000000000..d6b1be514e1 --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/green_structures.atlas @@ -0,0 +1,41 @@ +green_structures.png +size: 192,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +water + xy: 0, 0 + size: 48, 64 +tree + xy: 48,0 + size:48,64 +tree2 + xy: 96,0 + size: 48,64 +vine + xy: 144,0 + size: 48,64 +tree3 + xy: 0,64 + size: 48,64 +tree4 + xy: 48,64 + size: 48,64 +tree5 + xy: 96,64 + size: 48,64 +tree6 + xy: 144, 64 + size: 48,64 +rock + xy: 0, 128 + size: 48, 64 +mountain + xy: 48, 128 + size: 48,64 +plant + xy:96,128 + size:48,64 +bush + xy:144,128 + size:48,64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/green_structures.png b/forge-gui/res/adventure/common/world/structures/green_structures.png new file mode 100644 index 00000000000..c3dc04e858e Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/green_structures.png differ diff --git a/forge-gui/res/adventure/common/world/masks/circle.png b/forge-gui/res/adventure/common/world/structures/masks/circle.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/circle.png rename to forge-gui/res/adventure/common/world/structures/masks/circle.png diff --git a/forge-gui/res/adventure/common/world/masks/fill.png b/forge-gui/res/adventure/common/world/structures/masks/fill.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/fill.png rename to forge-gui/res/adventure/common/world/structures/masks/fill.png diff --git a/forge-gui/res/adventure/common/world/masks/moon.png b/forge-gui/res/adventure/common/world/structures/masks/moon.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/moon.png rename to forge-gui/res/adventure/common/world/structures/masks/moon.png diff --git a/forge-gui/res/adventure/common/world/masks/moon2.png b/forge-gui/res/adventure/common/world/structures/masks/moon2.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/moon2.png rename to forge-gui/res/adventure/common/world/structures/masks/moon2.png diff --git a/forge-gui/res/adventure/common/world/masks/moon3.png b/forge-gui/res/adventure/common/world/structures/masks/moon3.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/moon3.png rename to forge-gui/res/adventure/common/world/structures/masks/moon3.png diff --git a/forge-gui/res/adventure/common/world/masks/moon4.png b/forge-gui/res/adventure/common/world/structures/masks/moon4.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/moon4.png rename to forge-gui/res/adventure/common/world/structures/masks/moon4.png diff --git a/forge-gui/res/adventure/common/world/masks/ring.png b/forge-gui/res/adventure/common/world/structures/masks/ring.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/ring.png rename to forge-gui/res/adventure/common/world/structures/masks/ring.png diff --git a/forge-gui/res/adventure/common/world/masks/ring2.png b/forge-gui/res/adventure/common/world/structures/masks/ring2.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/ring2.png rename to forge-gui/res/adventure/common/world/structures/masks/ring2.png diff --git a/forge-gui/res/adventure/common/world/masks/tallrect.png b/forge-gui/res/adventure/common/world/structures/masks/tallrect.png similarity index 100% rename from forge-gui/res/adventure/common/world/masks/tallrect.png rename to forge-gui/res/adventure/common/world/structures/masks/tallrect.png diff --git a/forge-gui/res/adventure/common/world/structures/models/beach.png b/forge-gui/res/adventure/common/world/structures/models/beach.png new file mode 100644 index 00000000000..90f9681ae84 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/beach.png differ diff --git a/forge-gui/res/adventure/common/world/structures/models/black.png b/forge-gui/res/adventure/common/world/structures/models/black.png new file mode 100644 index 00000000000..b734585f372 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/black.png differ diff --git a/forge-gui/res/adventure/common/world/structures/models/blue.png b/forge-gui/res/adventure/common/world/structures/models/blue.png new file mode 100644 index 00000000000..c04249ffaf2 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/blue.png differ diff --git a/forge-gui/res/adventure/common/world/structures/models/colorless.png b/forge-gui/res/adventure/common/world/structures/models/colorless.png new file mode 100644 index 00000000000..b0713fdec13 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/colorless.png differ diff --git a/forge-gui/res/adventure/common/world/models/deep_swamp.png b/forge-gui/res/adventure/common/world/structures/models/deep_swamp.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/deep_swamp.png rename to forge-gui/res/adventure/common/world/structures/models/deep_swamp.png diff --git a/forge-gui/res/adventure/common/world/structures/models/desert.png b/forge-gui/res/adventure/common/world/structures/models/desert.png new file mode 100644 index 00000000000..7a12642eaef Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/desert.png differ diff --git a/forge-gui/res/adventure/common/world/models/desert_river.png b/forge-gui/res/adventure/common/world/structures/models/desert_river.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/desert_river.png rename to forge-gui/res/adventure/common/world/structures/models/desert_river.png diff --git a/forge-gui/res/adventure/common/world/models/fill.png b/forge-gui/res/adventure/common/world/structures/models/fill.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/fill.png rename to forge-gui/res/adventure/common/world/structures/models/fill.png diff --git a/forge-gui/res/adventure/common/world/models/forest.png b/forge-gui/res/adventure/common/world/structures/models/forest.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/forest.png rename to forge-gui/res/adventure/common/world/structures/models/forest.png diff --git a/forge-gui/res/adventure/common/world/structures/models/green.png b/forge-gui/res/adventure/common/world/structures/models/green.png new file mode 100644 index 00000000000..25f209055d6 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/green.png differ diff --git a/forge-gui/res/adventure/common/world/models/hole.png b/forge-gui/res/adventure/common/world/structures/models/hole.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/hole.png rename to forge-gui/res/adventure/common/world/structures/models/hole.png diff --git a/forge-gui/res/adventure/common/world/models/island_forest.png b/forge-gui/res/adventure/common/world/structures/models/island_forest.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/island_forest.png rename to forge-gui/res/adventure/common/world/structures/models/island_forest.png diff --git a/forge-gui/res/adventure/common/world/models/lake.png b/forge-gui/res/adventure/common/world/structures/models/lake.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/lake.png rename to forge-gui/res/adventure/common/world/structures/models/lake.png diff --git a/forge-gui/res/adventure/common/world/models/lava.png b/forge-gui/res/adventure/common/world/structures/models/lava.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/lava.png rename to forge-gui/res/adventure/common/world/structures/models/lava.png diff --git a/forge-gui/res/adventure/common/world/models/mountain.png b/forge-gui/res/adventure/common/world/structures/models/mountain.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/mountain.png rename to forge-gui/res/adventure/common/world/structures/models/mountain.png diff --git a/forge-gui/res/adventure/common/world/models/mountain_forest.png b/forge-gui/res/adventure/common/world/structures/models/mountain_forest.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/mountain_forest.png rename to forge-gui/res/adventure/common/world/structures/models/mountain_forest.png diff --git a/forge-gui/res/adventure/common/world/models/plains_forest.png b/forge-gui/res/adventure/common/world/structures/models/plains_forest.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/plains_forest.png rename to forge-gui/res/adventure/common/world/structures/models/plains_forest.png diff --git a/forge-gui/res/adventure/common/world/models/plateau.png b/forge-gui/res/adventure/common/world/structures/models/plateau.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/plateau.png rename to forge-gui/res/adventure/common/world/structures/models/plateau.png diff --git a/forge-gui/res/adventure/common/world/structures/models/red.png b/forge-gui/res/adventure/common/world/structures/models/red.png new file mode 100644 index 00000000000..34d8ed03064 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/red.png differ diff --git a/forge-gui/res/adventure/common/world/models/swamp.png b/forge-gui/res/adventure/common/world/structures/models/swamp.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/swamp.png rename to forge-gui/res/adventure/common/world/structures/models/swamp.png diff --git a/forge-gui/res/adventure/common/world/models/swamp_forest.png b/forge-gui/res/adventure/common/world/structures/models/swamp_forest.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/swamp_forest.png rename to forge-gui/res/adventure/common/world/structures/models/swamp_forest.png diff --git a/forge-gui/res/adventure/common/world/models/swamp_ruins.png b/forge-gui/res/adventure/common/world/structures/models/swamp_ruins.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/swamp_ruins.png rename to forge-gui/res/adventure/common/world/structures/models/swamp_ruins.png diff --git a/forge-gui/res/adventure/common/world/structures/models/volcano.png b/forge-gui/res/adventure/common/world/structures/models/volcano.png new file mode 100644 index 00000000000..bf4041f054d Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/volcano.png differ diff --git a/forge-gui/res/adventure/common/world/models/waste_structure.png b/forge-gui/res/adventure/common/world/structures/models/waste_structure.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/waste_structure.png rename to forge-gui/res/adventure/common/world/structures/models/waste_structure.png diff --git a/forge-gui/res/adventure/common/world/models/water.png b/forge-gui/res/adventure/common/world/structures/models/water.png similarity index 100% rename from forge-gui/res/adventure/common/world/models/water.png rename to forge-gui/res/adventure/common/world/structures/models/water.png diff --git a/forge-gui/res/adventure/common/world/structures/models/white.png b/forge-gui/res/adventure/common/world/structures/models/white.png new file mode 100644 index 00000000000..3ecbe626fdd Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/models/white.png differ diff --git a/forge-gui/res/adventure/common/world/structures/red_structures.atlas b/forge-gui/res/adventure/common/world/structures/red_structures.atlas new file mode 100644 index 00000000000..aa749263c90 --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/red_structures.atlas @@ -0,0 +1,32 @@ +red_structures.png +size: 144,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +lava + xy: 0, 0 + size: 48, 64 +tree + xy: 48,0 + size:48,64 +tree2 + xy: 96,0 + size: 48,64 +dead_tree + xy: 0,64 + size: 48,64 +dead_tree2 + xy: 48,64 + size: 48,64 +tree3 + xy: 96,64 + size: 48,64 +rock + xy: 0, 128 + size: 48, 64 +mountain + xy: 48, 128 + size: 48,64 +tree4 + xy: 96,128 + size: 48,64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/red_structures.png b/forge-gui/res/adventure/common/world/structures/red_structures.png new file mode 100644 index 00000000000..c61b7d4238c Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/red_structures.png differ diff --git a/forge-gui/res/adventure/common/world/tilesets/structures.atlas b/forge-gui/res/adventure/common/world/structures/structures.atlas similarity index 97% rename from forge-gui/res/adventure/common/world/tilesets/structures.atlas rename to forge-gui/res/adventure/common/world/structures/structures.atlas index 9ea32b0053c..e26163bc294 100644 --- a/forge-gui/res/adventure/common/world/tilesets/structures.atlas +++ b/forge-gui/res/adventure/common/world/structures/structures.atlas @@ -57,4 +57,4 @@ waste_mountain size: 48, 64 waste_structure xy: 96, 320 - size: 48, 64 \ No newline at end of file + size: 48, 64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/structures.png b/forge-gui/res/adventure/common/world/structures/structures.png new file mode 100644 index 00000000000..312e7641700 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/structures.png differ diff --git a/forge-gui/res/adventure/common/world/structures/white_structures.atlas b/forge-gui/res/adventure/common/world/structures/white_structures.atlas new file mode 100644 index 00000000000..f85597ac361 --- /dev/null +++ b/forge-gui/res/adventure/common/world/structures/white_structures.atlas @@ -0,0 +1,32 @@ +white_structures.png +size: 144,192 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +tree + xy: 0, 0 + size: 48, 64 +tree2 + xy: 48,0 + size:48,64 +tree3 + xy: 96,0 + size: 48,64 +cactus + xy: 0,64 + size: 48,64 +cactus2 + xy: 48,64 + size: 48,64 +cactus3 + xy: 96,64 + size: 48,64 +rock + xy: 0, 128 + size: 48, 64 +mesa + xy: 48, 128 + size: 48,64 +plateau + xy:96,128 + size:48,64 \ No newline at end of file diff --git a/forge-gui/res/adventure/common/world/structures/white_structures.png b/forge-gui/res/adventure/common/world/structures/white_structures.png new file mode 100644 index 00000000000..556ffc0df43 Binary files /dev/null and b/forge-gui/res/adventure/common/world/structures/white_structures.png differ diff --git a/forge-gui/res/adventure/common/world/tilesets/waste.atlas b/forge-gui/res/adventure/common/world/tilesets/colorless.atlas similarity index 100% rename from forge-gui/res/adventure/common/world/tilesets/waste.atlas rename to forge-gui/res/adventure/common/world/tilesets/colorless.atlas diff --git a/forge-gui/res/adventure/common/world/tilesets/structures.png b/forge-gui/res/adventure/common/world/tilesets/structures.png deleted file mode 100644 index d75441d3dde..00000000000 Binary files a/forge-gui/res/adventure/common/world/tilesets/structures.png and /dev/null differ diff --git a/forge-gui/res/adventure/common/world/tilesets/terrain.atlas b/forge-gui/res/adventure/common/world/tilesets/terrain.atlas index 6c9abb3911c..cc1a492d295 100644 --- a/forge-gui/res/adventure/common/world/tilesets/terrain.atlas +++ b/forge-gui/res/adventure/common/world/tilesets/terrain.atlas @@ -4,16 +4,16 @@ size: 192,512 format: RGBA8888 filter: Nearest,Nearest repeat: none -Waste +Colorless xy: 0, 64 size: 48, 64 -Waste_1 +Colorless_1 xy: 48, 64 size: 48, 64 -Waste_2 +Colorless_2 xy: 96, 64 size: 48, 64 -Waste_3 +Colorless_3 xy: 144, 64 size: 48, 64 White diff --git a/forge-gui/res/cardsfolder/c/consecrate_consume.txt b/forge-gui/res/cardsfolder/c/consecrate_consume.txt index 9678a44b8d1..7a0da4e56e0 100644 --- a/forge-gui/res/cardsfolder/c/consecrate_consume.txt +++ b/forge-gui/res/cardsfolder/c/consecrate_consume.txt @@ -11,11 +11,8 @@ ALTERNATE Name:Consume ManaCost:2 W B Types:Sorcery -A:SP$ Pump | Cost$ 2 W B | ValidTgts$ Player | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChooseCard | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power. -SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | Mandatory$ True | SubAbility$ DBSac -SVar:DBSac:DB$ Sacrifice | Defined$ Player.IsRemembered | SacValid$ Card.ChosenCard | RememberSacrificed$ True | SubAbility$ DBGainLife | SacMessage$ the creature with the highest power +A:SP$ Sacrifice | Cost$ 2 W B | ValidTgts$ Player | SacValid$ Creature.greatestPowerControlledByTargered | Mandatory$ True | SubAbility$ DBGainLife | SacMessage$ the creature with the highest power | RememberSacrificed$ True | SpellDescription$ Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power. SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:RememberedLKI$CardPower -SVar:SplitNeedsToPlay:Creature.OppCtrl Oracle:Target player sacrifices a creature with the greatest power among creatures they control. You gain life equal to its power. diff --git a/forge-gui/res/cardsfolder/g/gales_redirection.txt b/forge-gui/res/cardsfolder/g/gales_redirection.txt index 7ed1a535b27..94cc4f71ea6 100644 --- a/forge-gui/res/cardsfolder/g/gales_redirection.txt +++ b/forge-gui/res/cardsfolder/g/gales_redirection.txt @@ -1,7 +1,7 @@ Name:Gale's Redirection ManaCost:3 U U Types:Instant -A:SP$ ChangeZone | ValidTgts$ Card | TargetType$ Spell | TgtZone$ Stack | Origin$ Stack | Fizzle$ True | Destination$ Exile | TgtPrompt$ Choose target spell to exile | RememberChanged$ True | SubAbility$ DBRoll | SpellDescription$ Exile target spell. +A:SP$ ChangeZone | ValidTgts$ Card | TargetType$ Spell | TgtZone$ Stack | Origin$ Stack | Fizzle$ True | Destination$ Exile | AILogic$ ExileSpell.3 | TgtPrompt$ Choose target spell to exile | RememberChanged$ True | SubAbility$ DBRoll | SpellDescription$ Exile target spell. SVar:DBRoll:DB$ RollDice | Sides$ 20 | Modifier$ Y | ResultSubAbilities$ 1-14:DBMayPlay,Else:DBMayPlayWithoutCost | StackDescription$ SpellDescription | SpellDescription$ Roll a d20 and add that spell's mana value. SVar:DBMayPlay:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | Duration$ Permanent | ExileOnMoved$ Exile | SubAbility$ DBCleanup | SpellDescription$ 1—14 VERT You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast it. SVar:DBMayPlayWithoutCost:DB$ Effect | StaticAbilities$ STPlayWithoutCost | RememberObjects$ Remembered | Duration$ Permanent | ExileOnMoved$ Exile | SubAbility$ DBCleanup | SpellDescription$ 15+ VERT You may cast that card without paying its mana cost for as long as it remains exiled. @@ -9,5 +9,4 @@ SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | Effect SVar:STPlayWithoutCost:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ You may cast that card without paying its mana cost for as long as it remains exiled. SVar:Y:SpellTargeted$CardManaCostLKI SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -AI:RemoveDeck:All Oracle:Exile target spell, then roll a d20 and add that spell's mana value.\n1-14 | You may cast the exiled card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell.\n15+ | You may cast the exiled card without paying its mana cost for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_harvester.txt b/forge-gui/res/cardsfolder/p/phyrexian_harvester.txt index 4c411f97692..25ec51282fd 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_harvester.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_harvester.txt @@ -5,7 +5,7 @@ PT:5/5 K:Menace T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigSeek | TriggerDescription$ Whenever CARDNAME is dealt damage, seek that many nonland cards. At the beginning of your next end step, discard those cards. SVar:TrigSeek:DB$ Seek | Num$ X | Type$ Card.nonLand | RememberFound$ True | SubAbility$ DBDelay -SVar:DBDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDiscardExiled | SubAbility$ DBCleanup | RememberObjects$ Remembered | TriggerDescription$ At the beginning of the next end step, discard those cards. +SVar:DBDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ TrigDiscardExiled | SubAbility$ DBCleanup | RememberObjects$ Remembered | TriggerDescription$ At the beginning of your next end step, discard those cards. SVar:TrigDiscardExiled:DB$ Discard | Mode$ Defined | DefinedCards$ DelayTriggerRemembered SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:TriggerCount$DamageAmount diff --git a/forge-gui/res/cardsfolder/s/serras_emissary.txt b/forge-gui/res/cardsfolder/s/serras_emissary.txt index 93190eed563..1a00bd26fdd 100644 --- a/forge-gui/res/cardsfolder/s/serras_emissary.txt +++ b/forge-gui/res/cardsfolder/s/serras_emissary.txt @@ -4,7 +4,7 @@ Types:Creature Angel PT:7/7 K:Flying K:ETBReplacement:Other:ChooseCT -SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Card | AILogic$ MostProminentOppControls | SpellDescription$ As CARDNAME enters the battlefield, choose a card type. +SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Card | AILogic$ ProtectionFromType | SpellDescription$ As CARDNAME enters the battlefield, choose a card type. S:Mode$ Continuous | Affected$ You,Creature.YouCtrl | AddKeyword$ Protection from ChosenType | Description$ You and creatures you control have protection from the chosen card type. SVar:PlayMain1:TRUE Oracle:Flying\nAs Serra's Emissary enters the battlefield, choose a card type.\nYou and creatures you control have protection from the chosen card type. diff --git a/forge-gui/res/cardsfolder/s/soulless_jailer.txt b/forge-gui/res/cardsfolder/s/soulless_jailer.txt index 4b4d3005555..41b7e8fa070 100644 --- a/forge-gui/res/cardsfolder/s/soulless_jailer.txt +++ b/forge-gui/res/cardsfolder/s/soulless_jailer.txt @@ -3,7 +3,7 @@ ManaCost:2 Types:Artifact Creature Phyrexian Golem PT:0/4 R:Event$ Moved | Layer$ CantHappen | ActiveZones$ Battlefield | Origin$ Graveyard | Destination$ Battlefield | ValidLKI$ Permanent | Prevent$ True | Description$ Permanent cards in graveyards can't enter the battlefield. -S:Mode$ CantBeCast | Origin$ Graveyard,Exile | Description$ Players can't cast spells from graveyards or exile. +S:Mode$ CantBeCast | ValidCard$ Card.nonCreature | Origin$ Graveyard,Exile | Description$ Players can't cast noncreature spells from graveyards or exile. SVar:NonStackingEffect:True AI:RemoveDeck:Random -Oracle:Permanent cards in graveyards can't enter the battlefield.\nPlayers can't cast noncreature spells from graveyards or exile. \ No newline at end of file +Oracle:Permanent cards in graveyards can't enter the battlefield.\nPlayers can't cast noncreature spells from graveyards or exile. diff --git a/forge-gui/res/cardsfolder/upcoming/field_tested_frying_pan.txt b/forge-gui/res/cardsfolder/upcoming/field_tested_frying_pan.txt new file mode 100644 index 00000000000..25932c392c5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/field_tested_frying_pan.txt @@ -0,0 +1,16 @@ +Name:Field-Tested Frying Pan +ManaCost:2 W +Types:Artifact Equipment +K:Equip:2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token, then create a 1/1 white Halfling creature token and attach CARDNAME to it. +SVar:TrigToken:DB$ Token | TokenScript$ c_a_food_sac | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenScript$ w_1_1_halfling | RememberTokens$ True | SubAbility$ DBAttach +SVar:DBAttach:DB$ Attach | Defined$ Remembered | Object$ Self | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddTrigger$ GainLifeTrig | Description$ Equipped creature has "Whenever you gain life, this creature gets +X/+X until end of turn, where X is the amount of life you gained." +SVar:GainLifeTrig:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever you gain life, this creature gets +X/+X until end of turn, where X is the amount of life you gained. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +X | NumDef$ +X +SVar:X:TriggerCount$LifeAmount +DeckHas:Ability$Token|LifeGain|Sacrifice & Type$Food|Artifact|Halfling +DeckHints:Ability$LifeGain +Oracle:When Field-Tested Frying Pan enters the battlefield, create a Food token, then create a 1/1 white Halfling creature token and attach Field-Tested Frying Pan to it.\nEquipped creature has "Whenever you gain life, this creature gets +X/+X until end of turn, where X is the amount of life you gained."\nEquip {2} \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/galadhrim_ambush.txt b/forge-gui/res/cardsfolder/upcoming/galadhrim_ambush.txt new file mode 100644 index 00000000000..c049eecacd2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/galadhrim_ambush.txt @@ -0,0 +1,9 @@ +Name:Galadhrim Ambush +ManaCost:3 G +Types:Instant +A:SP$ Token | TokenAmount$ X | TokenScript$ g_1_1_elf_warrior | TokenOwner$ You | SubAbility$ DBEffect | SpellDescription$ Create X 1/1 green Elf Warrior creature tokens, where X is the number of attacking creatures.Prevent all combat damage that would be dealt this turn by non-Elf creatures. +SVar:DBEffect:DB$ Effect | ReplacementEffects$ Curse +SVar:Curse:Event$ DamageDone | Prevent$ True | IsCombat$ True | ActiveZones$ Command | ValidSource$ Creature.nonElf | Description$ Prevent all combat damage that would be dealt this turn by non-Elf creatures. +SVar:X:Count$Valid Creature.attacking +DeckHas:Ability$Token & Type$Elf|Warrior +Oracle:Create X 1/1 green Elf Warrior creature tokens, where X is the number of attacking creatures.\nPrevent all combat damage that would be dealt this turn by non-Elf creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/monstrosity_of_the_lake.txt b/forge-gui/res/cardsfolder/upcoming/monstrosity_of_the_lake.txt new file mode 100644 index 00000000000..df0666de859 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/monstrosity_of_the_lake.txt @@ -0,0 +1,11 @@ +Name:Monstrosity of the Lake +ManaCost:4 U +Types:Legendary Creature Kraken +PT:4/6 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigTapAll | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {5}. If you do, tap all creatures your opponents control, then put a stun counter on each of those creatures. (If a permanent with a stun counter would become untapped, remove one from it instead.) +SVar:TrigTapAll:AB$ TapAll | Cost$ 5 | ValidCards$ Creature.OppCtrl | RememberTapped$ True | SubAbility$ DBStun +SVar:DBStun:DB$ PutCounter | CounterType$ STUN | CounterNum$ 1 | Defined$ Remembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:TypeCycling:Island:2 +DeckHas:Ability$Counters|Discard +Oracle:When Monstrosity of the Lake enters the battlefield, you may pay {5}. If you do, tap all creatures your opponents control, then put a stun counter on each of those creatures. (If a permanent with a stun counter would become untapped, remove one from it instead.)\nIslandcycling {2} ({2}, Discard this card: Search your library for an Island card, reveal it, put it into your hand, then shuffle.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/moria_scavenger.txt b/forge-gui/res/cardsfolder/upcoming/moria_scavenger.txt new file mode 100644 index 00000000000..98b2bd52ff3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/moria_scavenger.txt @@ -0,0 +1,11 @@ +Name:Moria Scavenger +ManaCost:1 B R +Types:Creature Orc Rogue +PT:1/4 +K:Deathtouch +K:Haste +A:AB$ Draw | Cost$ T Discard<1/Card> | NumCards$ 1 | SubAbility$ DBAmass | SpellDescription$ Draw a card. If the discarded card was a creature card, amass Orcs 1. (Put a +1/+1 counter on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.) +SVar:DBAmass:DB$ Amass | Type$ Orc | Num$ 1 | ConditionDefined$ Discarded | ConditionPresent$ Card.Creature +DeckHas:Ability$Token|Counters|Discard & Type$Army +DeckHints:Type$Goblin|Orc +Oracle:Deathtouch, haste\n{T}, Discard a card: Draw a card. If the discarded card was a creature card, amass Orcs 1. (Put a +1/+1 counter on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/motivated_pony.txt b/forge-gui/res/cardsfolder/upcoming/motivated_pony.txt new file mode 100644 index 00000000000..0f86a60e756 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/motivated_pony.txt @@ -0,0 +1,14 @@ +Name:Motivated Pony +ManaCost:4 G +Types:Creature Horse +PT:3/3 +K:Trample +K:Haste +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, attacking creatures get +1/+1 until end of turn. If a Food entered the battlefield under your control this turn, untap those creatures and they get an additional +2/+2 until end of turn. +SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 1 | NumDef$ 1 | SubAbility$ DBUntapAll +SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.attacking | ConditionCheckSVar$ Food | SubAbility$ DBPump +SVar:DBPump:DB$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 2 | ConditionCheckSVar$ Food | NumDef$ 2 +SVar:Food:Count$ThisTurnEntered_Battlefield_Food.YouCtrl +SVar:HasAttackEffect:True +DeckHints:Type$Food +Oracle:Whenever Motivated Pony attacks, attacking creatures get +1/+1 until end of turn. If a Food entered the battlefield under your control this turn, untap those creatures and they get an additional +2/+2 until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/orcish_siegemaster.txt b/forge-gui/res/cardsfolder/upcoming/orcish_siegemaster.txt new file mode 100644 index 00000000000..763ec7f214a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/orcish_siegemaster.txt @@ -0,0 +1,12 @@ +Name:Orcish Siegemaster +ManaCost:2 R +Types:Creature Orc Soldier +PT:0/5 +K:Trample +S:Mode$ Continuous | Affected$ Goblin.YouCtrl+Other,Orc.YouCtrl+Other | AddKeyword$ Trample | Description$ Other Orcs and Goblins you control have trample. +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +X/+0 until end of turn, where X is the greatest power among creatures you control. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ X +SVar:X:Count$Valid Creature.YouCtrl$GreatestPower +SVar:HasAttackEffect:TRUE +DeckHints:Type$Goblin|Orc +Oracle:Trample\nOther Orcs and Goblins you control have trample.\nWhenever Orcish Siegemaster attacks, it gets +X/+0 until end of turn, where X is the greatest power among creatures you control. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/rapacious_guest.txt b/forge-gui/res/cardsfolder/upcoming/rapacious_guest.txt new file mode 100644 index 00000000000..902af33ae82 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rapacious_guest.txt @@ -0,0 +1,15 @@ +Name:Rapacious Guest +ManaCost:2 B +Types:Creature Halfling Citizen +PT:2/2 +K:Menace +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.YouCtrl | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ DBToken | TriggerDescription$Whenever one or more creatures you control deal combat damage to a player, create a Food token. +SVar:DBToken:DB$ Token | TokenScript$ c_a_food_sac +T:Mode$ Sacrificed | ValidCard$ Food | Execute$ TrigPutCounter | TriggerZones$ Battlefield | ValidPlayer$ You | TriggerDescription$ Whenever you sacrifice a Food, put a +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME leaves the battlefield, target opponent loses life equal to its power. +SVar:TrigLoseLife:DB$ LoseLife | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | LifeAmount$ X +SVar:X:TriggeredCard$CardPower +DeckHas:Ability$Token|Counters & Type$Food +DeckHints:Type$Food +Oracle:Menace\nWhenever one or more creatures you control deal combat damage to a player, create a Food token.\nWhenever you sacrifice a Food, put a +1/+1 counter on Rapacious Guest.\nWhen Rapacious Guest leaves the battlefield, target opponent loses life equal to its power. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/relic_of_sauron.txt b/forge-gui/res/cardsfolder/upcoming/relic_of_sauron.txt new file mode 100644 index 00000000000..8cadc3d30f1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/relic_of_sauron.txt @@ -0,0 +1,8 @@ +Name:Relic of Sauron +ManaCost:4 +Types:Artifact +A:AB$ Mana | Cost$ T | Produced$ Combo U B R | Amount$ 2 | SpellDescription$ Add two mana in any combination of {U}, {B} and/or {R}. +A:AB$ Draw | Cost$ 3 T | NumCards$ 2 | SubAbility$ DBDiscard | SpellDescription$ Draw two cards, then discard a card. +SVar:DBDiscard:DB$ Discard | Mode$ TgtChoose +DeckHas:Ability$Discard +Oracle:{T}: Add two mana in any combination of {U}, {B} and/or {R}.\n{3}, {T}: Draw two cards, then discard a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/saruman_the_white_hand.txt b/forge-gui/res/cardsfolder/upcoming/saruman_the_white_hand.txt new file mode 100644 index 00000000000..00949ba4f4f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/saruman_the_white_hand.txt @@ -0,0 +1,11 @@ +Name:Saruman, the White Hand +ManaCost:1 U B R +Types:Legendary Creature Avatar Wizard +PT:2/5 +T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigAmass | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a noncreature spell, amass Orcs X, where X is that spell's mana value. (Put X +1/+1 counters on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.) +SVar:TrigAmass:DB$ Amass | Type$ Orc | Num$ X +SVar:X:TriggeredStackInstance$CardManaCostLKI +S:Mode$ Continuous | Affected$ Goblin.YouCtrl,Orc.YouCtrl | AddKeyword$ Ward:2 | Description$ Goblins and Orcs you control have ward {2}. +DeckHas:Ability$Token|Counters & Type$Orc|Army +DeckHints:Type$Goblin|Orc +Oracle:Whenever you cast a noncreature spell, amass Orcs X, where X is that spell’s mana value. (Put X +1/+1 counters on an Army you control. It’s also an Orc. If you don’t control an Army, create a 0/0 black Orc Army creature token first.)\nGoblins and Orcs you control have ward {2}. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/song_of_earendil.txt b/forge-gui/res/cardsfolder/upcoming/song_of_earendil.txt new file mode 100644 index 00000000000..2c12169d765 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/song_of_earendil.txt @@ -0,0 +1,10 @@ +Name:Song of Earendil +ManaCost:3 G U +Types:Enchantment Saga +K:Saga:3:DBScry,DBToken,DBCounter +SVar:DBScry:DB$ Scry | ScryNum$ 2 | SubAbility$ DBDraw | SpellDescription$ Scry 2, then draw two cards. +SVar:DBDraw:DB$ Draw | NumCards$ 2 +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac,u_2_2_bird_flying | SpellDescription$ Create a Treasure token and a 2/2 blue Bird creature token with flying. +SVar:DBCounter:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+withoutFlying | CounterType$ Flying | CounterNum$ 1 | SpellDescription$ Put a flying counter on each creature you control without flying. +DeckHas:Ability$Counters|Token & Type$Bird|Treasure|Artifact +Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Scry 2, then draw two cards.\nII — Create a Treasure token and a 2/2 blue Bird creature token with flying.\nIII — Put a flying counter on each creature you control without flying. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/stew_the_coneys.txt b/forge-gui/res/cardsfolder/upcoming/stew_the_coneys.txt index 7676a08c8a7..c7c2ef52bb9 100644 --- a/forge-gui/res/cardsfolder/upcoming/stew_the_coneys.txt +++ b/forge-gui/res/cardsfolder/upcoming/stew_the_coneys.txt @@ -1,5 +1,5 @@ Name:Stew the Coneys -ManaCost:2 W +ManaCost:2 G Types:Instant A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | NumDmg$ X | DamageSource$ ParentTarget | SubAbility$ DBFood diff --git a/forge-gui/res/cardsfolder/upcoming/subjugate_the_hobbits.txt b/forge-gui/res/cardsfolder/upcoming/subjugate_the_hobbits.txt new file mode 100644 index 00000000000..354edba7669 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/subjugate_the_hobbits.txt @@ -0,0 +1,5 @@ +Name:Subjugate the Hobbits +ManaCost:5 U U +Types:Sorcery +A:SP$ GainControl | AllValid$ Creature.IsNotCommander+cmcLE3 | NewController$ You | SpellDescription$ Gain control of each noncommander creature with mana value 3 or less. +Oracle:Gain control of each noncommander creature with mana value 3 or less. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/summons_of_saruman.txt b/forge-gui/res/cardsfolder/upcoming/summons_of_saruman.txt new file mode 100644 index 00000000000..7d4fe87e508 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/summons_of_saruman.txt @@ -0,0 +1,12 @@ +Name:Summons of Saruman +ManaCost:X U R +Types:Sorcery +A:SP$ Amass | Type$ Orc | Num$ X | SubAbility$ DBMill | SpellDescription$ Amass Orcs X. Mill X cards. You may cast an instant or sorcery spell with mana value X or less from among them without paying its mana cost. (To amass Orcs X, put X +1/+1 counters on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.) +SVar:DBMill:DB$ Mill | NumCards$ X | RememberMilled$ True | SubAbility$ DBCast +SVar:DBCast:DB$ Play | ValidZone$ Graveyard | Valid$ Card.IsRemembered | Controller$ You | WithoutManaCost$ True | ValidSA$ Spell.Instant+cmcLEX,Spell.Sorcery+cmcLEX | Optional$ True | Amount$ 1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +K:Flashback:3 U R ExileFromGrave +SVar:X:Count$xPaid +DeckHas:Ability$Mill|Amass|Graveyard & Type$Army|Goblin +DeckHints:Ability$Graveyard +Oracle:Amass Orcs X. Mill X cards. You may cast an instant or sorcery spell with mana value X or less from among them without paying its mana cost. (To amass Orcs X, put X +1/+1 counters on an Army you control. It's also an Orc. If you don't control an Army, create a 0/0 black Orc Army creature token first.)\nFlashback—{3}{U}{R}, Exile X cards from your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/taunt_from_the_rampart.txt b/forge-gui/res/cardsfolder/upcoming/taunt_from_the_rampart.txt new file mode 100644 index 00000000000..2d9b68469b1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/taunt_from_the_rampart.txt @@ -0,0 +1,7 @@ +Name:Taunt from the Rampart +ManaCost:3 R W +Types:Sorcery +A:SP$ Goad | Defined$ Valid Creature.OppCtrl | SubAbility$ DBEffect | SpellDescription$ Goad all creatures your opponents control. Until your next turn, those creatures can't block. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.) +SVar:DBEffect:DB$ Effect | RememberObjects$ Valid Creature.OppCtrl | StaticAbilities$ AllUnblockable | Duration$ UntilYourNextTurn +SVar:AllUnblockable:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered | AddHiddenKeyword$ CARDNAME can't block. | Description$ Until your next turn, those creatures can't block. +Oracle:Goad all creatures your opponents control. Until your next turn, those creatures can't block. (Until your next turn, those creatures attack each combat if able and attack a player other than you if able.) diff --git a/forge-gui/res/cardsfolder/upcoming/the_balrog_of_moria.txt b/forge-gui/res/cardsfolder/upcoming/the_balrog_of_moria.txt new file mode 100644 index 00000000000..0155fb278ce --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_balrog_of_moria.txt @@ -0,0 +1,15 @@ +Name:The Balrog of Moria +ManaCost:4 B B R +Types:Legendary Creature Avatar Demon +PT:8/8 +K:Trample +K:Haste +K:Cycling:3 R +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigImmediateTrig | TriggerDescription$ When CARDNAME dies, you may exile it. When you do, for each opponent, exile up to one target creature that player controls. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ ExileAnyGrave<1/Card.TriggeredNewCard> | Execute$ TrigExile | TriggerDescription$ When you do, for each opponent, exile up to one target creature that player controls. +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl | TgtPrompt$ For each opponent, select up to one target creature | TargetMin$ 0 | TargetMax$ OneEach | TargetsWithDifferentControllers$ True +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigTreasure | TriggerDescription$ When you cycle CARDNAME, create two Treasure tokens. +SVar:TrigTreasure:DB$ Token | TokenAmount$ 2 | TokenScript$ c_a_treasure_sac +SVar:OneEach:PlayerCountOpponents$Amount +DeckHas:Ability$Token|Discard & Type$Artifact|Treasure +Oracle:Trample, haste\nWhen The Balrog of Moria dies, you may exile it. When you do, for each opponent, exile up to one target creature that player controls.\nCycling {3}{R} ({3}{R}, Discard this card: Draw a card.)\nWhen you cycle The Balrog of Moria, create two Treasure tokens. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/the_gaffer.txt b/forge-gui/res/cardsfolder/upcoming/the_gaffer.txt new file mode 100644 index 00000000000..af6c2c2f7e6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_gaffer.txt @@ -0,0 +1,9 @@ +Name:The Gaffer +ManaCost:2 W +Types:Legendary Creature Halfling Peasant +PT:2/3 +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ LifeGained | SVarCompare$ GE3 | Execute$ TrigDraw | TriggerDescription$ At the beginning of each end step, if you gained 3 or more life this turn, draw a card. +SVar:TrigDraw:DB$ Draw +SVar:LifeGained:Count$LifeYouGainedThisTurn +DeckNeeds:Ability$LifeGain +Oracle:At the beginning of each end step, if you gained 3 or more life this turn, draw a card. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/too_greedily_too_deep.txt b/forge-gui/res/cardsfolder/upcoming/too_greedily_too_deep.txt new file mode 100644 index 00000000000..02361ce50e8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/too_greedily_too_deep.txt @@ -0,0 +1,8 @@ +Name:Too Greedily, Too Deep +ManaCost:5 B R +Types:Sorcery +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target creature card in a graveyard | ValidTgts$ Creature | ChangeNum$ 1 | SubAbility$ DBDealDamageAll | SpellDescription$ Put target creature card from a graveyard onto the battlefield under your control. That creature deals damage equal to its power to each other creature. +SVar:DBDealDamageAll:DB$ DamageAll | ValidCards$ Creature.NotDefinedTargeted | NumDmg$ X | DamageSource$ ParentTarget +SVar:X:ParentTargeted$CardPower +DeckHas:Ability$Graveyard +Oracle:Put target creature card from a graveyard onto the battlefield under your control. That creature deals damage equal to its power to each other creature. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/wake_the_dragon.txt b/forge-gui/res/cardsfolder/upcoming/wake_the_dragon.txt new file mode 100644 index 00000000000..cecc5e1215c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wake_the_dragon.txt @@ -0,0 +1,8 @@ +Name:Wake the Dragon +ManaCost:4 B R +Types:Sorcery +K:Flashback:6 B R +A:SP$ Token | TokenAmount$ 1 | TokenScript$ br_6_6_dragon_flying_menace_steal | TokenOwner$ You | SpellDescription$ Create a 6/6 black and red Dragon creature token with flying, menace, and "Whenever this creature deals combat damage to a player, gain control of target artifact that player controls." +DeckHas:Ability$Token|Graveyard & Type$Dragon +DeckHints:Type$Artifact +Oracle:Create a 6/6 black and red Dragon creature token with flying, menace, and "Whenever this creature deals combat damage to a player, gain control of target artifact that player controls."\nFlashback {6}{B}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/windswift_slice.txt b/forge-gui/res/cardsfolder/upcoming/windswift_slice.txt new file mode 100644 index 00000000000..cd392b61aa2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/windswift_slice.txt @@ -0,0 +1,9 @@ +Name:Windswift Slice +ManaCost:2 G +Types:Instant +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control. +SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | ExcessSVar$ Excess | NumDmg$ X | DamageSource$ ParentTarget | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenScript$ g_1_1_elf_warrior | TokenAmount$ Excess | SpellDescription$ Create a number of 1/1 green Elf Warrior creature tokens equal to the amount of excess damage dealt this way. +SVar:X:ParentTargeted$CardPower +DeckHas:Ability$Token & Type$Elf|Warrior +Oracle:Target creature you control deals damage equal to its power to target creature you don't control. Create a number of 1/1 green Elf Warrior creature tokens equal to the amount of excess damage dealt this way. \ No newline at end of file diff --git a/forge-gui/res/cube/Old School 93-94 (540 Cards, Cube Cobra).dck b/forge-gui/res/cube/Old School 93-94 (540 Cards, Cube Cobra).dck new file mode 100644 index 00000000000..f47f0fff8d3 --- /dev/null +++ b/forge-gui/res/cube/Old School 93-94 (540 Cards, Cube Cobra).dck @@ -0,0 +1,523 @@ +[metadata] +Name=Old School 93-94 (540 Cards, Cube Cobra) +[Avatar] + +[Main] +1 Abu Ja'far|ARN|1 +1 Acid Rain|LEG|1 +1 Active Volcano|LEG|1 +1 Adun Oakenshield|LEG|1 +1 Aeolipile|FEM|1 +1 Air Elemental|LEA|1 +1 Akron Legionnaire|LEG|1 +1 Aladdin|ARN|1 +1 Aladdin's Ring|ARN|1 +1 Ali from Cairo|ARN|1 +1 All Hallow's Eve|LEG|1 +1 Amnesia|DRK|1 +1 Ancestral Recall|LEA|1 +1 Angelic Voices|LEG|1 +1 Angry Mob|DRK|1 +1 Animate Artifact|LEA|1 +1 Animate Dead|LEA|1 +1 Ankh of Mishra|LEA|1 +1 Apprentice Wizard|DRK|1 +1 Arboria|LEG|1 +1 Arcades Sabboth|LEG|1 +1 Argivian Archaeologist|ATQ|1 +1 Argothian Pixies|ATQ|1 +1 Argothian Treefolk|ATQ|1 +1 Armageddon|LEA|1 +1 Armageddon Clock|ATQ|1 +1 Army of Allah|ARN|1 +1 Artifact Blast|ATQ|1 +1 Ashes to Ashes|DRK|1 +1 Ashnod's Altar|ATQ|1 +1 Atog|ATQ|1 +1 Avoid Fate|LEG|1 +1 Azure Drake|LEG|1 +1 Backfire|LEG|1 +1 Bad Moon|LEA|1 +3 Badlands|LEA|1 +1 Balance|LEA|1 +1 Ball Lightning|DRK|1 +1 Balm of Restoration|FEM|1 +1 Basal Thrull|FEM|1 +1 Basalt Monolith|LEA|1 +3 Bayou|LEA|1 +1 Bazaar of Baghdad|ARN|1 +1 Beasts of Bogardan|LEG|1 +1 Benalish Hero|LEA|1 +1 Berserk|LEA|1 +1 Bird Maiden|ARN|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Lotus|LEA|1 +1 Black Mana Battery|LEG|1 +1 Black Vise|LEA|1 +1 Blessing|LEA|1 +1 Blight|LEG|1 +1 Blood Lust|LEG|1 +1 Blood Moon|DRK|1 +1 Blue Elemental Blast|LEA|1 +1 Blue Mana Battery|LEG|1 +1 Bog Imp|DRK|1 +1 Bog Wraith|LEA|1 +1 Book of Rass|DRK|1 +1 Boomerang|LEG|1 +1 Boris Devilboon|LEG|1 +1 Bottomless Vault|FEM|1 +1 Braingeyser|LEA|1 +1 Brainwash|DRK|1 +1 Brass Man|ARN|1 +1 Brassclaw Orcs|FEM|1 +1 Breeding Pit|FEM|1 +1 Brothers of Fire|DRK|1 +1 Candelabra of Tawnos|ATQ|1 +1 Carrion Ants|LEG|1 +1 Chain Lightning|LEG|1 +1 Chains of Mephistopheles|LEG|1 +1 Channel|LEA|1 +1 Chromium|LEG|1 +1 Circle of Protection: Artifacts|ATQ|1 +1 Circle of Protection: Black|LEB|1 +1 Circle of Protection: Blue|LEA|1 +1 Circle of Protection: Green|LEA|1 +1 Circle of Protection: Red|LEA|1 +1 Circle of Protection: White|LEA|1 +1 Citanul Druid|ATQ|1 +1 City in a Bottle|ARN|1 +4 City of Brass|ARN|1 +1 Clay Statue|ATQ|1 +1 Cleanse|LEG|1 +1 Cleansing|DRK|1 +1 Clockwork Avian|ATQ|1 +1 Clockwork Beast|LEA|1 +1 Clone|LEA|1 +1 Cockatrice|LEA|1 +1 Colossus of Sardia|ATQ|1 +1 Conch Horn|FEM|1 +1 Concordant Crossroads|LEG|1 +1 Control Magic|LEA|1 +1 Conversion|LEA|1 +1 Copper Tablet|LEA|1 +1 Copy Artifact|LEA|1 +1 Counterspell|LEA|1 +1 Craw Giant|LEG|1 +1 Craw Wurm|LEA|1 +1 Crimson Manticore|LEG|1 +1 Crumble|ATQ|1 +1 Crusade|LEA|1 +1 Cuombajj Witches|ARN|1 +1 Cursed Land|LEA|1 +1 Cursed Rack|ATQ|1 +1 Cyclone|ARN|1 +1 D'Avenant Archer|LEG|1 +1 Dakkon Blackblade|LEG|1 +1 Damping Field|ATQ|1 +1 Dance of Many|DRK|1 +1 Dancing Scimitar|ARN|1 +1 Dark Heart of the Wood|DRK|1 +1 Dark Ritual|LEA|1 +1 Dark Sphere|DRK|1 +1 Darkness|LEG|1 +1 Death Ward|LEA|1 +1 Deathgrip|LEA|1 +1 Deep Spawn|FEM|1 +1 Demonic Hordes|LEA|1 +1 Demonic Torment|LEG|1 +1 Demonic Tutor|LEA|1 +1 Derelor|FEM|1 +1 Desert|ARN|1 +1 Desert Twister|ARN|1 +1 Detonate|ATQ|1 +1 Diamond Valley|ARN|1 +1 Disenchant|LEA|1 +1 Disharmony|LEG|1 +1 Disintegrate|LEA|1 +1 Disrupting Scepter|LEA|1 +1 Divine Offering|LEG|1 +1 Dragon Engine|ATQ|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Dream Coat|LEG|1 +1 Drop of Honey|ARN|1 +1 Drudge Skeletons|LEA|1 +1 Durkwood Boars|LEG|1 +1 Dust to Dust|DRK|1 +1 Dwarven Hold|FEM|1 +1 Dwarven Ruins|FEM|1 +1 Dwarven Soldier|FEM|1 +1 Dwarven Warriors|LEA|1 +1 Earth Elemental|LEA|1 +1 Earthbind|LEA|1 +1 Earthquake|LEA|1 +1 Eater of the Dead|DRK|1 +1 Ebon Stronghold|FEM|1 +1 Electric Eel|DRK|1 +1 Elven Lyre|FEM|1 +1 Elves of Deep Shadow|DRK|1 +1 Elvish Archers|LEA|1 +1 Elvish Farmer|FEM|1 +1 Enchantment Alteration|LEG|1 +1 Energy Flux|ATQ|1 +1 Energy Tap|LEG|1 +1 Erg Raiders|ARN|1 +1 Erhnam Djinn|ARN|1 +1 Eureka|LEG|1 +1 Evil Eye of Orms-by-Gore|LEG|1 +1 Exorcist|DRK|1 +1 Eye for an Eye|ARN|1 +1 Fallen Angel|LEG|1 +1 Falling Star|LEG|1 +1 Farrel's Mantle|FEM|1 +1 Farrel's Zealot|FEM|1 +1 Fastbond|LEA|1 +1 Feldon's Cane|ATQ|1 +1 Fellwar Stone|DRK|1 +1 Feral Thallid|FEM|1 +1 Field of Dreams|LEG|1 +1 Fire Drake|DRK|1 +1 Fire Elemental|LEA|1 +1 Fireball|LEA|1 +1 Firestorm Phoenix|LEG|1 +1 Fissure|DRK|1 +1 Flash Counter|LEG|1 +1 Flash Flood|LEG|1 +1 Flashfires|LEA|1 +1 Floral Spuzzem|LEG|1 +1 Flying Men|ARN|1 +1 Fog|LEA|1 +1 Force of Nature|LEA|1 +1 Force Spike|LEG|1 +1 Forcefield|LEA|1 +1 Fork|LEA|1 +1 Fountain of Youth|DRK|1 +1 Frozen Shade|LEA|1 +1 Fungusaur|LEA|1 +1 Gaea's Avenger|ATQ|1 +1 Gaea's Liege|LEA|1 +1 Gaea's Touch|DRK|1 +1 Gaseous Form|LEG|1 +1 Gate to Phyrexia|ATQ|1 +1 Gauntlet of Might|LEA|1 +1 Ghost Ship|DRK|1 +1 Giant Growth|LEA|1 +1 Giant Spider|LEA|1 +1 Giant Tortoise|ARN|1 +1 Giant Turtle|LEG|1 +1 Glasses of Urza|LEA|1 +1 Gloom|LEA|1 +1 Goblin Balloon Brigade|LEA|1 +1 Goblin Flotilla|FEM|1 +1 Goblin War Drums|FEM|1 +1 Goblins of the Flarg|DRK|1 +1 Golgothian Sylex|ATQ|1 +1 Granite Gargoyle|LEA|1 +1 Gravity Sphere|LEG|1 +1 Greater Realm of Preservation|LEG|1 +1 Greed|LEG|1 +1 Green Mana Battery|LEG|1 +1 Grizzly Bears|LEA|1 +1 Guardian Beast|ARN|1 +1 Gwendlyn Di Corci|LEG|1 +1 Halfdane|LEG|1 +1 Hammerheim|LEG|1 +1 Hand of Justice|FEM|1 +1 Hasran Ogress|ARN|1 +1 Havenwood Battleground|FEM|1 +1 Hazezon Tamar|LEG|1 +1 Healing Salve|LEA|1 +1 Hell's Caretaker|LEG|1 +1 Hellfire|LEG|1 +1 High Tide|FEM|1 +1 Hollow Trees|FEM|1 +1 Holy Day|LEG|1 +1 Holy Light|DRK|1 +1 Homarid Spawning Bed|FEM|1 +1 Homarid Warrior|FEM|1 +1 Howl from Beyond|LEA|1 +1 Howling Mine|LEA|1 +1 Hurkyl's Recall|ATQ|1 +1 Hurr Jackal|ARN|1 +1 Hurricane|LEA|1 +1 Hymn to Tourach|FEM|1 +1 Hyperion Blacksmith|LEG|1 +1 Hypnotic Specter|LEA|1 +1 Icatian Infantry|FEM|1 +1 Icatian Javelineers|FEM|1 +1 Icatian Priest|FEM|1 +1 Icatian Scout|FEM|1 +1 Icatian Store|FEM|1 +1 Icatian Town|FEM|1 +1 Ice Storm|LEA|1 +1 Icy Manipulator|LEA|1 +1 Immolation|LEG|1 +1 Implements of Sacrifice|FEM|1 +1 Imprison|LEG|1 +1 Inferno|DRK|1 +1 Instill Energy|LEA|1 +1 Ironclaw Orcs|LEA|1 +1 Island of Wak-Wak|ARN|1 +1 Island Sanctuary|LEA|1 +1 Ivory Guardians|LEG|1 +1 Ivory Tower|ATQ|1 +1 Jade Statue|LEA|1 +1 Jalum Tome|ATQ|1 +1 Jayemdae Tome|LEA|1 +1 Jihad|ARN|1 +1 Juggernaut|LEA|1 +1 Karakas|LEG|1 +1 Karma|LEA|1 +1 Keepers of the Faith|LEG|1 +1 Keldon Warlord|LEA|1 +1 Killer Bees|LEG|1 +1 King Suleiman|ARN|1 +1 Kird Ape|ARN|1 +1 Kismet|LEG|1 +1 Kormus Bell|LEA|1 +1 Lady Evangela|LEG|1 +1 Land Equilibrium|LEG|1 +1 Land Leeches|DRK|1 +1 Land Tax|LEG|1 +1 Land's Edge|LEG|1 +1 Ley Druid|LEA|1 +1 Library of Leng|LEA|1 +1 Lifeforce|LEA|1 +1 Lightning Bolt|LEA|1 +1 Living Plane|LEG|1 +1 Living Wall|LEA|1 +1 Llanowar Elves|LEA|1 +1 Lord of the Pit|LEA|1 +1 Lost Soul|LEG|1 +1 Lurker|DRK|1 +1 Magnetic Mountain|ARN|1 +1 Mahamoti Djinn|LEA|1 +1 Mana Clash|DRK|1 +1 Mana Drain|LEG|1 +1 Mana Flare|LEA|1 +1 Mana Short|LEA|1 +1 Mana Vault|LEA|1 +1 Manabarbs|LEA|1 +1 Martyr's Cry|DRK|1 +1 Master of the Hunt|LEG|1 +1 Maze of Ith|DRK|1 +1 Meekstone|LEA|1 +1 Mesa Pegasus|LEA|1 +1 Metamorphosis|ARN|1 +1 Mijae Djinn|ARN|1 +1 Millstone|ATQ|1 +1 Mind Twist|LEA|1 +1 Mindstab Thrull|FEM|1 +1 Mirror Universe|LEG|1 +4 Mishra's Factory|ATQ|1 +1 Mishra's Workshop|ATQ|1 +1 Moat|LEG|1 +1 Mold Demon|LEG|1 +1 Moorish Cavalry|ARN|1 +1 Mountain Yeti|LEG|1 +1 Mox Emerald|LEA|1 +1 Mox Jet|LEA|1 +1 Mox Pearl|LEA|1 +1 Mox Ruby|LEA|1 +1 Mox Sapphire|LEA|1 +1 Nafs Asp|ARN|1 +1 Nether Shadow|LEA|1 +1 Nether Void|LEG|1 +1 Nevinyrral's Disk|LEA|1 +1 Nicol Bolas|LEG|1 +1 Night Soil|FEM|1 +1 Nightmare|LEA|1 +1 Northern Paladin|LEA|1 +1 Obsianus Golem|LEA|1 +1 Old Man of the Sea|ARN|1 +1 Orcish Artillery|LEA|1 +1 Orcish Mechanics|ATQ|1 +1 Orcish Oriflamme|LEA|1 +1 Order of Leitbur|FEM|1 +1 Order of the Ebon Hand|FEM|1 +1 Orgg|FEM|1 +1 Ornithopter|ATQ|1 +1 Osai Vultures|LEG|1 +1 Oubliette|ARN|1 +1 Palladia-Mors|LEG|1 +1 Paralyze|LEA|1 +1 Pendelhaven|LEG|1 +1 Personal Incarnation|LEA|1 +1 Pestilence|LEA|1 +1 Petra Sphinx|LEG|1 +1 Phantasmal Forces|LEA|1 +1 Phantom Monster|LEA|1 +1 Phyrexian Gremlins|ATQ|1 +1 Pikemen|DRK|1 +1 Pirate Ship|LEA|1 +3 Plateau|LEA|1 +1 Power Artifact|ATQ|1 +1 Power Sink|LEA|1 +1 Preacher|DRK|1 +1 Priest of Yawgmoth|ATQ|1 +1 Primal Clay|ATQ|1 +1 Prodigal Sorcerer|LEA|1 +1 Psionic Blast|LEA|1 +1 Psychic Purge|LEG|1 +1 Pyrotechnics|LEG|1 +1 Rabid Wombat|LEG|1 +1 Rainbow Vale|FEM|1 +1 Rasputin Dreamweaver|LEG|1 +1 Recall|LEG|1 +1 Red Elemental Blast|LEA|1 +1 Red Mana Battery|LEG|1 +1 Regrowth|LEA|1 +1 Relic Barrier|LEG|1 +1 Remove Soul|LEG|1 +1 Repentant Blacksmith|ARN|1 +1 Resurrection|LEA|1 +1 Revelation|LEG|1 +1 Reverse Damage|LEA|1 +1 Righteousness|LEA|1 +1 River Merfolk|FEM|1 +1 Roc of Kher Ridges|LEA|1 +1 Rock Hydra|LEA|1 +1 Royal Assassin|LEA|1 +1 Rubinia Soulsinger|LEG|1 +1 Ruins of Trokair|FEM|1 +1 Rukh Egg|ARN|1 +1 Sacrifice|LEA|1 +1 Sage of Lat-Nam|ATQ|1 +1 Sand Silos|FEM|1 +3 Savannah|LEA|1 +1 Savannah Lions|LEA|1 +1 Scavenger Folk|DRK|1 +3 Scrubland|LEA|1 +1 Scryb Sprites|LEA|1 +1 Seasinger|FEM|1 +1 Sedge Troll|LEA|1 +1 Sengir Vampire|LEA|1 +1 Serendib Djinn|ARN|1 +1 Serendib Efreet|ARN|1 +1 Serpent Generator|LEG|1 +1 Serra Angel|LEA|1 +1 Shapeshifter|ATQ|1 +1 Shatter|LEA|1 +1 Shatterstorm|ATQ|1 +1 Shivan Dragon|LEA|1 +1 Simulacrum|LEA|1 +1 Sindbad|ARN|1 +1 Sinkhole|LEA|1 +1 Sisters of the Flame|DRK|1 +1 Sleight of Mind|LEA|1 +1 Sol Ring|LEA|1 +1 Sol'kanar the Swamp King|LEG|1 +1 Sorceress Queen|ARN|1 +1 Soul Exchange|FEM|1 +1 Spectral Cloak|LEG|1 +1 Spell Blast|LEA|1 +1 Spinal Villain|LEG|1 +1 Spirit Link|LEG|1 +1 Spirit Shackle|LEG|1 +1 Spitting Slug|DRK|1 +1 Stangg|LEG|1 +1 Stasis|LEA|1 +1 Steal Artifact|LEA|1 +1 Stone Giant|LEA|1 +1 Stone Rain|LEA|1 +1 Stone-Throwing Devils|ARN|1 +1 Storm Seeker|LEG|1 +1 Strip Mine|ATQ|1 +1 Su-Chi|ATQ|1 +1 Sunastian Falconer|LEG|1 +1 Svyelunite Priest|FEM|1 +1 Svyelunite Temple|FEM|1 +1 Sword of the Ages|LEG|1 +1 Swords to Plowshares|LEA|1 +1 Sylvan Library|LEG|1 +3 Taiga|LEA|1 +1 Tawnos's Coffin|ATQ|1 +1 Telekinesis|LEG|1 +1 Terror|LEA|1 +1 Tetravus|ATQ|1 +1 Tetsuo Umezawa|LEG|1 +1 Thallid|FEM|1 +1 Thallid Devourer|FEM|1 +1 The Abyss|LEG|1 +1 The Fallen|DRK|1 +1 The Hive|LEA|1 +1 The Rack|ATQ|1 +1 Thelonite Druid|FEM|1 +1 Thicket Basilisk|LEA|1 +1 Thrull Retainer|FEM|1 +1 Thunder Spirit|LEG|1 +1 Time Elemental|LEG|1 +1 Time Vault|LEA|1 +1 Time Walk|LEA|1 +1 Timetwister|LEA|1 +1 Titania's Song|ATQ|1 +1 Tolaria|LEG|1 +1 Tormod's Crypt|DRK|1 +1 Tracker|DRK|1 +1 Tranquility|LEA|1 +1 Transmute Artifact|ATQ|1 +1 Triskelion|ATQ|1 +3 Tropical Island|LEA|1 +1 Tsunami|LEA|1 +1 Tuknir Deathlock|LEG|1 +3 Tundra|LEA|1 +1 Tundra Wolves|LEG|1 +1 Twiddle|LEA|1 +1 Two-Headed Giant of Foriys|LEA|1 +1 Uncle Istvan|DRK|1 +3 Underground Sea|LEA|1 +1 Underworld Dreams|LEG|1 +1 Unholy Strength|LEA|1 +1 Unstable Mutation|ARN|1 +1 Unsummon|LEA|1 +1 Untamed Wilds|LEG|1 +1 Urborg|LEG|1 +1 Urza's Avenger|ATQ|1 +1 Uthden Troll|LEA|1 +1 Vaevictis Asmadi|LEG|1 +1 Vampire Bats|LEG|1 +1 Verduran Enchantress|LEA|1 +1 Vesuvan Doppelganger|LEA|1 +1 Veteran Bodyguard|LEA|1 +1 Volcanic Eruption|LEA|1 +3 Volcanic Island|LEB|1 +1 Wall of Air|LEA|1 +1 Wall of Earth|LEG|1 +1 Wall of Stone|LEA|1 +1 Wall of Swords|LEA|1 +1 Wall of Vapor|LEG|1 +1 Wand of Ith|DRK|1 +1 War Elephant|ARN|1 +1 Water Elemental|LEA|1 +1 Weakness|LEA|1 +1 Wheel of Fortune|LEA|1 +1 Whippoorwill|DRK|1 +1 Whirling Dervish|LEG|1 +1 White Knight|LEA|1 +1 White Mana Battery|LEG|1 +1 Wild Growth|LEA|1 +1 Will-o'-the-Wisp|LEA|1 +1 Willow Satyr|LEG|1 +1 Winds of Change|LEG|1 +1 Winter Orb|LEA|1 +1 Witch Hunter|DRK|1 +1 Wolverine Pack|LEG|1 +1 Wormwood Treefolk|DRK|1 +1 Wrath of God|LEA|1 +1 Wyluli Wolf|ARN|1 +1 Xira Arien|LEG|1 +1 Yawgmoth Demon|ATQ|1 +1 Ydwen Efreet|ARN|1 +1 Yotian Soldier|ATQ|1 +1 Zephyr Falcon|LEG|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/cube/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).dck b/forge-gui/res/cube/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).dck new file mode 100644 index 00000000000..cc42fbd6df8 --- /dev/null +++ b/forge-gui/res/cube/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).dck @@ -0,0 +1,369 @@ +[metadata] +Name=Old School 93-94 Craig Wescoe's Cube (Cube Cobra) +[Avatar] + +[Main] +1 Abu Ja'far|ARN|1 +1 Acid Rain|LEG|1 +1 Active Volcano|LEG|1 +1 Adun Oakenshield|LEG|1 +1 Aeolipile|FEM|1 +1 Air Elemental|LEA|1 +1 Akron Legionnaire|LEG|1 +1 Aladdin|ARN|1 +1 Aladdin's Ring|ARN|1 +1 Ali from Cairo|ARN|1 +1 All Hallow's Eve|LEG|1 +1 Amnesia|DRK|1 +1 Ancestral Recall|LEA|1 +1 Angelic Voices|LEG|1 +1 Animate Dead|LEA|1 +1 Ankh of Mishra|LEA|1 +1 Argivian Archaeologist|ATQ|1 +1 Argothian Pixies|ATQ|1 +1 Argothian Treefolk|ATQ|1 +1 Armageddon|LEA|1 +1 Army of Allah|ARN|1 +1 Artifact Blast|ATQ|1 +1 Ashes to Ashes|DRK|1 +1 Ashnod's Altar|ATQ|1 +1 Atog|ATQ|1 +1 Azure Drake|LEG|1 +1 Bad Moon|LEA|1 +1 Badlands|LEA|1 +1 Balance|LEA|1 +1 Ball Lightning|DRK|1 +1 Basalt Monolith|LEA|1 +1 Bayou|LEA|1 +1 Bazaar of Baghdad|ARN|1 +1 Benalish Hero|LEA|1 +1 Berserk|LEA|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Lotus|LEA|1 +1 Black Vise|LEA|1 +1 Blessing|LEA|1 +1 Blood Lust|LEG|1 +1 Blood Moon|DRK|1 +1 Blue Elemental Blast|LEA|1 +1 Bog Wraith|LEA|1 +1 Boomerang|LEG|1 +1 Braingeyser|LEA|1 +1 Breeding Pit|FEM|1 +1 Brothers of Fire|DRK|1 +1 Candelabra of Tawnos|ATQ|1 +1 Carrion Ants|LEG|1 +1 Chain Lightning|LEG|1 +1 Channel|LEA|1 +1 Chaos Orb|LEA|1 +1 Circle of Protection: Black|LEB|1 +1 Circle of Protection: Blue|LEA|1 +1 Circle of Protection: Green|LEA|1 +1 Circle of Protection: Red|LEA|1 +1 City in a Bottle|ARN|1 +1 City of Brass|ARN|1 +1 Cleanse|LEG|1 +1 Clockwork Avian|ATQ|1 +1 Clockwork Beast|LEA|1 +1 Clone|LEA|1 +1 Cockatrice|LEA|1 +1 Colossus of Sardia|ATQ|1 +1 Concordant Crossroads|LEG|1 +1 Control Magic|LEA|1 +1 Conversion|LEA|1 +1 Copy Artifact|LEA|1 +1 Cosmic Horror|LEG|1 +1 Counterspell|LEA|1 +1 Craw Giant|LEG|1 +1 Craw Wurm|LEA|1 +1 Crumble|ATQ|1 +1 Crusade|LEA|1 +1 Cuombajj Witches|ARN|1 +1 Cyclone|ARN|1 +1 Dakkon Blackblade|LEG|1 +1 Dance of Many|DRK|1 +1 Dancing Scimitar|ARN|1 +1 Dark Ritual|LEA|1 +1 Deathgrip|LEA|1 +1 Deep Spawn|FEM|1 +1 Demonic Hordes|LEA|1 +1 Demonic Tutor|LEA|1 +1 Derelor|FEM|1 +1 Desert Twister|ARN|1 +1 Detonate|ATQ|1 +1 Diamond Valley|ARN|1 +1 Disenchant|LEA|1 +1 Disharmony|LEG|1 +1 Disintegrate|LEA|1 +1 Disrupting Scepter|LEA|1 +1 Divine Offering|LEG|1 +1 Dragon Engine|ATQ|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Drop of Honey|ARN|1 +1 Drudge Skeletons|LEA|1 +1 Durkwood Boars|LEG|1 +1 Dust to Dust|DRK|1 +1 Dwarven Soldier|FEM|1 +1 Earth Elemental|LEA|1 +1 Earthquake|LEA|1 +1 Elves of Deep Shadow|DRK|1 +1 Elvish Archers|LEA|1 +1 Energy Flux|ATQ|1 +1 Erg Raiders|ARN|1 +1 Erhnam Djinn|ARN|1 +1 Eureka|LEG|1 +1 Exorcist|DRK|1 +1 Eye for an Eye|ARN|1 +1 Fallen Angel|LEG|1 +1 Falling Star|LEG|1 +1 Farrel's Mantle|FEM|1 +1 Farrel's Zealot|FEM|1 +1 Fastbond|LEA|1 +1 Feldon's Cane|ATQ|1 +1 Fellwar Stone|DRK|1 +1 Feral Thallid|FEM|1 +1 Fire Elemental|LEA|1 +1 Fireball|LEA|1 +1 Fissure|DRK|1 +1 Flash Counter|LEG|1 +1 Flashfires|LEA|1 +1 Floral Spuzzem|LEG|1 +1 Flying Men|ARN|1 +1 Fog|LEA|1 +1 Force of Nature|LEA|1 +1 Force Spike|LEG|1 +1 Forcefield|LEA|1 +1 Fork|LEA|1 +1 Frozen Shade|LEA|1 +1 Gaea's Liege|LEA|1 +1 Gauntlet of Might|LEA|1 +1 Ghost Ship|DRK|1 +1 Giant Growth|LEA|1 +1 Giant Spider|LEA|1 +1 Giant Tortoise|ARN|1 +1 Giant Turtle|LEG|1 +1 Gloom|LEA|1 +1 Goblin Balloon Brigade|LEA|1 +1 Granite Gargoyle|LEA|1 +1 Greed|LEG|1 +1 Grizzly Bears|LEA|1 +1 Guardian Beast|ARN|1 +1 Gwendlyn Di Corci|LEG|1 +1 Hand of Justice|FEM|1 +1 Hasran Ogress|ARN|1 +1 Hell's Caretaker|LEG|1 +1 Hellfire|LEG|1 +1 High Tide|FEM|1 +1 Holy Light|DRK|1 +1 Homarid Spawning Bed|FEM|1 +1 Howl from Beyond|LEA|1 +1 Howling Mine|LEA|1 +1 Hurkyl's Recall|ATQ|1 +1 Hurricane|LEA|1 +1 Hymn to Tourach|FEM|1 +1 Hypnotic Specter|LEA|1 +1 Icatian Javelineers|FEM|1 +1 Icatian Scout|FEM|1 +1 Icatian Town|FEM|1 +1 Ice Storm|LEA|1 +1 Icy Manipulator|LEA|1 +1 Immolation|LEG|1 +1 Imprison|LEG|1 +1 Inferno|DRK|1 +1 Instill Energy|LEA|1 +1 Ironclaw Orcs|LEA|1 +1 Island of Wak-Wak|ARN|1 +1 Island Sanctuary|LEA|1 +1 Ivory Tower|ATQ|1 +1 Jade Statue|LEA|1 +1 Jalum Tome|ATQ|1 +1 Jayemdae Tome|LEA|1 +1 Jihad|ARN|1 +1 Juggernaut|LEA|1 +1 Karakas|LEG|1 +1 Karma|LEA|1 +1 Killer Bees|LEG|1 +1 King Suleiman|ARN|1 +1 Kird Ape|ARN|1 +1 Kismet|LEG|1 +1 Kormus Bell|LEA|1 +1 Land Tax|LEG|1 +1 Land's Edge|LEG|1 +1 Ley Druid|LEA|1 +1 Library of Alexandria|ARN|1 +1 Library of Leng|LEA|1 +1 Lifeforce|LEA|1 +1 Lightning Bolt|LEA|1 +1 Living Plane|LEG|1 +1 Llanowar Elves|LEA|1 +1 Lord of the Pit|LEA|1 +1 Mahamoti Djinn|LEA|1 +1 Mana Drain|LEG|1 +1 Mana Flare|LEA|1 +1 Mana Short|LEA|1 +1 Mana Vault|LEA|1 +1 Manabarbs|LEA|1 +1 Master of the Hunt|LEG|1 +1 Maze of Ith|DRK|1 +1 Meekstone|LEA|1 +1 Mesa Pegasus|LEA|1 +1 Mijae Djinn|ARN|1 +1 Millstone|ATQ|1 +1 Mind Twist|LEA|1 +1 Mindstab Thrull|FEM|1 +1 Mirror Universe|LEG|1 +1 Mishra's Factory|ATQ|1 +1 Mishra's Workshop|ATQ|1 +1 Moat|LEG|1 +1 Moorish Cavalry|ARN|1 +1 Mountain Yeti|LEG|1 +1 Mox Emerald|LEA|1 +1 Mox Jet|LEA|1 +1 Mox Pearl|LEA|1 +1 Mox Ruby|LEA|1 +1 Mox Sapphire|LEA|1 +1 Nether Void|LEG|1 +1 Nevinyrral's Disk|LEA|1 +1 Nicol Bolas|LEG|1 +1 Nightmare|LEA|1 +1 Northern Paladin|LEA|1 +1 Obsianus Golem|LEA|1 +1 Old Man of the Sea|ARN|1 +1 Orcish Artillery|LEA|1 +1 Orcish Oriflamme|LEA|1 +1 Order of Leitbur|FEM|1 +1 Order of the Ebon Hand|FEM|1 +1 Orgg|FEM|1 +1 Ornithopter|ATQ|1 +1 Oubliette|ARN|1 +1 Paralyze|LEA|1 +1 Pendelhaven|LEG|1 +1 Personal Incarnation|LEA|1 +1 Pestilence|LEA|1 +1 Phantom Monster|LEA|1 +1 Pirate Ship|LEA|1 +1 Plateau|LEA|1 +1 Power Artifact|ATQ|1 +1 Power Sink|LEA|1 +1 Preacher|DRK|1 +1 Prodigal Sorcerer|LEA|1 +1 Psionic Blast|LEA|1 +1 Psychic Purge|LEG|1 +1 Pyrotechnics|LEG|1 +1 Rasputin Dreamweaver|LEG|1 +1 Recall|LEG|1 +1 Red Elemental Blast|LEA|1 +1 Regrowth|LEA|1 +1 Relic Barrier|LEG|1 +1 Remove Soul|LEG|1 +1 Repentant Blacksmith|ARN|1 +1 Righteousness|LEA|1 +1 Roc of Kher Ridges|LEA|1 +1 Rock Hydra|LEA|1 +1 Royal Assassin|LEA|1 +1 Rubinia Soulsinger|LEG|1 +1 Rukh Egg|ARN|1 +1 Savannah|LEA|1 +1 Savannah Lions|LEA|1 +1 Scavenger Folk|DRK|1 +1 Scrubland|LEA|1 +1 Scryb Sprites|LEA|1 +1 Sedge Troll|LEA|1 +1 Sengir Vampire|LEA|1 +1 Serendib Djinn|ARN|1 +1 Serendib Efreet|ARN|1 +1 Serra Angel|LEA|1 +1 Shahrazad|ARN|1 +1 Shatter|LEA|1 +1 Shatterstorm|ATQ|1 +1 Shivan Dragon|LEA|1 +1 Sindbad|ARN|1 +1 Singing Tree|ARN|1 +1 Sinkhole|LEA|1 +1 Sleight of Mind|LEA|1 +1 Sol Ring|LEA|1 +1 Sol'kanar the Swamp King|LEG|1 +1 Sorceress Queen|ARN|1 +1 Soul Exchange|FEM|1 +1 Spell Blast|LEA|1 +1 Spinal Villain|LEG|1 +1 Spirit Link|LEG|1 +1 Stasis|LEA|1 +1 Steal Artifact|LEA|1 +1 Stone Giant|LEA|1 +1 Stone Rain|LEA|1 +1 Stone-Throwing Devils|ARN|1 +1 Storm Seeker|LEG|1 +1 Strip Mine|ATQ|1 +1 Su-Chi|ATQ|1 +1 Sunastian Falconer|LEG|1 +1 Sword of the Ages|LEG|1 +1 Swords to Plowshares|LEA|1 +1 Sylvan Library|LEG|1 +1 Taiga|LEA|1 +1 Tawnos's Coffin|ATQ|1 +1 Telekinesis|LEG|1 +1 Terror|LEA|1 +1 Tetravus|ATQ|1 +1 Tetsuo Umezawa|LEG|1 +1 The Abyss|LEG|1 +1 The Rack|ATQ|1 +1 Thicket Basilisk|LEA|1 +1 Thunder Spirit|LEG|1 +1 Time Elemental|LEG|1 +1 Time Vault|LEA|1 +1 Time Walk|LEA|1 +1 Timetwister|LEA|1 +1 Tormod's Crypt|DRK|1 +1 Tracker|DRK|1 +1 Tranquility|LEA|1 +1 Transmute Artifact|ATQ|1 +1 Triskelion|ATQ|1 +1 Tropical Island|LEA|1 +1 Tsunami|LEA|1 +1 Tundra|LEA|1 +1 Tundra Wolves|LEG|1 +1 Twiddle|LEA|1 +1 Two-Headed Giant of Foriys|LEA|1 +1 Underground Sea|LEA|1 +1 Underworld Dreams|LEG|1 +1 Unholy Strength|LEA|1 +1 Unsummon|LEA|1 +1 Untamed Wilds|LEG|1 +1 Urza's Avenger|ATQ|1 +1 Uthden Troll|LEA|1 +1 Vesuvan Doppelganger|LEA|1 +1 Veteran Bodyguard|LEA|1 +1 Volcanic Eruption|LEA|1 +1 Volcanic Island|LEB|1 +1 Wall of Air|LEA|1 +1 Wall of Earth|LEG|1 +1 Wall of Swords|LEA|1 +1 Water Elemental|LEA|1 +1 Weakness|LEA|1 +1 Wheel of Fortune|LEA|1 +1 Whirling Dervish|LEG|1 +1 White Knight|LEA|1 +1 Wild Growth|LEA|1 +1 Will-o'-the-Wisp|LEA|1 +1 Willow Satyr|LEG|1 +1 Winter Orb|LEA|1 +1 Witch Hunter|DRK|1 +1 Wormwood Treefolk|DRK|1 +1 Wrath of God|LEA|1 +1 Wyluli Wolf|ARN|1 +1 Xira Arien|LEG|1 +1 Yawgmoth Demon|ATQ|1 +1 Ydwen Efreet|ARN|1 +1 Yotian Soldier|ATQ|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/cube/Oldschool 93-94 Magic Full Set 878 Card Cube.dck b/forge-gui/res/cube/Old School 93-94 Magic Full Set 878 Card Cube.dck similarity index 99% rename from forge-gui/res/cube/Oldschool 93-94 Magic Full Set 878 Card Cube.dck rename to forge-gui/res/cube/Old School 93-94 Magic Full Set 878 Card Cube.dck index 70c1b20d229..958f7533347 100644 --- a/forge-gui/res/cube/Oldschool 93-94 Magic Full Set 878 Card Cube.dck +++ b/forge-gui/res/cube/Old School 93-94 Magic Full Set 878 Card Cube.dck @@ -1,5 +1,5 @@ [metadata] -Name=Oldschool 93-94 Magic Full Set 878 Card Cube +Name=Old School 93-94 Magic Full Set 878 Card Cube [main] Amulet of Kroog|ATQ Argivian Archaeologist|ATQ diff --git a/forge-gui/res/cube/Oldschool 93-94 Magic Powered 360 Card Cube.dck b/forge-gui/res/cube/Old School 93-94 Magic Powered 360 Card Cube.dck similarity index 99% rename from forge-gui/res/cube/Oldschool 93-94 Magic Powered 360 Card Cube.dck rename to forge-gui/res/cube/Old School 93-94 Magic Powered 360 Card Cube.dck index 033519e5c18..626817dfcbe 100644 --- a/forge-gui/res/cube/Oldschool 93-94 Magic Powered 360 Card Cube.dck +++ b/forge-gui/res/cube/Old School 93-94 Magic Powered 360 Card Cube.dck @@ -1,5 +1,5 @@ [metadata] -Name=Oldschool 93-94 Magic Powered 360 Card Cube +Name=Old School 93-94 Magic Powered 360 Card Cube [Main] 1 Adun Oakenshield|LEG 1 Aeolipile|FEM diff --git a/forge-gui/res/cube/Oldschool 93-94 Magic Unpowered 400 Card Cube.dck b/forge-gui/res/cube/Old School 93-94 Magic Unpowered 400 Card Cube.dck similarity index 99% rename from forge-gui/res/cube/Oldschool 93-94 Magic Unpowered 400 Card Cube.dck rename to forge-gui/res/cube/Old School 93-94 Magic Unpowered 400 Card Cube.dck index e6ab485e9b7..2cd4104d5bd 100644 --- a/forge-gui/res/cube/Oldschool 93-94 Magic Unpowered 400 Card Cube.dck +++ b/forge-gui/res/cube/Old School 93-94 Magic Unpowered 400 Card Cube.dck @@ -1,5 +1,5 @@ [metadata] -Name=Oldschool 93-94 Magic Unpowered 400 Card Cube +Name=Old School 93-94 Magic Unpowered 400 Card Cube [Main] 1 Abu Ja'far|ARN 1 Adun Oakenshield|LEG diff --git a/forge-gui/res/cube/Old School 93-95 (360 Cards, Cube Cobra).dck b/forge-gui/res/cube/Old School 93-95 (360 Cards, Cube Cobra).dck new file mode 100644 index 00000000000..0a9538720b3 --- /dev/null +++ b/forge-gui/res/cube/Old School 93-95 (360 Cards, Cube Cobra).dck @@ -0,0 +1,357 @@ +[metadata] +Name=Old School 93-95 (360 Cards, Cube Cobra) +[Avatar] + +[Main] +1 Abbey Gargoyles|HML|1 +1 Abyssal Specter|ICE|1 +4 Adarkar Wastes|ICE|1 +1 Aeolipile|FEM|1 +1 Air Elemental|LEA|1 +1 Amrou Kithkin|LEG|1 +1 Ancestral Recall|LEA|1 +1 Angelic Voices|LEG|1 +1 Animate Dead|LEA|1 +1 Ankh of Mishra|LEA|1 +1 Apprentice Wizard|DRK|1 +1 Armageddon|LEA|1 +1 Army of Allah|ARN|1 +1 Ashen Ghoul|ICE|1 +1 Ashes to Ashes|DRK|1 +1 Atog|ATQ|1 +1 Avoid Fate|LEG|1 +1 Bad Moon|LEA|1 +1 Badlands|LEA|1 +1 Balance|LEA|1 +1 Balduvian Bears|ICE|1 +1 Ball Lightning|DRK|1 +1 Barl's Cage|DRK|1 +1 Basalt Monolith|LEA|1 +1 Bayou|LEA|1 +1 Benalish Hero|LEA|1 +1 Berserk|LEA|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Lotus|LEA|1 +1 Black Mana Battery|LEG|1 +1 Black Vise|LEA|1 +1 Blessing|LEA|1 +1 Blood Moon|DRK|1 +1 Blue Mana Battery|LEG|1 +1 Boomerang|LEG|1 +1 Braingeyser|LEA|1 +1 Brainstorm|ICE|1 +1 Brainwash|DRK|1 +1 Brassclaw Orcs|FEM|1 +1 Breeding Pit|FEM|1 +4 Brushland|ICE|1 +1 Cat Warriors|LEG|1 +1 Celestial Prism|LEA|1 +1 Chain Lightning|LEG|1 +1 Channel|LEA|1 +1 Chaos Orb|LEA|1 +1 Citanul Druid|ATQ|1 +1 City of Brass|ARN|1 +2 Clay Statue|ATQ|1 +1 Cleansing|DRK|1 +1 Clergy of the Holy Nimbus|LEG|1 +1 Clone|LEA|1 +1 Cockatrice|LEA|1 +1 Concordant Crossroads|LEG|1 +1 Control Magic|LEA|1 +1 Copy Artifact|LEA|1 +1 Counterspell|LEA|1 +1 Craw Giant|LEG|1 +1 Craw Wurm|LEA|1 +1 Crusade|LEA|1 +1 Dance of the Dead|ICE|1 +1 Dark Banishing|ICE|1 +1 Dark Ritual|LEA|1 +1 Death Speakers|HML|1 +1 Deflection|ICE|1 +1 Demonic Tutor|LEA|1 +1 Desert Twister|ARN|1 +1 Detonate|ATQ|1 +1 Dingus Egg|LEA|1 +1 Disenchant|LEA|1 +1 Disintegrate|LEA|1 +1 Disrupting Scepter|LEA|1 +1 Divine Transformation|LEG|1 +2 Dragon Engine|ATQ|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Drudge Skeletons|LEA|1 +1 Durkwood Boars|LEG|1 +1 Earth Elemental|LEA|1 +1 Earthquake|LEA|1 +2 Ebony Rhino|HML|1 +1 Elven Riders|LEG|1 +1 Elves of Deep Shadow|DRK|1 +1 Elvish Hunter|FEM|1 +1 Energy Flux|ATQ|1 +1 Erg Raiders|ARN|1 +1 Erhnam Djinn|ARN|1 +1 Eron the Relentless|HML|1 +1 Exorcist|DRK|1 +1 Eye for an Eye|ARN|1 +1 Fallen Angel|LEG|1 +1 Fastbond|LEA|1 +1 Fellwar Stone|DRK|1 +1 Fire Elemental|LEA|1 +1 Fireball|LEA|1 +1 Fishliver Oil|ARN|1 +1 Fissure|DRK|1 +1 Flying Men|ARN|1 +1 Force Spike|LEG|1 +1 Force Void|ICE|1 +1 Fork|LEA|1 +1 Fountain of Youth|DRK|1 +1 Fyndhorn Elder|ICE|1 +1 Fyndhorn Elves|ICE|1 +1 Gauntlets of Chaos|LEG|1 +1 Ghost Ship|DRK|1 +1 Giant Growth|LEA|1 +1 Giant Spider|LEA|1 +1 Giant Tortoise|ARN|1 +1 Goblin Balloon Brigade|LEA|1 +1 Goblin Chirurgeon|FEM|1 +1 Goblin Digging Team|DRK|1 +1 Goblin Grenade|FEM|1 +1 Goblin Hero|DRK|1 +1 Goblin King|LEA|1 +1 Goblin War Drums|FEM|1 +1 Goblin Warrens|FEM|1 +1 Goblins of the Flarg|DRK|1 +1 Granite Gargoyle|LEA|1 +1 Greed|LEG|1 +1 Green Mana Battery|LEG|1 +1 Grizzly Bears|LEA|1 +1 Hand of Justice|FEM|1 +1 Hasran Ogress|ARN|1 +1 Headless Horseman|LEG|1 +1 Hell's Caretaker|LEG|1 +1 High Tide|FEM|1 +1 Hill Giant|LEA|1 +1 Holy Light|DRK|1 +1 Holy Strength|LEA|1 +1 Horn of Deafening|LEG|1 +1 Howl from Beyond|LEA|1 +1 Howling Mine|LEA|1 +1 Hurkyl's Recall|ATQ|1 +1 Hurloon Minotaur|LEA|1 +1 Hurricane|LEA|1 +1 Hydroblast|ICE|1 +1 Hymn to Tourach|FEM|1 +1 Hypnotic Specter|LEA|1 +1 Icatian Infantry|FEM|1 +1 Icatian Javelineers|FEM|1 +1 Icatian Lieutenant|FEM|1 +1 Icatian Priest|FEM|1 +1 Icatian Scout|FEM|1 +1 Ice Floe|ICE|1 +1 Ice Storm|LEA|1 +1 Icequake|ICE|1 +1 Icy Manipulator|LEA|1 +1 Ihsan's Shade|HML|1 +1 Implements of Sacrifice|FEM|1 +1 Incinerate|ICE|1 +1 Instill Energy|LEA|1 +1 Ironclaw Orcs|LEA|1 +1 Jalum Tome|ATQ|1 +1 Jayemdae Tome|LEA|1 +1 Jester's Cap|ICE|1 +1 Jokulhaups|ICE|1 +2 Juggernaut|LEA|1 +1 Juniper Order Druid|ICE|1 +4 Karplusan Forest|ICE|1 +1 Keepers of the Faith|LEG|1 +1 Keldon Warlord|LEA|1 +1 Killer Bees|LEG|1 +1 Kird Ape|ARN|1 +1 Kismet|LEG|1 +1 Kjeldoran Elite Guard|ICE|1 +1 Kjeldoran Knight|ICE|1 +1 Kjeldoran Skyknight|ICE|1 +1 Kjeldoran Warrior|ICE|1 +1 Knight of Stromgald|ICE|1 +1 Land Tax|LEG|1 +1 Land's Edge|LEG|1 +1 Lava Burst|ICE|1 +1 Ley Druid|LEA|1 +1 Lightning Bolt|LEA|1 +1 Living Lands|LEA|1 +1 Llanowar Elves|LEA|1 +1 Lord of Atlantis|LEA|1 +1 Lord of the Pit|LEA|1 +1 Mahamoti Djinn|LEA|1 +1 Mana Drain|LEG|1 +1 Mana Vault|LEA|1 +1 Manabarbs|LEA|1 +1 Marsh Viper|DRK|1 +1 Master of the Hunt|LEG|1 +1 Maze of Ith|DRK|1 +1 Memory Lapse|HML|1 +1 Merchant Scroll|HML|1 +1 Merfolk of the Pearl Trident|LEA|1 +1 Mesa Falcon|HML|1 +1 Mesa Pegasus|LEA|1 +1 Mightstone|ATQ|1 +1 Millstone|ATQ|1 +1 Mind Twist|LEA|1 +1 Mishra's Factory|ATQ|1 +1 Mons's Goblin Raiders|LEA|1 +1 Morale|DRK|1 +1 Mountain Yeti|LEG|1 +1 Mox Emerald|LEA|1 +1 Mox Jet|LEA|1 +1 Mox Pearl|LEA|1 +1 Mox Ruby|LEA|1 +1 Mox Sapphire|LEA|1 +1 Murk Dwellers|DRK|1 +1 Nature's Lore|ICE|1 +1 Necropotence|ICE|1 +1 Nevinyrral's Disk|LEA|1 +1 Night Soil|FEM|1 +1 North Star|LEG|1 +1 Northern Paladin|LEA|1 +1 Orcish Artillery|LEA|1 +1 Orcish Oriflamme|LEA|1 +1 Order of Leitbur|FEM|1 +1 Order of the Ebon Hand|FEM|1 +1 Order of the Sacred Torch|ICE|1 +1 Order of the White Shield|ICE|1 +1 Osai Vultures|LEG|1 +1 Oubliette|ARN|1 +1 Pendelhaven|LEG|1 +1 Pestilence|LEA|1 +1 Phantom Monster|LEA|1 +1 Pikemen|DRK|1 +1 Pit Scorpion|LEG|1 +1 Pit Trap|ICE|1 +1 Pixie Queen|LEG|1 +1 Plateau|LEA|1 +1 Portent|ICE|1 +1 Power Sink|LEA|1 +1 Preacher|DRK|1 +2 Primal Clay|ATQ|1 +1 Prodigal Sorcerer|LEA|1 +1 Psionic Blast|LEA|1 +1 Psychic Venom|LEA|1 +1 Pyroclasm|ICE|1 +1 Pyrotechnics|LEG|1 +1 Radjan Spirit|LEG|1 +1 Rainbow Vale|FEM|1 +1 Raise Dead|LEA|1 +1 Recall|LEG|1 +1 Red Mana Battery|LEG|1 +1 Regrowth|LEA|1 +1 Remove Soul|LEG|1 +1 Repentant Blacksmith|ARN|1 +1 Resurrection|LEA|1 +1 River Merfolk|FEM|1 +1 Roc of Kher Ridges|LEA|1 +1 Rod of Ruin|LEA|1 +1 Royal Assassin|LEA|1 +1 Rukh Egg|ARN|1 +1 Savannah|LEA|1 +1 Savannah Lions|LEA|1 +1 Scaled Wurm|ICE|1 +1 Scathe Zombies|LEA|1 +1 Scavenger Folk|DRK|1 +1 Scavenging Ghoul|LEA|1 +1 Scrubland|LEA|1 +1 Scryb Sprites|LEA|1 +1 Sedge Troll|LEA|1 +1 Sengir Autocrat|HML|1 +1 Sengir Vampire|LEA|1 +1 Seraph|ICE|1 +1 Serendib Efreet|ARN|1 +1 Serpent Generator|LEG|1 +1 Serra Angel|LEA|1 +1 Serrated Arrows|HML|1 +1 Shatter|LEA|1 +1 Shivan Dragon|LEA|1 +1 Sinkhole|LEA|1 +1 Skull Catapult|ICE|1 +1 Sol Ring|LEA|1 +1 Soldevi Machinist|ICE|1 +1 Sorceress Queen|ARN|1 +1 Soul Burn|ICE|1 +1 Spell Blast|LEA|1 +1 Standing Stones|DRK|1 +1 Stasis|LEA|1 +1 Stone Calendar|DRK|1 +1 Stone Giant|LEA|1 +1 Stone Rain|LEA|1 +1 Stone-Throwing Devils|ARN|1 +1 Strip Mine|ATQ|1 +2 Su-Chi|ATQ|1 +4 Sulfurous Springs|ICE|1 +1 Sunken City|DRK|1 +1 Swords to Plowshares|LEA|1 +1 Sylvan Library|LEG|1 +1 Taiga|LEA|1 +1 Tawnos's Wand|ATQ|1 +1 Tawnos's Weaponry|ATQ|1 +1 Terror|LEA|1 +2 Tetravus|ATQ|1 +1 The Fallen|DRK|1 +1 The Hive|LEA|1 +1 The Rack|ATQ|1 +1 Thermokarst|ICE|1 +1 Thunder Spirit|LEG|1 +1 Time Bomb|ICE|1 +1 Time Elemental|LEG|1 +1 Time Walk|LEA|1 +1 Timetwister|LEA|1 +1 Titania's Song|ATQ|1 +1 Tracker|DRK|1 +2 Triskelion|ATQ|1 +1 Tropical Island|LEA|1 +1 Tundra|LEA|1 +1 Tundra Wolves|LEG|1 +4 Underground River|ICE|1 +1 Underground Sea|LEA|1 +1 Underworld Dreams|LEG|1 +1 Unholy Strength|LEA|1 +1 Unstable Mutation|ARN|1 +1 Unsummon|LEA|1 +1 Untamed Wilds|LEG|1 +1 Uthden Troll|LEA|1 +1 Vampire Bats|LEG|1 +1 Vesuvan Doppelganger|LEA|1 +1 Vodalian Mage|FEM|1 +1 Vodalian Soldiers|FEM|1 +1 Volcanic Island|LEB|1 +1 Walking Dead|LEG|1 +1 Wall of Brambles|LEA|1 +2 Wall of Spears|ATQ|1 +1 Wall of Vapor|LEG|1 +1 War Mammoth|LEA|1 +1 Water Elemental|LEA|1 +1 Wheel of Fortune|LEA|1 +1 Whirling Dervish|LEG|1 +1 White Knight|LEA|1 +1 White Mana Battery|LEG|1 +1 Wild Growth|LEA|1 +1 Will-o'-the-Wisp|LEA|1 +1 Willow Faerie|HML|1 +1 Winds of Change|LEG|1 +1 Winter Orb|LEA|1 +1 Witch Hunter|DRK|1 +1 Word of Undoing|ICE|1 +1 Wrath of God|LEA|1 +1 Wyluli Wolf|ARN|1 +1 Zelyon Sword|FEM|1 +1 Zephyr Falcon|LEG|1 +1 Zombie Master|LEA|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/cube/Old School 98 (350 Cards, Cube Cobra).dck b/forge-gui/res/cube/Old School 98 (350 Cards, Cube Cobra).dck new file mode 100644 index 00000000000..73f1d26c583 --- /dev/null +++ b/forge-gui/res/cube/Old School 98 (350 Cards, Cube Cobra).dck @@ -0,0 +1,372 @@ +[metadata] +Name=Old School 98 (350 Cards, Cube Cobra) +[Avatar] + +[Main] +1 Aboroth|WTH|1 +1 Adarkar Wastes|ICE|1 +1 Afterlife|MIR|1 +1 Aftershock|TMP|1 +1 Ancestral Knowledge|WTH|1 +1 Ancestral Memories|MIR|1 +1 Ancient Craving|A25|1 +1 Ancient Tomb|TMP|1 +1 Angel of Fury|PO2|1 +1 Animate Dead|LEA|1 +1 Ankh of Mishra|LEA|1 +1 Anvil of Bogardan|VIS|1 +1 Archangel|VIS|1 +1 Armageddon|LEA|1 +1 Ashnod's Cylix|ALL|1 +1 Aura of Silence|WTH|1 +1 Bad River|MIR|1 +1 Badlands|LEA|1 +1 Balduvian Horde|ALL|1 +1 Ball Lightning|DRK|1 +1 Basalt Monolith|LEA|1 +1 Bayou|LEA|1 +1 Benalish Knight|WTH|1 +1 Berserk|LEA|1 +1 Binding Grasp|ICE|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Vise|LEA|1 +1 Blood Frenzy|TMP|1 +1 Blood Lust|LEG|1 +1 Bloodrock Cyclops|WTH|1 +1 Boomerang|LEG|1 +1 Bottle Gnomes|TMP|1 +1 Bottomless Pit|STH|1 +1 Bottomless Vault|FEM|1 +1 Bounty of the Hunt|ALL|1 +1 Braingeyser|LEA|1 +1 Brainstorm|ICE|1 +1 Brushland|ICE|1 +1 Buried Alive|WTH|1 +1 Cadaverous Bloom|MIR|1 +1 Capsize|TMP|1 +1 Carnophage|EXO|1 +1 Carrionette|TMP|1 +1 Cataclysm|EXO|1 +1 Cerulean Wyvern|MIR|1 +1 Chain Lightning|LEG|1 +1 Charcoal Diamond|MIR|1 +1 City of Brass|ARN|1 +1 Cloudchaser Eagle|TMP|1 +1 Concordant Crossroads|LEG|1 +1 Constant Mists|STH|1 +1 Control Magic|LEA|1 +1 Counterspell|LEA|1 +1 Creeping Mold|VIS|1 +1 Crusade|LEA|1 +1 Crypt Rats|VIS|1 +1 Curiosity|EXO|1 +1 Cursed Rack|ATQ|1 +1 Cursed Scroll|TMP|1 +1 Dance of Many|DRK|1 +1 Dance of the Dead|ICE|1 +1 Dark Banishing|ICE|1 +1 Dark Ritual|LEA|1 +1 Darkling Stalker|TMP|1 +1 Dauthi Horror|TMP|1 +1 Dauthi Jackal|EXO|1 +1 Dauthi Marauder|TMP|1 +1 Dauthi Mercenary|TMP|1 +1 Dauthi Mindripper|TMP|1 +1 Dauthi Slayer|TMP|1 +1 Death Spark|ALL|1 +1 Death Speakers|HML|1 +1 Death Stroke|STH|1 +1 Delirium|MIR|1 +1 Demonic Tutor|LEA|1 +1 Denizen of the Deep|10E|1 +1 Desertion|VIS|1 +1 Diabolic Edict|TMP|1 +1 Disenchant|LEA|1 +1 Disintegrate|LEA|1 +1 Dismiss|TMP|1 +1 Disrupting Scepter|LEA|1 +1 Dissipate|MIR|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Dungeon Shade|STH|1 +1 Dwarven Hold|FEM|1 +1 Dwarven Ruins|FEM|1 +1 Earthquake|LEA|1 +1 Elves of Deep Shadow|DRK|1 +1 Elvish Archers|LEA|1 +1 Empyrial Armor|WTH|1 +1 Enlightened Tutor|MIR|1 +1 Ensnaring Bridge|STH|1 +1 Erhnam Djinn|ARN|1 +1 Eron the Relentless|HML|1 +1 Erratic Portal|EXO|1 +1 Ertai, Wizard Adept|EXO|1 +1 Evacuation|STH|1 +1 Evincar's Justice|TMP|1 +1 Exhaustion|USG|1 +1 Exile|ALL|1 +1 Fallow Wurm|WTH|1 +1 Feldon's Cane|ATQ|1 +1 Fellwar Stone|DRK|1 +1 Final Fortune|MIR|1 +1 Fire Covenant|ICE|1 +1 Fire Diamond|MIR|1 +1 Fire Imp|POR|1 +1 Fireblast|VIS|1 +1 Fireslinger|TMP|1 +1 Firestorm|WTH|1 +1 Flood Plain|MIR|1 +1 Flowstone Hellion|STH|1 +1 Forbid|EXO|1 +1 Force of Nature|LEA|1 +1 Force of Will|ALL|1 +1 Force Spike|LEG|1 +1 Forcefield|LEA|1 +1 Funeral Charm|VIS|1 +1 Furnace Spirit|STH|1 +1 Fyndhorn Elves|ICE|1 +1 Gauntlet of Might|LEA|1 +1 Gemstone Mine|WTH|1 +1 Gerrard's Wisdom|WTH|1 +1 Giant Growth|LEA|1 +1 Gift of Estates|9ED|1 +1 Goblin Balloon Brigade|LEA|1 +1 Goblin Bully|POR|1 +1 Goblin Tinkerer|MIR|1 +1 Grasslands|MIR|1 +1 Gravedigger|TMP|1 +1 Grindstone|TMP|1 +1 Harrow|TMP|1 +1 Harvest Wurm|WTH|1 +1 Hatred|EXO|1 +1 Havenwood Battleground|FEM|1 +1 Helm of Awakening|VIS|1 +1 Hidden Horror|WTH|1 +1 Howl from Beyond|LEA|1 +1 Howling Mine|LEA|1 +1 Hulking Goblin|POR|1 +1 Humility|TMP|1 +1 Hymn to Tourach|FEM|1 +1 Hypnotic Specter|LEA|1 +1 Icatian Javelineers|FEM|1 +1 Icy Manipulator|LEA|1 +1 Ihsan's Shade|HML|1 +1 Impulse|VIS|1 +1 Incinerate|ICE|1 +1 Inspiration|VIS|1 +1 Intuition|TMP|1 +1 Ironclaw Orcs|LEA|1 +1 Island Sanctuary|LEA|1 +1 Ivory Tower|ATQ|1 +1 Jackal Pup|TMP|1 +1 Jolrael's Centaur|MIR|1 +1 Juggernaut|LEA|1 +1 Just Fate|PO2|1 +1 Kaervek's Torch|MIR|1 +1 Karplusan Forest|ICE|1 +1 Keeper of the Light|EXO|1 +1 Killer Bees|LEG|1 +1 Kird Ape|ARN|1 +1 Kismet|LEG|1 +1 Kjeldoran Outpost|ALL|1 +1 Knight of Stromgald|ICE|1 +1 Krovikan Horror|ALL|1 +1 Lake of the Dead|ALL|1 +1 Land Tax|LEG|1 +1 Land's Edge|LEG|1 +1 Lava Hounds|WTH|1 +1 Lhurgoyf|ICE|1 +1 Library of Leng|LEA|1 +1 Lightning Blast|TMP|1 +1 Lightning Bolt|LEA|1 +1 Lion's Eye Diamond|MIR|1 +1 Living Death|TMP|1 +1 Llanowar Elves|LEA|1 +1 Lotus Petal|TMP|1 +1 Mahamoti Djinn|LEA|1 +1 Man-o'-War|VIS|1 +1 Mana Drain|LEG|1 +1 Mana Leak|STH|1 +1 Manabarbs|LEA|1 +1 Marble Diamond|MIR|1 +1 Marble Titan|TMP|1 +1 Master Decoy|TMP|1 +1 Meekstone|LEA|1 +1 Memory Lapse|HML|1 +1 Mercenary Knight|POR|1 +1 Merfolk Looter|EXO|1 +1 Millstone|ATQ|1 +1 Mind Stone|WTH|1 +1 Mindstab Thrull|FEM|1 +1 Mirri, Cat Warrior|EXO|1 +1 Mirror Universe|LEG|1 +1 Mishra's Factory|ATQ|1 +1 Mist Dragon|MIR|1 +1 Mogg Conscripts|TMP|1 +1 Mogg Fanatic|TMP|1 +1 Mogg Flunkies|STH|1 +1 Mogg Raider|TMP|1 +1 Moss Diamond|MIR|1 +1 Mountain Valley|MIR|1 +1 Mox Diamond|STH|1 +1 Mulch|STH|1 +1 Mystical Tutor|MIR|1 +1 Natural Balance|MIR|1 +1 Natural Order|VIS|1 +1 Nature's Lore|ICE|1 +1 Necromancy|VIS|1 +1 Nekrataal|VIS|1 +1 Nevinyrral's Disk|LEA|1 +1 Nomads en-Kor|STH|1 +1 Oath of Druids|EXO|1 +1 Ophidian|WTH|1 +1 Orcish Lumberjack|ICE|1 +1 Orcish Settlers|WTH|1 +1 Order of Leitbur|FEM|1 +1 Order of the Ebon Hand|FEM|1 +1 Order of the White Shield|ICE|1 +1 Overgrowth|STH|1 +1 Overrun|TMP|1 +1 Pacifism|MIR|1 +1 Paladin en-Vec|EXO|1 +1 Pendelhaven|LEG|1 +1 Personal Tutor|POR|1 +1 Phyrexian War Beast|ALL|1 +1 Pillage|ALL|1 +1 Pincher Beetles|TMP|1 +1 Plant Elemental|POR|1 +1 Plateau|LEA|1 +1 Portent|ICE|1 +1 Power Sink|LEA|1 +1 Price of Progress|EXO|1 +1 Propaganda|TMP|1 +1 Prosperity|VIS|1 +1 Pyroclasm|ICE|1 +1 Rainbow Efreet|VIS|1 +1 Rampant Growth|MIR|1 +1 Rathi Dragon|TMP|1 +1 Ravenous Rats|UDS|1 +1 Recall|LEG|1 +1 Reckless Spite|TMP|1 +1 Recurring Nightmare|EXO|1 +1 Regrowth|LEA|1 +1 Reins of Power|STH|1 +1 Relentless Assault|VIS|1 +1 Retribution of the Meek|VIS|1 +1 Righteous Charge|GTC|1 +1 Ritual of Subdual|ICE|1 +1 River Boa|VIS|1 +1 Rocky Tar Pit|MIR|1 +1 Rogue Elephant|WTH|1 +1 Sacred Mesa|MIR|1 +1 Sarcomancy|TMP|1 +1 Savage Twister|MIR|1 +1 Savannah|LEA|1 +1 Savannah Lions|LEA|1 +1 Scragnoth|TMP|1 +1 Scrivener|EXO|1 +1 Scrubland|LEA|1 +1 Scryb Sprites|LEA|1 +1 Searing Spear Askari|MIR|1 +1 Sengir Vampire|LEA|1 +1 Serendib Efreet|ARN|1 +1 Serra Angel|LEA|1 +1 Shadow Guildmage|MIR|1 +1 Shock|STH|1 +1 Sift|STH|1 +1 Silver Wyvern|STH|1 +1 Skulking Ghost|MIR|1 +1 Sky Diamond|MIR|1 +1 Skyshroud Elite|EXO|1 +1 Slaughter|EXO|1 +1 Sleight of Hand|7ED|1 +1 Sliver Queen|STH|1 +1 Sol Grail|ALL|1 +1 Soldevi Excavations|ALL|1 +1 Soltari Champion|STH|1 +1 Soltari Foot Soldier|TMP|1 +1 Soltari Monk|TMP|1 +1 Soltari Priest|TMP|1 +1 Soltari Visionary|EXO|1 +1 Spellshock|EXO|1 +1 Spike Feeder|STH|1 +1 Spike Weaver|EXO|1 +1 Spinning Darkness|WTH|1 +1 Spirit Link|LEG|1 +1 Spirit of the Night|MIR|1 +1 Squandered Resources|VIS|1 +1 Stampeding Wildebeests|VIS|1 +1 Static Orb|TMP|1 +1 Steel Golem|WTH|1 +1 Strip Mine|ATQ|1 +1 Stupor|MIR|1 +1 Su-Chi|ATQ|1 +1 Sulfurous Springs|ICE|1 +1 Summer Bloom|VIS|1 +1 Suq'Ata Lancer|VIS|1 +1 Survival of the Fittest|EXO|1 +1 Swords to Plowshares|LEA|1 +1 Sylvan Library|LEG|1 +1 Taiga|LEA|1 +1 Teferi's Honor Guard|VIS|1 +1 Terror|LEA|1 +1 Thalakos Mistfolk|TMP|1 +1 Thalakos Scout|EXO|1 +1 Thawing Glaciers|ALL|1 +1 The Rack|ATQ|1 +1 Three Wishes|VIS|1 +1 Thunder Spirit|LEG|1 +1 Thundering Wurm|POR|1 +1 Thundermare|WTH|1 +1 Tinder Wall|ICE|1 +1 Tithe|VIS|1 +1 Tradewind Rider|TMP|1 +1 Treasure Hunter|EXO|1 +1 Tropical Island|LEA|1 +1 Tundra|LEA|1 +1 Tundra Wolves|LEG|1 +1 Uktabi Efreet|WTH|1 +1 Uktabi Orangutan|VIS|1 +1 Underground River|ICE|1 +1 Underground Sea|LEA|1 +1 Undo|VIS|1 +1 Unstable Mutation|ARN|1 +1 Vampiric Tutor|VIS|1 +1 Varchild's War-Riders|ALL|1 +1 Verdant Force|TMP|1 +1 Viashino Sandstalker|VIS|1 +1 Volcanic Geyser|MIR|1 +1 Volcanic Hammer|7ED|1 +1 Volcanic Island|LEB|1 +1 Volrath's Stronghold|STH|1 +1 Wall of Roots|MIR|1 +1 Wall of Swords|LEA|1 +1 Wand of Denial|VIS|1 +1 Warrior Angel|STH|1 +1 Warthog|VIS|1 +1 Wasteland|TMP|1 +1 Whirling Dervish|LEG|1 +1 Whispers of the Muse|TMP|1 +1 White Knight|LEA|1 +1 Wild Growth|LEA|1 +1 Wildfire Emissary|MIR|1 +1 Winds of Rath|TMP|1 +1 Winter Orb|LEA|1 +1 Witch Hunter|DRK|1 +1 Wood Elves|EXO|1 +1 Word of Undoing|ICE|1 +1 Worldly Tutor|MIR|1 +1 Wrath of God|LEA|1 +1 Zhalfirin Commander|MIR|1 +1 Zhalfirin Crusader|VIS|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/cube/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).dck b/forge-gui/res/cube/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).dck new file mode 100644 index 00000000000..ba5013d79c4 --- /dev/null +++ b/forge-gui/res/cube/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).dck @@ -0,0 +1,324 @@ +[metadata] +Name=Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra) +[Avatar] + +[Main] +1 Abu Ja'far|ARN|1 +1 Adun Oakenshield|LEG|1 +1 Air Elemental|LEA|1 +1 Aladdin|ARN|1 +1 Aladdin's Lamp|ARN|1 +1 Aladdin's Ring|ARN|1 +1 Ali from Cairo|ARN|1 +1 All Hallow's Eve|LEG|1 +1 Ancestral Recall|LEA|1 +1 Angus Mackenzie|LEG|1 +2 Animate Artifact|LEA|1 +2 Animate Dead|LEA|1 +1 Ankh of Mishra|LEA|1 +1 Apprentice Wizard|DRK|1 +1 Arboria|LEG|1 +1 Argivian Archaeologist|ATQ|1 +1 Armageddon|LEA|1 +1 Army of Allah|ARN|1 +1 Ashnod's Altar|ATQ|1 +1 Atog|ATQ|1 +1 Azure Drake|LEG|1 +1 Bad Moon|LEA|1 +1 Badlands|LEA|1 +1 Balance|LEA|1 +2 Basalt Monolith|LEA|1 +1 Bayou|LEA|1 +1 Bazaar of Baghdad|ARN|1 +1 Benalish Hero|LEA|1 +1 Berserk|LEA|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Lotus|LEA|1 +1 Black Mana Battery|LEG|1 +1 Black Vise|LEA|1 +1 Blaze of Glory|LEA|1 +1 Blessing|LEA|1 +1 Blood Lust|LEG|1 +1 Blue Mana Battery|LEG|1 +1 Boomerang|LEG|1 +1 Braingeyser|LEA|1 +2 Candelabra of Tawnos|ATQ|1 +1 Castle|LEA|1 +1 Celestial Prism|LEA|1 +1 Chain Lightning|LEG|1 +1 Chains of Mephistopheles|LEG|1 +2 Channel|LEA|1 +1 Chaos Orb|LEA|1 +4 City of Brass|ARN|1 +1 City of Shadows|DRK|1 +1 Clockwork Avian|ATQ|1 +1 Clockwork Beast|LEA|1 +1 Clone|LEA|1 +1 Cockatrice|LEA|1 +1 Colossus of Sardia|ATQ|1 +1 Concordant Crossroads|LEG|1 +1 Control Magic|LEA|1 +2 Copper Tablet|LEA|1 +1 Copy Artifact|LEA|1 +1 Counterspell|LEA|1 +1 Crumble|ATQ|1 +2 Crusade|LEA|1 +1 Cuombajj Witches|ARN|1 +1 Cyclone|ARN|1 +1 Dancing Scimitar|ARN|1 +1 Dark Ritual|LEA|1 +1 Demonic Hordes|LEA|1 +1 Demonic Tutor|LEA|1 +1 Desert Twister|ARN|1 +1 Detonate|ATQ|1 +1 Diamond Valley|ARN|1 +1 Dingus Egg|LEA|1 +1 Disenchant|LEA|1 +1 Disharmony|LEG|1 +1 Disintegrate|LEA|1 +1 Disrupting Scepter|LEA|1 +1 Divine Offering|LEG|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Drop of Honey|ARN|1 +1 Dwarven Warriors|LEA|1 +1 Earthquake|LEA|1 +4 Elephant Graveyard|ARN|1 +1 Erg Raiders|ARN|1 +1 Erhnam Djinn|ARN|1 +1 Eureka|LEG|1 +1 Eye for an Eye|ARN|1 +1 Fallen Angel|LEG|1 +1 Falling Star|LEG|1 +1 Fastbond|LEA|1 +1 Fellwar Stone|DRK|1 +2 Field of Dreams|LEG|1 +1 Fire Elemental|LEA|1 +2 Fireball|LEA|1 +1 Firestorm Phoenix|LEG|1 +1 Fissure|DRK|1 +1 Flying Carpet|ARN|1 +1 Force of Nature|LEA|1 +1 Forcefield|LEA|1 +1 Fork|LEA|1 +1 Gaea's Liege|LEA|1 +1 Gate to Phyrexia|ATQ|1 +1 Gauntlet of Might|LEA|1 +1 Giant Growth|LEA|1 +1 Granite Gargoyle|LEA|1 +1 Gravity Sphere|LEG|1 +1 Greed|LEG|1 +1 Green Mana Battery|LEG|1 +1 Guardian Beast|ARN|1 +1 Hazezon Tamar|LEG|1 +1 Healing Salve|LEA|1 +1 Hell's Caretaker|LEG|1 +1 Hellfire|LEG|1 +1 Howl from Beyond|LEA|1 +2 Howling Mine|LEA|1 +1 Hurkyl's Recall|ATQ|1 +1 Hurricane|LEA|1 +1 Hypnotic Specter|LEA|1 +1 Ice Storm|LEA|1 +1 Icy Manipulator|LEA|1 +1 Imprison|LEG|1 +1 Inferno|DRK|1 +1 Instill Energy|LEA|1 +1 Invoke Prejudice|LEG|1 +1 Island of Wak-Wak|ARN|1 +1 Island Sanctuary|LEA|1 +1 Ivory Tower|ATQ|1 +1 Jade Monolith|LEA|1 +1 Jade Statue|LEA|1 +1 Jalum Tome|ATQ|1 +1 Jandor's Saddlebags|ARN|1 +1 Jayemdae Tome|LEA|1 +1 Jihad|ARN|1 +1 Juggernaut|LEA|1 +1 Karakas|LEG|1 +1 King Suleiman|ARN|1 +2 Kismet|LEG|1 +1 Knowledge Vault|LEG|1 +1 Kudzu|LEA|1 +1 Lance|LEA|1 +1 Land Equilibrium|LEG|1 +1 Land Tax|LEG|1 +1 Land's Edge|LEG|1 +1 Ley Druid|LEA|1 +1 Library of Alexandria|ARN|1 +1 Library of Leng|LEA|1 +1 Lich|LEA|1 +1 Life Chisel|LEG|1 +1 Lightning Bolt|LEA|1 +1 Living Artifact|LEA|1 +1 Living Lands|LEA|1 +1 Living Plane|LEG|1 +1 Llanowar Elves|LEA|1 +1 Lord of the Pit|LEA|1 +1 Lure|LEA|1 +1 Mahamoti Djinn|LEA|1 +1 Mana Drain|LEG|1 +2 Mana Flare|LEA|1 +1 Mana Short|LEA|1 +1 Mana Vault|LEA|1 +1 Mana Vortex|DRK|1 +1 Manabarbs|LEA|1 +1 Martyrs of Korlis|ATQ|1 +1 Master of the Hunt|LEG|1 +1 Maze of Ith|DRK|1 +1 Meekstone|LEA|1 +1 Mesa Pegasus|LEA|1 +2 Millstone|ATQ|1 +1 Mind Twist|LEA|1 +2 Mirror Universe|LEG|1 +4 Mishra's Factory|ATQ|1 +1 Mishra's Workshop|ATQ|1 +1 Moat|LEG|1 +1 Mox Emerald|LEA|1 +1 Mox Jet|LEA|1 +1 Mox Pearl|LEA|1 +1 Mox Ruby|LEA|1 +1 Mox Sapphire|LEA|1 +1 Nether Shadow|LEA|1 +1 Nether Void|LEG|1 +1 Nettling Imp|LEA|1 +1 Nevinyrral's Disk|LEA|1 +1 Nightmare|LEA|1 +1 North Star|LEG|1 +1 Obsianus Golem|LEA|1 +1 Old Man of the Sea|ARN|1 +1 Orcish Artillery|LEA|1 +1 Orcish Oriflamme|LEA|1 +1 Oubliette|ARN|1 +1 Paralyze|LEA|1 +1 Pendelhaven|LEG|1 +1 Personal Incarnation|LEA|1 +1 Pestilence|LEA|1 +1 Petra Sphinx|LEG|1 +1 Phantasmal Forces|LEA|1 +1 Phantom Monster|LEA|1 +1 Pirate Ship|LEA|1 +1 Plateau|LEA|1 +1 Power Artifact|ATQ|1 +1 Power Sink|LEA|1 +1 Power Surge|LEA|1 +1 Preacher|DRK|1 +1 Prodigal Sorcerer|LEA|1 +1 Psionic Blast|LEA|1 +1 Pyrotechnics|LEG|1 +1 Raging River|LEA|1 +1 Rasputin Dreamweaver|LEG|1 +1 Recall|LEG|1 +1 Red Mana Battery|LEG|1 +1 Regrowth|LEA|1 +1 Relic Barrier|LEG|1 +1 Repentant Blacksmith|ARN|1 +1 Resurrection|LEA|1 +1 Reverse Damage|LEA|1 +1 Righteousness|LEA|1 +1 Roc of Kher Ridges|LEA|1 +1 Rocket Launcher|ATQ|1 +1 Royal Assassin|LEA|1 +1 Rukh Egg|ARN|1 +1 Savannah|LEA|1 +1 Savannah Lions|LEA|1 +1 Scavenger Folk|DRK|1 +1 Scrubland|LEA|1 +1 Sedge Troll|LEA|1 +1 Sengir Vampire|LEA|1 +1 Serendib Djinn|ARN|1 +1 Serendib Efreet|ARN|1 +1 Serpent Generator|LEG|1 +1 Serra Angel|LEA|1 +1 Shahrazad|ARN|1 +1 Shatter|LEA|1 +1 Shatterstorm|ATQ|1 +1 Shivan Dragon|LEA|1 +1 Sindbad|ARN|1 +1 Singing Tree|ARN|1 +1 Sinkhole|LEA|1 +1 Smoke|LEA|1 +1 Sol Ring|LEA|1 +1 Sorceress Queen|ARN|1 +1 Spectral Cloak|LEG|1 +1 Spell Blast|LEA|1 +1 Spirit Link|LEG|1 +1 Standing Stones|DRK|1 +2 Stasis|LEA|1 +1 Steal Artifact|LEA|1 +1 Stone Giant|LEA|1 +1 Stone Rain|LEA|1 +1 Storm World|LEG|1 +1 Stream of Life|LEA|1 +4 Strip Mine|ATQ|1 +1 Su-Chi|ATQ|1 +1 Sword of the Ages|LEG|1 +1 Swords to Plowshares|LEA|1 +1 Sylvan Library|LEG|1 +1 Taiga|LEA|1 +1 Tawnos's Coffin|ATQ|1 +1 Telekinesis|LEG|1 +1 Terror|LEA|1 +1 Tetravus|ATQ|1 +1 Tetsuo Umezawa|LEG|1 +1 The Abyss|LEG|1 +1 The Hive|LEA|1 +1 The Rack|ATQ|1 +1 The Tabernacle at Pendrell Vale|LEG|1 +1 The Wretched|LEG|1 +1 Thicket Basilisk|LEA|1 +1 Thunder Spirit|LEG|1 +1 Timber Wolves|LEA|1 +1 Time Elemental|LEG|1 +1 Time Vault|LEA|1 +1 Time Walk|LEA|1 +1 Timetwister|LEA|1 +1 Titania's Song|ATQ|1 +1 Tranquility|LEA|1 +1 Transmute Artifact|ATQ|1 +1 Triassic Egg|LEG|1 +1 Triskelion|ATQ|1 +1 Tropical Island|LEA|1 +1 Tundra|LEA|1 +1 Tundra Wolves|LEG|1 +2 Twiddle|LEA|1 +1 Two-Headed Giant of Foriys|LEA|1 +1 Underground Sea|LEA|1 +2 Underworld Dreams|LEG|1 +1 Unholy Strength|LEA|1 +1 Unsummon|LEA|1 +1 Untamed Wilds|LEG|1 +4 Urza's Mine|ATQ|1 +4 Urza's Power Plant|ATQ|1 +4 Urza's Tower|ATQ|1 +1 Uthden Troll|LEA|1 +2 Verduran Enchantress|LEA|1 +1 Vesuvan Doppelganger|LEA|1 +1 Veteran Bodyguard|LEA|1 +1 Volcanic Island|LEB|1 +1 Wall of Swords|LEA|1 +4 War Elephant|ARN|1 +4 War Mammoth|LEA|1 +1 Wheel of Fortune|LEA|1 +1 White Knight|LEA|1 +1 White Mana Battery|LEG|1 +1 Wild Growth|LEA|1 +1 Will-o'-the-Wisp|LEA|1 +2 Winds of Change|LEG|1 +1 Winter Blast|LEG|1 +1 Winter Orb|LEA|1 +1 Wrath of God|LEA|1 +1 Xenic Poltergeist|ATQ|1 +1 Yawgmoth Demon|ATQ|1 +1 Ydwen Efreet|ARN|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/cube/Old School Classically Trained - The First Five (Cube Cobra).dck b/forge-gui/res/cube/Old School Classically Trained - The First Five (Cube Cobra).dck new file mode 100644 index 00000000000..bf2eac642b2 --- /dev/null +++ b/forge-gui/res/cube/Old School Classically Trained - The First Five (Cube Cobra).dck @@ -0,0 +1,460 @@ +[metadata] +Name=Old School Classically Trained - The First Five (Cube Cobra) +[Avatar] + +[Main] +1 Abu Ja'far|ARN|1 +1 Abyssal Specter|ICE|1 +1 Adarkar Wastes|ICE|1 +1 Adun Oakenshield|LEG|1 +1 Advance Scout|TMP|1 +1 Aeolipile|FEM|1 +1 Afterlife|MIR|1 +1 Aftershock|TMP|1 +1 Air Elemental|LEA|1 +1 Ali from Cairo|ARN|1 +1 All Hallow's Eve|LEG|1 +1 Altar of Dementia|TMP|1 +1 Anarchist|EXO|1 +1 Ancient Tomb|TMP|1 +1 Angelic Renewal|WTH|1 +1 Animate Dead|LEA|1 +1 Apprentice Wizard|DRK|1 +1 Arcane Denial|ALL|1 +1 Argivian Archaeologist|ATQ|1 +1 Army of Allah|ARN|1 +1 Ashes to Ashes|DRK|1 +1 Ashnod's Altar|ATQ|1 +1 Asmira, Holy Avenger|MIR|1 +1 Autumn Willow|HML|1 +1 Avenging Angel|TMP|1 +1 Avoid Fate|LEG|1 +1 Bad Moon|LEA|1 +1 Bad River|MIR|1 +1 Balduvian Horde|ALL|1 +1 Ball Lightning|DRK|1 +1 Basal Thrull|FEM|1 +1 Berserk|LEA|1 +1 Birds of Paradise|LEA|1 +1 Black Knight|LEA|1 +1 Black Vise|LEA|1 +1 Blessing|LEA|1 +1 Blinking Spirit|ICE|1 +1 Blood Lust|LEG|1 +1 Bogardan Firefiend|WTH|1 +1 Bone Harvest|MIR|1 +1 Boomerang|LEG|1 +1 Braingeyser|LEA|1 +1 Brainstorm|ICE|1 +1 Breeding Pit|FEM|1 +1 Broken Visage|HML|1 +1 Brushland|ICE|1 +1 Buried Alive|WTH|1 +1 Caldera Lake|TMP|1 +1 Call of the Wild|WTH|1 +1 Canopy Dragon|MIR|1 +1 Capsize|TMP|1 +1 Carnophage|EXO|1 +1 Cataclysm|EXO|1 +1 Caverns of Despair|LEG|1 +1 Chain Lightning|LEG|1 +1 Chaosphere|MIR|1 +1 Circle of Despair|MIR|1 +1 City of Brass|ARN|1 +1 Clone|LEA|1 +1 Cloud Elemental|VIS|1 +1 Cockatrice|LEA|1 +1 Coffin Queen|TMP|1 +1 Concordant Crossroads|LEG|1 +1 Cone of Flame|WTH|1 +1 Constant Mists|STH|1 +1 Control Magic|LEA|1 +1 Copy Artifact|LEA|1 +1 Coral Atoll|VIS|1 +1 Corpse Dance|TMP|1 +1 Counterspell|LEA|1 +1 Crash of Rhinos|MIR|1 +1 Creeping Mold|VIS|1 +1 Crumble|ATQ|1 +1 Crusade|LEA|1 +1 Crypt Rats|VIS|1 +1 Culling the Weak|EXO|1 +1 Cuombajj Witches|ARN|1 +1 Curiosity|EXO|1 +1 Dance of the Dead|ICE|1 +1 Dark Ritual|LEA|1 +1 Deadshot|TMP|1 +1 Death Stroke|STH|1 +1 Debt of Loyalty|WTH|1 +1 Demonic Hordes|LEA|1 +1 Demonic Tutor|LEA|1 +1 Dense Foliage|WTH|1 +1 Desert Twister|ARN|1 +1 Desertion|VIS|1 +1 Diabolic Edict|TMP|1 +1 Diabolic Vision|ICE|1 +1 Dirtcowl Wurm|TMP|1 +1 Disenchant|LEA|1 +1 Disharmony|LEG|1 +1 Dismiss|TMP|1 +1 Disrupt|WTH|1 +1 Dissipate|MIR|1 +1 Dragon Whelp|LEA|1 +1 Drain Life|LEA|1 +1 Dream Cache|MIR|1 +1 Dregs of Sorrow|TMP|1 +1 Dwarven Hold|FEM|1 +1 Earthcraft|TMP|1 +1 Earthquake|LEA|1 +1 Eladamri, Lord of Leaves|TMP|1 +1 Elder Druid|ICE|1 +1 Elves of Deep Shadow|DRK|1 +1 Elvish Fury|TMP|1 +1 Elvish Spirit Guide|ALL|1 +1 Empyrial Armor|WTH|1 +1 Endless Cockroaches|POR|1 +1 Enduring Renewal|ICE|1 +1 Enlightened Tutor|MIR|1 +1 Erg Raiders|ARN|1 +1 Erhnam Djinn|ARN|1 +1 Erratic Portal|EXO|1 +1 Evacuation|STH|1 +1 Evincar's Justice|TMP|1 +1 Exhaustion|USG|1 +1 Extinction|TMP|1 +1 Fallen Angel|LEG|1 +1 Falling Star|LEG|1 +1 Fatal Blow|WTH|1 +1 Favorable Destiny|MIR|1 +1 Fellwar Stone|DRK|1 +1 Field of Dreams|LEG|1 +1 Field of Souls|TMP|1 +1 Fire Covenant|ICE|1 +1 Fire Imp|POR|1 +1 Fire Whip|WTH|1 +1 Fireball|LEA|1 +1 Fireblast|VIS|1 +1 Fireslinger|TMP|1 +1 Fissure|DRK|1 +1 Flash Counter|LEG|1 +1 Flickering Ward|TMP|1 +1 Fling|STH|1 +1 Flood Plain|MIR|1 +1 Flying Men|ARN|1 +1 Forbid|EXO|1 +1 Force of Nature|LEA|1 +1 Force Spike|LEG|1 +1 Forcefield|LEA|1 +1 Fork|LEA|1 +1 Foul Imp|STH|1 +1 Frenetic Efreet|MIR|1 +1 Funeral Charm|VIS|1 +1 Furnace of Rath|TMP|1 +1 Fyndhorn Elder|ICE|1 +1 Fyndhorn Elves|ICE|1 +1 Gaea's Touch|DRK|1 +1 Gallantry|TMP|1 +1 Gemstone Mine|WTH|1 +1 Gerrard's Battle Cry|TMP|1 +1 Ghost Ship|DRK|1 +1 Giant Growth|LEA|1 +1 Giant Strength|LEG|1 +1 Goblin Balloon Brigade|LEA|1 +1 Goblin Bombardment|TMP|1 +1 Goblin Bully|POR|1 +1 Goblin Caves|DRK|1 +1 Goblin Grenade|FEM|1 +1 Goblin King|LEA|1 +1 Goblin Matron|USG|1 +1 Goblin Recruiter|VIS|1 +1 Goblin Scouts|MIR|1 +1 Goblin Shrine|DRK|1 +1 Goblin Soothsayer|MIR|1 +1 Goblin Warrens|FEM|1 +1 Goblin Wizard|DRK|1 +1 Grasslands|MIR|1 +1 Gravedigger|TMP|1 +1 Greed|LEG|1 +1 Guided Strike|WTH|1 +1 Guiding Spirit|VIS|1 +1 Gwendlyn Di Corci|LEG|1 +1 Hammer of Bogardan|MIR|1 +1 Hand of Justice|FEM|1 +1 Harbinger of Night|MIR|1 +1 Harrow|TMP|1 +1 Hazezon Tamar|LEG|1 +1 Hearth Charm|VIS|1 +1 Hecatomb|ICE|1 +1 Hell's Caretaker|LEG|1 +1 Hellfire|LEG|1 +1 Helm of Possession|TMP|1 +1 Howling Mine|LEA|1 +1 Hulking Goblin|POR|1 +1 Hurricane|LEA|1 +1 Hymn to Tourach|FEM|1 +1 Hypnotic Specter|LEA|1 +1 Icatian Javelineers|FEM|1 +1 Icatian Town|FEM|1 +1 Icy Manipulator|LEA|1 +1 Impulse|VIS|1 +1 Incinerate|ICE|1 +1 Infantry Veteran|VIS|1 +1 Infernal Contract|MIR|1 +1 Inferno|DRK|1 +1 Inheritance|ALL|1 +1 Initiates of the Ebon Hand|FEM|1 +1 Inspiration|VIS|1 +1 Interdict|TMP|1 +1 Intuition|TMP|1 +1 Island Sanctuary|LEA|1 +1 Ivory Tower|ATQ|1 +1 Jackal Pup|TMP|1 +1 Jamuraan Lion|VIS|1 +1 Jayemdae Tome|LEA|1 +1 Juggernaut|LEA|1 +1 Jungle Lion|POR|1 +1 Juniper Order Druid|ICE|1 +1 Karplusan Forest|ICE|1 +1 Killer Bees|LEG|1 +1 Kird Ape|ARN|1 +1 Kjeldoran Outpost|ALL|1 +1 Kjeldoran Royal Guard|ICE|1 +1 Knight of Dawn|TMP|1 +1 Krakilin|TMP|1 +1 Krovikan Sorcerer|ICE|1 +1 Lady Evangela|LEG|1 +1 Lake of the Dead|ALL|1 +1 Land Tax|LEG|1 +1 Legacy's Allure|TMP|1 +1 Ley Druid|LEA|1 +1 Liege of the Hollows|WTH|1 +1 Lightning Blast|TMP|1 +1 Lightning Bolt|LEA|1 +1 Lightning Elemental|TMP|1 +1 Living Death|TMP|1 +1 Llanowar Behemoth|WTH|1 +1 Llanowar Elves|LEA|1 +1 Longbow Archer|VIS|1 +1 Lord of the Pit|LEA|1 +1 Lotus Vale|WTH|1 +1 Mahamoti Djinn|LEA|1 +1 Man-o'-War|VIS|1 +1 Mana Leak|STH|1 +1 Mana Prism|MIR|1 +1 Manakin|TMP|1 +1 Master Decoy|TMP|1 +1 Master of the Hunt|LEG|1 +1 Maze of Ith|DRK|1 +1 Meddle|MIR|1 +1 Meditate|TMP|1 +1 Meekstone|LEA|1 +1 Memory Lapse|HML|1 +1 Merchant Scroll|HML|1 +1 Merfolk Looter|EXO|1 +1 Mightstone|ATQ|1 +1 Millstone|ATQ|1 +1 Mind Stone|WTH|1 +1 Minion of the Wastes|TMP|1 +1 Miraculous Recovery|VIS|1 +1 Mirri's Guile|TMP|1 +1 Mishra's Factory|ATQ|1 +1 Mist Dragon|MIR|1 +1 Mistmoon Griffin|WTH|1 +1 Mogg Conscripts|TMP|1 +1 Mogg Fanatic|TMP|1 +1 Mogg Flunkies|STH|1 +1 Mogg Infestation|STH|1 +1 Mogg Maniac|STH|1 +1 Mogg Raider|TMP|1 +1 Mongrel Pack|TMP|1 +1 Mountain Valley|MIR|1 +1 Mulch|STH|1 +1 Mystical Tutor|MIR|1 +1 Natural Order|VIS|1 +1 Nature's Lore|ICE|1 +1 Nebuchadnezzar|LEG|1 +1 Necromancy|VIS|1 +1 Nekrataal|VIS|1 +1 Nevinyrral's Disk|LEA|1 +1 Old Man of the Sea|ARN|1 +1 Omen|POR|1 +1 Ophidian|WTH|1 +1 Orcish Lumberjack|ICE|1 +1 Orcish Oriflamme|LEA|1 +1 Order of Leitbur|FEM|1 +1 Order of the Ebon Hand|FEM|1 +1 Orim, Samite Healer|TMP|1 +1 Oubliette|ARN|1 +1 Overgrowth|STH|1 +1 Overrun|TMP|1 +1 Pacifism|MIR|1 +1 Peacekeeper|WTH|1 +1 Pendelhaven|LEG|1 +1 Pestilence|LEA|1 +1 Petra Sphinx|LEG|1 +1 Phantom Warrior|WTH|1 +1 Phyrexian Furnace|WTH|1 +1 Pillage|ALL|1 +1 Pine Barrens|TMP|1 +1 Pit Spawn|EXO|1 +1 Portent|ICE|1 +1 Power Sink|LEA|1 +1 Preacher|DRK|1 +1 Prodigal Sorcerer|LEA|1 +1 Propaganda|TMP|1 +1 Provoke|STH|1 +1 Psionic Blast|LEA|1 +1 Puppet Strings|TMP|1 +1 Pyroclasm|ICE|1 +1 Pyrokinesis|ALL|1 +1 Quirion Elves|MIR|1 +1 Quirion Ranger|VIS|1 +1 Raging Goblin|EXO|1 +1 Rainbow Efreet|VIS|1 +1 Rampant Growth|MIR|1 +1 Rasputin Dreamweaver|LEG|1 +1 Reanimate|TMP|1 +1 Rebirth|LEG|1 +1 Reconnaissance|EXO|1 +1 Recycle|TMP|1 +1 Reflecting Pool|TMP|1 +1 Regrowth|LEA|1 +1 Relearn|WTH|1 +1 Relentless Assault|VIS|1 +1 Remove Soul|LEG|1 +1 Repentance|TMP|1 +1 Reprisal|ALL|1 +1 Resurrection|LEA|1 +1 Retribution of the Meek|VIS|1 +1 Revered Unicorn|WTH|1 +1 River Boa|VIS|1 +1 Rocky Tar Pit|MIR|1 +1 Rolling Thunder|TMP|1 +1 Roots|HML|1 +1 Royal Assassin|LEA|1 +1 Rubinia Soulsinger|LEG|1 +1 Rukh Egg|ARN|1 +1 Sacred Mesa|MIR|1 +1 Sage Owl|WTH|1 +1 Salt Flats|TMP|1 +1 Sarcomancy|TMP|1 +1 Savage Twister|MIR|1 +1 Savannah Lions|LEA|1 +1 Scabland|TMP|1 +1 School of the Unseen|ALL|1 +1 Scrivener|EXO|1 +1 Scroll Rack|TMP|1 +1 Sea Scryer|MIR|1 +1 Sedge Troll|LEA|1 +1 Seeker of Skybreak|TMP|1 +1 Seething Anger|STH|1 +1 Selenia, Dark Angel|TMP|1 +1 Sengir Autocrat|HML|1 +1 Sengir Vampire|LEA|1 +1 Seraph|ICE|1 +1 Serendib Djinn|ARN|1 +1 Serendib Efreet|ARN|1 +1 Serra Angel|LEA|1 +1 Serrated Arrows|HML|1 +1 Shallow Grave|MIR|1 +1 Shivan Dragon|LEA|1 +1 Shock|STH|1 +1 Sidar Jabari|MIR|1 +1 Silver Wyvern|STH|1 +1 Sisay's Ring|VIS|1 +1 Skulking Ghost|MIR|1 +1 Skyshroud Elf|TMP|1 +1 Skyshroud Forest|TMP|1 +1 Skyshroud Ranger|TMP|1 +1 Slaughter|EXO|1 +1 Smite|STH|1 +1 Smoke|LEA|1 +1 Sol Grail|ALL|1 +1 Soldevi Adnate|ALL|1 +1 Soltari Champion|STH|1 +1 Soltari Guerrillas|TMP|1 +1 Sorceress Queen|ARN|1 +1 Soul Exchange|FEM|1 +1 Soul Warden|EXO|1 +1 Spellshock|EXO|1 +1 Spike Hatcher|EXO|1 +1 Spike Weaver|EXO|1 +1 Spinal Graft|TMP|1 +1 Spirit Link|LEG|1 +1 Spirit Mirror|TMP|1 +1 Spirit of the Night|MIR|1 +1 Spitting Hydra|STH|1 +1 Spontaneous Combustion|TMP|1 +1 Stampeding Wildebeests|VIS|1 +1 Starke of Rath|TMP|1 +1 Staunch Defenders|TMP|1 +1 Stormbind|ICE|1 +1 Striped Bears|WTH|1 +1 Stronghold Assassin|STH|1 +1 Su-Chi|ATQ|1 +1 Sulfurous Springs|ICE|1 +1 Survival of the Fittest|EXO|1 +1 Swords to Plowshares|LEA|1 +1 Tawnos's Coffin|ATQ|1 +1 Telekinesis|LEG|1 +1 Temper|STH|1 +1 Terror|LEA|1 +1 Thawing Glaciers|ALL|1 +1 Thunder Spirit|LEG|1 +1 Thunderbolt|WTH|1 +1 Thundermare|WTH|1 +1 Time Elemental|LEG|1 +1 Time Warp|TMP|1 +1 Tinder Wall|ICE|1 +1 Tortured Existence|STH|1 +1 Tracker|DRK|1 +1 Tradewind Rider|TMP|1 +1 Treasure Trove|EXO|1 +1 Triskelion|ATQ|1 +1 Twiddle|LEA|1 +1 Underground River|ICE|1 +1 Undiscovered Paradise|VIS|1 +1 Undo|VIS|1 +1 Unstable Mutation|ARN|1 +1 Unsummon|LEA|1 +1 Untamed Wilds|LEG|1 +1 Venerable Monk|STH|1 +1 Vengeance|7ED|1 +1 Verdant Force|TMP|1 +1 Vesuvan Doppelganger|LEA|1 +1 Vhati il-Dal|TMP|1 +1 Wall of Air|LEA|1 +1 Wall of Blossoms|STH|1 +1 Wall of Essence|STH|1 +1 Wall of Roots|MIR|1 +1 Wall of Swords|LEA|1 +1 Wall of Tears|STH|1 +1 Ward of Lights|MIR|1 +1 Warrior Angel|STH|1 +1 Waterspout Djinn|VIS|1 +1 Whirling Dervish|LEG|1 +1 Whispers of the Muse|TMP|1 +1 White Knight|LEA|1 +1 Wild Growth|LEA|1 +1 Will-o'-the-Wisp|LEA|1 +1 Winds of Rath|TMP|1 +1 Witch Hunter|DRK|1 +1 Withering Boon|MIR|1 +1 Wood Elves|EXO|1 +1 Wood Sage|TMP|1 +1 Word of Command|LEA|1 +1 Worldly Tutor|MIR|1 +1 Wrath of God|LEA|1 +1 Youthful Knight|STH|1 +1 Zhalfirin Commander|MIR|1 +1 Zuran Orb|ICE|1 +[Sideboard] + +[Planes] + +[Schemes] + +[Conspiracy] + +[Dungeon] + diff --git a/forge-gui/res/draft/Old School 93-94 (540 Cards, Cube Cobra).draft b/forge-gui/res/draft/Old School 93-94 (540 Cards, Cube Cobra).draft new file mode 100644 index 00000000000..53cd7976cb1 --- /dev/null +++ b/forge-gui/res/draft/Old School 93-94 (540 Cards, Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School 93-94 (540 Cards, Cube Cobra) +DeckFile:Old School 93-94 (540 Cards, Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).draft b/forge-gui/res/draft/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).draft new file mode 100644 index 00000000000..a65d8f28ea4 --- /dev/null +++ b/forge-gui/res/draft/Old School 93-94 Craig Wescoe's Cube (Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School 93-94 Craig Wescoe's Cube (Cube Cobra) +DeckFile:Old School 93-94 Craig Wescoe's Cube (Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 93-94 Magic Full Set 878 Card Cube.draft b/forge-gui/res/draft/Old School 93-94 Magic Full Set 878 Card Cube.draft new file mode 100644 index 00000000000..374f62b5eed --- /dev/null +++ b/forge-gui/res/draft/Old School 93-94 Magic Full Set 878 Card Cube.draft @@ -0,0 +1,6 @@ +Name:Old School 93-94 Magic Full Set 878 Card Cube +DeckFile:Old School 93-94 Magic Full Set 878 Card Cube +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 93-94 Magic Powered 360 Card Cube.draft b/forge-gui/res/draft/Old School 93-94 Magic Powered 360 Card Cube.draft new file mode 100644 index 00000000000..58d9a7c8d5b --- /dev/null +++ b/forge-gui/res/draft/Old School 93-94 Magic Powered 360 Card Cube.draft @@ -0,0 +1,6 @@ +Name:Old School 93-94 Magic Powered 360 Card Cube +DeckFile:Old School 93-94 Magic Powered 360 Card Cube +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 93-94 Magic Unpowered 400 Card Cube.draft b/forge-gui/res/draft/Old School 93-94 Magic Unpowered 400 Card Cube.draft new file mode 100644 index 00000000000..13c0d1870ed --- /dev/null +++ b/forge-gui/res/draft/Old School 93-94 Magic Unpowered 400 Card Cube.draft @@ -0,0 +1,6 @@ +Name:Old School 93-94 Magic Unpowered 400 Card Cube +DeckFile:Old School 93-94 Magic Unpowered 400 Card Cube +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 93-95 (360 Cards, Cube Cobra).draft b/forge-gui/res/draft/Old School 93-95 (360 Cards, Cube Cobra).draft new file mode 100644 index 00000000000..14504153e8b --- /dev/null +++ b/forge-gui/res/draft/Old School 93-95 (360 Cards, Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School 93-95 (360 Cards, Cube Cobra) +DeckFile:Old School 93-95 (360 Cards, Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School 98 (350 Cards, Cube Cobra).draft b/forge-gui/res/draft/Old School 98 (350 Cards, Cube Cobra).draft new file mode 100644 index 00000000000..1f816e37798 --- /dev/null +++ b/forge-gui/res/draft/Old School 98 (350 Cards, Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School 98 (350 Cards, Cube Cobra) +DeckFile:Old School 98 (350 Cards, Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).draft b/forge-gui/res/draft/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).draft new file mode 100644 index 00000000000..ecf933dcb33 --- /dev/null +++ b/forge-gui/res/draft/Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra) +DeckFile:Old School Alpha, Beta and 4 Horsemen (360 Cards, Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Old School Classically Trained - The First Five (Cube Cobra).draft b/forge-gui/res/draft/Old School Classically Trained - The First Five (Cube Cobra).draft new file mode 100644 index 00000000000..600ead120b4 --- /dev/null +++ b/forge-gui/res/draft/Old School Classically Trained - The First Five (Cube Cobra).draft @@ -0,0 +1,6 @@ +Name:Old School Classically Trained - The First Five (Cube Cobra) +DeckFile:Old School Classically Trained - The First Five (Cube Cobra) +Singleton:True + +Booster: 15 Any +NumPacks: 3 diff --git a/forge-gui/res/draft/Oldschool 93-94 Magic Full Set 878 Card Cube.draft b/forge-gui/res/draft/Oldschool 93-94 Magic Full Set 878 Card Cube.draft deleted file mode 100644 index 4f618419cbf..00000000000 --- a/forge-gui/res/draft/Oldschool 93-94 Magic Full Set 878 Card Cube.draft +++ /dev/null @@ -1,6 +0,0 @@ -Name:Oldschool 93-94 Magic Full Set 878 Card Cube -DeckFile:Oldschool 93-94 Magic Full Set 878 Card Cube -Singleton:True - -Booster: 15 Any -NumPacks: 3 diff --git a/forge-gui/res/draft/Oldschool 93-94 Magic Powered 360 Card Cube.draft b/forge-gui/res/draft/Oldschool 93-94 Magic Powered 360 Card Cube.draft deleted file mode 100644 index 27b1a457b8b..00000000000 --- a/forge-gui/res/draft/Oldschool 93-94 Magic Powered 360 Card Cube.draft +++ /dev/null @@ -1,6 +0,0 @@ -Name:Oldschool 93-94 Magic Powered 360 Card Cube -DeckFile:Oldschool 93-94 Magic Powered 360 Card Cube -Singleton:True - -Booster: 15 Any -NumPacks: 3 diff --git a/forge-gui/res/draft/Oldschool 93-94 Magic Unpowered 400 Card Cube.draft b/forge-gui/res/draft/Oldschool 93-94 Magic Unpowered 400 Card Cube.draft deleted file mode 100644 index ee6862659b1..00000000000 --- a/forge-gui/res/draft/Oldschool 93-94 Magic Unpowered 400 Card Cube.draft +++ /dev/null @@ -1,6 +0,0 @@ -Name:Oldschool 93-94 Magic Unpowered 400 Card Cube -DeckFile:Oldschool 93-94 Magic Unpowered 400 Card Cube -Singleton:True - -Booster: 15 Any -NumPacks: 3 diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index d231090b557..c7a023e0be1 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -58,7 +58,7 @@ cbpSelectLanguage=Sprache nlSelectLanguage=Wähle Sprache (Ist noch in Arbeit und nur teilweise umgesetzt.) (Neustart ist erforderlich.) cbRemoveSmall=Entferne kleine Kreaturen cbCardBased=Nutze kartenabhängige Deckerstellung -cbSingletons=Einzelkarten Modus +cbSingletons=Einzelkarten-Modus cbRemoveArtifacts=Entferne Artefakte cbAnte=Spiele um Ante cbAnteMatchRarity=Passe Ante-Seltenheit an @@ -71,7 +71,7 @@ cbLoadArchivedFormats=Aktiviere archivierte Formate cbWorkshopSyntax=Workshop Syntax-Checker cbEnforceDeckLegality=Deckkonformität cbSideboardForAI=Sideboard für Mensch/KI -cbPerformanceMode=Performance Modus +cbPerformanceMode=Performance-Modus cbFilteredHands=Alternative Starthand cbImageFetcher=Lade automatisch fehlende Kartenbilder cbCloneImgSource=Klone zeigen eigenes Kartenbild @@ -114,7 +114,7 @@ cbpDefaultFontSize=Standard Schriftgröße cbpCardArtFormat=Kartenbildformat cbpSoundSets=Sound-Set cbpMusicSets=Musik-Set -cbpAiProfiles=KI Persönlichkeit +cbpAiProfiles=KI-Persönlichkeit cbpStackAdditions=Nachricht bei Stapeländerung cbpDisplayCurrentCardColors=Zeige detaillierte Kartenfarben cbpAutoYieldMode=Automatische Bestätigung @@ -587,7 +587,7 @@ lblQuestModeChallenges=Quest-Modus: Herausforderungen lblWhichChallenge=Welche Herausforderung nimmst du an? #VSubmenuQuestDraft.java lblTournaments=Turnier -lblQuestModeDraftTournament=Quest-Modus: Draft Turnier +lblQuestModeDraftTournament=Quest-Modus: Draft-Turnier lblSelectaTournament=Wähle ein Turnier lblNoTournaments=Es sind derzeit keine Turniere verfügbar. btnEditDeck=Bearbeite Deck @@ -905,7 +905,7 @@ lblfromdungeondeck=vom Gewölbedeck lbltoschemedeck=zum Komplottdeck lbltoplanardeck=zum Weltendeck lbltoconspiracydeck=zum Verschwörungsdeck -lbltodungeondeck=to dungeon deck +lbltodungeondeck=zum Gewölbe-Deck lblMove=Verschieben #VDock.java lblDock=Befehle @@ -1236,7 +1236,7 @@ lblCut=Ausschneiden lblCopy=Kopieren lblPaste=Einfügen #GameAction.java -lblAssigns=assigns: +lblAssigns=ordnet zu: #ListChooser.java lblSearch=Suche #InputBase.java @@ -1353,7 +1353,7 @@ lblLibrary=Bibliothek lblGraveyard=Friedhof lblAssignSectorCreature=Weise {0} einem Bereich zu lblChooseSectorEffect=Wähle Bereich -lblChooseRollIgnore=Choose a roll to ignore +lblChooseRollIgnore=Welchen Wurf ignorieren? lblTop=Oben drauf lblBottom=Unten drunter lblNColorManaFromCard={0} {1} Mana von {2} @@ -2048,7 +2048,7 @@ lblDoYouWantRevealYourHand=Möchtest du deine Handkarten offen vorzeigen? #RollDiceEffect.java lblPlayerRolledResult={0} würfelt {1} #RollPlanarDiceEffect.java -lblPlanarDiceResult=Planar dice result: {0} +lblPlanarDiceResult=Ergebnis Weltenwürfel: {0} #SacrificeEffect.java lblDoYouWantPayEcho=Möchtest du die Echokosten zahlen lblPayEcho=Zahle Echokosten diff --git a/forge-gui/res/tokenscripts/br_6_6_dragon_flying_menace_steal.txt b/forge-gui/res/tokenscripts/br_6_6_dragon_flying_menace_steal.txt new file mode 100644 index 00000000000..6bb4607aa7c --- /dev/null +++ b/forge-gui/res/tokenscripts/br_6_6_dragon_flying_menace_steal.txt @@ -0,0 +1,10 @@ +Name:Dragon +ManaCost:no cost +Types:Creature Dragon +Colors:red,black +PT:6/6 +K:Flying +K:Menace +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigGainControl | TriggerDescription$ Whenever this creature deals combat damage to a player, gain control of target artifact that player controls. +SVar:TrigGainControl:DB$ GainControl | ValidTgts$ Artifact.ControlledBy TriggeredTarget | NewController$ You +Oracle:Flying, menace\nWhenever this creature deals combat damage to a player, gain control of target artifact that player controls. \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java index 2789cb7b605..d23cb2c7f40 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java @@ -17,24 +17,25 @@ */ package forge.localinstance.properties; +import forge.gui.GuiBase; +import forge.util.FileUtil; + import java.io.File; import java.util.Collections; import java.util.Map; -import forge.gui.GuiBase; -import forge.util.FileUtil; - public final class ForgeConstants { - public static final String PATH_SEPARATOR = File.separator; - public static final String ASSETS_DIR = GuiBase.getInterface().getAssetsDir(); - public static final String PROFILE_FILE = ASSETS_DIR + "forge.profile.properties"; - public static final String PROFILE_TEMPLATE_FILE = PROFILE_FILE + ".example"; + public static final String PATH_SEPARATOR = File.separator; + public static final String ASSETS_DIR = GuiBase.getInterface().getAssetsDir(); + public static final String PROFILE_FILE = ASSETS_DIR + "forge.profile.properties"; + public static final String PROFILE_TEMPLATE_FILE = PROFILE_FILE + ".example"; - public static final String RES_DIR = ASSETS_DIR + "res" + PATH_SEPARATOR; - public static final String ADVENTURE_DIR = RES_DIR + "adventure" + PATH_SEPARATOR; - public static final String ADVENTURE_DEFAULT_PLANE_DIR = ADVENTURE_DIR + "Shandalar" + PATH_SEPARATOR; - public static final String LISTS_DIR = RES_DIR + "lists" + PATH_SEPARATOR; - public static final String SETLOOKUP_DIR = RES_DIR + "setlookup" + PATH_SEPARATOR; + public static final String RES_DIR = ASSETS_DIR + "res" + PATH_SEPARATOR; + public static final String ADVENTURE_DIR = RES_DIR + "adventure" + PATH_SEPARATOR; + public static final String ADVENTURE_DEFAULT_PLANE_DIR = ADVENTURE_DIR + "Shandalar" + PATH_SEPARATOR; + public static final String ADVENTURE_COMMON_DIR = ADVENTURE_DIR + "common" + PATH_SEPARATOR; + public static final String LISTS_DIR = RES_DIR + "lists" + PATH_SEPARATOR; + public static final String SETLOOKUP_DIR = RES_DIR + "setlookup" + PATH_SEPARATOR; public static final String KEYWORD_LIST_FILE = LISTS_DIR + "NonStackingKWList.txt"; public static final String TYPE_LIST_FILE = LISTS_DIR + "TypeLists.txt"; public static final String SPECIAL_CARD_ACHIEVEMENT_LIST_FILE = LISTS_DIR + "special-card-achievements.txt"; @@ -68,96 +69,96 @@ public final class ForgeConstants { public static final String NET_ARCHIVE_BLOCK_DECKS_LIST_FILE = LISTS_DIR + "net-decks-archive-block.txt"; - public static final String CHANGES_FILE = ASSETS_DIR + "README.txt"; - public static final String CHANGES_FILE_NO_RELEASE = ASSETS_DIR + "CHANGES.txt"; - public static final String LICENSE_FILE = ASSETS_DIR + "LICENSE.txt"; - public static final String README_FILE = ASSETS_DIR + "MANUAL.txt"; - public static final String HOWTO_FILE = RES_DIR + "howto.txt"; + public static final String CHANGES_FILE = ASSETS_DIR + "README.txt"; + public static final String CHANGES_FILE_NO_RELEASE = ASSETS_DIR + "CHANGES.txt"; + public static final String LICENSE_FILE = ASSETS_DIR + "LICENSE.txt"; + public static final String README_FILE = ASSETS_DIR + "MANUAL.txt"; + public static final String HOWTO_FILE = RES_DIR + "howto.txt"; - public static final String DRAFT_DIR = RES_DIR + "draft" + PATH_SEPARATOR; - public static final String DRAFT_RANKINGS_FILE = DRAFT_DIR + "rankings.txt"; - public static final String SEALED_DIR = RES_DIR + "sealed" + PATH_SEPARATOR; - public static final String CARD_DATA_DIR = RES_DIR + "cardsfolder" + PATH_SEPARATOR; - public static final String TOKEN_DATA_DIR = RES_DIR + "tokenscripts" + PATH_SEPARATOR; - public static final String EDITIONS_DIR = RES_DIR + "editions" + PATH_SEPARATOR; - public static final String BLOCK_DATA_DIR = RES_DIR + "blockdata" + PATH_SEPARATOR; - public static final String FORMATS_DATA_DIR = RES_DIR + "formats" + PATH_SEPARATOR; - public static final String DECK_CUBE_DIR = RES_DIR + "cube" + PATH_SEPARATOR; - public static final String AI_PROFILE_DIR = RES_DIR + "ai" + PATH_SEPARATOR; - public static final String SOUND_DIR = RES_DIR + "sound" + PATH_SEPARATOR; - public static final String MUSIC_DIR = RES_DIR + "music" + PATH_SEPARATOR; - public static final String ADVENTURE_MUSIC_DIR = ADVENTURE_DEFAULT_PLANE_DIR + "music" + PATH_SEPARATOR; - public static final String LANG_DIR = RES_DIR + "languages" + PATH_SEPARATOR; - public static final String EFFECTS_DIR = RES_DIR + "effects" + PATH_SEPARATOR; - public static final String PUZZLE_DIR = RES_DIR + "puzzle" + PATH_SEPARATOR; - public static final String TUTORIAL_DIR = RES_DIR + "tutorial" + PATH_SEPARATOR; - public static final String DECK_GEN_DIR = RES_DIR + "deckgendecks" + PATH_SEPARATOR; - public static final String GENETIC_AI_DECK_DIR = RES_DIR + "geneticaidecks" + PATH_SEPARATOR; + public static final String DRAFT_DIR = RES_DIR + "draft" + PATH_SEPARATOR; + public static final String DRAFT_RANKINGS_FILE = DRAFT_DIR + "rankings.txt"; + public static final String SEALED_DIR = RES_DIR + "sealed" + PATH_SEPARATOR; + public static final String CARD_DATA_DIR = RES_DIR + "cardsfolder" + PATH_SEPARATOR; + public static final String TOKEN_DATA_DIR = RES_DIR + "tokenscripts" + PATH_SEPARATOR; + public static final String EDITIONS_DIR = RES_DIR + "editions" + PATH_SEPARATOR; + public static final String BLOCK_DATA_DIR = RES_DIR + "blockdata" + PATH_SEPARATOR; + public static final String FORMATS_DATA_DIR = RES_DIR + "formats" + PATH_SEPARATOR; + public static final String DECK_CUBE_DIR = RES_DIR + "cube" + PATH_SEPARATOR; + public static final String AI_PROFILE_DIR = RES_DIR + "ai" + PATH_SEPARATOR; + public static final String SOUND_DIR = RES_DIR + "sound" + PATH_SEPARATOR; + public static final String MUSIC_DIR = RES_DIR + "music" + PATH_SEPARATOR; + public static final String ADVENTURE_MUSIC_DIR = ADVENTURE_DEFAULT_PLANE_DIR + "music" + PATH_SEPARATOR; + public static final String ADVENTURE_COMMON_MUSIC_DIR = ADVENTURE_COMMON_DIR + "music" + PATH_SEPARATOR; + public static final String LANG_DIR = RES_DIR + "languages" + PATH_SEPARATOR; + public static final String EFFECTS_DIR = RES_DIR + "effects" + PATH_SEPARATOR; + public static final String PUZZLE_DIR = RES_DIR + "puzzle" + PATH_SEPARATOR; + public static final String TUTORIAL_DIR = RES_DIR + "tutorial" + PATH_SEPARATOR; + public static final String DECK_GEN_DIR = RES_DIR + "deckgendecks" + PATH_SEPARATOR; + public static final String GENETIC_AI_DECK_DIR = RES_DIR + "geneticaidecks" + PATH_SEPARATOR; - private static final String QUEST_DIR = RES_DIR + "quest" + PATH_SEPARATOR; - public static final String QUEST_WORLD_DIR = QUEST_DIR + "world" + PATH_SEPARATOR; - public static final String QUEST_PRECON_DIR = QUEST_DIR + "precons" + PATH_SEPARATOR; - public static final String PRICES_BOOSTER_FILE = QUEST_DIR + "booster-prices.txt"; - public static final String BAZAAR_DIR = QUEST_DIR + "bazaar" + PATH_SEPARATOR; - public static final String BAZAAR_INDEX_FILE = BAZAAR_DIR + "index.xml"; - public static final String DEFAULT_DUELS_DIR = QUEST_DIR + "duels"; - public static final String DEFAULT_CHALLENGES_DIR = QUEST_DIR + "challenges"; - public static final String THEMES_DIR = QUEST_DIR + "themes"; + private static final String QUEST_DIR = RES_DIR + "quest" + PATH_SEPARATOR; + public static final String QUEST_WORLD_DIR = QUEST_DIR + "world" + PATH_SEPARATOR; + public static final String QUEST_PRECON_DIR = QUEST_DIR + "precons" + PATH_SEPARATOR; + public static final String PRICES_BOOSTER_FILE = QUEST_DIR + "booster-prices.txt"; + public static final String BAZAAR_DIR = QUEST_DIR + "bazaar" + PATH_SEPARATOR; + public static final String BAZAAR_INDEX_FILE = BAZAAR_DIR + "index.xml"; + public static final String DEFAULT_DUELS_DIR = QUEST_DIR + "duels"; + public static final String DEFAULT_CHALLENGES_DIR = QUEST_DIR + "challenges"; + public static final String THEMES_DIR = QUEST_DIR + "themes"; - private static final String CONQUEST_DIR = RES_DIR + "conquest" + PATH_SEPARATOR; - public static final String CONQUEST_PLANES_DIR = CONQUEST_DIR + "planes" + PATH_SEPARATOR; - - public static final String BASE_SKINS_DIR = RES_DIR + "skins" + PATH_SEPARATOR; - public static final String COMMON_FONTS_DIR = RES_DIR + "fonts" + PATH_SEPARATOR; - public static final String DEFAULT_SKINS_DIR = BASE_SKINS_DIR + "default" + PATH_SEPARATOR; + private static final String CONQUEST_DIR = RES_DIR + "conquest" + PATH_SEPARATOR; + public static final String CONQUEST_PLANES_DIR = CONQUEST_DIR + "planes" + PATH_SEPARATOR; + public static final String BASE_SKINS_DIR = RES_DIR + "skins" + PATH_SEPARATOR; + public static final String COMMON_FONTS_DIR = RES_DIR + "fonts" + PATH_SEPARATOR; + public static final String DEFAULT_SKINS_DIR = BASE_SKINS_DIR + "default" + PATH_SEPARATOR; //don't associate these skin files with a directory since skin directory will be determined later - public static final String SPRITE_ICONS_FILE = "sprite_icons.png"; - public static final String SPRITE_FOILS_FILE = "sprite_foils.png"; - public static final String SPRITE_OLD_FOILS_FILE = "sprite_old_foils.png"; - public static final String SPRITE_TROPHIES_FILE = "sprite_trophies.png"; - public static final String SPRITE_ABILITY_FILE = "sprite_ability.png"; - public static final String SPRITE_BORDER_FILE = "sprite_border.png"; - public static final String SPRITE_ADV_BUTTONS_FILE = "sprite_adv_buttons.png"; - public static final String SPRITE_BUTTONS_FILE = "sprite_buttons.png"; - public static final String SPRITE_DECKBOX_FILE = "sprite_deckbox.png"; - public static final String SPRITE_START_FILE = "sprite_start.png"; - public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png"; - public static final String SPRITE_PHYREXIAN_FILE = "sprite_phyrexian.png"; - public static final String SPRITE_CURSOR_FILE = "sprite_cursor.png"; - public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png"; - public static final String SPRITE_CRACKS_FILE = "sprite_cracks.png"; - public static final String SPRITE_SLEEVES_FILE = "sprite_sleeves.png"; - public static final String SPRITE_SLEEVES2_FILE = "sprite_sleeves2.png"; - public static final String SPRITE_FAVICONS_FILE = "sprite_favicons.png"; - public static final String SPRITE_PLANAR_CONQUEST_FILE = "sprite_planar_conquest.png"; - public static final String SPRITE_ADVENTURE_FILE = "sprite_adventure.png"; - public static final String SPRITE_SETLOGO_FILE = "sprite_setlogo.png"; - public static final String SPRITE_WATERMARK_FILE = "sprite_watermark.png"; - public static final String SPRITE_DRAFTRANKS_FILE = "sprite_draftranks.png"; - public static final String FONT_FILE = "font1.ttf"; - public static final String SPLASH_BG_FILE = "bg_splash.png"; - public static final String MATCH_BG_FILE = "bg_match.jpg"; - public static final String MATCH_BG_DAY_FILE = "bg_day.jpg"; - public static final String MATCH_BG_NIGHT_FILE = "bg_night.jpg"; - public static final String ADV_MATCH_BG_FILE = "adv_bg_match.jpg"; - public static final String ADV_MATCH_BG_DAY_FILE = "adv_bg_match_day.jpg"; - public static final String ADV_MATCH_BG_NIGHT_FILE= "adv_bg_match_nigh.jpg"; - public static final String ADV_TEXTURE_BG_FILE = "adv_bg_texture.jpg"; - public static final String TEXTURE_BG_FILE = "bg_texture.jpg"; - public static final String SPACE_BG_FILE = "bg_space.png"; - public static final String CHAOS_WHEEL_IMG_FILE = "bg_chaos_wheel.png"; - public static final String DRAFT_DECK_IMG_FILE = "bg_draft_deck.png"; + public static final String SPRITE_ICONS_FILE = "sprite_icons.png"; + public static final String SPRITE_FOILS_FILE = "sprite_foils.png"; + public static final String SPRITE_OLD_FOILS_FILE = "sprite_old_foils.png"; + public static final String SPRITE_TROPHIES_FILE = "sprite_trophies.png"; + public static final String SPRITE_ABILITY_FILE = "sprite_ability.png"; + public static final String SPRITE_BORDER_FILE = "sprite_border.png"; + public static final String SPRITE_ADV_BUTTONS_FILE = "sprite_adv_buttons.png"; + public static final String SPRITE_BUTTONS_FILE = "sprite_buttons.png"; + public static final String SPRITE_DECKBOX_FILE = "sprite_deckbox.png"; + public static final String SPRITE_START_FILE = "sprite_start.png"; + public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png"; + public static final String SPRITE_PHYREXIAN_FILE = "sprite_phyrexian.png"; + public static final String SPRITE_CURSOR_FILE = "sprite_cursor.png"; + public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png"; + public static final String SPRITE_CRACKS_FILE = "sprite_cracks.png"; + public static final String SPRITE_SLEEVES_FILE = "sprite_sleeves.png"; + public static final String SPRITE_SLEEVES2_FILE = "sprite_sleeves2.png"; + public static final String SPRITE_FAVICONS_FILE = "sprite_favicons.png"; + public static final String SPRITE_PLANAR_CONQUEST_FILE = "sprite_planar_conquest.png"; + public static final String SPRITE_ADVENTURE_FILE = "sprite_adventure.png"; + public static final String SPRITE_SETLOGO_FILE = "sprite_setlogo.png"; + public static final String SPRITE_WATERMARK_FILE = "sprite_watermark.png"; + public static final String SPRITE_DRAFTRANKS_FILE = "sprite_draftranks.png"; + public static final String FONT_FILE = "font1.ttf"; + public static final String SPLASH_BG_FILE = "bg_splash.png"; + public static final String MATCH_BG_FILE = "bg_match.jpg"; + public static final String MATCH_BG_DAY_FILE = "bg_day.jpg"; + public static final String MATCH_BG_NIGHT_FILE = "bg_night.jpg"; + public static final String ADV_MATCH_BG_FILE = "adv_bg_match.jpg"; + public static final String ADV_MATCH_BG_DAY_FILE = "adv_bg_match_day.jpg"; + public static final String ADV_MATCH_BG_NIGHT_FILE = "adv_bg_match_nigh.jpg"; + public static final String ADV_TEXTURE_BG_FILE = "adv_bg_texture.jpg"; + public static final String TEXTURE_BG_FILE = "bg_texture.jpg"; + public static final String SPACE_BG_FILE = "bg_space.png"; + public static final String CHAOS_WHEEL_IMG_FILE = "bg_chaos_wheel.png"; + public static final String DRAFT_DECK_IMG_FILE = "bg_draft_deck.png"; //Adventure locations - public static final String ADV_BG_SWAMP_FILE = "adv_bg_swamp.jpg"; - public static final String ADV_BG_FOREST_FILE = "adv_bg_forest.jpg"; - public static final String ADV_BG_MOUNTAIN_FILE = "adv_bg_mountain.jpg"; - public static final String ADV_BG_ISLAND_FILE = "adv_bg_island.jpg"; - public static final String ADV_BG_PLAINS_FILE = "adv_bg_plains.jpg"; - public static final String ADV_BG_WASTE_FILE = "adv_bg_waste.jpg"; - public static final String ADV_BG_COMMON_FILE = "adv_bg_common.jpg"; - public static final String ADV_BG_CAVE_FILE = "adv_bg_cave.jpg"; - public static final String ADV_BG_DUNGEON_FILE = "adv_bg_dungeon.jpg"; - public static final String ADV_BG_CASTLE_FILE = "adv_bg_castle.jpg"; + public static final String ADV_BG_SWAMP_FILE = "adv_bg_swamp.jpg"; + public static final String ADV_BG_FOREST_FILE = "adv_bg_forest.jpg"; + public static final String ADV_BG_MOUNTAIN_FILE = "adv_bg_mountain.jpg"; + public static final String ADV_BG_ISLAND_FILE = "adv_bg_island.jpg"; + public static final String ADV_BG_PLAINS_FILE = "adv_bg_plains.jpg"; + public static final String ADV_BG_WASTE_FILE = "adv_bg_waste.jpg"; + public static final String ADV_BG_COMMON_FILE = "adv_bg_common.jpg"; + public static final String ADV_BG_CAVE_FILE = "adv_bg_cave.jpg"; + public static final String ADV_BG_DUNGEON_FILE = "adv_bg_dungeon.jpg"; + public static final String ADV_BG_CASTLE_FILE = "adv_bg_castle.jpg"; //Planes addon public static final String BG_1 = "Academy_at_Tolaria_West.jpg"; @@ -478,7 +479,7 @@ public final class ForgeConstants { TOP("Top of Card"), BOTTOM("Bottom of Card"); - private String name; + private final String name; CounterDisplayLocation(final String name) { this.name = name; diff --git a/forge-gui/src/main/java/forge/sound/MusicPlaylist.java b/forge-gui/src/main/java/forge/sound/MusicPlaylist.java index a884302fd2d..bb249a028ad 100644 --- a/forge-gui/src/main/java/forge/sound/MusicPlaylist.java +++ b/forge-gui/src/main/java/forge/sound/MusicPlaylist.java @@ -1,26 +1,30 @@ package forge.sound; +import forge.gui.GuiBase; +import forge.localinstance.properties.ForgeConstants; +import forge.util.MyRandom; +import org.apache.commons.lang3.ArrayUtils; + import java.io.File; import java.io.FilenameFilter; -import forge.util.MyRandom; - public enum MusicPlaylist { - BLACK ("black/"), - BLUE ("blue/"), - RED ("red/"), - GREEN ("green/"), - WHITE ("white/"), - CASTLE ("castle/"), - CAVE ("cave/"), - TOWN ("town/"), - BOSS ("boss/"), - MENUS ("menus/"), - MATCH ("match/"); + BLACK ("black/"), + BLUE ("blue/"), + RED ("red/"), + GREEN ("green/"), + WHITE ("white/"), + COLORLESS ("colorless/"), + CASTLE ("castle/"), + CAVE ("cave/"), + TOWN ("town/"), + BOSS ("boss/"), + MENUS ("menus/"), + MATCH ("match/"); private final String subDir; private int mostRecentTrackIdx = -1; - private String[] filenames; + private File[] filenames; private static boolean isInvalidated = false; MusicPlaylist(String subDir0) { @@ -32,20 +36,21 @@ public enum MusicPlaylist { } public String getRandomFilename() { + String path = SoundSystem.instance.getMusicDirectory() + subDir; if (filenames == null || isInvalidated) { try { - FilenameFilter filter = new FilenameFilter(){ - @Override - public boolean accept(File file, String name) { - return name.endsWith(".mp3") || name.endsWith(".wav") || name.endsWith(".m4a"); - } - }; - filenames = new File(SoundSystem.instance.getMusicDirectory() + subDir).list(filter); - if (filenames == null) filenames = new String[0]; + FilenameFilter filter = (file, name) -> name.endsWith(".mp3") || name.endsWith(".wav") || name.endsWith(".m4a"); + filenames = new File(path).listFiles(filter); + if (GuiBase.isAdventureMode() && (filenames == null || ArrayUtils.isEmpty(filenames))) { + path = ForgeConstants.ADVENTURE_COMMON_MUSIC_DIR + subDir; + filenames = new File(path).listFiles(filter); + } + if (filenames == null) + filenames = new File[0]; } catch (Exception e) { e.printStackTrace(); - filenames = new String[0]; + filenames = new File[0]; } isInvalidated = false; } @@ -64,21 +69,21 @@ public enum MusicPlaylist { mostRecentTrackIdx = newIndex; } - return SoundSystem.instance.getMusicDirectory() + subDir + filenames[mostRecentTrackIdx]; + return filenames[mostRecentTrackIdx].getPath(); } public String getNewRandomFilename() { - String[] music; + File[] music; + String path = SoundSystem.instance.getMusicDirectory() + subDir; try { - FilenameFilter filter = new FilenameFilter(){ - @Override - public boolean accept(File file, String name) { - return name.endsWith(".mp3") || name.endsWith(".wav") || name.endsWith(".m4a"); - } - }; - music = new File(SoundSystem.instance.getMusicDirectory() + subDir).list(filter); + FilenameFilter filter = (file, name) -> name.endsWith(".mp3") || name.endsWith(".wav") || name.endsWith(".m4a"); + music = new File(path).listFiles(filter); + if (GuiBase.isAdventureMode() && (music == null || ArrayUtils.isEmpty(music))) { + path = ForgeConstants.ADVENTURE_COMMON_MUSIC_DIR + subDir; + music = new File(path).listFiles(filter); + } if (music == null) - return null; + return null; } catch (Exception e) { return null; @@ -87,6 +92,7 @@ public enum MusicPlaylist { return null; int index = MyRandom.getRandom().nextInt(music.length); - return SoundSystem.instance.getMusicDirectory() + subDir + music[index]; + System.out.println("Looking up " +path + ForgeConstants.PATH_SEPARATOR + music[index]); + return music[index].getPath(); } }